PTM1.DOC

(40 KB) Pobierz
PODSTAWY TECHNIKI MIKROPROCESOROWEJ

 

Podstawy Techniki Mikroprocesorowej

Laboratorium

 

 

 

 

 

Ćwiczenie nr 1

 

 

 

              Temat: PROGRAMOWANIE MIKROKONTROLERA 80535.

 

 

 

 

 

 

 

Wykonali:               1. Piotr Jeziorski

              2. Grzegorz Kałużny

 

 

Kierunek:              informatyka                                                         Rok studiów: II

 

 

 

 

 

Prowadzący:                             mgr Marcin Biliński

 

 

 

 

 

 

 

 

 

 

 

 

1.                Wprowadzenie.

 

              Mikrokontroler MCS-51 należy do rodziny 8-bitowych mikrokomputerów jednoukładowych. Mikrokomputery takie mają szerokie zastosowanie w przemyśle, np. w układach: automatyki, pomiarowych, sterujących itp.

Głównymi cechami architektury MCS-51 są:

·      duża ilość linii I\O, wielopoziomowe układy przerwań, układ transmisji szeregowej, wewnętrzna pamięć danych i programu, programowalne układu czasowe, układ regulacji poboru mocy, przetworniki A\D, D\A

·      możliwość dołączenia (do 64KB) zewnętrznej pamięci danych i programu

·      prawie jednolita, taka sama dla wszystkich mikrokontrolerów z rodziny, lista rozkazów

Wszystkie mikrokontrolery rodziny MCS-51 są całkowicie zgodne z mikrokontrolerem 8051.

 

              Zestaw laboratoryjny ZD535 jest emulatorem mikrokontrolera 80535. Oznacza to, że instrukcje wykonywane są bezpośrednio na mikrokontrolerze 80535, a nie symulowane w pamięci komputera PC, który jest  podłączony za pomocą RS do zestawu ZD535. Współpraca komputera PC z modułem laboratoryjnym polega na tym, że zbiór instrukcji programu przesyłany jest z PC do pamięci ZD535 i uruchamiany. Zawartość pamięci i rejestrów ZD535 jest przesyłana z powrotem do PC, gdzie jest dostępna dla użytkownika.

W skład zestaw laboratoryjnego wchodzi:

·      wyświetlacz LCD

·      8 przełączników

·      klawiatura (16 przycisków)

·      przetwornik D\A

·      8 diod LED

·      zewnętrzny generator NE555

·      przetwornik akustyczny (buzzer)

·      dodatkowe diody i potencjometry oraz inne dodatki

 

Zewnętrzna pamięć ZD535 podzielona jest na pamięć danych i programu. Pamięć programu składa się z 8KB EPROM, w której znajduje się program monitora oraz 32KB RAM, do której przegrywany jest program użytkownika. Wielkość pamięci danych wynosi 2KB.

 

Do  kompilacji programów służy program „Archimedes”. Umożliwia on:

·      kompilację programów do postaci object;

·      linkowanie programów w postaci object do postaci binarnej;

·      debugowania i monitorowania programów przy pomocy monitora.

Kod programu można napisać w dowolnym edytorze tekstowym, a następnie poddać go kompilacji.

 

2.               
Realizacja podstawowych funkcji zestawu laboratoryjnego.

 

              Celem ćwiczenia było poznanie podstawowych rozkazów asemblera, używania mnemoników oraz sposobu korzystania z zestawu laboratoryjnego ZD535.

 

2.1             Wyświetlenie komunikatu na wyświetlaczu LCD.

              Przed umieszczeniem tekstu na wyświetlaczu należy wykonać procedury inicjujące LCD. Aby umieścić tekst na zadanej pozycji, należy za pomocą rozkazu MOV umieścić w akumulatorze wartość określającą położenie kursora: 0..15 - górny wiersz, 16..31 - dolny wiersz. Polecenie DB umieszcza w kolejnych bajtach pamięci programu, począwszy od adresu określonego etykietą TEXT, kody ASCII tekstu, który ma być wyświetlony na LCD. Adres ten jest przekazywany do 16-bitowego rejestru specjalnego DPTR za pomocą rozkazu MOV. W ostatnim kroku rozkaz CALL wywołuje procedurę umieszczającą tekst na wyświetlaczu.

 

Program:

 

CALL              INIT_LCD_C                              ; inicjacja wyświetlacza LCD

CALL              LCD_C_OFF                           

MOV              A,#3H                                          ; wpisz do akumulatora wartości 3hex

CALL              GOTO_X_Y                            ; ustaw kursor w pozycji podanej w akumulatorze (4 pozycja

; w pierwszym wierszu)

MOV              DPTR, #TEXT                            ; wpisz do DPTR wskaźnik adresu TEXT

CALL              LCD_STR_PUT              ; wyświetl komunikat na LCD

 

TEXT:              DB  'Czesc na LCD  $'              ; do adresu określonego etykietą TEXT umieść kody ASCII tekstu

                                                        ; znajdującego się między apostrofami

 

2.2             Procedura wprowadzająca opóźnienie

 

              Wprowadzenie opóźnienia można zrealizować przez dodanie dodatkowej pętli. Większość rozkazów mikrokontrolera rodziny MCS-51 wykonuje się w czasie 1µs. DJNZ ma dwa cykle maszynowe więc czas jego trwania wyniesie 2µs. Konstruując pętle, które wykonują pewną liczbę rozkazów, można wprowadzać opóźnienia do programu. W naszym przypadku wykonywane są trzy pętle. Pętla zaczynająca się etykietą:

·       delay wykonuje się 15 razy

·       dly1 wykonuje się 255 razy

·       dly2 wykonuje się 255 razy

Wymnożenie wszystkich tych wartości: 15*255*255*1ms daje opóźnienie ok. 2 s.

 

Program:

 

delay:              MOV              R7,#0FH              ; wpisz do rejestru R7 stałą 0Fhex

dly1:              MOV              R5,#00H              ; wpisz do rejestru R5 stałą 00hex

dly2:              MOV              R6,#00H              ; wpisz do rejestru R6 stałą 00hex

;              CPL              BUZZER                    ; Make sound - rozkaz nie aktywny

DJNZ              R6,$                            ; zmniejsz R6 o jeden, wykonuj dopóki R6 ¹ 0

DJNZ              R5,dly2                            ; zmniejsz R5 o jeden, jeśli R6 ¹ 0 i skocz do adresu wskazywanego

; przez etykietę dly2

DJNZ              R7,dly1                            ; zmniejsz R7 o jeden, jeśli R7 ¹ 0 i skocz do dly1

RET                                          ; wróć do miejsca wywołania procedury rozkazem CALL

 

2.3             Odczytanie stanu przełączników i określenie stanu diod LED

 

              Stan przełączników zapisany jest pod adresem oznaczonym etykietą SWTCH. Za pomocą rozkazu MOVX pobierana jest do akumulatora wartość komórki zewnętrznej pamięci danych  wskazywanej przez DPTR, w której zapisany jest adres stanu przełączników. Następnie stan przełączników, pamiętany w akumulatorze, zapisywany jest w zewnętrznej pamięci danych do adresu wskazywanego przez DPTR. Stan przełączników i diod LED pamiętany jest w komórce pamięci o takim samym adresie, dlatego podczas odczytu wartości z tej komórki otrzymujemy stan przełączników, a przy zapisie do tej komórki ustawiamy diody LED.

 

Program:

 

MOV              DPTR,#SWTCH               ; do DPTR wpisz adres przełączników SWITCH

MOVX              A,@DPTR                                 ; do akumulatora wpisz stan przełączników

; MOV              R3,A                                          ; do rejestru R3 wpisz zawartość akumulatora - nie aktywny

; MOV              A,P5                                          ; do akumulatora wpisz wartość portu P5 - nie aktywny

MOVX              @DPTR,A                            ; wpisz stan przełączników do komórki wskazywanej przez DPTR,

; ustaw stan diod LED

MOV              A,R3                                          ; do akumulatora wpisz zawartość rejestru R3

 

2.4             Sprawdzenie naciśnięcia klawisza i wyświetlenie informacji na LCD

 

              Stan klawiszy klawiatury pamiętany jest pod dwoma adresami. Pierwsze dwa rzędy klawiatury pamiętane są pod adresem KEYB0, a dwa następne pod adresem KEYB1. Za pomocą rozkazu MOV do DPTR zapisywany jest adres KEYB0 lub KEYB1. Rozkazem MOVX z zewnętrznej pamięci danych, do akumulatora wpisywana jest wartość komórki wskazywanej przez DPTR. Wartość akumulatora kopiowana jest do rejestru B. Do akumulatora zapisywana jest pozycja kursora, a następnie wykonywana jest procedura ustawienia kursora na zadanej pozycji. Dwa następne rozkazy wyświetlają znak zapisany w akumulatorze na wyświetlaczu LCD. Taki algorytm sprawdzana jest stan klawiszy pierwszej i drugiej części klawiatury.

 

Program:

 

KLAW:              MOV              DPTR,#KEYB0                             ; do rejestru DPTR wpisz adres pierwszych dwóch rzędów

                                                                      ; klawiszy

MOVX              A,@DPTR                            ; do akumulatora wpisz wartość wskazywaną przez DPTR

MOV              B,A                                          ; do rejestru B wpisz zawartość akumulatora

MOV              A,#0H                                          ; do akumulatora wpisz stałą 0 - pozycja kursora na LCD

CALL              GOTO_X_Y                            ; ustaw kursor na zadanej pozycji

MOV              A,B                                          ; do akumulatora wpisz zawartość rejestru B

                    CALL              LCD_CH_OUT                            ; wyślij znak z akumulatora na LCD

             

MOV              DPTR,#KEYB1                             ; do rejestru DPTR wpisz adres 3 i 4 rzędu klawiszy

MOVX              A,@DPTR                            ; do akumulatora wpisz wartość wskazywaną przez DPTR

MOV              B,A                                          ; do rejestru B wpisz zawartość akumulatora

MOV              A,#10H                                          ; do akumulatora wpisz stałą 10hex - pozycja kursora na LCD

CALL              GOTO_X_Y                            ; ustaw kursor na zadanej pozycji

MOV              A,B                                          ; do akumulatora wpisz zawartość rejestru B

                    CALL              LCD_CH_OUT                            ; wyślij znak z akumulatora na LCD

JMP              KLAW                                          ; skocz do adresu wskazywanego przez etykietę KLAW

 

3.                Wnioski.

 

              Zastosowanie mikrokontrolerów rodziny MCS-51 jest bardzo wszechstronne, ponieważ dzięki odpowiedniemu oprogramowaniu daje on możliwość wykonywania wielu różnorodnych zadań. Zadania te zależą oczywiście od układu, z którym mikrokontroler współpracuje.

              Program dla mikrokontrolera pisze się w asemblerze używając mnemoników, które określają odpowiedni rozkaz. Dzięki temu tekst program jest bardziej przejrzysty i zrozumiały. Komponując rozkazy według algorytmów działania zlecamy mikrokontrolerowi wykonanie odpowiednich zadań lub procesów, np.: wyświetlenie tekstu na wyświetlaczu LCD, zapalenie diody, obsługę klawiatury. Algortymy powinno się optymalizować, aby dane zadanie lub proces wykonał się jak najszybciej. Należy więc pisać program wykonujący jak najmniej rozkazów, ponieważ każdy rozkaz wykonuje się w czasie 1µs lub 2µs, co przy bardzo rozbudowanej liście rozkazów może spowalniać działanie mikrokontrolera.

Zgłoś jeśli naruszono regulamin