Segítséget kérek PIC programhoz

Miko Imre imre.miko at siemens.com
Thu Aug 7 10:02:30 CEST 2003


Hello,

Csihar Zoltán wrote:

> GP2-õn egy LED-et szeretnék 60-40% kitöltéssel meghajtani, majd 6 óra múlva
> sleep-be tenni. Újraindulás ki-be kapcsolásra. Ennyi. A 6 óra idõzítére is
> valami frappánsabb ötlet jó lenne, mint az egymásbaágyazott hurkok sora!?

Par dolog ami elsore szembetuno:

1. A 675-ben van AD, es amiben van, ott bekapcsolas utan az analogkent hasznalhato
bemenetek, analognak is vannak konfiguralva. Lasd ANSEL register.
Ezert a program elejen mindenkepp kellenek a kovetkezo sorok, hogy digitalis
bemenet-kimenetnek hasznald a PORT labat:

   bsf STATUS, RP0  ; bank1
   clrf ANSEL
   bcf STATUS, RP0  ; bank0

2. A valtozok definialasahoz nem eleg a #define <valtozonev>,
itt cimet is meg kellene adnod pl:

#define JEL1     20h
#define SZUNET1  21h
#define IDO1     22h

Itt konnyu teveszteni, ezert sokkal jobb, ha a cblock-al adod meg a valtozokat:

  cblock 20h
     JEL1
     SZUNET1
     IDO1
  endc


3. Hosszuideju kesleltetesre hasznald a Timer1-et.

A foprogramban:

Allits be egy 2 byte-bol allo valtozot. Nevezzuk COUNTER-nek.
Nullazz egy masik valtozot, ami jelzi, hogy letelt az ido.
(Ez lehet egy bit is, egy valtozoban), nevezzuk FLAG-nek.

Az eloosztot allitsd a legnagyobbra, engedelyezd a megszakitast,
a Timer1-re. Timer1 clock source legyen az internal clock (orajel/4)
Torold a Timer1-et.  (TMR1H:TMR1L)
Inditsd el a Timer1-et. (TMR1ON)
Engedelyezd a megszakitast. (GIE)

Villogtasd a LED-et, es nez ra minden ciklusban, hogy
a FLAG, mar be lett-e allitva, azaz az ido mar letelt-e.

A megszakitasban:

Mentsd a valtozokat (W, STATUS).

Ellenorizd a FLAG-et, ha nincs beallitva, akkor
csokkentgess a 2 byte-os valtozot.
Ha az eleri a nullat, akkor allitsd be a FLAG-et.
Torlod a TMR1IF bitet.

Allitsd vissza a valtozokat (W, STATUS).


Ha 4Mhz-rol jaratod, akkor a internal clock 1Mhz.
8-as eloosztoval 125khz jut a timer1-re,
annak a reciproka: 8uS

Tehat 8uS-onken no a Timer1 1-el. A timer1 16 bites,
igy 65536 -ot kell rajta novelni a ket tulcsordulas
megszakitas kozott.

Azaz a megszakitasod 0,524288 masodpercenkent
valtodik ki.

6 ora = 360 perc = 21600 masodperc.

21600 / 0,524288 = 41199

Azaz 41199-re kell allitanod kezdetben a 2 byte-os
valtozot.

2 byte-os valtozo definialasa:

   cblock 0x20
     COUNTER:2
   endc

kezdoertek beallitasa:

#define COUNTER_START 41199

    movlw high(COUNTER_START)
    movwf COUNTER
    movlw low(COUNTER_START)
    movwf COUNTER

csokkentese:

   movf COUNTER+1,f
   skipnz
   decf COUNTER,f
   decf COUNTER+1,f

osszehasonlitasa constans ertekkel:

#define COUNTER_OUT  0

   movlw high(COUNTER_OUT)
   subwf COUNTER,w
   movlw low(COUNTER_OUT)
   skipnz
    subwf COUNTER+1,w

Ennek eredmenyekent beallitodik a Z flag, ha a
valtozo egyenlo a konstanssal. (nalad nullaval.)

Udv.
Imre



More information about the Elektro mailing list