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