Pic16F88 a jeho tmr0
Snail Instruments
snail@iol.cz
Čtvrtek Červen 23 10:40:44 CEST 2005
>mam PIC16f88 a snazim se na nem pomoci tmr0 udelat zpozdeni v radu jednotek
>sekund.
>(Pracuju na DA a po zapnuti napajeni kazdy node nahodne ceka 1-5 sekund aby
>na siti nevznikl velky frmol.:)
Jen tak mimochodem, jak ziskate nahodne cislo?
>Mam krystal 3.6864MHz a nepouzivam prescaler.
>
>pocitam (3686400/4)/256 = 3600Hz (frekvence preruseni)
>3600/256 = 14Hz (frekvence po vydeleni na 8bit registru)
>=> po nacitani 14 v dalsim 8bit registru uplynula 1 sec.
>
>Kdyz to ale zkusim, dostavam casy delsi 2-3x.
>Nemam citac abych overil jestli krystal kmita spravne.
>Tady je zdrojak ocistenej od banksel.
>
>; inicializace -------------------------------------
>bcf OPTION_REG, T0CS ; zdroj je Fosc/4
>bsf OPTION_REG, PSA ; prescaler je pouzit na WDT
>bsf OPTION_REG, PS0 ; PS = 111
>bsf OPTION_REG, PS1
>bsf OPTION_REG, PS2
lepe
movlw b'.........'
movwf option_reg
>bsf INTCON, TMR0IE
>clrf p_t1
>clrf p_t2
>
>bsf INTCON, GIE
>
>; cekej tak dlouho dokud v preruseni nenacita do 14
>boot_1
>movfw p_t2
>sublw 14 ;14=1sec
>bnz boot_1
>
>
>; kod preruseni --------------------------------
>intrpt_begin
Tady chybi uschova registru status a w.
>btfss INTCON, TMR0IF
>goto intrpt_end ; ne
>bcf INTCON, TMR0IF
>
>incf p_t1, F
>bnz intrpt_end
lepe:
incfsz p_t1,f
goto intrpt_end
>incf p_t2, F
>goto intrpt_end
a tady obnova status a w
>intrpt_end
V tomto konkretnim pripade je preruseni zbytecne, hlavni smycka stejne nic
nedela, jenom ceka na preruseni. Preruseni ma vyznam tehdy, kdyz hlavni
program ma mezi tim neco na praci.
J. Hanzal
Další informace o konferenci Hw-list