yfronika
elektronika dla wszystkich sklep internetowy wszystko dla elektroniki
#include <pl8f4580.h>
//tablice kodow
char codę[10] = {0xF6, 0x50, 0xC7, 0xD3, 0x71, 0xB3, 0xB7, 0xD0, 0xF7, 0xF3}; char display = ; //wybór wyświetlacza
char value = ; //zmienna zawierajaca wskazanie wyświetlacza
//------------------------------------
// High priority interrupt vector #pragma codę InterruptVectorHigh = 0x08 void InterruptHandlerHigh(); //prototyp void InterruptVectorHigh (void){
_asm
goto InterruptHandlerHigh //jump to interrupt routine _endasm
}
// High priority interrupt routine #pragma codę
#pragma interrupt InterruptHandlerHigh void InterruptHandlerHigh (){
//zmień wyświetlacz if (display= ) { display = 1 ;
PORTC =
PORTD =
}else{
display =
PORTC = codę[(value% i 0 f)/ ] ;
}
}
//-------------------------------------
void main () {
int wait = ; //zmienna pomocnicza
//konfiguracja portow
TRISC &= ; //porty segmentów jako wyjścia
TRI SD &= ' ; //porty tranzystorów wysw. jako wyjścia
PORTD |= 0 x r’0 ;
PORTC = 0x00 ;
//konfiguruj licznik i przerwanie T2CON = ; //ustaw preskalery
T2CONbits.TMR20N = ; //wlacz licznik
PIElbits.TMR2IE = i ; //wlacz przerwanie INTCONbits.GIE = ; //przerwanie globalne
//pętla główna while(l){
for(wait= ; wait<0xFFy ; wait+t){;} value++ ;
} Listing 2
Efc Wew Project gebugger Prog-arrmer lods Configure Window ftsłp
D GS id v * Si B M £* £ f |! iDebufl -Jo B & © O $ ILił 0 © j
a -55-j (TW DD « IP HWBP [T|Uscd [o]OSWBP T| I
—^
//---------------------------------------"
□void main()(
* wyswictlocz MPLAB IDE v8,33
_J Header CJ Cfeject Ffes '_) Library Hes _J Lsiker Script _J Othcr Ffes
//zmienna pomocnicza int wait = 0 ;
//konfiguracja portow
TRISC Sc- 0x00 ; //porty segmentów jak< TRISD &• OxOF ; //porty tranzystorów i PORTD | 0xF0 PORTC 0x00 ;
//konfiguruj licznik i przerwanie T2COH = 0x78 ; //ustaw preskalery T2COHbits TMR20N J • //wiaćz licznil)
PIO* 2 |
PJC18F4530 pc:0x262 W:0x9c N wzdec |
,r~ |
bóf*0 Ln65. |
Coli |
Rys. 4 |
Rys. 5
m wyświetlacz MPLAB IDE v&33
£te gjfc V)ew Project Qeboggw Programmcr
terminalu mogą być reprezentowane jako ciąg tekstowy albo ciąg liczb.
W roli wyświetlacza pracować mogą również wyświetlacze 7-segmcntowe oraz diody LED. Te pierwsze umożliwiają wyświetlanie liczb i ograniczonego zbioru liter, ale również bywają nieodzowne podczas usuwania błędów z kodu. Diody LED stanowią najprostszy interfejs użytkownika obecny w prawie każdym projekcie. Mimo prostoty i ubogiej ilości przekazywanych informacji o działaniu kodu są również bardzo pomocne, zwłaszcza gdy nie ma dostępu do innych podzespołów takich jak port szeregowy czy wyświetlacz LCD. Można pokusić się o wykonanie bardzo prostego urządzenia wyposażonego w procesor, trzy wyświetlacze 7-segmentowe i port komunikacyjny. Układ taki przyda się przy wielu projektach i umożliwi łatwe odczytywanie wartości wybranych zmiennych. Warto wtedy zastosować protokół komunikacyjny oparty o jedną linię danych lub wykorzystać linię RxD układu USART.
Na rynku dostępne są także dedykowane debuggery, pozwalające na bieżące podglądnie zawartości zmiennych i rejestrów, zmianę ich wartości, śledzenie wykonania kodu, etc. Przykładem takiego narzędzie jest PICkit2, który pracuje jako programator bądź debugger i współpracuje z oprogramowaniem producenta (MPLAB). Bardziej popularne wśród Czytelników są zapewne mikrokon
trolery AVR, jednakże nie dysponując podobnym zestawem debugującym dla tej rodziny, chciałbym krótko zaprezentować sposób obsługi zestawu PICkit 2, aby przybliżyć możliwości podobnych narzędzi. Przykładowy kod (oczywiście zawierający błędy) pokazano na listingu 2. Jest to krótki program napisany w języku C i skompilowany z użyciem kompilatora MCC 18. Kompilator ten ma tę zaletę, że można go zintegrować ze środowiskiem MPLAB, co przekłada się na śledzenie wykonania programu napisanego właśnie w C.
Cały proces debugowania w środowisku MPLAB sprowadza się do wybrania narzędzia (menu Debugger->Select Tool->PICkit 2). Po kompilacji programu można go uruchomić, klikając na niebieskiej strzałce (rysunek 4). Jeżeli plik wynikowy, wygenerowany przez kompilator, jest różny od pliku wynikowego, zapisanego w pamięci mikrokontrolera, MPLAB zaproponuje jego uaktualnienie, na co warto się zgodzić. Działanie programu łatwo poznać po napisie running i
gramu, można za pomocą ikonki symbolizującej pauzę (rysunek 6 - przycisk oznaczony numerem 2). Pojawi się wtedy zielona strzałka (rysunek 7), która wskazuje, w którym miejscu program został zatrzymany. Czasami wskazuje ona na miejsce programu napisanego w C, a czasami otwiera się okienko z instrukcjami assemblera. Niektórych instrukcji nie ma w programie napisanym w C, bo wykonują się one w tle (np. obsługa stosu przy powrocie 7. przerwania). Stad otwarcie okienka assemblera. Na rysunku 6 zaznaczono jeszcze inne ikony:
- animate (3) - powoduje automatyczne wykonywanie programu krok po kroku,
- step int o (4) - wykona pojedynczą instrukcję programu i ponownie go wstrzyma,
- step over (5) - w zasadzie działa podobnie do (4), z tą różnicą, żc jeżeli debugger natknie się na wywołanie podprogramu, zostanie on wykonany w całości, a nie krok po kroku,
- reset (6) - umożliwia zresetowanie procesora, jest to szczególnie wygodne, gdy urządzenie nic ma dedykowanego przycisku do tego celu,
- breakpoints (7) - narzędzie umożliwiające „ręczne” ustawianie pułapek w programie.
Klikając na szarym pasku dwukrotnie,
można zastawić pułapkę - rysunek 8.
Ciąg dalszy na stronie 66
//pętla główna while£ 1) {
tor £wait=0 value++ ;
}
wait<OxFFFF ; wait++){;}
przesuwaniu się paska na dole okienka (rysunek 5). Wstrzymać pracę pro-
Rys. 8
//konfiguracja portow
TRISC 0x00 ; //porty segmentów jako wyjścia
TRISD &= 0x0F ; //porty tranzystorów wysw. jako wyjścia
PORTD I- 0xF0 ;
PORTC = 0x00 ;
Elektronika dla Wszystkich Styczeń 2010 63