Prodleva pomoci TMR0

Martin Šaněk sanek.martin@volny.cz
Neděle Červen 27 17:14:54 CEST 2004


NO asi nebudu ten pravy to vsechno vysvetlit :-((
TMR0 se inkrementuje pri kazdem instrukcnim cyklu. T.j. pri kazde
instrukci se zvetsi o 1.(je myslena jednoducha instrukce napr NOP)
Pri preteceni se vyvola interrupt. Cili pokud chci vyvolat preteceni,
tak si nastavim TMR0 na nejakou hodnotu (treba 00h) a po 256
instrukcich bude vyvolano preruseni. Pravdepodobne se da do tohoto
registru i zapisovat (nezkousel jsem to).
Preddelicka slouzi pouze k omezeni nacitani. Cili pokud nastavim
predelicku do 256 tak po kazdych 256 instrukcich se mi inkrementuje o
jednu TMR0.
Nasobit se tam pokud vim nic neda.
Pocitat jsem to nikdy nezkousel, pouze jsem v MPLABu nastavil hodnoty
a zkusil jake je zpozdeni (nikdy jsem to nepotreboval nijak presne).
Pri vetsich casech se musi samozrejme pouzit dalsi registr(y) k
odcitani.
K nastaveni OPTION pouzivam
movlw   b'11000111' coz je predelicka na 256, inkrementace pri nabezne
hrane .
Pri provozu pouzivam podprogramy, ketre jsou volany z hlavniho
programu na zapnuti, nebo na vypnuti casovace:
INT_TMR0_on
        banksel OPTION_REG
        bsf     OPTION_REG,0    ;nastaveni deliciho pomeru      
        bsf     OPTION_REG,1    ;       ---"---
        bsf     OPTION_REG,2    ;       ---"---
        bsf     INTCON,5        ;povoleni interupt od TMR0
        bcf     OPTION_REG,5    ;povoleni TMR0
        banksel TMR0
        clrf    TMR0
        bcf     f_timer         ;nulovani priznaku
        return
INT_TMR0_off
        banksel OPTION_REG
        bsf     OPTION_REG,5
        banksel TMR0
        bcf     f_timer         ;nulovani priznaku
        return

Snad Vam to pouze
Martin




Ahoj,
chci k jednomu ukonu pouzit TMR0 bez nutnosti dalsiho externiho krystalu,
jinak mam _XT_OSC, frekvence 4.000MHz. Takze jestli dobre chapu mel bych v
OPTIONu nastavit asi toto:

T0CS=0
T0SE=je jedno
PSA=0
PS2-PS0: nejaka delicka

Tak a ted bych potreboval poradit s tim, jak se spocita, v jakem casovem
intervalu se preruseni vzdy zavola. Chci se to naucit odvodit, mam frekvenci
krystalu, vim cas, ve kterem chci preruseni volat... Jak to mam nastavit?
Jakou vybrat preddelicku (vubec nemam poneti, jestli nasobit/delit atd.). Je
mi jasne ze minimalni a maximalni hodnota prodlevy jsou limitovany, s tim uz
bych si poradil pres citani nejake dalsi promene... Diky za pomoc.

Milan




Další informace o konferenci Hw-list