Wojskowa Akademia Techniczna w Warszawie
Instytut Teleinformatyki i Automatyki
Systemy Wbudowane
Laboratorium 4-5:
Autor: Prowadzący:
Łukasz Komosa. 1. mgr inż. J. Turczyn
Grupa: I0X3S1.
Data wykonania ćwiczenia: 18.04.2012r.
Schemat podłączenia:
Kod programu pierwszego:
#include <REGX52.H>
data unsigned char LiczB1 = 0;
void IntSrv_Int0(void) interrupt 0
{
EA = 0;
LiczB1++;
if (LiczB1 == 32) //pisz od nowej linii po CR LF
{
TI = 0;
SBUF = 0x0d; //SBUF = '\r' - wyslij CR
while (TI == 0) {;}; //czekaj az bajt zostanie wyslany - TxBufEmpty Interrupt TI=1
TI = 0;
SBUF = 0x0a; //SBUF = '\n' - wyslij LF
while (TI == 0) {;}; //jw
LiczB1 = 0;
}
SBUF = 0x30 + LiczB1; //dziala bez czekania jak w 20 i 23 bo klikanie B1 jest wolne
EA = 1;
}
void InitInt0(void)
{
TH1 = TL1 = 0xFD; //ustaw timer T1 dla 9600b/s
SCON = 0x40; //tryb1 portu S: tr. asynchr., 8b danych, mozna zmieniac predkosc transmisji
TMOD = 0x20; //tryb 2 timera T1: T1 8bitowy z autoreload po przepelnieniu
TCON = 0x41; //TR1=1 - Enable T1; IT0=1 - INT0 aktywne zboczem
EX0 = 1; //Enable INT0
EA = 1; //Enable All Interrupts
}
void main(void)
{
InitInt0();
for (;;)
{
P1 = LiczB1; //wyswietl na wyswietlaczu wartosc licznika
}
}
Kod program drugiego:
#include <REGX52.H>
data unsigned char LiczB1 = 0, Odb=0, LiczS=0;
void IntSrv_Int0(void) interrupt 0
{
LiczB1++;
if (LiczB1 == 32) //pisz od nowej linii po CR LF
{
TI = 0;
SBUF = 0x0d; //SBUF = '\r' - wyslij CR
while (TI == 0) {;}; //czekaj az bajt zostanie wyslany - TxBufEmpty Interrupt TI=1
TI = 0;
SBUF = 0x0a; //SBUF = '\n' - wyslij LF
while (TI == 0) {;}; //jw
LiczB1 = 0;
}
SBUF = 0x30 + LiczB1; //dziala bez czekania jak w 20 i 23 bo klikanie B1 jest wolne
EA = 1;
}
void IntSrv_Serial(void) interrupt 4
{
EA = 0;
TI=0;
Odb=SBUF;
RI=0;
EA=1;
}
void InitInt0_4(void)
{
TH1 = TL1 = 0xFD; //ustaw timer T1 dla 9600b/s
SCON = 0x50; //tryb1 portu S: tr. asynchr., 8b danych, mozna zmieniac predkosc transmisji
TMOD = 0x20; //tryb 2 timera T1: T1 8bitowy z autoreload po przepelnieniu
TCON = 0x41; //TR1=1 - Enable T1; IT0=1 - INT0 aktywne zboczem
EX0 = 1; //Enable INT0
ES=1;
EA = 1; //Enable All Interrupts
}
void main(void)
{
P2=0x00;
InitInt0_4();
for (;;)
{
P1 = Odb; //wyswietl na wyswietlaczu wartosc licznika
}
}
Drugi program miał za zadanie wyświetlanie na terminalu wpisywanych przez nas znaków oraz przekazywanie ich odpowiedników w postaci kodów ASCII do licznika.
Realizacje tego zadania przedstawia poniższy zrzut ekranu wykonany na laboratorium.
Na ilustracji widzimy, że w terminalu został wpisany znak („litera a”). Następnie kod ASCII wpisanego przez nas znaku jest wyświetlany na liczniku.
Wnioski:
Podczas ćwiczeń laboratoryjnych z przedmiotu systemy wbudowane mieliśmy za zadanie zaprojektować układ, dzięki któremu za pomocą terminala oraz licznika mogliśmy odczytać kody ASCII wprowadzanych przez nas znaków z klawiatury. Ściślej ujmując zadanie polegało na zaprojektowaniu schematu składającego się z mikrokontrolera 8051, licznika, terminala umożlwiającego wyświetlanie wprowadzanych przez nas znaków oraz napisanie programu, który pozwoli nam odczytać kody wprowadzanych znaków. Zadanie udało nam się zrealizować pomyślnie, ponieważ po sprawdzeniu okazało się, że nasz program w pełni realizuje zamierzony przez nas cel.