WOJSKOWA AKADEMIA TECHNICZNA
im. Jarosława Dąbrowskiego
Laboratorium z przedmiotu
SYSTEMY WBUDOWANE
SPRAWOZDANIE
Z ĆWICZENIA LABORATORYJNEGO
4-5
Prowadzący: mgr inż. J. Turczyn
Data wykonania ćwiczenia: 18.04.2012
1. Cel zadania:
Zaprogramować układ tak aby przy wciskaniu guzika na terminalu pokazywały się znaki. A także przy wprowadzaniu znaków w terminalu wyświetlanie ich kodów ASCII na wyświetlaczach
Schemat podłączenia:
2. 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' - wyślij CR
while (TI == 0) {;}; //czekaj aż bajt zostanie wysłany - TxBufEmpty Interrupt
TI=1
TI = 0;
SBUF = 0x0a; //SBUF = '\n' - wyślij LF
while (TI == 0) {;}; //czekaj aż bajt zostanie wysłany - TxBufEmpty Interrupt
LiczB1 = 0;
}
SBUF = 0x30 + LiczB1; //działa bez czekania jak w 20 i 23 bo klikanie B1 jest wolne
EA = 1;
}
void IntSrv_Serial(void) interrupt 4 //obsługa przerwania wczytywania z terminala
{
EA = 0;
TI=0;
Odb=SBUF; //wczytywania 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, można zmieniać //predkość transmisji
TMOD = 0x20; //tryb 2 timera T1: T1 8bitowy z autoreload po przepełnieniu
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 wartość licznika
}
}
3. Przykłady działania
Wciskanie guzika
Wpisywanie w terminalu
4. Wnioski
Podczas laboratorium udało mi się wykonać zadanie pomyślnie. Przy wciskaniu guzika pokazywały się kolejne znaki na terminalu. Również podczas wprowadzania znaków w terminalu na wyświetlaczach pokazywały się ich numery ASCII.