move to top

Lipka (Linden)

new Jerusalem
sk| en
login :
if you want to discuss, you must register...registration
if you had lost your password...reset password

you are here : 

main page / technics / chain

Programovanie PIC procesorov

entries
1
shows
90
uniques
50
theme was created 21.04.2021 by Fotón
1
21.04.2021, 12:07
Začnem tým najjednoduchším: rozsvietením LED diódy na jednom z vývodov PIC procesora. -Takto to vyzerá pred rozsvietením.

link

Takto po rozsvietení LED diódy.

link

Tu je program, ktorý to zariadil.

link

Program nahrávam do procesora pomocou programátora PICKIT 3. Dajú sa použiť aj iné programátory, ale ja používam tento.

link

LED 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á:

link

Na 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...

newest entries : 

created by dzI/Osize : 76 296 Bgenerated in : 0.054 si'm using cookies, if you disagree leavethemes displays : 7 742 945 xunique displays : 1 027 163 xip address : 3.236.222.124

please, support the creator

page has income only from voluntary contributors and from ads...
you may contribute...
by bank transfer
SK41 1100 0000
0026 1872 7972
SWIFT: TATRSKBX
by pay by square...
by PayPal
by Viamo
by Donater
and now look, who contributed...