Přerušení od TMR0 po 1 sekundě

Zdravím
Pořád nemohu pochopit jak napsat program který by při přetečení po 1 sekundě registru TMRO skočil na podprogram mám tady ukázku který jsem opsal s Chipona1

[code]
call START
ORG 4

INTR MOVWF MEM_W
SWAPF STATUS,W
MOVWF MEM_S
BCF STATUS,RP0
NOP
NOP
NOP
NOP
NOP
MOVLW 100
MOVWF TMR0
INCF TMR,F
MOVFW TMR
XORLW 100
BTFSS STATUS,Z
GOTO CAS_1
CLRF TMR
INCF SEC,F
MOVFW SEC
XORLW 60
BTFSS STATUS,Z
goto CAS
CLRF SEC
INCF MIN,F
MOVFW MIN
XORLW 60
BTFSS STATUS,Z
GOTO CAS
CLRF MIN
INCF HOD,F
MOVFW HOD
XORLW 24
BTFSC STATUS,Z
CLRF HOD
goto CAS_1
CAS MOVLW 132
;CALL Z_CAS
CAS_1
BCF INTCON,T0IF
SWAPF MEM_S,W
MOVWF STATUS
SWAPF MEM_W,F
SWAPF MEM_W,W
RETFIE
START
BSF STATUS,RP0
MOVLW B’00110001’
MOVWF TRISB
MOVLW B’11000001’
MOVWF OPTION_REG
BCF STATUS,RP0
MOVLW B’10100000’
MOVWF INTCON
s nop
goto s
end [/code]
Pořád nemohu pochopit jak při 4MHz krystalu nastavit přerušení každou 1 sekundu prosím vás hodně podrobně mi to někdo vysvětlete řekneme na PIC16F628A abych to pochopil taky já díky

:arrow_right: administrator: přejmenováno z "Přerušení od TMR0"

S PICkami som uz davno skoncil, tak iba ramcovo.
Ak je casovac 8 bitovy, potom si nastavis predvolbu napriklad 200.
Ak sa k citac inkrementuje na kazdy clk procesora, udalost pretecenia nastane kazdych 50us (20000x za sekundu).
Pri tejto udalosti inkrementujes nejake 16b POMOCNE_POCITADLO (2B). Cislo ma na zaciatku hodnotu 0.
Po inkrementacii toto POMOCNE_POCITADLO porovnas s cislom 20000. Ak sa rovna, potom cislo vynulujes a spustis svoj hlavny program. Ak nepouzivas prerusenie, potom musi Tvoj hlavny program skoncit pokial 8b citac znovu nepretecie, lebo potom by si nespravne pocital POMOCNE_POCITADLO.
Ak to tvoj soft stihnut nemoze, potom musis citac vyhodnocovat pod prerusenim a pri nom inkrementovat POMOCNE_POCITADLO.
V takom pripade pod prerusenim iba inkrementujes POMOCNE_POCITADLO, ak je mensie ako 65535. Inak uz nie.
Tvoj hl.program, po svojom skonceni, testuje hodnotu premennej POMOCNE_POCITADLO. Ak je rovne a vacsie ako 20000, vynulujes jeho hodnotu a vykonas to co mas. Ak je vacsie ako 20000 si zaroven v sklze. Ak je treba, tak ho koriguj.

cau, na JINYM FORU sem ti radil aprilozil sem ti i funkcni ASM, tak si ho stahni a nastav si preddelicku na 64 (101) jestli si dobre pamatuju , a mas to