Začnem tým najjednoduchším: rozsvietením LED diódy na jednom z vývodov PIC procesora. -Takto to vyzerá pred rozsvietením.
odkazTakto po rozsvietení LED diódy.
odkazTu je program, ktorý to zariadil.
odkazProgram nahrávam do procesora pomocou programátora PICKIT 3. Dajú sa použiť aj iné programátory, ale ja používam tento.
odkazLED diódu zapína len jeden riadok programu (ten predposledný).
bsf PORTC,0
Inštrukcia "bsf" preklápa bit z nuly do jednotky. (Inštrukcia "bcf" naopak preklápa z jednotky do nuly.) PIC procesory rady 16F..... sú 8 bitové. Ich pamäť RAM je 8 bitová. Procesor, ktorý používam, má označenie 16F1824 a jeho pamäť RAM má 256 byte. Okrem toho má ešte aj pamäť programu, do ktorej sa nahráva program a ktorá je trvalá - čiže program v nej zostáva aj po vypnutí napájania.
Každý z bajtov pamäti RAM má svoju adresu. Aj porty (vývody) PIC procesora majú svoje adresy. Obvod 16F1824 má 2 porty (port A a port C) a každý z nich má 8 vývodov. Takto to vyzerá:
odkazNa obrázku sú porty označené ako RA0 až 7 a RC0 až 7. LED diódu som umiestnil na port RC0. Vráťme sa však k nášmu kľučovému riadku, ktorý zapína LED diódu. Za inštrukciou "bsf" ktorá ledku zapína, je adresa bitu. Možno sa spýtate, prečo tam nie je číslo. Adresa má predsa číslo. To áno, ale v knižnici je zadefinované, že keď napíšem za "bsf" slovo "PORTC", program ho pri kompilácii automaticky nahradí číslom 14, čo je fyzická adresa portu C. Jedná sa teda o akýsi symbolický názov čísla adresy. Názvy sa pamätajú totiž lepšie, než čísla. Výsledný efekt by bol ale rovnaký, keby som tam napísal priamo číslo:
bsf 14,0
LEDka by sa po skompilovaní a nahraní programu do PIC rozsvietila tiež. Čo však znamená tá nula za čiarkou? To je konkrétny bit. PORTC má totiž 8 vývodov (bitov) a tá nula za čiarkou znamená: "zapni bit 0 na porte C". Zapne sa teda vývod 0 na porte C. Rozsvieti sa ledka. ....Keď potom napíšem:
bcf PORTC,0
ledka naopak zhasne.
Prvý riadok programu
list p=16f1824
určuje, pre aký typ procesora je určený náš program. Druhý riadok
#include <p16f1824.inc>
vloží do programu knižnicu, ktorá obsahuje všetky inštrukcie a nastavenia, ktoré procesor PIC 16F1824 pozná. ďalšie 2 riadky
__CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_OFF & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF
__CONFIG _CONFIG2, _WRT_OFF & _PLLEN_OFF & _STVREN_OFF & _BORV_19 & _LVP_OFF
sú úvodné nastavenia vlastností procesora. (Tie popíšem neskôr.)
org 00h
označuje nulový riadok programu. Tu štartuje samotný program.
GOTO START
znamená, že z tohoto nulového riadku programu sa skočí až na riadok, ktorý má na začiatku napísané slovo "START". Až odtiaľ sa bude vykonávať program. Celá oblasť medzi "GOTO START" a riadkom "START", bude teda preskočená, ignorovaná. Táto oblasť sa využije na vkladanie podprogramov ktoré sa vykonajú až vtedy, keď sú zavolané príkazom "CALL". V našom programe však zatiaľ žiaden podprogram nemáme, lebo ho nepotrebujeme. Je to len príprava pre budúcnosť.
START
je názov riadku, kam sa skáče. Môžete si ho vymyslieť hocaký. Dôležité je, aby sa zhodoval s názvom za "GOTO".
banksel TRISA
Každý 8 bitový PIC procesor má viacero tzv. "bánk", v ktorých sa nachádzajú rôzne nastavovacie 8 bitové registre (bajty), obsluhujúce rozličné moduly a komponenty, ktoré procesor obsahuje. K prístupu k týmto registrom je nutné sa do príslušnej banky prepnúť. To sa deje pomocou príkazu "banksel" a za ním nasleduje názov registra, ktorý niečo nastavuje. V tomto prípade sa jedná o register "TRISA", ktorým sa nastavuje, či majú byť jednotlivé vývody portu A vstupné, alebo výstupné. Ak chceme na nejaký vývod portu A pripojiť tlačítko o ktorom chceme vedieť, či ho niekto stlačil alebo nie, nakonfigurujeme ten pin ako vstupný. Ak chceme naopak z toho pinu rozsvietiť LED diódu, nakonfigurujeme ho ako výstupný. To všetko sa dá nastavovaním registra (bajtu) pod názvom "TRISA". Práve o tom, sú nasledujúce dva riadky:
movlw b'00000000'
movwf TRISC
V banke v ktorej sa nachádza register "TRISA", sa nachádza aj register "TRISC", takže je jedno, či sa do nej prepnem pomocou "banksel TRISA", alebo "banksel TRISC". Každý jeden z vývodov portu C si teraz môžem nastaviť, ako chcem. Ak ho chcem ako výstupný, musím do prislušného bitu bajtu TRISC, vložiť logickú 0. Nula sa totiž podobá na písmeno "O", ako "Output", preto to tak výrobcovia spravili. Ak chcem daný pin portu C nastaviť ako vstupný (napr pre tlačítko), napíšem doň logickú 1. Číslo 1 sa podobá na "I" ako "Input", preto to tak spravili.
Logické nuly alebo jedničky sa do tohoto registra (bajtu) vkladajú pomocou inštrukcie "movlw". ....Ako vidíte, za inštrukciou "movlw" sú samé nuly. 8 núl. čiže všetky vývody portu C sú nastavené ako výstupné. Môžem teda pripojiť 8 LED diód a hrať sa s nimi. Smile ....Písmeno "b" pred nulami označuje číselnú sústavu, v ktorej práve píšem. V tomto prípade binárnu "b", čiže dvojkovú sústavu. Inštrukcia "movlw" však znamená ešte o trochu viac: vo svete PIC procesorov a procesorov vôbec, sa nedá vložiť číslo priamo na adresu daného registra. (v tomto prípade TRISC"). Najskôr sa číslo vkladá do tzv. "akumulátora". Predstavte si to niečo ako "pracovný stôl". Tam sa číslo najskôr vloží a vy rozhodnete, čo s ním ďalej spravíte. Či nejakú aritmetickú operáciu, alebo presun. Vo svete PIC procesorov sa tento "pracovný stôl" volá "W register". Preto tá inštrukcia dostala i názov "movlw" = presuň číslo ktoré si napísal do W registra. ...A potom nasleduje inštrukcia "movwf", tj presuň nahraté číslo z W registra, na adresu, v našom prípade adresu "TRISC" (....na ktorej sa nastavia všetky porty C tak alebo onak, podľa želania). Takže táto dvojica riadkov programu nastavila celý port C ako výstupný. 0 = O = Output. No a na jednom z vývodov potu C mám zavesenú tú LEDku. Konkrétne na portec, 0. A ako vidíte, svieti.
....pokračovanie nabudúce...