|
A következő program egy 7 szegmenses kijelzőt fog vezérelni. Számolni fogjuk a gombnyomásokat és annak értékét kiíratjuk a kijelzőre. Mivel egy kijelzőt használunk értelemszerűen 9-ik gomblenyomás után a számlálás kezdődik elölről. A kijelző a B PORT-ra van kötve, a nyomógomb pedig a PORTD,0-ra.
Program:

1. Beállítások

Először lefoglalunk memória területet (SZAM), majd a beállításoknál a PORTB-t kimenetnek a PORTD 0-ik bitjét pedig bemenetnek állítjuk be. A bankváltás után a 7 szegmenses kijelzőre kirakjuk a 0-át, mivel még nem nyomtuk meg a gombot, vagyis bemozgatjuk a 0 értékét a munkaregiszterbe és ezután kiküldjük a PORTB-re, így a kijelzőn megjelenik a 0.
2. Főprogramrész

A főprogramrészünkben először figyeljük a nyomógombot. A gomb megnyomása után meghívjuk a TABLA nevű szubrutint:

A TABLA nevű szubrutinnak az a szerepe, hogy itt tároljuk a kijelzőre kiírt számoknak a bináris formáját.
Először bemozgatjuk a SZAM címkével ellátott memóriaterület értékét a munkaregiszterbe, majd ezután az ADDWF utasítással ezt az értéket hozzáadjuk a PCL-hez. A PCL azt mutatja meg, hogy éppen, melyik sorban tart a programunk, tehát így a SZAM értékét hozzáadva a PCL-hez először a RETLW B'00000110' sorra ugrunk. A RETLW utasítás úgy működik, hogy egy literállal térünk vissza a munkaregiszterben a szubrutinból, jelenesetben az 1-es értékével. Ha pl. már 2-szer nyomtuk meg a gombot, akkor értelemszerűen 2-őt adunk hozzá a PCL-hez és így a kijelzőre kiírandó 2-es szám értéke jelenik meg a munkaregiszterben.
3. Visszatérés

A visszatérés után a munkaregiszter tartalma megjelenik a PORTB-n. (MOVWF PORTB) Ezután az INCF utasítással a SZAM értékéhez hozzáadunk egyet. A MOVFW SZAM sorral bekerül a memória terület értéke a munkaregiszterbe és ezután egy logikai művelet fog végrehajtódni a XORLW utasítással. A XORLW utasítás úgy működik, hogy XOR műveletet hajt végre egy literállal (amit mi adunk meg) és a munkaregiszter tartalmával. A logikai műveletek eredménye a STATUS regiszter zéró bitjében jelenik meg. Tehát ha a logikai állítás igaz a zéró bit értéke 1 lesz, ha nem igaz 0. A művelet eredményét úgy tudjuk megállapítani, hogy a BTFSS utasítással figyeljük a STATUS regiszter zéró bitjét. (BTFSS STATUS,Z) Ha ez hamis visszaugrunk a főprogramrészhez, ha igaz átugorjuk a következős sort, majd kitöröljük a SZAM című memória terület értékét és ezután térünk vissza a főprogramrészhez. Ez azért fontos, mivel a 10-ik kattintást nem tudjuk megjeleníteni a kijelzőn,( mert csak egyet használunk) ezért a számlálást elölről kell kezdenünk.
Tesztelés:
A program lefordítása és betöltése után (F8) a TOOLS menüben megnyitjuk a 7-Segment LED displays panel-t, és a Microcontroller view-et. A kijelzőn beállítjuk, hogy a PORTB-re legyen kötve és, hogy engedélyezve legyen a kijelző (Always enabled!, Display Enable)

A beállítások és program elindítása után a PORTD 0-án lévő nyomógomb nyomkodása után láthatjuk, hogy számoljuk a kattintásokat a kijelzőn.
Jó programozást kívánok!
|