Politechnika Wrocławska
Laboratorium
podstaw techniki mikroprocesorowej
Sprawozdanie nr 1.
Grupa nr1:
Tarnowski Ireneusz
Świątek Bartłomiej
Wrocław 1999r.Wiadomości wstępne
Mikrokontroler 80535 jest stosunkowo prostym i tanim lecz bardzo użytecznym w wielu zastosowaniach ( szczególnie przemysłowych, gdzie doskonale spełnia rolę urządzenia kontrolującego i sterującego pracą różnych zewnętrznych urządzeń i układów).
Ogólnie rzecz biorąc 80535 składa się z :
ü arytmometra ( 8-bitowa jednostka arytmetyczno-logiczna , wewnętrzne rejestry, dekoder rozkazów);
ü pamięci danych ( 256 bajtów, przy czym komórki o adresach 128..255 dostępne są tylko w rejestrowym pośrednim trybie adresowania);
ü blok rejestrów specjalnych ( 42 rejestry );
ü pamięci programu ( ROM lub EPROM ) – pamięć programu jest rozdzielona od pamięci danych w celach bezpieczeństwa, bowiem układ 80535 pracuje zwykle jako kontroler urządzeń zewnętrznych i wysoce niewskazane byłoby „zamazywanie” kodu programu w czasie pracy tego urządzenia (co może mieć miejsce np. w typowych PC );
ü programowalne układy czasowe , liczniki;
ü układów I/O : sześć programowalnych 8-bitowych portów równoległych, które mogą służyć również do transmisji szeregowej, czy jako linie adresowe zewnętrznej pamięci ;
ü układu transmisji szeregowej (duplex, własny licznik, Synch/Asynch )
ü układu przerwań (12 źródeł przerwań w tym 7 zgłaszanych sygnałami zewnętrznymi);
ü generatora sygnałów taktujących i sterowania ( cykl maszynowy trwa 12 cykli zegarowych );
ü przetwornika A\D ( 8-bitów );
ü watchdog ( 16-bitowy licznik nadzorujący poprawną pracę programu );
ü układ redukcji mocy;
Sterownik ZD-535 zbudowany na bazie tego mikrokontrolera współpracuje bezpośrednio z komputerem PC poprzez port szeregowy i odpowiedni program nadzorujący.
Mikrokontroler 80535 jako, iż jest swego rodzaju maszyną liczącą akceptuje jedynie tzw. język maszynowy, język który jest zbiorem numerycznych rozkazów „rozumianych” przez mikrokontroler. Ze względu na to, iż posługiwanie się tym językiem przez programistę jest wysoce niewygodne, dlatego stosujemy dla uproszczenia pisania programów dla mikroprocesorów „asembler”, język niskiego poziomu pozwalający w pełni i w bardziej elastyczny sposób wykorzystać możliwości mikroprocesora.
Jednocześnie program asembler ułatwia pisanie programów poprzez:
· operowanie mnemonikami zamiast numerycznymi rozkazami,
· możliwość zastosowania etykiet, które asembler automatycznie kojarzy z określoną komórką pamięci,
· zastosowanie dyrektyw asemblerowych,
Za pomocą dyrektyw asemblera można:
· deklarować zarezerwowanych bajtów w pamięci wykorzystywane w programie (dyrektywy DB, DW,DD),
· umieszczać program w odpowiednim miejscu pamięci (dyrektywa ORG nn),
· inicjować symbole predefiniowane dla mikrokontrolera oraz zestawu dyrektywą $LAB535.INC
· deklarować stałe dyrektywą EQU nn
Po napisaniu programu w asemblerze otrzymujemy plik tekstowy o rozszerzeniu *.S03. Taki tekstowy plik jest dopiero kompilowany przez asembler i linkowany (łączone są poszczególne, np. skompilowane wcześniej, bloki i przygotowane do umieszczenia w pamięci programu mikrokontrolera). Po skompilowaniu programu przez asembler i zlinkowaniu przez linker otrzymujemy kod maszynowy programu w postaci cyfr heksadecymalnych, umieszczonych w pliku o rozszerzeniu *.HEX. Taki program jest przesyłany złączem szeregowym do pamięci kontrolera i tam dopiero jest on uruchamiany. Całość transmisji i pracy programu jest nadzorowana przez program monitora, który to z punktu widzenia programisty widziany jest tylko po stronie komputera PC, natomiast część monitora znajdująca się w sterowniku jest niewidoczna dla użytkownika (przynajmniej na początkowym etapie pisania programów).
Program pisany w asemblerze dla tego urządzenia może zawierać następujące segmenty:
ü segment kodu (wymagany) – CODE
ü segment danych – DATA
ü segment danych – IDATA
Lista instrukcji asemblerowych obejmuje 111 pozycji, które można podzielić na:
ü operacje arytmetyczne
ü logiczne
ü przesłania
ü zmiany sterowania
Oprócz akumulatora oraz rejestrów związanych z arytmometrem istnieje 8 rejestrów ogólnego przeznaczenie R0..R7. Istnieją 4 bloki takich rejestrów, ale tylko jeden może być aktywny.
Zestaw 80535 znajdujący się w laboratorium daje użytkownikowi do dyspozycji następujące tryby adresowe:
1. rejestrowy : MOV R0,A adresem jest tu numer (nazwa) rejestru
2. rejestrowy pośredni : MOV @R0,Aadresem argumentu jest zawartość rejestru
3. bezpośredni : MOV A,01Hadres argumentu stanowi drugi lub drugi i trzeci bajt rozkazu
4. natychmiastowy : MOV A,#0argument znajduje się w drugim lub w trzecim bajcie rozkazu
5. indeksowy : MOV X A,@DPTRwzględem rejestru adresowego DPTR
Uproszczona mapa pamięci 80535 z zestawu laboratoryjnego
External Data Memory
RAM
2 kB
External Code Memory
EPROM
8 kB
Internal RAM
Indirect
128 byte
Direct
32 kB
Zewnętrzna pamięć podzielona jest na pamięć danych i programu. Pamięć programu składa się z 8kB EPROM, w której znajduje się program monitora (jego część pracująca w ZD535) oraz 31kB RAM, do której przegrywany jest program użytkownika. Wielkość pamięci danych wynosi 2kB.
Bardzo ogólna mapa pamięci danych zestawu ZD535:
0000
-
07FF
pamięć dostępna dla użytkownika
8000
87FF
klawiatura
8800
8FFF
LCD
9000
9FFF
I/O dwustanowe oraz wyjścia analogowe
C000
C7FF
RS232 służący do komunikacji z PC
Pamięć programu użytkownika zawiera się w adresach: 0000-DFFF;
Adresy E000-FFFF są zajmowane przez program monitora. Należy dodać, że ostatnie 256 bajtów pamięci danych dostępnej dla użytkownika zarezerwowane jest dla programu monitora.
Przebieg ćwiczenia :
Naszym zadaniem podczas ćwiczenia było odpowiednia modyfikacja programuTest535.S03 napisanego w asemblerze „Archimedes”, aby kontroler zadziałał w zadany przez prowadzącego sposób.
Zadanie1. Wyświetlenie w odpowiednim miejscu wyświetlacza dowolnego tekstu.
Listing programu :
$lab535.inc
;inicjuje identyfikatory predwefiniowane dla 8051
RSEG CODE
CALL INIT_LCD_C
;wywołanie procedury inicjującej wyświetlacz
CALL LCD_C_OFF
;wywołanie procedury czyszczącej wyświetlacz
MOV A,#12H
;załadowanie wartości 12h do akumulatora
;(pozycja kursora)
CALL GOTO_X_Y
;wywołanie procedury ustalającej pozycję kursora na wyświe;tlaczu.
MOV DPTR, #TEXT
;załadowanie adresu tekstu do rejestru DPTR
CALL LCD_STR_PUT
;wywołanie procedury wyświetlającej tekst na wyświetlaczu.
CALL RETURN
TEXT: DB 'LCD $'
Zarezerwowanie pamięci dla tekstu
END
Zadanie2. Opóźnienie o ustalony odcinek czasu działania dalszej części programu.
(pętla opóźniająca).
Delay: MOV R7,#14H
;Załadowanie wartości 14h do rejestru R7
Dly1: MOV R5,#FFH
;załadowanie wartości FFh do rejestru R5
Dly2: MOV R6,#FFH
;załadowanie wartości FFh do rejestru R6
; CPL BUZZER
;make sound – nieaktywny
DJNZ R6,$
;dekrementacja i skok do tej samej linii jeśli nie 0 trwa ;382,5ms
DJNZ R5,dly1
;dekrementacja i skok do linii o etykiecie dly1 jeśli nie 0
;trwa 385,5*255=98302,5ms ~ 100000
...
mistrzcater