Wojskowa Akademia Techniczna w Warszawie
Systemy wbudowane
Sprawozdanie z laboratorium 4-5:
Cel zadania:
Program powinien wyświetlać na terminalu wpisywane przez nas znaki oraz przekazywać ich odpowiedniki ( kody ASCII) do licznika.
Kod programu:
#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 InitInt0(void) //inicjalizacja przerwan WYSYLANIA DO TERMINALA
{
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 IntSrv_Serial(void) interrupt 4 //obsluga przerwan WCZYTYWANIA Z TERMINALA
{
EA = 0;
TI=0;
Odb=SBUF; //wczytanie znaku
RI=0; //po odebraniu bajtu RI ustawiane jest na 1
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
}
}
Działanie programu:
Realizacje tego zadania przedstawia poniższy zrzut ekranu wykonany na laboratorium.
Możemy zaobserwować, że w momencie kiedy na terminalu wpiszemy literę, jej znak ascii jest przekazywany do wyświetlacza.
Wnioski:
Zadanie na laboratoriach polegało na zaprojektowaniu układu, który pozwalałby na pokazanie na wyświetlaczach kodu ASCII znaku wpisanego przez użytkownika na terminalu. Sprawdzenia, czy program działa poprawnie można było dokonać wciskając kilka klawiszy i zapamiętując kody jakie pojawiały się kolejno na wyświetlaczach. Po ponownym wciśnięciu tych klawiszy, na wyświetlaczu powinny pojawić się te same, co poprzednio kody ACII. Zadanie udało mi się zrealizować na laboratoriach.