Systemy wybudowane
Sprawozdanie: Wstęp do mikrokontrolerów rodziny MCS-51
Wstęp teoretyczny
Mikrokontroler Intel 8051 zapoczątkował rodzinę mikrokontrolerów MCS-51.
Podczas laboratorium wykorzystany został zestaw uruchomieniowy ZL2MCS51.
Układ pracuje z częstotliwością 11,0592 MHz
(1 cykl maszynowy = 12 cykli zegarowych), co oznacza, że wykonuje 921600 cykli maszynowych na 1 sekundę.
Zestaw wyposażono w 8-przyciskową klawiaturę, dołączoną do linii 0..7 portu P3. Styki przełączników włączone są pomiędzy masę zasilania i linie portów, do ich prawidłowej pracy konieczne jest zastosowanie wbudowanych w mikrokontroler rezystorów podciągających.
Przyciski działają w następujący sposób: w stanie wyciśniętym na wejściu portu dzięki wewnętrznemu rezystorowi podciągającemu panuje stan wysoki. Wciśnięcie przycisku oznacza, iż na wejściu portu pojawi się stan niski(zwarcie do masy).
Obok rzędu ośmiu przycisków znajduję się przycisk RESET, służący do restartu mikrokontrolera np. po zakończeniu programowania.
Zastosowane w zestawie diody LED (D7…D0) można dołączyć (poprzez przełącznik SW1) do linii portu P2. Świecenie się diody wymaga podania „0” na odpowiednią linię portu.
Zadania
Pierwsze dwa programy polegały na elementarnej obsłudze klawiatury (przycisków S0 … S7) oraz diody.
Program 1:
01 ORG 0
02 JMP 100
03 ORG 100
04 start:
05 MOV P2,P3
06 JMP start
07 END
W powyższym programie sygnał z portu P3 jest przeniesiony na port P2 (po wciśnięciu przycisku zapalane są diody).
Program 2:
01 ORG 0
02 JMP 100
03 ORG 100
04 start:
05 MOV C, P3.0
06 MOV P2.0, C
07 JMP start
07 END
W powyższym programie sygnał z pierwszego klawisza (P3.0) jest kopiowany do rejestru C, a następnie przenoszony do zerowej linii portu 2 (P2.0)
Różnice w działaniu obu programów to:
- ilość zapalanych diod (8 lub 1)
- sposób przekazania sygnału (bezpośrednio z portu do portu lub za pośrednictwem rejestru C)
Program3:
Kolejnym zadaniem było napisanie programu, który będzie powodował miganie diody z częstotliwością 0,5Hz tj. 0,5 sekundy. Opóźnienie 0,5 sekundy oznacza wykonanie 460800 cykli maszynowych.
Czas wykonania operacji MOV, DEC wynosi 1 cykl ,a JNZ 2 cykle zegara.
Do wykonania 460800 cykli użyliśmy trzy pętle for, aby obliczyć ile razy wykonać pętle wykorzystaliśmy napisany przez nas program:
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int x,y,z;
x=0;
y=0;
z=0;
for(x=0;x<256;x++)
{
for(y=0;y<256;y++)
{
for(z=0;z<256;z++)
{
if((1+x*(1+1+y*(1+1+z*(1+1+2)+1+2)+1+2))==460800)
cout<<x<<" "<<y<<" "<<z<<endl;
}
}
}
cin.get();
return 0;
}
W powyższym programie zmienne, które otrzymaliśmy to 41, 82 oraz 33.
ORG 0
JMP 100
ORG 100
start:
SETB P2.0
MOV R0, #29h
LOOP_A:
DEC R0
MOV R1, #52h
LOOP_B:
DEC R1
MOV R2, #21h
LOOP_C:
DEC R2
MOV A, R2
JNZ LOOP_C
MOV A, R1
JNZ LOOP_B
MOV A, R0
JNZ LOOP_A
XRL P2, #001h
JMP start
Wnioski
Ćwiczenie było dosyć proste. Mieliśmy możliwość obcowania z nowym dla nas urządzeniem jakim jest mikrokontroler ZL2MCS51. Naszym największym problemem podczas wykonywania ćwiczenia było odpowiednie dobranie współczynników przy pętli opóźniającej. Przy okazji wykonywania ćwiczenia przypomnieliśmy sobie podstawy ASEMBLER-a, oraz zapoznaliśmy się z podstawą obsługi programów Flip i MIDE51 .