Elektronika CL
Programování a konstrukce


První projekt s mikroprocesorem PIC

Jako první funkční projekt jsem zvolil jednoduchou konstrukci s blikající led na výstupu RA0. Interval blikání bude generován z přetečení vnitřního WDT (ochranného) časovače, připojeného k vnitřní děličce (cca. 1 sekunda). Typ procesoru použijeme PIC16F628A.
Založíme si projekt dle předchozího postupu a pojmenujeme si ho např. první projekt.
Kdo ho nechce zakládat, může si ho stáhnout zde prvni projekt. Musí si ale založit ve složce
C:/Program Files/Microchip/ adresář projekty.

Struktura zdrojového souboru

Od začátku se naučte dělat si ve zdrojových asm souborech popisky popř. komentáře. Usnadní vám to orientaci v progamu samotném.
Každý soubor by měl začínat hlavičkou ve které bude uvedeno k čemu konstrukce slouží, jaké má vstupy a výstupy atd.

Dále následuje definice použitých registrů, opět s popisem k čemu slouží. Například:
TMP equ 0x020h ; universální registr
Universální registr který má přiřazenu adresu 20 hexadecimálně (32desítkově).

Po registrech definujeme jednotlivé proměné, direktivou define. Například:
#define LED PORTA,0 ;výstup pro ledku na PORTUA,nultém bitu

Dále musíme nastavit generování "list" souboru, typ procesoru a konfiguraci procesoru. Pro typ PIC 16F628A to mám nastaveno takto a měním dle potřeby:
LIST P=16F628A
#include c:/Program Files/Microchip/projekty/P16F628A.def
__CONFIG _CP_OFF & _WDT_ON & _PWRTE_ON & _INTRC_OSC_NOCLKOUT & _BODEN_ON & _LVP_ON & _MCLRE_OFF
;kodova ochrana vypnuta, WDT casovac zapnut, Start.cas zapnut, vnitrni oscilatror, detekce nizkeho napeti zapnuta, MCLR off-provadeno vnitrne


Následuje definice hardwarové adresy pro reset procesoru (0x0000h) a pro přerušení procesoru (0x0004h). Z těchto adres potom procesor pokračuje dále.
Nastavuji takto:
org 0x0000h
goto reset ; pokračuj na návěští resetu uP
org 0x0004h
goto inter ; odskok na návěští ošetřující přerušení

Zápis instrukcí:
V MPLABu lze zapsat instrukce více způsoby a to například takto:
1)Vypsat název registru a název bitu BSF STATUS,RP0 nastaví bit RP0 a tím přepne banku paměti dat.
2)Vypsat název registru a pozici bitu BSF STATUS,5 nastaví se pátý bit RP0 a tím opět přepne banku paměti dat.
3)Předdefinovat si tyto bity a potom vypisovat pouze jednotlivé názvy bitů. BSF RP0 nastaví bit RP0 a tím přepne banku paměti dat.

Na třetí typ zápisu jsem si zvykl nejvíce, protože se mi zdá nejpřehlednější. Pro ulehčení práce (abych nemusel v každém novém projektu vždy znovu definovat všechny systémové registry a jejich proměné) jsem si vytvořil soubory, které obsahují tyto předdefinované proměné.
Soubory pro procesory PIC 16F628, 16F628A, 16F84, 16F73, 16F77 a 16F88 jsou ke stažení zde:*.def soubory pro PIC
Pokud budete chtít tyto soubory používat ve svém zdrojovém souboru, musíte překladači definovat cestu k souboru příkazem #include + cesta
Jinak by byly při překladu vygenerovány chyby.
Příklad zápisu, kdy je soubor uložen v adresáři program files, podadresáři microchip, podadresáři projekty: #include c:/Program Files/Microchip/projekty/P16F628A.def

Nastavení simulátoru, odladění programu v simulátoru

Po založení projetu, přidání souboru prvni projekt.asm a kompilaci, lze spustit simulátor a odzkoušet chování programu. Simulátor spustíme takto:
Debugger-Select tools-3 Mplab Sim spuštění simulátoru - celkový pohled

Nastavení správného kmitočtu pro simulaci:
Debugger-Settings...-Osc/Trace nastavení simulátoru - celkový pohled

Nastavení stopwatch (měří celkové trvání instrukcí a smyček dle nastavení pracovního kmitočtu debugeru).:
Debugger-StopWatch
spuštění stopwatch - celkový pohled

Nastavení zobrazení systémových registrů procesoru:
View-Special Function Registr
zobraz syst.registry - celkový pohled

Nastavení breakpointu (bodu zastavení programu), odladění programu

Breakpionty se používají pro odladění smyček, časů a bloků programu. Nastaví (popř. odeberou) se dvojjitým kliknutím na řádek kde chceme mít breakpoint.V příkladu nastaveno na změnu na PORTuA, bitu 0 (LED)
zobraz breakpoint - celkový pohled

Po upynutí času a probuzení ze stavu sleep se program zastaví na pozici breakpointu a provede následující instrukce (negaci bitu 0 na PORTA).
Zmena PORTA - celkový pohled

Zobrazení času po probuzení z instrukce sleep ve StopWatch Cas 1sek - celkový pohled

Nyní již můžete nahrát soubor "prvni projekt.hex" umístěný ve stejném adresáři jako je projekt do procesoru a odzkoušet zda vše funguje jak má. Konfigurační pojistky procesoru jsou nastaveny přímo v projektu, proto by se měly automaticky nahrát do procesoru,aniž by se musely donastavovat ručně v software programátoru.


 

© 2010   Zpět