LABORATORIUM MIKROKONTROLERY I MIKROSYSTEMY 3zbczaja/pdf/lab_atmega16.pdf · 2015-03-24 · Katedra...

25
Katedra Metrologii i Optoelektroniki Wydzial Elektroniki, Telekomunikacji i Informatyki Politechnika Gdańska LABORATORIUM MIKROKONTROLERY I MIKROSYSTEMY Ćwiczenie nr 3 Realizacja oprogramowania w asemblerze na mikrokontroler ATmega16 firmy Atmel Ćwiczenie nr 4 Wykorzystanie języka C do pisania programów na mikrokontroler ATmega16 firmy Atmel opracowane przez: dr inż. Zbigniew Czaja Gdańsk 2013

Transcript of LABORATORIUM MIKROKONTROLERY I MIKROSYSTEMY 3zbczaja/pdf/lab_atmega16.pdf · 2015-03-24 · Katedra...

Page 1: LABORATORIUM MIKROKONTROLERY I MIKROSYSTEMY 3zbczaja/pdf/lab_atmega16.pdf · 2015-03-24 · Katedra Metrologii i Optoelektroniki Wydział Elektroniki, Telekomunikacji i Informatyki

Katedra Metrologii i Optoelektroniki

Wydział Elektroniki, Telekomunikacji i Informatyki

Politechnika Gdańska

LABORATORIUM MIKROKONTROLERY I MIKROSYSTEMY

Ćwiczenie nr 3

Realizacja oprogramowania w asemblerze na mikrokontroler ATmega16 firmy Atmel

Ćwiczenie nr 4

Wykorzystanie języka C do pisania programów na mikrokontroler ATmega16 firmy Atmel

opracowane przez: dr inż. Zbigniew Czaja

Gdańsk 2013

Page 2: LABORATORIUM MIKROKONTROLERY I MIKROSYSTEMY 3zbczaja/pdf/lab_atmega16.pdf · 2015-03-24 · Katedra Metrologii i Optoelektroniki Wydział Elektroniki, Telekomunikacji i Informatyki

1

Ćwiczenie nr 3

Realizacja oprogramowania w asemblerze na mikrokontroler ATmega16 firmy Atmel

I. Literatura (dokumentacja do ćwiczeń laboratoryjnych)

[1] Atmel Corporation, "8-bit Microcontroller with 16K Bytes In-System Programmable Flash. ATmega16 ATmega16L", 2006, plik - Atmega16.pdf.

[2] Atmel Corporation, "8-bit AVR Instruction Set", 2002, plik - AVR_Instruction_Set.pdf.

[3] Czaja Z., Dudkiewicz P., "Stanowisko laboratoryjne dla mikrokontrolera Atmega16 firmy Atmel", 2013, plik - Zestaw_lab_Atmega16.pdf.

Powyższa dokumentacja znajduje się w katalogu c:\labmik\doc

II. Sprzęt i oprogramowanie

1. Zestaw laboratoryjny mikrokontrolera Atmega16.

2. Programator AVRISP mkII podłączony do portu USB komputera PC.

3. Zasilacz gniazdkowy stabilizowany 9V.

4. Kabel połączeniowy dla standardu interfejsu szeregowego RS232.

5. Oprogramowanie użytkowe na komputer PC:

a) zintegrowane środowisko programistyczne IDE (AVR Studio 4.19 (c:\labmik\ AVRStudio\ AVRStudio4\AvrStudio.exe),

b) program obsługi terminali szeregowych (terminal.exe (c:\labmik\terminal\ terminal.exe)),

c) program Total Commander do zarządzania systemem plików.

III. Zadania laboratoryjne

1. Przygotowanie stanowiska laboratoryjnego do pracy.

a) sprawdzić czy zestaw laboratoryjny jest podłączony do zasilacza gniazdkowego 9V podłaczonego do listwy zasilającej.

b) sprawdzić czy zestaw laboratoryjny jest podłączony przez programator STK500 do portu USB, a przez kabel RS232 do portu COM komputera PC,

c) uruchomić komputer PC (praca pod Windows XP),

d) uruchomić program do zarządzania systemem plików, np. Total Commander

(ikona na pulpicie ),

e) przejść do katalogu c:\labmik\ i usunąć podkatalog lab3 z całą jego zawartością (rys. 1) (kasowanie katalogu – po zaznaczeniu katalogu lab3 nacisnąć klawisz Delete lub F8),

Totalcmd.lnk

Page 3: LABORATORIUM MIKROKONTROLERY I MIKROSYSTEMY 3zbczaja/pdf/lab_atmega16.pdf · 2015-03-24 · Katedra Metrologii i Optoelektroniki Wydział Elektroniki, Telekomunikacji i Informatyki

2

Rys. 1. Panel programu Total Commander z zaznaczonym katalogiem c:\labmik\lab3

f) rozpakować plik lab3.zip znajdujący się w katalogu C:\labmik\ (zawiera on podkatalog lab3 wraz z jego właściwą zawartością) (rozpakowywanie – w obydwu panelach programu Total Commander musi być wyświetlany katalog c:\labmik . W lewym panelu wejść do pliku lab3.zip (zaznaczyć go i nacisnąć klawisz Enter lub dwa razy kliknąć na nim myszką), po czym zaznaczyć katalog lab3 i nacisnąć klawisz F5 (rys. 2). W prawym panelu pojawi się ten katalog już rozpakowany).

Rys. 2. Panel programu Total Commander z otwartym plikiem lab3.zip

2. Zapoznanie się ze środowiskiem IDE dla mikrokontrolera Atmega16 – kompilacja.

a) Uruchomić program AvrStudio.exe. W tym celu najlepiej przejść do katalogu c:\labmik\lab3\ i dwukrotnie kliknąć na link AvrStudio.lnk .

b) Pojawi się panel główny programu AVR Studio. Nacisnąć przycisk Create New Project.

c) Pojawi się okienko „Create new project” (rys. 3). W polu „Project type” zaznaczyć Atmel AVR Assembler, w polu „Location” ma być C:\labmik\lab3 , w pole „Project Name” wpisać przyk1 (zgodne z nazwą pliku przyk1.asm ). Po czym nacisnąć przycisk Next >>.

Page 4: LABORATORIUM MIKROKONTROLERY I MIKROSYSTEMY 3zbczaja/pdf/lab_atmega16.pdf · 2015-03-24 · Katedra Metrologii i Optoelektroniki Wydział Elektroniki, Telekomunikacji i Informatyki

3

Rys. 3. Okienko powitalne z ustawieniami projektu

d) Będąc w okienku „Select debug platform and device” (rys. 4), w polu „Debug platform” zaznaczyć AVR Simulator , a w polu „Device” ATmega16. Na zakończenie nacisnąć przycisk Finish.

Rys. 4. Okienko „Select debug platform and device”

e) Na ekranie pojawił się główny panel programu AVR Studio 4 (rys. 5). W lewym oknie „Project” pokazana jest struktura projektu, środkowe okno zawiera kod programu przyk1.asm, a w prawym oknie „I/O view” znajduje się lista urządzeń peryferyjnych ATmega16.

Page 5: LABORATORIUM MIKROKONTROLERY I MIKROSYSTEMY 3zbczaja/pdf/lab_atmega16.pdf · 2015-03-24 · Katedra Metrologii i Optoelektroniki Wydział Elektroniki, Telekomunikacji i Informatyki

4

Rys. 5. Główny panel programu AVR Studio 4

f) Dokonać asemblacji (kompilacji) programu przyk1.asm. W tym celu należy wybrać z

menu głównego polecenie Build > Build lub nacisnąć klawisz F7.

g) Sprawdzić, czy w oknie „Messages” są komunikaty informujące o poprawnej kompilacji, przejrzeć zawartość katalogu C:\labmik\lab3 oraz przeanalizować nowopowstałe pliki (w dowolnym edytorze tekstowym, np. Notepad – w tym celu w Total Commanderze zaznaczyć dany plik tekstowy, a następnie nacisnąć klawisz F4).

3. Zapoznanie się ze środowiskiem IDE dla mikrokontrolera Atmega16 – symulacja.

a) Uruchomić Debugger wykonując polecenie Debug > Start Debugging. Nasz program musi być wcześniej skompilowany, co już zrobiliśmy w poprzednim punkcie.

b) W celu ustawienia oscylatora na 8 MHz wywołać polecenie Debug > AVR Simulator Options (Alt-O ). W okienku „Simulator Options” (rys. 6) w polu „Frequency” wybrać 8.00 MHz po czym nacisnąć przycisk OK .

Page 6: LABORATORIUM MIKROKONTROLERY I MIKROSYSTEMY 3zbczaja/pdf/lab_atmega16.pdf · 2015-03-24 · Katedra Metrologii i Optoelektroniki Wydział Elektroniki, Telekomunikacji i Informatyki

5

Rys. 6. Okienko „Simulator Options”

c) Na potrzeby analizowanego programu wystarczy w prawym okienku „I/O view” otworzyć obiekty przez niego wykorzystywane, czyli PORTA i PORTC. Aby oglądać zawartości rejestrów roboczych można otworzyć okienko „Register” – polecenie View > Register.

Rys. 7. Panel AVR Studio 4 z aktualnie pracującym programem przyk1 w symulatorze

programowym

Page 7: LABORATORIUM MIKROKONTROLERY I MIKROSYSTEMY 3zbczaja/pdf/lab_atmega16.pdf · 2015-03-24 · Katedra Metrologii i Optoelektroniki Wydział Elektroniki, Telekomunikacji i Informatyki

6

d) W celu prześledzenia pracy programu przyk1.asm najlepiej wybrać pracę krokową, wywołując polecenie Debug > Step Into (klawisz F11). Jedno naciśnięcie klawisza F11 powoduje wykonanie jednej instrukcji asemblera oraz modyfikację stanów rejestrów i obiektów w okienku „I/O view” (jeżeli są problemy z widocznością okienka z kodem programu, to można użyć polecenia z menu Window, np. Window > Cascade).

e) Przeanalizować całą pracę programu. Gdzie obserwuje się zmienną counter? Kiedy i jak zmienia się jej wartość? Przeanalizować inne polecenia menu Debug.

f) Aby zakończyć symulację programową wywołuje się polecenie Debug > Stop Debugging (kombinacja klawiszy Ctrl+Alt+F5 ).

4. Programowanie mikrokontrolera Atmega16 w systemie docelowym.

a) Zamknąć poprzedni projekt wywołując polecenie Project > Close Project.

b) Następnie utworzyć nowy projekt – wywołać polecenie Project > New Project. Nadać mu nazwę porty . Przy tworzeniu projektu postępować tak jak w poprzednim przykładzie (punkty od 2b) do 2e)).

c) Dokonać asemblacji wybierając polecenie Build > Build (klawisz F7).

d) Przeanalizować kod programu porty.asm. Zrozumieć zasadę działania programu. Wszystkie niezbędne informacje znajdują się w dokumentacji technicznej [1,2,3].

e) Prześledzić na symulatorze programowym pracę programu porty.asm. Należy wymuszać (zmieniać) stany na liniach portu C – w rejestrze PINC (rys.8), najlepiej w chwili gdy wykonywany jest rozkaz nop w funkcji dip8. Co się dzieje wtedy ze zmienną tmp2 (rejestr R17)?

Rys. 8. Panel AVR Studio 4 z aktualnie pracującym w symulatorze programem porty.asm

Page 8: LABORATORIUM MIKROKONTROLERY I MIKROSYSTEMY 3zbczaja/pdf/lab_atmega16.pdf · 2015-03-24 · Katedra Metrologii i Optoelektroniki Wydział Elektroniki, Telekomunikacji i Informatyki

7

f) W celu zasymulowania przycisku INT0 umieszczonego na płytce laboratoryjnej [3], czyli w celu wywołania przerwania zewnętrznego INT0, ustawić na PIND bit 2 stan wysoki (rys. 9) – klawisz nienaciśnięty, a następnie stan niski – klawisz naciśniety (symulacja zbocza opadającego na tej linii). Należy pamiętać o wykonywaniu w między czasie polecenia Debug > Step Into (klawisz F11). Będąc w obsłudze przerwania, aby opóścić pętle pause, ponownie ustawić stan wysoki na PIND2 (co wynika z kodu programu). Obserwować co się dzieje w zmiennych tmp, tmp2 i tmp3.

Rys. 9. Panel AVR Studio 4 z aktualnie pracującym w symulatorze programem porty.asm

g) Po przeanalizowaniu pracy programu porty.asm zakończyć symulację programową wywołując polecenie Debug > Stop Debugging (kombinacja klawiszy Ctrl+Alt+F5 ).

h) Sprawdzić, czy płytka laboratoryjna jest włączona (świeci się dioda LED 11) – przełącznik SW1 w pozycji ON [3].

i) Przejść do programowania. W tym celu wywołać polecenie Tools > Program AVR >Connect.

j) Pojawi się okienko „Select AVR Programmer”. W polu „Platform” wybrać AVRISP mkII , a w polu „Port” USB, następnie nacisnąć przycisk Connect.

k) Na ekranie ukaże się okienko obsługi programatora AVRISP mkII (rys. 10). Wybrać zakładkę „Program”. W polu „Device”, tak jak na rys. 10, obie opcje muszą być zaznaczone.

l) W polu „Flash” tego okna nacisnąć przycisk ... i wybrać plik C:\labmik\lab3\porty.hex, a następnie nacisnąć przycisk Program.

m) Po proprawnym zaprogramowaniu mikrokontrolera (w dolnym polu okienka powinny być takie same komunikaty jak na rys. 10) można zamknąć okienko.

Page 9: LABORATORIUM MIKROKONTROLERY I MIKROSYSTEMY 3zbczaja/pdf/lab_atmega16.pdf · 2015-03-24 · Katedra Metrologii i Optoelektroniki Wydział Elektroniki, Telekomunikacji i Informatyki

8

n) Przeanalizować pracę programu porty.asm w systemie docelowym. Zmieniać ustawienia przełączników na DIP8, obserwować co się dzieje na diodach LED1-8, naciskać przycisk INT0 i przyglądać się jak pracuje wyświetlacz 7-mio segmentowy.

Rys. 10. Okno obsługi programatora AVRISP mkII

5. Zapoznać się z obsługą w asemblerze przetwornika A/C i komparatora analogowego mikrokontrolera.

a) w tym celu przeanalizować kod programu adc.asm, korzystać z dokumentacji [1,3]. Do czego służą potencjometry P1 i P2 oraz P4 w tym programie?

b) dokonać jego kompilacji, ewentualnie symulacji programowej oraz zaprogramować mikrokontroler,

c) przeanalizować pracę programu adc.asm w systemie docelowym (opis obsługi płytki laboratoryjnej pracującej zgodnie z programem adc.asm znajduje się w komentarzach do kodu tego programu).

6. Komunikacja zestawu laboratoryjnego z komputerem PC za pośrednictwem interfejsu

szeregowego RS232.

a) przeanalizować kod programu rs232.asm korzystając z dokumentacji [1,3] – jak wysyła i odbiera się dane w programie rs232.asm?

b) dokonać jego kompilacji, po czym zaprogramować mikrokontroler,

Page 10: LABORATORIUM MIKROKONTROLERY I MIKROSYSTEMY 3zbczaja/pdf/lab_atmega16.pdf · 2015-03-24 · Katedra Metrologii i Optoelektroniki Wydział Elektroniki, Telekomunikacji i Informatyki

9

c) przeanalizować pracę programu rs232.asm w systemie docelowym (obsługa zestawu laboratoryjnego znajduje się w komentarzach do kodu tego programu). Na komputerze PC uruchomić program terminal.exe do komunikacji z urządzeniami dołączonymi do portów COM (c:\labmik\terminal\terminal.exe). W celu skonfigurowania terminala wywołać okienko „Parametry transmisji” przez Połączenie->Linia.... Powinno być ustawione: Port Com1 lub Com2 (w zależności od stanowiska laboratoryjnego), Bitów na sekundę 9600, Bity danych 8, Parzystość Brak , Bity stopu 1, kontrola transmisji Brak (rys. 11).

Rys. 11. Okno programu terminal.exe

7. Napisać kod źródłowy własnego programu pracującego zgodnie z zaleceniami

prowadzącego laboratorium i uruchomić go (zadanie dodatkowe nieobowiązkowe przeznaczone dla studentów wykonujących laboratorium z Mikrosterowników i mikrosystemów rozproszonych).

IV. Listingi programów 1. Program przyk1.asm ; ; Przyklad pierwszy - przeznaczony do nauki symulac ji pracy ATmega16 ; w środowisku AVRStudio ; Laboratorium: Mikrokontrolery i mikrosystemy oraz ; Mikrosterowniki i mikrosystemy rozproszone ; ; Dokumentacja techniczna do ćwiczenia laboratoryjnego: ; ; [1] - Atmel Corporation, "8-bit Microcontroller w ith 16K Bytes In-System ; Programmable Flash. ATmega16 ATmega16L", 20 06, plik - Atmega16.pdf. ; [2] - Atmel Corporation, "8-bit AVR Instruction S et", 2002, ; plik - AVR_Instruction_Set.pdf. ; [3] - Czaja Z., Dudkiewicz P., "Stanowisko labora toryjne dla mikrokontrolera ; Atmega16 firmy Atmel", 2013, plik - Zestaw_ lab_Atmega16.pdf .INCLUDE "m16def.inc" .DSEG .DEF tmp = r16 ; przypisanie nazw dla rejestrów .DEF tmp2 = r17 .DEF counter = r18 .CSEG ; pocz ątek segmentu programu .ORG 0x00 ; wektor przerwania od resetu / pocz ątek programu

Page 11: LABORATORIUM MIKROKONTROLERY I MIKROSYSTEMY 3zbczaja/pdf/lab_atmega16.pdf · 2015-03-24 · Katedra Metrologii i Optoelektroniki Wydział Elektroniki, Telekomunikacji i Informatyki

10

; procedura inicjalizacji po resecie i wł ączeniu zasilania Reset: ldi tmp, high(RAMEND) ; [1], s. 12 out SPH, tmp ldi tmp, low(RAMEND) out SPL, tmp ldi tmp,0b11111100 ; 1- wyj ście, 0-wej ście out DDRA,tmp ; kierunek pinów portu A, PORTA0 PO RTA1 wej ścia ldi tmp,0b00000100 out PORTA,tmp ldi tmp,0xFF out DDRC,tmp ; inicjalizacja portu C, wyj ściowy out PORTC,tmp ; ustawienie stanów wysokich na C ser counter ; wpisanie jedynek do licznika ; wygaszenie wy świetlacza 7 segmentowego

; (jedynkami) [3] out PORTC,counter ; wystawienie jedynek na port sbi PORTA,4 ; aktywacja wyj ść zatrzasku U6 jako bufory cbi PORTA,4 ; zatrza śni ęcie stanu na wyj ściu U6 ; *** Program główny (głowna p ętla programu) *** Program: rcall Show ; wy świetlenie stanu licznika dec counter ; dekrementowanie licznika rjmp Program ; powrót do pocz ątku programu ; ************************************************* ******************************** ; funkcja wy świetlenie licznika na linijce diod led [3] Show: out PORTC,counter ; wystawienie stanu licznika na port sbi PORTA,3 ; aktywacja układu U5 (od linijki LE D) cbi PORTA,3 ; zatrza śni ęcie stanu na wyj ściu U5 ret .EXIT

2. Program porty.asm ; ; Przyklad drugi - obsługa portów równoległych ATm ega16 ; Laboratorium: Mikrokontrolery i mikrosystemy ; oraz Mikrosterowniki i mikrosystemy rozproszone ; ; Dokumentacja techniczna do ćwiczenia laboratoryjnego: ; ; [1] - Atmel Corporation, "8-bit Microcontroller w ith 16K Bytes In-System ; Programmable Flash. ATmega16 ATmega16L", 20 06, plik - Atmega16.pdf. ; [2] - Atmel Corporation, "8-bit AVR Instruction S et", ; 2002, plik - AVR_Instruction_Set.pdf. ; [3] - Czaja Z., Dudkiewicz P., "Stanowisko labora toryjne dla mikrokontrolera ; Atmega16 firmy Atmel", 2013, plik - Zestaw_ lab_Atmega16.pdf ; Uwaga: - zakomentowane linie z instrukcjami to do datkowe przykłady prezentuj ące ; obsług ę urz ądze ń peryferyjnych mikrokontrolera ; NIE NALE ŻY ICH ODKOMENTOWYWAĆ .INCLUDE "m16def.inc"

Page 12: LABORATORIUM MIKROKONTROLERY I MIKROSYSTEMY 3zbczaja/pdf/lab_atmega16.pdf · 2015-03-24 · Katedra Metrologii i Optoelektroniki Wydział Elektroniki, Telekomunikacji i Informatyki

11

.DSEG

.DEF tmp = r16 ; przypisanie nazw dla rejest rów

.DEF tmp2 = r17

.DEF tmp3 = r18 .CSEG ; pocz ątek segmentu kodu programu .ORG 0x00 ; wektor przerwania od resetu jmp Reset .ORG 0x02 ; wektor przerwania INT0 jmp ServiceINT0 ;.ORG 0x04 ; wektor przerwania INT1 ;jmp ServiceINT1 ; procedura inicjalizacji po resecie i wł ączeniu zasilania Reset: ldi tmp, high(RAMEND) ; [1], s. 12 out SPH, tmp ldi tmp, low(RAMEND) out SPL, tmp ldi zh,high(ZNAKI<<1) ; rejestr Z wskazuje na poc zątek tablicy ZNAKI ldi zl,low(ZNAKI<<1) ; ldi tmp,0b11111100 ; 1- wyj ście, 0-wej ście out DDRA,tmp ; kierunek pinów portu A, PORT A0 PORTA1 wej ścia ldi tmp,0b00000100 out PORTA,tmp ser tmp out DDRC,tmp ; inicjalizacja portu C, wyj ściowy out PORTC,tmp ; ustawienie stanów wysokich n a C ; wygaszenie wy świetlacza 7 segmentowego

; (jedynkami) sbi PORTA,4 ; aktywacja wyj ść zatrzasku U6 jako bufory cbi PORTA,4 ; zatrza śni ęcie stanu na wyj ściu U6 clr tmp out DDRB,tmp ; inicjalizacja portu B jako we j ściowy ldi tmp, 0x02 out DDRD,tmp ; inicjalizacja portu D jako we j ściowy, TxD wyjscie ; [1], s. 68 ldi tmp, 0x0A ; przerwania INT0 i INT1 na zb ocze opadajace out MCUCR, tmp ldi tmp, 0x40 ; odblokowanie INT0 out GICR, tmp ;ldi tmp, 0x?0 ; Jak jednocze śnie odblokowa ć INT0 i INT1? ;out GICR, tmp sei ; właczenie przerwa ń ; *** Program główny (głowna p ętla programu) *** Program: rcall dip8 ; odczyt DIP-8 rcall led8 ; wy świetlenie danej na linijce 8 LED ;rcall serviceMAN ; sprawdzenie stanu przyc isku MAN ;rcall serviceICP1 ; sprawdzenie stanu przy cisku ICP1 rjmp Program ; powrót do pocz ątku programu

Page 13: LABORATORIUM MIKROKONTROLERY I MIKROSYSTEMY 3zbczaja/pdf/lab_atmega16.pdf · 2015-03-24 · Katedra Metrologii i Optoelektroniki Wydział Elektroniki, Telekomunikacji i Informatyki

12

; ************************************************* ******************************** ; obsluga przerwania INT0 ServiceINT0: pause0: sbis PIND,2 ; sprawdzenie czy przycisk INT0 pusz czony, czy jest

; na nim stan "Hi" rjmp pause0 ; jesli nie, to pauza inc tmp3 ; inkrementuj zawarto ść zmiennej tmp3 rcall wysw7 ; wy świetlenie danej tmp3 na wyswietlaczu

; 7-segmentowym reti ; obsluga przerwania INT1 ;ServiceINT1: ;pause1: ;sbis PIND,3 ; sprawdzenie czy przycisk INT1 pu szczony, czy jest na nim stan "Hi" ;rjmp pause1 ; jesli nie, to pauza ;.... ; miejsce na obsług ę przerwania INT1 ;reti ; *** Blok funkcji *** ; funkcja odczyt ustawien DIP-8 dip8: cli ; zablokowanie przerwan clr tmp out DDRC,tmp ; inicjalizacja portu C jako w ej ściowy out PORTC,tmp ; bez pull-up cbi PORTA,2 ; aktywacja układu U4 (od DIP- 8) [3] nop in tmp2, PINC ; odczyt DIP-8 sbi PORTA,2 ; dezaktywacja układu U4 ser tmp out DDRC,tmp ; ustawienie portu C na wyj ściowy sei ; odblokowanie przerwan ret ; funkcja wy świetlenie licznika na linijce diod led led8: out PORTC,tmp2 ; wystawienie stanu DIP-8 na port C sbi PORTA,3 ; aktywacja układu U5 (od lini jki LED) cbi PORTA,3 ; zatrza śni ęcie stanu na wyj ściu U5 ret ; funkcja wy świetlenie liczb ę naci śni ęć przycisku INT0 wysw7: mov zl, tmp3 ; adresowanie po średnie - dost ęp do pami ęci FLASH

; (dekodowanie znaku na wy św. 7-segmentowy) andi zl,0x0F ; u życie maski 0x0F - zerowanie czterech

; najstarszych bitów lpm ; [2], s. 91 out PORTC,r0 ; wystawienie stanu DIP-8 na p ort C - zdekodowany

; wynik po wykonaniu instrukcji "lpm" znajdu je si ę

Page 14: LABORATORIUM MIKROKONTROLERY I MIKROSYSTEMY 3zbczaja/pdf/lab_atmega16.pdf · 2015-03-24 · Katedra Metrologii i Optoelektroniki Wydział Elektroniki, Telekomunikacji i Informatyki

13

; w rejestrze "r0" sbi PORTA,4 ; aktywacja układu U6 (od wysw . 7-seg.) cbi PORTA,4 ; zatrza śni ęcie stanu na wyj ściu U6 ret ; funkcja obsluga przycisku MAN ; funkcja obsluga przycisku MAN ;serviceMAN:

;sbic PINB,0 ; sprawdzenie czy przycisk MAN naci śni ęty "Lo" ;rjmp endMAN ; jesli nie, skok do endMA N

;pauseMAN:

;sbis PINB,0 ; sprawdzenie czy przycisk MAN puszczony "Hi" ;rjmp pauseMAN ; jesli nie, to pauza ;.... ; miejsce na kod

;endMAN: ;ret

; funkcja obsluga przycisku ICP1 ;serviceICP1:

;sbic PIND,6 ; sprawdzenie czy przycis k MAN naci śni ęty "Lo" ;rjmp pauseICP1 ; jesli nie, to skok do e ndICP1

;pauseICP1: ;sbis PIND,6 ; sprawdzenie czy przycis k MAN puszczony "Hi" ;rjmp pauseICP1 ; jesli nie, to pauza ;.... ; miejsce na kod

;endICP1: ;ret

; *** Tablica znaków *** ; tablica znaków umieszczona jest w pami ęci programu FLASH pocz ąwszy ; od adresu 0x100 ; - dost ęp: instrukcja lpm wykonuj ąca operacj ę: r0 <- FLASH(Z), ; gdzie 16-bitowy rejestr Z składa si ę z dwóch 8-bitowych rejestrów zh,zl .ORG 0x100 ZNAKI: .db 0x0C0,0x0F9,0x0A4,0x0B0,0x99,0x92,0x82,0x0F8,0x80,0 x90,0x88,0x83,0x0C6,0x0A1,0x86, 0x8E ; Zawarto ść rejestru zl | Kod 7-seg. | Wy świetlany znak na wy świetlaczu 7-seg. ; ------------------------------------------------- --------------------------- ; 0x00 | 0x0C0 | 0 ; 0x01 | 0x0F9 | 1 ; 0x02 | 0x0A4 | 2 ; 0x03 | 0x0B0 | 3 ; 0x04 | 0x099 | 4 ; 0x05 | 0x092 | 5 ; 0x06 | 0x082 | 6 ; 0x07 | 0x0F8 | 7 ; 0x08 | 0x080 | 8 ; 0x09 | 0x090 | 9 ; 0x0A | 0x088 | A ; 0x0B | 0x083 | b ; 0x0C | 0x0C6 | C ; 0x0D | 0x0A1 | d ; 0x0E | 0x086 | E ; 0x0F | 0x08E | F ; ------------------------------------------------- --------------------------- .EXIT

Page 15: LABORATORIUM MIKROKONTROLERY I MIKROSYSTEMY 3zbczaja/pdf/lab_atmega16.pdf · 2015-03-24 · Katedra Metrologii i Optoelektroniki Wydział Elektroniki, Telekomunikacji i Informatyki

14

Ćwiczenie nr 4

Wykorzystanie języka C do pisania programów na mikrokontroler Atmega16 firmy Atmel

I. Literatura (dokumentacja do ćwiczeń laboratoryjnych)

[1] Atmel Corporation, "8-bit Microcontroller with 16K Bytes In-System Programmable Flash. ATmega16 ATmega16L", 2006, plik - Atmega16.pdf.

[2] Generated by Doxygen 1.5.6, " avr-libc 1.6.7", 2010, plik - avr-libc-user-manual.pdf.

[3] Czaja Z., Dudkiewicz P., "Stanowisko laboratoryjne dla mikrokontrolera Atmega16 firmy Atmel", 2013, plik - Zestaw_lab_Atmega16.pdf.

Powyższa dokumentacja znajduje się w katalogu c:\labmik\doc

II. Sprzęt i oprogramowanie

1. Zestaw laboratoryjny mikrokontrolera Atmega16.

2. Programator AVRISP mkII podłączony do portu USB komputera PC.

3. Zasilacz gniazdkowy stabilizowany 9V.

4. Kabel połączeniowy dla standardu interfejsu szeregowego RS232.

5. Oprogramowanie użytkowe na komputer PC:

a) zintegrowane środowisko programistyczne IDE (AVR Studio 4.19 (c:\labmik\ AVRStudio\ AVRStudio4\AvrStudio.exe),

b) program obsługi terminali szeregowych (terminal.exe (c:\labmik\terminal\ terminal.exe)),

c) program Total Commander do zarządzania systemem plików,

d) środowisko programistyczne WinAVR (c:\labmik\WinAVR\pn\pn.exe).

III. Zadania laboratoryjne

1. Przygotowanie stanowiska laboratoryjnego do pracy.

a) sprawdzić czy zestaw laboratoryjny jest podłączony do zasilacza gniazdkowego 9V podłaczonego do listwy zasilającej.

b) sprawdzić czy zestaw laboratoryjny jest podłączony przez programator STK500 do portu USB, a przez kabel RS232 do portu COM komputera PC,

c) uruchomić komputer PC (praca pod Windows XP),

d) uruchomić program do zarządzania systemem plików, np. Total Commander

(ikona na pulpicie ),

Totalcmd.lnk

Page 16: LABORATORIUM MIKROKONTROLERY I MIKROSYSTEMY 3zbczaja/pdf/lab_atmega16.pdf · 2015-03-24 · Katedra Metrologii i Optoelektroniki Wydział Elektroniki, Telekomunikacji i Informatyki

15

e) przejść do katalogu c:\labmik\ i usunąć podkatalog lab4 z całą jego zawartością (rys. 1) (kasowanie katalogu – po zaznaczeniu katalogu lab4 nacisnąć klawisz Delete lub F8),

Rys. 1. Panel programu Total Commander z zaznaczonym katalogiem c:\labmik\lab4

f) rozpakować plik lab4.zip znajdujący się w katalogu C:\labmik\ (zawiera on podkatalog lab4 wraz z jego właściwą zawartością) (rozpakowywanie – w obydwu panelach programu Total Commander musi być wyświetlany katalog c:\labmik . W lewym panelu wejść do pliku lab4.zip (zaznaczyć go i nacisnąć klawisz Enter lub dwa razy kliknąć na nim myszką), po czym zaznaczyć katalog lab4 i nacisnąć klawisz F5 (rys. 2). W prawym panelu pojawi się ten katalog już rozpakowany).

Rys. 2. Panel programu Total Commander z otwartym plikiem lab4.zip

2. Zapoznanie się ze środowiskiem WinAVR dla mikrokontrolera Atmega16 – kompilacja.

a) Przejść do katalogu C:\labmik\lab4\przyk1\ . Przeanalizować plik makefile w dowolnym edytorze tekstowym, np. Notepad (w tym celu w Total Commanderze zaznaczyć ten plik tekstowy, a następnie nacisnąć klawisz F4).

b) Uruchomić Programmer’s Notepad 2 klikając na link c:\labmik\lab4\pn.lnk .

Page 17: LABORATORIUM MIKROKONTROLERY I MIKROSYSTEMY 3zbczaja/pdf/lab_atmega16.pdf · 2015-03-24 · Katedra Metrologii i Optoelektroniki Wydział Elektroniki, Telekomunikacji i Informatyki

16

c) Otworzyć plik przykładu 1 „przyk1”. W tym celu wywołać polecenie File > Open... (Ctrl+O ) i wybrać plik c:\labmik\lab4\przyk1\main.c.

d) Przeanalizować kod programu. Opis składni, instrukcji i funkcji języja C znajduje się w dokumencie [2] avr-libc-user-manual.pdf.

e) Dokonać kompilacji pliku main.c. W tym celu wykonać polecenie Tools > [WinAVR] Make All . Panel programu Programmer’s Notepad 2 powinien wyglądać podobnie jak na rys. 3.

f) Uwaga: polecenie Tools > [WinAVR] Make Clean usuwa pliki wynikowe kompilacji. Jest to przydatne, w przypadku ponownej kompilacji dokonanej po zmianach pliku źródłowego. Mamy wówczas gwarancję, że nasze poprawki znajdą się w pliku wynikowym. Zatem jak chcemy ponownie skompilować nasz plik to należy najpierw wywołać polecenie Tools > [WinAVR] Make Clean, a następnie polecenie [WinAVR] Make All .

Rys. 3. Panel programu Programmer’s Notepad 2

g) Przeanalizować wynik kompilacji. Sprawdzić zawartość katalogu C:\labmik\lab4\ przyk1\. Jakie powstały nowe pliki. Przeanalizować plik main.lss i main.lst zawierające zdekodowany na asembler kod programu main.c (w dowolnym edytorze tekstowym, np. Notepad – w tym celu w Total Commanderze zaznaczyć dany plik

Page 18: LABORATORIUM MIKROKONTROLERY I MIKROSYSTEMY 3zbczaja/pdf/lab_atmega16.pdf · 2015-03-24 · Katedra Metrologii i Optoelektroniki Wydział Elektroniki, Telekomunikacji i Informatyki

17

tekstowy, a następnie nacisnąć klawisz F4 lub w przeglądarce tekstowej Lister po naciśnięciu klawisza F3).

3. Symulacja pracy mikrokontrolera Atmega16 w środowisku AVR Studio 4.

a) Dokonać kompilacji pliku c:\labmik\lab4\porty\main.c postępując zgodnie z punktami od 2. b) do 2. g).

b) Uruchomić AVR Studio 4 klikając na link C:\labmik\lab4\AVRStudio.lnk .

c) Otworzyć drugi przykład „porty ”. W tym celu wywołać polecenie File > Open File (Ctrl-O ) i wybrać C:\labmik\lab4\porty\main.hex.

d) Pojawi się okienko „Save AVR Studio Project File”. Kliknąć na przycisk Zapisz.

e) Następnie ukaże się okienko „Select device and debug platform”. W polu tekstowym “Debug Platform” zaznaczyć AVR Simulator , a w polu “Device” ATmega16, po czym nacisnąć przycisk Finish.

Rys. 4. Okienko wyboru platformy symulacji i danego modelu mikrokontrolera

f) Znajdujemy się już w trybie debagowania (pracy symulatora programowego). Na potrzeby analizy pracy programu wystarczy w prawym okienku „I/O view” otworzyć obiekty przez niego wykorzystywane: PORTA i PORTC, a w lewym okienku rozwinąć listę rejestrów roboczych (rys. 5).

g) W celu prześledzenia pracy programu C:\labmik\lab4\porty\main.hex najlepiej wybrać pracę krokową, wywołując polecenie Debug > Step Into (klawisz F11). Jedno naciśnięcie klawisza F11 powoduje wykonanie jednej instrukcji asemblera oraz modyfikację stanów obiektów w okienku „I/O view”. Przeanalizować całą pracę programu. Na rys. 5 pokazano wygląd panelu programu AVR Studio 4 w trakcie symulacji programu C:\labmik\lab4\porty\main.hex.

Page 19: LABORATORIUM MIKROKONTROLERY I MIKROSYSTEMY 3zbczaja/pdf/lab_atmega16.pdf · 2015-03-24 · Katedra Metrologii i Optoelektroniki Wydział Elektroniki, Telekomunikacji i Informatyki

18

Rys. 5. Panel programu AVR Studio 4 w trakcie symulacji programu przyk1

h) Aby zakończyć symulację wywołuje się polecenie Debug > Stop Debugging

(kombinacja klawiszy Ctrl+Alt+F5 ).

4. Programowanie mikrokontrolera Atmega16 w systemie docelowym.

a) W programie Programmer’s Notepad 2 zamknąć okienka dotyczące przyk1. Następnie otworzyć przykład „porty” .W tym celu wywołać polecenie File > Open... (Ctrl+O ) i wybrać plik C:\labmik\lab4\porty\main.c .

b) Przeanalizować kod programu. Opis składni, instrukcji i funkcji języja C znajduje się w dokumencie [2].

c) Dokonać kompilacji pliku main.c. W tym celu wykonać polecenie Tools > [WinAVR] Make All .

d) Przeanalizować wynik kompilacji. Sprawdzić zawartość katalogu C:\labmik\lab4\ porty\ . Przeanalizować plik main.lss i main.lst zawierające zdekodowany na asembler kod programu main.c w dowolnym edytorze tekstowym (np. w Notepad – w tym celu w Total Commanderze zaznaczyć dany plik tekstowy, a następnie nacisnąć klawisz F4 lub w przeglądarce tekstowej Lister po naciśnięciu klawisza F3). Porównać kod po deasemblacji pliku C:\labmik\lab4\porty\main.lss z plikiem C:\labmik\lab3\ porty.asm. Czym się różnią?

e) Dokonać symulacji przykładu C:\labmik\lab4\porty\main.hex w AVR Studio 4. Postępować tak, jak w punktach od 3a) do 3f).

Page 20: LABORATORIUM MIKROKONTROLERY I MIKROSYSTEMY 3zbczaja/pdf/lab_atmega16.pdf · 2015-03-24 · Katedra Metrologii i Optoelektroniki Wydział Elektroniki, Telekomunikacji i Informatyki

19

f) Po przeanalizowaniu pracy programu „porty ” zakończyć symulację wywołując polecenie Debug > Stop Debugging (kombinacja klawiszy Ctrl+Alt+F5 ).

g) Sprawdzić, czy płytka laboratoryjna jest włączona (świeci się dioda LED 11) – przełącznik SW1 w pozycji ON [3].

h) Uwaga: Jeżeli chcemy zaprogramować mikrokontroler dopiero co po uruchomieniu programu AVR Studio 4, to najpierw musimy utworzyć projekt według punktów 3b) c) d), a następnie zakończyć symulację punkt 3g). Jest to konieczne, ponieważ oprogramowanie musi wiedzieć jaki wybraliśmy mikrokontroler. W naszym przypadku wybieramy ATmega16 (rys. 4).

i) Przejść do programowania. W tym celu wywołać polecenie Tools > Program AVR >Connect.

j) Pojawi się okienko „Select AVR Programmer”. W polu „Platform” wybrać AVRISP mkII , a w polu „Port” USB, następnie nacisnąć przycisk Connect.

k) Na ekranie ukaże się okienko obsługi programatora AVRISP mkII (rys. 6). Wybrać zakładkę „Program”. W polu „Device”, tak jak na rys. 6, obie opcje muszą być zaznaczone.

l) W polu „Flash” tego okna nacisnąć przycisk ... i wybrać plik C:\labmik\lab4\porty\ main.hex, a następnie nacisnąć przycisk Program.

m) Po proprawnym zaprogramowaniu mikrokontrolera można zamknąć okienko (w dolnym polu okienka powinny być takie same komunikaty jak na rys. 6).

n) Przeanalizować pracę programu C:\labmik\lab4\porty\main.c w systemie docelowym. Zwrócić uwagę na: przełączniki DIP8, diody LED1-8, przycisk INT0 i wyświetlacz 7-mio segmentowy.

Rys. 6. Okno obsługi programatora AVRISP mkII

Page 21: LABORATORIUM MIKROKONTROLERY I MIKROSYSTEMY 3zbczaja/pdf/lab_atmega16.pdf · 2015-03-24 · Katedra Metrologii i Optoelektroniki Wydział Elektroniki, Telekomunikacji i Informatyki

20

5. Zapoznać się z obsługą w języku C przetwornika A/C i komparatora analogowego mikrokontrolera.

a) w tym celu przeanalizować kod programu C:\labmik\lab4\adc\main.c, korzystać z dokumentacji [1-3]. Do czego służą potencjometry P1 i P2 oraz P4 w tym programie?

b) dokonać jego kompilacji oraz zaprogramować mikrokontroler,

c) przeanalizować pracę programu w systemie docelowym (opis obsługi płytki laboratoryjnej pracującej zgodnie z tym programem znajduje się w komentarzach kodu programu).

6 Komunikacja zestawu laboratoryjnego z komputerem PC za pośrednictwem interfejsu

szeregowego RS232.

a) przeanalizować kod programu C:\labmik\lab4\rs232\main.c korzystając z dokumentacji [1-3] – jak wysyła i odbiera się dane w programie? Czy są jakieś różnice w obsłudze interfejsu względem programu rs232.asm z ćwiczenia nr 3?

b) dokonać jego kompilacji, po czym zaprogramować mikrokontroler,

c) przeanalizować pracę programu C:\labmik\lab4\rs232\main.c w systemie docelowym (obsługa zestawu laboratoryjnego znajduje się w komentarzach do kodu tego programu). Na komputerze PC uruchomić program terminal.exe do komunikacji z urządzeniami dołączonymi do portów COM (c:\labmik\terminal\terminal.exe). W celu skonfigurowania terminala wywołać okienko „Parametry transmisji” przez Połączenie->Linia.... Powinno być ustawione: Port Com1 lub Com2 (w zależności od stanowiska laboratoryjnego), Bitów na sekundę 9600, Bity danych 8, Parzystość Brak , Bity stopu 1, kontrola transmisji Brak (rys. 7).

Rys. 7. Okno programu terminal.exe

7 Program demonstracyjny dla zestawu laboratoryjnego ATmega16.

a) przeanalizować kod programu C:\labmik\lab4\demo\main.c korzystając z dokumentacji [1-3]. Co będzie realizował ten program?

b) dokonać jego kompilacji, po czym zaprogramować mikrokontroler,

c) przeanalizować pracę tego programu w systemie docelowym.

8 Napisać kod źródłowy własnego programu pracującego zgodnie z zaleceniami

prowadzącego laboratorium i uruchomić go (zadanie dodatkowe nieobowiązkowe przeznaczone dla studentów wykonujących laboratorium z Mikrosterowników i mikrosystemów rozproszonych).

Page 22: LABORATORIUM MIKROKONTROLERY I MIKROSYSTEMY 3zbczaja/pdf/lab_atmega16.pdf · 2015-03-24 · Katedra Metrologii i Optoelektroniki Wydział Elektroniki, Telekomunikacji i Informatyki

21

IV. Listingi programów 1. Program przyk1.c /* Przyklad pierwszy - przeznaczony do nauki symu lacji pracy ATmega16 w środowisku AVRStudio */ /* Laboratorium: Mikrokontrolery i mikrosystemy o raz Mikrosterowniki i mikrosystemy rozproszone */ /* Dokumentacja techniczna do ćwiczenia laboratoryjnego: [1] - Atmel Corporation, "8-bit Microcontroller wi th 16K Bytes In-System Programmable Flash. ATmega16 ATmega16L", 200 6, plik - Atmega16.pdf. [2] - Generated by Doxygen 1.5.6, " avr-libc 1.6.7 ", 2010, plik - avr-libc-user-manual.pdf. [3] - Czaja Z., Dudkiewicz P., "Stanowisko laborat oryjne dla mikrokontrolera Atmega16 firmy Atmel", 2013, plik - Zestaw_l ab_Atmega16.pdf Definicje niestandardowych funkcji sbi() i cbi() w pliku sfr_defs.h #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit) ) #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit ) ) */ #include <avr/io.h> void avr_init(void); // prototyp funkcji unsigned char licznik; // deklaracja zmiennej globalnej int main(void) { // procedura inicjalizacji po resecie i wł ączeniu zasilania avr_init(); // *** Program główny (głowna p ętla programu) *** while(1) { PORTC = licznik; // wystawienie stanu li cznika sbi (PORTA,3); // aktywacja wyj ść zatrzasku U5 cbi (PORTA,3); // zatrza śni ęcie wyj ść układu U5 licznik--; // zmniejszenie licznika o 1 } // ********************************************* return(0); } /* *********** Blok funkcji *********** */ void avr_init(void) { /* inicjalizacja układu */ DDRA = 0b11111100; // kierunek I/O, 0-we j ście 1-wyj ście PORTA = 0b00000100; // ustawienie stanu w ysokiego na PA2 DDRC = 0xFF; PORTC = licznik; // stan wysoki na porcie C w celu wygaszenia // diod /* wygaszenie diod przy resecie */ licznik = 0xFF; // inicjalizacja licznika sbi (PORTA,4); // aktywacja wyj ść zatrzasku U6 cbi (PORTA,4); // zatrza śni ęcie wyj ść układu U6 return; }

Page 23: LABORATORIUM MIKROKONTROLERY I MIKROSYSTEMY 3zbczaja/pdf/lab_atmega16.pdf · 2015-03-24 · Katedra Metrologii i Optoelektroniki Wydział Elektroniki, Telekomunikacji i Informatyki

22

2. Program porty.c /* Przyklad drugi - sterowanie portami ATmega16 */ /* Laboratorium: Mikrokontrolery i mikrosystemy o raz Mikrosterowniki i mikrosystemy rozproszone */ /* Dokumentacja techniczna do ćwiczenia laboratoryjnego: [1] - Atmel Corporation, "8-bit Microcontroller wi th 16K Bytes In-System Programmable Flash. ATmega16 ATmega16L", 200 6, plik - Atmega16.pdf. [2] - Generated by Doxygen 1.5.6, " avr-libc 1.6.7 ", 2010, plik - avr-libc-user-manual.pdf. [3] - Czaja Z., Dudkiewicz P., "Stanowisko laborat oryjne dla mikrokontrolera Atmega16 firmy Atmel", 2013, plik - Zestaw_l ab_Atmega16.pdf Definicje niestandardowych funkcji sbi() i cbi() w pliku sfr_defs.h #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit) ) #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit ) ) Uwaga: - zakomentowane linie z instrukcjami to dod atkowe przykłady prezentuj ące obsług ę urz ądze ń peryferyjnych mikrokontrolera NIE NALE ŻY ICH ODKOMENTOWYWAĆ */ #include <avr/io.h> #include <avr/signal.h> #include <avr/interrupt.h> typedef unsigned char uint8_t; // definicja bajta uint8_t dana,counter,wynik; /* *** Tablica znaków dla wyswietlacza 7-segmentowe go *** */ const uint8_t buf[16]={0x0C0,0x0F9,0x0A4,0x0B0,0x99,0x92,0x82,0x0 F8,0x80,0x90,0x88,0x83,0x0C6,0x0A1,0x86,0x8E}; /* prototypy funkcji */ void avr_init(void); void SetLedBar(uint8_t); void Set7Segm(uint8_t); uint8_t ReadDip(void); //void serviceMAN(void); //void serviceICP1(void); /* *** deklaracje i obsługi przerwa ń *** */ SIGNAL (SIG_INTERRUPT0) /* obsługa przerwania zewn ętrznego INT0 */ { counter++; counter &= 0x0F; loop_until_bit_is_set(PIND,2); // czekaj na puszczenie klawisza INT0 wynik = buf[counter]; // konwersja na kod wys. 7-seg. Set7Segm(wynik); // wyswietl dana na wysw . 7-seg. } /* SIGNAL (SIG_INTERRUPT1) // obsługa przerwania zewn ętrznego INT1 { loop_until_bit_is_set(PIND,3); // czekaj na puszczenie klawisza INT1 // ...; // kod obsługi przerwania } */

Page 24: LABORATORIUM MIKROKONTROLERY I MIKROSYSTEMY 3zbczaja/pdf/lab_atmega16.pdf · 2015-03-24 · Katedra Metrologii i Optoelektroniki Wydział Elektroniki, Telekomunikacji i Informatyki

23

/* *** program glowny *** */ int main(void) { // procedura inicjalizacji po resecie i wł ączeniu zasilania avr_init(); // *** Program główny (głowna p ętla programu) *** while(1) { dana = ReadDip(); // odczyt przelaczni kow DIP8 SetLedBar(dana); // wyswietlenie stanu DIP8 na linijce LED //serviceMAN(); // sprawdzenie stanu p rzycisku MAN //serviceICP1(); // sprawdzenie stanu przycisku ICP1 } // ********************************************* return(0); } /* *********** Blok funkcji *********** */ void avr_init(void) { /* inicjalizacja układu */ DDRA = 0b11111100; // kierunek I/O, 0-wej ście 1-wyj ście PORTA = 0b00000100; // ustawienie stanu wy sokiego na PA2 DDRC = 0xFF; DDRB = 0x00; DDRD = 0x02; // TxD wyjscie /* wygaszenie diod przy resecie */ PORTC = 0xFF; // stan wysoki na C w celu wygaszenia diod sbi (PORTA,4); // aktywacja wyj ść zatrzasku U6 cbi (PORTA,4); // zatrza śni ęcie wyj ść układu U6 MCUCR = 0x0A; // przerwanie na zbocze opa dajace GICR = 0x40; // odblokowanie INT0 //GICR = 0xC0; // odblokowanie INT0 i IN T1 sei(); // globalne odblokowanie przerwa ń return; } void SetLedBar(uint8_t bajt) { /* wysterowanie linijki diod led */ PORTC = bajt; // wystawienie zmiennej na p ort sbi (PORTA,3); cbi (PORTA,3); // zatrza śni ęcie wyj ścia układu U5 return; } void Set7Segm(uint8_t bajt) { /* wysterowanie wy świetlacza 7 segmentowego */ PORTC = bajt; sbi (PORTA,4); cbi (PORTA,4); // zatrza śni ęcie wyj ścia układu U6 return; }

Page 25: LABORATORIUM MIKROKONTROLERY I MIKROSYSTEMY 3zbczaja/pdf/lab_atmega16.pdf · 2015-03-24 · Katedra Metrologii i Optoelektroniki Wydział Elektroniki, Telekomunikacji i Informatyki

24

uint8_t ReadDip(void) { /* funkcja odczytuje stan przełaczników DIP8 */ uint8_t bajt; cli(); // blokada przerwan DDRC = 0x00; // kierunek IO: wejscia cbi (PORTA,2); // uaktywnienie bufora U4 (o d DIP8) bajt = PINC; // próbny odczyt (w celu 1 cy klu opoznienia) bajt = PINC; // odczyt z pinów stanu przeł ączników sbi (PORTA,2); // wylaczenie ukladu U4 (od DIP8) DDRC = 0xFF; // kierunek IO: wyjscia sei(); // globalne odblokowanie przerwa ń return bajt; } /* void serviceMAN(void) { // odczyt stanu klawisza MAN if bit_is_clear(PINB,0) // testowanie klawi sza MAN - gdy naci śni ęty // to jest s tan niski { loop_until_bit_is_set(PINB,0); // oczekiwanie na puszczenie klawisza MAN // ...; // kod funkcji return; } } void serviceICP1(void) { // odczyt stanu klawisza ICP1 if bit_is_clear(PIND,6) // testowanie klawi sza ICP1 - gdy naci śni ęty // to jest s tan niski { loop_until_bit_is_set(PIND,6); // oczekiwanie na puszczenie klawisza ICP1 // ...; // kod funkcji return; } } */