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