Technika cyfrowa
Laboratorium
Temat: Pamięci mikrokontrolera
Paweł Wańtowski 7.III.2006, Wrocław
Grzegorz Smychowski
Zadania do wykonania
Zadanie 1.
Celem zadania jest napisanie programu, alokowanego w pamięci CODE (począwszy od adresu 0000h), który utworzy 6-elementową tablicę TAB1 również w pamięci CODE (począwszy od pierwszego wolnego adresu poza obszarem zajmowanym przez program), a następnie wykona na niej określone operacje kopiowania. Pierwszą z tych operacji jest skopiowanie tablicy TAB1 do tablicy TAB2 tworzonej w pamięci IRAM, umieszczonej w zakresie adresacji pomiędzy 00h a 7Fh (ze względu na to, iż adresy od 80h do FFh są zarezerwowane dla rejestrów funkcji specjalnych SFR, tablica TAB2 musi być umieszczona pomiędzy 00h a 7Fh, czyli w obszarze pierwszych 128 z 256 bajtów pamięci IRAM). Operacja ta wykorzystuje polecenie MOV, zaś odwołanie do obszaru adresowego pamięci IRAM ma postać D:0xXX. Drugą operacją jest skopiowanie tablicy TAB1 do tablicy TAB3 tworzonej w pamięci XRAM; operacja ta wykorzystuje polecenie MOVC zaś odwołanie do obszaru adresowego pamięci XRAM ma postać X:0xXXXX. TAB3 będzie się zatem znajdować w obszarze pamięci o zakresie adresacji od 0000h do FFFFh (czyli będzie mieścić się pomiędzy bajtem 0 a 65535, gdyż pamięć XRAM ma pojemność 64 kilobajty). Trzecią, ostatnią operacją jest skopiowanie tablicy TAB2 (znajdującej się w pamięci IRAM) do tablicy TAB4, tworzonej w pamięci XRAM. Wykorzystuje się do tego celu polecenie MOVX. Tablica TAB1 będzie tworzona poleceniem DB (definiowanie jednego bajtu na każdy element tablicy) i będzie mieć postać TAB1: 1, 3, 2, 9, 0, 2.
Zadanie 2.
Zadanie to polega na wykonaniu na tablicy TAB3 takich operacji arytmetycznych, które spowodują zmianę jej zawartości z 1, 3, 2, 9, 0, 2 na 1, 3, 2, 8, 3, 3, a następnie zapisanie zmienionej tablicy w tablicy TAB5, znajdującej się również w pamięci XRAM. Posłuży do tego polecenie MOVX oraz odwołanie do obszaru adresowego postaci X:0xXXXX.
Zadanie 3.
Celem zadania jest utworzenie programu dokonującego konwersji liczb z naturalnego kodu binarnego na BCD. Ma to na celu ułatwienie odczytu wartości liczbowych z wyświetlacza LCD.
Opis realizacji
ad. Zadanie 1.
Realizacja założeń zadania powiodła się. Wykorzystanie poleceń MOV oraz MOVC pozwoliło na utworzenie tablic w określonych rodzajach pamięci mikrokontrolera. Nieodzowne okazało się wykorzystania etykiet w celu utworzenia pętli inkrementujących wartości R0 i DPTR. Wykorzystanie pętli pozwala na kopiowanie bloku danych do różnych obszarów pamięci. Schemat blokowy programu został umieszczony na stronie 3.
ad. Zadanie 2
Schemat blokowy programu został umieszczony na stronie 3.
ad. Zadanie 3
Poprawność wykonania tego zadania, określonego jako zadanie domowe, z powodu braku makiety nie mogła zostać doświadczalnie potwierdzona. Niemniej jednak w celu możliwości sprawdzenia na laboratorium przygotowany został program dokonujący konwersji z systemu dziesiętnego na BCD. Program zakłada korzystanie z tablic utworzonych w poprzednich zadaniach, a istotny fragment listingu umieszczony jest poniżej,
MOV R1,#60H ;adres zrodlowej tablicy w XDATA
MOV R0,#90H ;adres docelowy w XDATA
MOVX A,@R1
MOV B,#10
DIV AB
MOVX @R0,A
MOV A,B
INC R0
MOVX @R0,A
LD EQU 63
LJMP START
ORG 100h
START:
LCALL LCD_CLR
MOV A,#LD
MOV B,#10
DIV AB
SWAP A
ADD A,B
LCALL WRITE_HEX
Uwagi końcowe
Z powodu braku czasu wykonane zostało zadanie 1 oraz fragmentarycznie zadanie 2 (zgodnie z zaleceniem prowadzącego zajęcia, zadanie to ma być dokończone na początku kolejnych zajęć laboratoryjnych). Ćwiczenie laboratoryjne pozwoliło zapoznać się ze sposobami kopiowania danych do różnych rodzajów pamięci mikrokontrolera oraz konstruowaniem pętli w języku asemblera, istotne też było doświadczalne przekonanie się o specyfice rejestrów R0 oraz R1 w porównaniu z pozostałymi rejestrami Ri.