Pic16F88 a jeho tmr0
Mala Kobyla
Mala.Kobyla@seznam.cz
Čtvrtek Červen 23 16:35:44 CEST 2005
>Jen tak mimochodem, jak ziskate nahodne cislo?
Kazdy node ma svoji adresu. U PIC16F676 bylo cislo na doladeni interniho
oscilatoru. To pouziju jako seminko pro generator nahody. Mozna najdu jeste
neco, ale zatim to nemam na poradu dne. Mate nejaky tip, kde vzit v PICu po
startu nahodne cislo?
>>intrpt_begin
> Tady chybi uschova registru status a w.
Nechybi, to jsem tam akorat nedal, aby byl vypis co nejkratsi.
>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.
Prislo mi elegantnejsi pocitat cas pres preruseni nez nejaky 3 smycky v
sobe.
Kazdopadne stejne nastavenej oscilator pouzivam na generovani frekvence
9600Hz, z ktere odvozuju casy pro sitovy prenos. Stejne to musim rozchodit
:)
MK2
----- Original Message -----
From: "Snail Instruments" <snail@iol.cz>
To: "HW-news" <hw-list@list.hw.cz>
Sent: Thursday, June 23, 2005 10:40 AM
Subject: Re: Pic16F88 a jeho tmr0
>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
_______________________________________________
HW-list mailing list - sponsored by www.HW.cz
Hw-list@list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list
Další informace o konferenci Hw-list