Vissza a főoldalra    Vissza    Vissza a PIC mikrovezérlők főoldalra

 


A PICD-2-A program


Általános ismertetés
Regisztertérkép
A program folyamatvázlata
Alapbeállítások
Nyomógombkezelés
Késleltetés
Léptetés
Tárolás, címszámítás
Címzés, megjelenítés
Teljes folyamatábra
Letölthető programlista


 

      A PICD-2-A, egy komplex ütemvezérlést bemutató program. A nyomógombbal különböző jelsorozatok közül lehet választani, amelyek villogó és futó fényhatásokat keltenek. A kimenet jelváltása állandó 0,2 másodperces időközönként történik meg.
      Az egyes jelsorozatok tíz 5-bites "szóból" állnak, amelyek egymás után kerülnek megjelenítésre, folyamatosan ismétlődve. A kilenc lehetséges kimenő jelsorozat látható a következő ábrán.

A megjeleníthető jelsorozatok

      Az áramkör bekapcsolásakor automatikusan a 0 jelű jelsorozat megjelenítése indul el. A nyomógomb legalább 0,2, de legfeljebb 0,4 másodperces megnyomásával lehet a következő jelsorozatra lépni. Hosszabb idejű nyomvatartás esetén a program az eltelt időnek megfelelő számú jelsorozat megjelenítésével folytatja működését.

Vissza a lap tetejére

      A nyomógomb működtetése valójában egy SELECTOR nevű regiszter tartalmának egyesével való növelését végzi. A kezdőérték: "0000 0000", majd a "0000 1000" érték elérése után újra a kezdőérték következik.
      A SELECTOR regiszter értéke egyértelműen kijelöli a megjeleníteni kívánt jelsorozatot.

      A jelsorozaton belüli címzést a COUNTER nevű szoftveres számlálóregiszter végzi, ennek kezdőértéke 0, ami 0,2 másodpercenként eggyel növekszik, de a 9-es érték után újra 0 következik, majd így tovább...

      A COUNTER és SELECTOR regiszterek értékéből számított cím az ADDRESS regiszterben jön létre, illetve tárolódik a megjelenítésig.

      A 0,2 másodperces szoftveres késleltetéshez a viszonylag magas, 4MHz-es órajel miatt szükséges még két számláló-segédregiszter: S1, S2.

      A következő táblázat a programban használt általános és vezérlő regisztereket foglalja össze.

Cím Megnevezés Feladat
- OPTION A GP3 felhúzó ellenállásának bekapcsolása.
- TRISGPIO A kivezetések adatirányának beállítása.
02h PCL A programszámláló alsó 8-bites része a számított ugrások végrehajtásához.
03h STATUS A C túlcsordulás-jelzőbit és a Z zérus-jelzőbit helye.
06h GPIO A mikrovezérlő kimeneti regisztere.
07h SELECTOR A jelsorozat-kiválasztó regiszter.
08h COUNTER A jelsorozaton belüli cím.
09h ADDRESS A számított programmemória-címeket tároló regiszter.
0Ah S1 A 16-bites késleltető ciklus alsó 8-bites regisztere. Ideiglenes tárolóregiszter.
0Bh S2 A 16-bites késleltető ciklus felső 8-bites regisztere.

Vissza a lap tetejére

      A program vázlatos felépítését mutatja be a következő ábra.

A program folyamatvázlata Ugrás a fejezetre Ugrás a fejezetre Ugrás a fejezetre Ugrás a fejezetre Ugrás a fejezetre Ugrás a fejezetre

Vissza a lap tetejére

 

A - Alapbeállítások

      A program elején végre kell hajtani a mikrovezérlő kívánt működéséhez szükséges alapbeállításokat:
     ˇ Az OPTION vezérlő regiszterben engedélyezni kell a GP3 bemenet belső felhúzóellenállását;
     ˇ A TRISGPIO vezérlő regiszterben a GP3 kivezetést bemenetnek, a többit kimenetnek kell konfigurálni;
     ˇ Nullázni kell a SELECTOR számláló/címző regisztert;
     ˇ Nullázni kell a COUNTER számláló/címző regisztert.
      Az ezt megvalósító programrészlet:

... movlw B'10000000' ;A 80h érték betöltése a W munkaregiszterbe
  option   ;A W tartalmának betöltése az OPTION regiszterbe
  movlw B'00001000' ;A 08h érték betöltése a W munkaregiszterbe
  tris H'6' ;A W tartalmának betöltése a TRISGPIO regiszterbe
  clrf SELECTOR ;A SELECTOR regiszter nullázása
  clrf COUNTER ;A COUNTER regiszter nullázása
... ...    

Vissza a lap tetejére

 

B - Nyomógombkezelés

      A nyomógomb megfelelő időtartamú működtetésére az áramkör a sorban következő jelsorozat megjelenítésére tér át. A megjelenítés közben a program 0,2 másodpercenként ellenőrzi a nyomógomb állapotát. Tehát ahhoz, hogy az aktív állapotot bizonyosan észlelni lehessen, a legrosszabb esetben is elegendő 0,2 másodperces nyomvatartás.
      A sikeres észlelés hatására a SELECTOR regiszter értéke eggyel nő, illetve a következő értékre lép. Ez jelöli ki a soron következő jelsorozatot a megjelenítésre.
      A nyomógomb aktív állapotának észlelése után 0,4 másodperc van a nyomógomb elengedésére, aminek elteltével a program már a következő jelsorozat megjelenítését végzi. Ha a nyomógomb a 0,4 másodperc eltelte után is megnyomott állapotban van, akkor a program a SELECTOR regisztert tovább módosítja, amivel már a következő jelsorozatot jelöli ki.
      Ha a nyomógomb működtetésével újabb jelsorozat kerül kiválasztásra, célszerű a COUNTER regisztert is nullázni, hogy a jelsorozat az első elemével kezdődjön.
      A nyomógomb folyamatosan működtetett állapotában a jelsorozat léptetése áll, a kimenet nem változik (, viszont a SELECTOR regiszter folyamatosan ismétlődve számlál 0-tól 8-ig).
      A nyomógombkezelés folyamatábrája:

A nyomógombkezelés folyamatábrája

      Ez a nyomógombkezelési megoldás természetesen kiküszöböli a nyomógomb érintkezőinek bizonytalan zárásából adódó "pergési" jelenségek hatását is.
      A folyamatábrát megvalósító programrészlet:

  ... ... ;a program előző része
A1 btfsc GPIO,3 ;A GP3 bemenet tesztelése
  goto C2 ;ugrás, ha GP3=1 (nincs megnyomva)
A2 movlw H'8' ;A 08h érték betöltése a W munkaregiszterbe
  subwf SELECTOR,0 ;W = SELECTOR-8, a SELECTOR nem változik
  btfsc STATUS,2 ;A zérusjelző bit tesztelése
  goto CLEAR ;ugrik, ha SELECTOR=8
  incf SELECTOR ;A SELECTOR növelése 1-gyel
  goto C1 ;Folytatás a C1-től
CLEAR clrf SELECTOR ;A SELECTOR nullázása
C1 call WAIT ;0,2s késleltetés
  call WAIT ;0,2s késleltetés
  btfss GPIO,3 ;A GP3 bemenet tesztelése
  goto A2 ;ugrás, ha GP3=0 (megnyomva)
  clrf COUNTER ;A COUNTER nullázása
C2 ... ... ;a program további része

Vissza a lap tetejére

 

C - Késleltetés

      A 0,2 s késleltetést szoftveres úton kell megvalósítani.
      A mikrovezérlő belső órajelgenerátora 4 MHz-es órajelet biztosít, amely 1 MHz-es utasításvégrehajtást eredményez. Egy utasítás végrehajtásához tehát 1 µs időre van szükség.
      A 0,2 s késleltetés 200000, a lényegi működés szempontjából passzív utasítás végrehajtásával érhető el. A Közepes teljesítményű PIC mikrovezérlők felhasználói kézikönyv
11.4.15. fejezetében található 16-bites késleltető ciklus alkalmazásával egyszerűen megvalósítható a feladat.
      A kiszámított alapbeállítások: S1 = 255; S2 = 255.
      A késleltető ciklust megvalósító szubrutin:

WAIT movlw H'FF' ;W = 255
  movwf S1 ;S1 = 255
  movlw H'FF' ;W = 255
  movwf S2 ;S2 = 255
REPEAT decfsz S1,1 ;S1 = S1 - 1
  goto REPEAT ;Visszaugrik, ha az eredmény nem nulla
  decfsz S2,1 ;S2 = S2 - 1
  goto REPEAT ;Visszaugrik, ha az eredmény nem nulla
  retlw H'0' ;Visszatérés a szubrutinból

Vissza a lap tetejére

 

D - Léptetés

      A megjelelnítés során a megjelenített jelsorozaton belül az egyes mintákat a COUNTER regiszter értéke választja ki. Tehát a COUNTER regiszter értékét minden kimenetváltás után 1-gyel növelni kell, illetve az utolsó minta után nullázni.
      A COUNTER regiszter kezdőértéke nulla, majd kilencig növekszik, majd újra nullázódik, és így tovább...
      Az ezt megvalósító folyamatábra:

A jelsorozaton belüli cím létrehozása

      A programrészlet:

... ... ...  
  movlw H'9' ;A 09h érték betöltése a W munkaregiszterbe
  subwf COUNTER,0 ;W = COUNTER-9, a COUNTER nem változik
  btfsc STATUS,2 ;A zérusjelző bit tesztelése
  goto CLEAR2 ;ugrik, ha COUNTER=9
  incf COUNTER ;A COUNTER növelése 1-gyel
  goto C3 ;Folytatás a C3-tól
CLEAR2 clrf COUNTER ;A COUNTER regiszter nullázása
C3 ... ...  
  ... ...  

Vissza a lap tetejére

 

E - Tárolás, címszámítás

      A 10-szavas jelsorozatok tárolása 20-szavas blokkokban történik a programmemóriában. A programmemória első 256 szava számított ugrásokkal (a PC írásával) is elérhető. Mivel a program számított ugrásokra épül a 180 soros (9x20) adathalmaz előtt csak 76 programmemória-hely használható fel.
      A bitminták elkészítésekor figyelembe kell venni, hogy a GPIO kimeneti regiszter 3. bitje bemenetként van felhasználva, vagyis: az 1. kimenetnek a 0. bit, a 2.-nak az 1. bit, a 3.-nak a 2. bit, a 4.-nek a 4. bit, az 5.-nek az 5. bit felel meg.
      A programmemóriában tárolt első bitminta:

START movlw B'11111111' ;Az FFh érték betöltése a W munkaregiszterbe
  goto OUT ;Ugrás a megjelenítés programrészre
  movlw B'00000000' ;A 00h érték betöltése a W munkaregiszterbe
  goto OUT ;Ugrás a megjelenítés programrészre
  movlw B'11111111' ;Az FFh érték betöltése a W munkaregiszterbe
  goto OUT ;Ugrás a megjelenítés programrészre
  movlw B'00000000' ;A 00h érték betöltése a W munkaregiszterbe
  goto OUT ;Ugrás a megjelenítés programrészre
  movlw B'11111111' ;Az FFh érték betöltése a W munkaregiszterbe
  goto OUT ;Ugrás a megjelenítés programrészre
  movlw B'00000000' ;A 00h érték betöltése a W munkaregiszterbe
  goto OUT ;Ugrás a megjelenítés programrészre
  movlw B'11111111' ;Az FFh érték betöltése a W munkaregiszterbe
  goto OUT ;Ugrás a megjelenítés programrészre
  movlw B'00000000' ;A 00h érték betöltése a W munkaregiszterbe
  goto OUT ;Ugrás a megjelenítés programrészre
  movlw B'11111111' ;Az FFh érték betöltése a W munkaregiszterbe
  goto OUT ;Ugrás a megjelenítés programrészre
  movlw B'00000000' ;A 00h érték betöltése a W munkaregiszterbe
  goto OUT ;Ugrás a megjelenítés programrészre

      A jelsorozatokat tároló 20-szavas blokkok egymást követően helyezkednek el egy ismert kezdőcímtől (START) indulva.
      A START, SELECTOR és COUNTER értékeiből kiszámítható a soron következő minta helye, vagyis a szükséges ugrás címe, amelyet az ADDRESS regiszter tárol.
      A címszámítás összefüggése:

ADDRESS = START + 20•SELECTOR + 2•COUNTER.


      Átalakítva egy könnyen megvalósítható összefüggéssé:

ADDRESS = START + 4•SELECTOR + 16•SELECTOR + 2•COUNTER.

      Felhasználva, hogy a balra forgatás 2-vel való szorzásnak felel meg, a következő megvalósítás adódik:

... ... ... ;Az előző programrészek
  bcf STATUS,0 ;A C túlcsordulás-jelzőbit nullázása
  movlw START ;Az első bitminta címének betöltése W-be
  movwf ADDRESS ;ADDRESS = START
  movf SELECTOR,0 ;W = SELECTOR
  movwf S1 ;S1 = SELECTOR
  rlf S1,1 ;S1 = 2 x SELECTOR
  rlf S1,0 ;W = 4 x SELECTOR
  addwf ADDRESS,1 ;ADDRESS = START + 4xSELECTOR
  rlf S1,1 ;S1 = 4 x SELECTOR
  rlf S1,1 ;S1 = 8 x SELECTOR
  rlf S1,0 ;W = 16 x SELECTOR
  addwf ADDRESS,1 ;ADDRESS = START + 4xSELECTOR + 16xSELECTOR
  rlf COUNTER,0 ;W = 2 x COUNTER
  addwf ADDRESS,1 ;ADDRESS=START+4xSELECTOR+16xSELECTOR+2xCOUNTER
  ... ... ;A program további része

Vissza a lap tetejére

 

F - Címzés, megjelenítés

      A soron következő bitminta címe az ADDRESS regiszterben van. Az ADDRESS értékének a PCL vezérlő regiszterbe történő beírásával végbemegy a számított ugrás.
      Az ugrás célsorában a kiválasztott bitminta a W munkaregiszterbe kerül. Majd a program a megjelenítési résznél (OUT) folytatódik.
      A megjelenítéshez a W értékét a GPIO kimeneti regiszterbe kell írni.
      Ezek megvalósítása:

  ... ... ;Alapbeállítások
  ... ...  
A1 ... ... ;Nyomógombkezelés, késleltetés, címszámítás
  ... ...  
  ... ...  
  movf ADDRESS,0 ;W = ADDRESS
  movwf PCL ;PCL = ADDRESS, ugrás a címre
START movlw B'11111111' ;Az első bitminta
  goto OUT ;Ugrás a megjelenítésre
  movlw B'00000000' ;A második bitminta
  goto OUT ;Ugrás a megjelenítésre
  ... ...  
  ... ...  
  ... ...  
OUT movwf GPIO ;GPIO = W, a bitminta megjelenik a kimeneten
  goto A1 ;visszatérés a program elejére

Vissza a lap tetejére

 

A teljes folyamatábra

 

A teljes folyamatábra

Vissza a lap tetejére

 

A letölthető program

A fent bemutatott program forráslistája.
A konfigurációs szó beállításai:
ˇ MCLRE = "0" - GP3 általános bemenet;
ˇ CP = "1" - Kódvédelem kikapcsolva;
ˇ WDTE = "0" - Biztonsági időzítő áramkör kikapcsolva;
ˇ FOSC1 = "1" - Belső RC oszcillátor;
ˇ FOSC0 = "0" - Belső RC oszcillátor.

 

Vissza a lap tetejére

 

Vissza a főoldalra    Vissza    Vissza a PIC mikrovezérlők főoldalra