- Fotón
- Posts : 709
Join date : 06.11.2020
Programovanie PIC procesorov - úvod
17/4/2021, 08:03
Začnem tým najjednoduchším: rozsvietením LED diódy na jednom z vývodov PIC procesora. -Takto to vyzerá pred rozsvietením:
Takto po rozsvietení LED diódy:
Tu je program, ktorý to zariadil:
Program nahrávam do procesora pomocou programátora PICKIT 3. Dajú sa použiť aj iné programátory, ale ja používam tento.
LED diódu zapína len jeden riadok programu (ten predposledný):
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á:
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:
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:
ledka naopak zhasne.
Začínam od prvého:
určuje, pre aký typ procesora je určený náš program.
vloží do programu knižnicu, ktorá obsahuje všetky inštrukcie a nastavenia, ktoré procesor PIC 16F1824 pozná.
sú úvodné nastavenia vlastností procesora. (Tie popíšem na konci článku.)
označuje nulový riadok programu. Tu štartuje samotný program.
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ť.
To 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".
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:
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. ....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.
Opäť príkaz pre procesor: prepni sa do banky, kde je register OSCCON, ktorým sa nastavuje frekvencia oscilátora. Keď si kupujete smartfón či notebook, jedna z vecí ktorá vás zaujíma je takt procesora. Dnes sa v počítačoch bežne používajú štvor a viac-jadrové procesory s taktom nad 3 GHz. Tento procesor PIC je len jedno-jadrový (jednočipový) a má takt maximálne 32 MHz, čo pre jeho použitie stačí. Oscilátor je srdce procesora. Bez neho by nevykonával program, nič by sa v ňom nedialo. Čím rýchlejší takt, tým rýchlejšie samozrejme procesor beží. Takže v registri OSCCON sa nastavuje predovšetkým frekvencia vnútorného oscilátora, ktorý je zabudovaný do procesora. O tom sú nasledujúce 2 riadky programu:
Tým je nastavená frekvencia na maximum, čiže 32 MHz. Inštrukcia "movlw" ako už vieme nahrá číslo uvedené za ňou do akumulátora (W-registra). Číslo je napísané v binárnej sústave, čiže obsahuje 8 núl alebo jedničiek. Preto ho píšem v binárnej, lebo jednotlivé bity majú rôzny význam. Ôsmy bit (ten úplne naľavo), zapína obvod PLL. To je obvod, ktorý stabilizuje frekvenciu oscilátora pri tak veľkej, maximálnej rýchlosti (32 MHz). Siedmym až štvrtým bitom sa nastavuje frekvencia oscilátora. Sú to 4 bity, ktorých rôznou kombináciou sa dá nastaviť frekvencia od 31 kHz po 32 MHz. Tretí bit je bez významu, takže tam ponechávam nulu (vypnutý). Kombináciou druhého a prvého tu (tie dva úplne vpravo) sa nastavuje, či chcem použiť vnútorný oscilátor zabudovaný v procesore, alebo vonkajší. Vonkajší kryštálový oscilátor je totiž presnejší, takže keby som chcel vyrábať hodiny, použijem voľbu "vonkajší". My máme ale nastavené na "vnútorný", preto sú tieto dva posledné bity "00".
Potom samozrejme nasleduje inštrukcia "movwf OSCCON", ktorá nahrá toto číslo z W registra do registra OSCCON, a tým sa fyzicky nastaví oscilátor.
Ďalšie riadky programu sú:
...tj prepni sa do banky, kde je register ANSELA (...je tam aj ANSELC), ktorými sa dajú nastaviť niektoré piny ako analógové. PIC procesory totiž obsahujú aj rôzne ďalšie vnútorné moduly, z ktorých niektoré sú analógové - napr. AD prevodníky, ktoré umožňujú analógový signál (napr. hudbu alebo reč z mikrofónu) premeniť na číslo(a). My to ale v tomto programe nevyužívame, preto sú oba registre vypnuté. To zariadi inštrukcia "clrf", ktorá hromadne vynuluje celý 8 bitový register. Dalo by sa to samozrejme spraviť aj takto:
....je to však zbytočne o jeden riadok viac.
Nakoniec nasledujú riadky:
Pomocou "banksel" sa prepneme do banky, v ktorej sú registre portov PORTA a PORTC. Vynulujeme ich inštrukciou "clrf", pretože po zapnutí procesora sa ich logické stavy nachádzajú v nedefinovanom (náhodnom) stave. -Tj. niektoré LEDky by svietili, iné nie. Keď však oba porty vynulujem, všetky vývody (piny) budú s istotou vypnuté.
Banka, v ktorej sú registre portov, je banka číslo 0, ktorá je východzia, číže prístupná po zapnutí procesora. Preto som prepnutím do nej skončil nastavovaciu fázu procesora.
No a nakoniec nasleduje tá inštrukcia
ktorú som už vysvetlil ako prvú a Ktorá zapína tú LEDdiódu. ....Program je zakončený direktívou END, ktorá informuje prekladač o tom, že tu je úplny koniec programu.
Takto po rozsvietení LED diódy:
Tu je program, ktorý to zariadil:
Program nahrávam do procesora pomocou programátora PICKIT 3. Dajú sa použiť aj iné programátory, ale ja používam tento.
LED diódu zapína len jeden riadok programu (ten predposledný):
- kód:
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á:
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:
- kód:
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:
- kód:
bcf PORTC,0
ledka naopak zhasne.
Teraz popíšem ostatné riadky programu.
Začínam od prvého:
- kód:
list p=16f1824
určuje, pre aký typ procesora je určený náš program.
- kód:
#include <p16f1824.inc>
vloží do programu knižnicu, ktorá obsahuje všetky inštrukcie a nastavenia, ktoré procesor PIC 16F1824 pozná.
- kód:
__CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_OFF & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF
- kód:
__CONFIG _CONFIG2, _WRT_OFF & _PLLEN_OFF & _STVREN_OFF & _BORV_19 & _LVP_OFF
sú úvodné nastavenia vlastností procesora. (Tie popíšem na konci článku.)
- kód:
org 00h
označuje nulový riadok programu. Tu štartuje samotný program.
- kód:
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ť.
- kód:
START
To 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".
- kód:
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:
- kód:
movlw b'00000000'
- kód:
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. ....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.
- kód:
banksel OSCCON
Opäť príkaz pre procesor: prepni sa do banky, kde je register OSCCON, ktorým sa nastavuje frekvencia oscilátora. Keď si kupujete smartfón či notebook, jedna z vecí ktorá vás zaujíma je takt procesora. Dnes sa v počítačoch bežne používajú štvor a viac-jadrové procesory s taktom nad 3 GHz. Tento procesor PIC je len jedno-jadrový (jednočipový) a má takt maximálne 32 MHz, čo pre jeho použitie stačí. Oscilátor je srdce procesora. Bez neho by nevykonával program, nič by sa v ňom nedialo. Čím rýchlejší takt, tým rýchlejšie samozrejme procesor beží. Takže v registri OSCCON sa nastavuje predovšetkým frekvencia vnútorného oscilátora, ktorý je zabudovaný do procesora. O tom sú nasledujúce 2 riadky programu:
- kód:
movlw b'11110000'
movwf OSCCON
Tým je nastavená frekvencia na maximum, čiže 32 MHz. Inštrukcia "movlw" ako už vieme nahrá číslo uvedené za ňou do akumulátora (W-registra). Číslo je napísané v binárnej sústave, čiže obsahuje 8 núl alebo jedničiek. Preto ho píšem v binárnej, lebo jednotlivé bity majú rôzny význam. Ôsmy bit (ten úplne naľavo), zapína obvod PLL. To je obvod, ktorý stabilizuje frekvenciu oscilátora pri tak veľkej, maximálnej rýchlosti (32 MHz). Siedmym až štvrtým bitom sa nastavuje frekvencia oscilátora. Sú to 4 bity, ktorých rôznou kombináciou sa dá nastaviť frekvencia od 31 kHz po 32 MHz. Tretí bit je bez významu, takže tam ponechávam nulu (vypnutý). Kombináciou druhého a prvého tu (tie dva úplne vpravo) sa nastavuje, či chcem použiť vnútorný oscilátor zabudovaný v procesore, alebo vonkajší. Vonkajší kryštálový oscilátor je totiž presnejší, takže keby som chcel vyrábať hodiny, použijem voľbu "vonkajší". My máme ale nastavené na "vnútorný", preto sú tieto dva posledné bity "00".
Potom samozrejme nasleduje inštrukcia "movwf OSCCON", ktorá nahrá toto číslo z W registra do registra OSCCON, a tým sa fyzicky nastaví oscilátor.
Ďalšie riadky programu sú:
- kód:
banksel ANSELA
clrf ANSELA
clrf ANSELC
...tj prepni sa do banky, kde je register ANSELA (...je tam aj ANSELC), ktorými sa dajú nastaviť niektoré piny ako analógové. PIC procesory totiž obsahujú aj rôzne ďalšie vnútorné moduly, z ktorých niektoré sú analógové - napr. AD prevodníky, ktoré umožňujú analógový signál (napr. hudbu alebo reč z mikrofónu) premeniť na číslo(a). My to ale v tomto programe nevyužívame, preto sú oba registre vypnuté. To zariadi inštrukcia "clrf", ktorá hromadne vynuluje celý 8 bitový register. Dalo by sa to samozrejme spraviť aj takto:
- kód:
banksel ANSELA
movlw b'00000000'
movwf ANSELA
movwf ANSELC
....je to však zbytočne o jeden riadok viac.
Nakoniec nasledujú riadky:
- kód:
banksel PORTA
clrf PORTA
clrf PORTC
Pomocou "banksel" sa prepneme do banky, v ktorej sú registre portov PORTA a PORTC. Vynulujeme ich inštrukciou "clrf", pretože po zapnutí procesora sa ich logické stavy nachádzajú v nedefinovanom (náhodnom) stave. -Tj. niektoré LEDky by svietili, iné nie. Keď však oba porty vynulujem, všetky vývody (piny) budú s istotou vypnuté.
Banka, v ktorej sú registre portov, je banka číslo 0, ktorá je východzia, číže prístupná po zapnutí procesora. Preto som prepnutím do nej skončil nastavovaciu fázu procesora.
No a nakoniec nasleduje tá inštrukcia
- kód:
bsf PORTC,0
ktorú som už vysvetlil ako prvú a Ktorá zapína tú LEDdiódu. ....Program je zakončený direktívou END, ktorá informuje prekladač o tom, že tu je úplny koniec programu.
- kód:
END
- Fotón
- Posts : 709
Join date : 06.11.2020
Re: Programovanie PIC procesorov - úvod
24/4/2021, 08:26
Teraz popíšem význam tých dvoch riadkov, ktoré som si nechal nakoniec:
Oba riadky vykonajú úvodné nastavenie vlastností procesora.
__CONFIG _CONFIG1 - Označuje začiatok prvého konfiguračného riadku.
_FOSC_INTOSC - Tým sa zapne interný oscilátor zabudovaný v proceseore.
_WDTE_OFF - Vypnutie "strážneho psa" (ktorý v prípade zamrznutia programu reštartuje procesor).
_PWRTE_OFF - Vypnutie zapínania procesora s oneskorením.
_MCLRE_OFF - Pin na vonkajšie spúšťanie mazania pamäti deaktivovaný.
_CP_OFF - Ochrana proti kopírovaniu programu vypnutá. (Keď ju zapnem, nikto nebude môcť tento program okopírovať - tj. stiahnuť z procesora do počítača.)
_CPD_OFF - Ochrana proti kopírovaniu dát z pamäti EEPROM vypnutá. (Keď ju zapnem, nikto nebude môcť skopírovať uložené dáta z procesora do PC.)
_BOREN_OFF - Reštart programu pri poklese napájacieho napätia (pod určitú hranicu) vypnutý.
_CLKOUTEN_OFF - Výstup sínusového signálu z vnútorného oscilátora na pin RA4 vypnutý.
_IESO_OFF - Možnosť prepínania interného / externého oscilátora pomocou programu, vypnutá.
_FCMEN_OFF - Monitor zlyhania vonkajšieho oscilátora vypnutý. (Táto vlastnosť umožňuje automaticky prepnúť na interný oscilátor v prípade zlyhania vonkajšieho oscilátora - samozrejme v prípade, že sa vonkajší oscilátor používa. V načom programe používame interný, takže táto vlastnosť je pre nás zbytočná.)
__CONFIG _CONFIG2 - Označuje začiatok druhého konfiguračného riadku.
_WRT_OFF - Ochrana proti zápisu na pamäť Flash vypnutá.
_PLLEN_OFF - Obvod PLL (stabilizujúci frekvenciu oscilátora) vypnutý. (Zapínam ho až v programe pri konfigurácii oscilátora v registri OSCCON, ako som už hore popísal.)
_STVREN_OFF - Reštart procesora v prípade pretečenia / podtečenia zásobníka návratových adries, vypnutý. (Keď sa napr. volá podprogram, uloží sa návratová adresa riadku do zásobníka a po vykonaní podprogramu sa vytiahne naspäť, aby program vedel, na ktorú adresu sa má vrátiť, z ktorej vybehol. Náš procesor má kapacitu zásobníka na 16 adries. Potom pretečie. K pretečeniu môže dôjsť volaním ďalšieho podprogramu v podprograme a v tom podprograme volaním ďaľšieho, atď... a do 16x. Viac ako 16 vnorení podprogramov v podprograme už nie je možných, lebo zásobník je len 16 miestny. To spôsobí zrútenie programu.)
_BORV_19 - Nastavenie automatického resetu programu pri poklese napájacieho napätia pod 1,9 voltu.
_LVP_OFF - Funkcia nahrávania programu nízkym napätím na pine RA3 (MCLR/Vpp) vypnutá. (V prípade zapnutia je treba nastaviť aj _MCLRE_ON, čím sa zmení význam pinu RA3 na MCLR (tj. vonkajšie spúšťanie mazania pamäti napätím na RA3). Potom stačí k nahrávaniu programu iba napájacie napätie procesora. Prídeme však o jeden z pinov, ktorý sa už nedá použiť na iný účel.)
- kód:
__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
Oba riadky vykonajú úvodné nastavenie vlastností procesora.
__CONFIG _CONFIG1 - Označuje začiatok prvého konfiguračného riadku.
_FOSC_INTOSC - Tým sa zapne interný oscilátor zabudovaný v proceseore.
_WDTE_OFF - Vypnutie "strážneho psa" (ktorý v prípade zamrznutia programu reštartuje procesor).
_PWRTE_OFF - Vypnutie zapínania procesora s oneskorením.
_MCLRE_OFF - Pin na vonkajšie spúšťanie mazania pamäti deaktivovaný.
_CP_OFF - Ochrana proti kopírovaniu programu vypnutá. (Keď ju zapnem, nikto nebude môcť tento program okopírovať - tj. stiahnuť z procesora do počítača.)
_CPD_OFF - Ochrana proti kopírovaniu dát z pamäti EEPROM vypnutá. (Keď ju zapnem, nikto nebude môcť skopírovať uložené dáta z procesora do PC.)
_BOREN_OFF - Reštart programu pri poklese napájacieho napätia (pod určitú hranicu) vypnutý.
_CLKOUTEN_OFF - Výstup sínusového signálu z vnútorného oscilátora na pin RA4 vypnutý.
_IESO_OFF - Možnosť prepínania interného / externého oscilátora pomocou programu, vypnutá.
_FCMEN_OFF - Monitor zlyhania vonkajšieho oscilátora vypnutý. (Táto vlastnosť umožňuje automaticky prepnúť na interný oscilátor v prípade zlyhania vonkajšieho oscilátora - samozrejme v prípade, že sa vonkajší oscilátor používa. V načom programe používame interný, takže táto vlastnosť je pre nás zbytočná.)
__CONFIG _CONFIG2 - Označuje začiatok druhého konfiguračného riadku.
_WRT_OFF - Ochrana proti zápisu na pamäť Flash vypnutá.
_PLLEN_OFF - Obvod PLL (stabilizujúci frekvenciu oscilátora) vypnutý. (Zapínam ho až v programe pri konfigurácii oscilátora v registri OSCCON, ako som už hore popísal.)
_STVREN_OFF - Reštart procesora v prípade pretečenia / podtečenia zásobníka návratových adries, vypnutý. (Keď sa napr. volá podprogram, uloží sa návratová adresa riadku do zásobníka a po vykonaní podprogramu sa vytiahne naspäť, aby program vedel, na ktorú adresu sa má vrátiť, z ktorej vybehol. Náš procesor má kapacitu zásobníka na 16 adries. Potom pretečie. K pretečeniu môže dôjsť volaním ďalšieho podprogramu v podprograme a v tom podprograme volaním ďaľšieho, atď... a do 16x. Viac ako 16 vnorení podprogramov v podprograme už nie je možných, lebo zásobník je len 16 miestny. To spôsobí zrútenie programu.)
_BORV_19 - Nastavenie automatického resetu programu pri poklese napájacieho napätia pod 1,9 voltu.
_LVP_OFF - Funkcia nahrávania programu nízkym napätím na pine RA3 (MCLR/Vpp) vypnutá. (V prípade zapnutia je treba nastaviť aj _MCLRE_ON, čím sa zmení význam pinu RA3 na MCLR (tj. vonkajšie spúšťanie mazania pamäti napätím na RA3). Potom stačí k nahrávaniu programu iba napájacie napätie procesora. Prídeme však o jeden z pinov, ktorý sa už nedá použiť na iný účel.)
Povolenie tohoto fóra:
Nemôžete odpovedať na témy v tomto fóre.