pre správne fungovanie tejto stránky, potrebujem používať cookies...
hoď ma hore
none

Žumpa

nový "Jeruzalem"

sk | en | aA
ak chceš diskutovať, musíš sa... registrovať
ak si zabudol heslo... resetovať heslo

informácia dňa :

tu sa nachádzaš : 

hlavná stránka  /  technika  /  téma

Programovanie PIC procesorov

príspevkov
1
zobrazení
1 350
unikátne
462
tému vytvoril(a) 21.4.2021 12:07 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.

odkaz

Takto po rozsvietení LED diódy.

odkaz

Tu je program, ktorý to zariadil.

odkaz

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

odkaz

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

odkaz

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...
none
vytvoril dzI/O 2015 - 2024 veľkosť : 67 997 B vygenerované za : 0.277 s táto stránka musí používať koláčiky, aby mohla fungovať... verzia : 1.02 ( 17.4.2024 9:00 ) témy zobrazené : 22 180 768 x jedinečné zobrazenia : 2 541 557 x ip adresa : 18.225.255.134

podpora

stránka má príjem jedine od dobrovoľných podporovateľov

za mesiac 2024 / 4, podporovatelia na reklame naklikali 2,51 € (32 klikov), z toho dnes 0,11 € (1 klik), ďakujem...

prosím, podpor stvoriteľa
prevodom na účet
SK41 1100 0000 0026 1872 7972
SWIFT: TATRSKBX
názov účtu:
Dziak Maroš, Ing.
banka:
Tatra banka, a.s.
Hodžovo námestie 3
811 06 Bratislava 1
none
cez PayPal
cez Viamo
none
cez Donater
none
poštou
Ing. Maroš Dziak
Budovateľská 67
075 01 Trebišov
Slovensko, EÚ
a teraz pozri, kto prispel