Zdravím
Potřeboval bych nějaký program na zaznamenání nějaké události moje úvaha je taková:
program v například v PIC16F84 by vytvářel minuty a hodiny a ty by přičítal a zapisoval do proměnné a jak by nastala nějaká událost zvenčí tak ta hodnota proměnné by se zkopírovala do eepromky obsažené v PIC16F84 a
po skončení měření tak PIC by jsem hodil na programátor a v eepromce bych si přečetl na PC dělal někdo z vás něco takového abych nemusel já psát program a pak pracně ladit díky
tady jsem napsal můj kod jenže nechce fungovat
LIST P=16F84A, R=DEC ; Use the PIC16F84 and decimal system
;0-24 hodiny se zaznamem casu udalosti v eepromce tech udalosti muze byt az 32 s ohledem na velikost eepromky
#include "P16F84A.INC" ; Include header file
__config _XT_OSC & _WDT_OFF & _PWRTE_OFF
poc equ 0X15
;TMP0 equ 0X16
TMP0 EQU 20H
TMP1 EQU 21H
TMP2 EQU 22H
HOD EQU 23H
MIN EQU 24H
SEC EQU 25H
CfgData EQU 26H
CfgAdr EQU 27H
org 000
; nop
; movlw 10
; movwf poc
;movlw 15
; bsf STATUS,RP0
; tris PORTA
movlw 00
tris PORTB
bcf STATUS,RP0
; movlw 255
; movwf PORTB
; btfss PORTA,0
; CLRF SEC
; CLRF STATUS ; nastavení BANKY 0
BSF STATUS, RP0 ; nastavení BANKY 1
movlw b'11111111' ; portA
movwf TRISA
bcf STATUS,RP0 ; nastavení BANKY 0
; CLRF MIN
; CLRF HOD
; CLRF CfgAdr
goto druhyp
SAVE
BSF PORTB,1
movf MIN,W
movwf CfgData
CfgSet
CfgGet bcf STATUS, RP0 ; volba banky 0
movf CfgAdr,W ; příprava adresy ke čtení do W
movwf EEADR ; nastavení adresy EEPROM
bsf STATUS,RP0 ; volba banky 1
bsf EECON1,RD ; zapnutí požadavku ke čtení bajtu
bcf STATUS,RP0 ; volba banky 0
movf EEDATA,W ; načtení bajtu do registru W
bcf STATUS, RP0 ; volba banky 0
movf CfgAdr,W ; příprava adresy k zápisu do W
movwf EEADR ; nastavení adresy EEPROM
movf CfgData,W ; příprava dat k zápisu do W
movwf EEDATA ; nastavení dat k zápisu do EEPROM
bsf STATUS,RP0 ; volba banky 1
bcf INTCON,GIE ; zákaz všech přerušení
bsf EECON1,WREN ; povolení zápisu do EEPROM
movlw 55h ; 1. odemykací kód
movwf EECON2 ; zápis 1. kódu
movlw 0AAh ; 2. odemykací kód
movwf EECON2 ; zápis 2. kódu
bsf EECON1,WR ; zapnutí požadavku k zápisu bajtu
bcf EECON1,WREN ; zákaz dalšího zápisu do EEPROM
bsf INTCON,GIE ; povolení přerušení
CfgSet2 btfsc EECON1,WR ; je zápis již dokončen?
goto CfgSet2 ; čekání na dokončení zápisu
INCF CfgAdr,F
movf HOD,W
movwf CfgData
;CfgGet
bcf STATUS, RP0 ; volba banky 0
movf CfgAdr,W ; příprava adresy ke čtení do W
movwf EEADR ; nastavení adresy EEPROM
bsf STATUS,RP0 ; volba banky 1
bsf EECON1,RD ; zapnutí požadavku ke čtení bajtu
bcf STATUS,RP0 ; volba banky 0
movf EEDATA,W ; načtení bajtu do registru W
bcf STATUS, RP0 ; volba banky 0
movf CfgAdr,W ; příprava adresy k zápisu do W
movwf EEADR ; nastavení adresy EEPROM
movf CfgData,W ; příprava dat k zápisu do W
movwf EEDATA ; nastavení dat k zápisu do EEPROM
bsf STATUS,RP0 ; volba banky 1
bcf INTCON,GIE ; zákaz všech přerušení
bsf EECON1,WREN ; povolení zápisu do EEPROM
movlw 55h ; 1. odemykací kód
movwf EECON2 ; zápis 1. kódu
movlw 0AAh ; 2. odemykací kód
movwf EECON2 ; zápis 2. kódu
bsf EECON1,WR ; zapnutí požadavku k zápisu bajtu
bcf EECON1,WREN ; zákaz dalšího zápisu do EEPROM
bsf INTCON,GIE ; povolení přerušení
CfgSet22 btfsc EECON1,WR ; je zápis již dokončen?
goto CfgSet22 ; čekání na dokončení zápisu
INCF CfgAdr,F ;zvyseni registru adresy eepromky o 1
; MOVWF CfgAdr
; XORLW 32
; BTFSS STATUS,Z
; CLRF CfgAdr
; CLRF STATUS ; nastavení BANKY 0
; BSF STATUS, RP0 ; nastavení BANKY 1
;movlw b'11111111' ; portA
;movwf TRISA
;bcf STATUS,RP0 ; nastavení BANKY 0
BCF PORTB,1
retfie
zamek BSF PORTB,2 ;nekonecna smycka
goto zamek
druhyp nop
BCF PORTB,0
MOVf CfgAdr,0 ;adresa bunky eepromky
XORLW 64 ;velikost eepromky
BTFSc STATUS,Z ;Kdyz je konec eepromky tak tak
goto zamek ;CLRF CfgAdr ;nastav adresu eepromky na 0
MOVLW 0x06 ;6 DEC ;---
MOVWF TMP2 ;
MOVLW 0x13 ;19 DEC ;
MOVWF TMP1 ;
MOVLW 0x0AD ;173 DEC ;
MOVWF TMP0 ; ceka sekundu
DECFSZ TMP0,F ;
GOTO $-1 ;
DECFSZ TMP1,F ;
GOTO $-3 ;
DECFSZ TMP2,F ;
GOTO $-5 ;---
BSF PORTB,0 ;nastaveni na 1 duvod signalizuje LED sekundu
btfss PORTA,0 ;testuje 1 na portuA jestli je tam logicka 1 kdyz ano tak preskoc nas.instu
call SAVE ;kdyz je tam 0 uloz do epromky stav hodin
INCF SEC,F ;pridej registru SEC +1
MOVF SEC,W ;MOVFW SEC
XORLW 60
BTFSS STATUS,Z ;je tych sekund 60
goto druhyp ;kdyz ne
CLRF SEC ;kdyz ano
INCF MIN,F ;
MOVF MIN,W ;MOVFW MIN
XORLW 60
BTFSS STATUS,Z
goto druhyp
CLRF MIN
INCF HOD,F
MOVF HOD,W ;MOVFW HOD
XORLW 24
BTFSS STATUS,Z
goto druhyp
CLRF SEC
CLRF MIN
CLRF HOD
goto druhyp
MOVWF CfgAdr
XORLW 32
BTFSS STATUS,Z
CLRF CfgAdr
goto druhyp
nop
end
org 500
data 10,10,15,20,20,155
end
kde dělám chybu? díky předem