Documente Academic
Documente Profesional
Documente Cultură
PROIECT SINCRETIC
Proiectarea Microsistemelor Digitale
Student :
Bob Adrian-Vasile
Cuprins
1. Tema proiectului
Realizarea unui ceas care sa numere secunda sub forma ziua(din luna):ora:min:sec,
programind
Timer0 in mod 3.Valoarea curenta a ceasului(11octeti : ziua,ora, min, sec si caracterele :)
se transmite la portul
2. Descrierea aplicatiei
In mediul de dezvoltare Keil se incepe cu alegerea microcontrolerului 80C552, si se seteaza
frecventa, conform cerintelor, la 11.0592 MHz.
2.1.Resursele microcontrolerului utilizate in aplicatie si modul lor de programare
Microcontrolerul 80C552 contine trei numaratoare / temporizatoare de 16 biti denumite
Timer 0 (T0) , Timer 1 (T1), Timer 2 (T2) i un temporizator de control, de 8 biti, Timer
3 (T3).
- 2 registre de numarare pe 8 biti, TL0 si TH0 (pentru T0), respectiv TL1 si TH1 (pentru
T1), care pot fi utilizate concatenate, pentru a obtine un registru pe 16 biti
- 1 registru pe 8 biti pentru programarea modului de lucru, TMOD (Timer MODe)
In modul registrul de numarare este configurat pe 8 biti (TL1) cu incarcare automata din
registrul TH1. Astfel, la depasirea capacitatii registrului TL1, se seteaz fanionul de
ntrerupere TF1 din TCON si se incarca TL1 cu continutul lui TH1 (TH1 trebuie incarcat
in prealabil prin program).
TMOD se va defini (TMOD & 0xF0) | 0x02 deoarece TMOD configureaza atat Timer 0,
cat si Timer 1. Deoarece Timer 1 e configurat in init_serial si setat pe intrerupere, daca lam fi definit 0x02 l-am fi suprascris.
void T0M3Delay(void)
{
TMOD = (TMOD & 0xF0) | 0x02;
TL0 = 0;
TH0 = 0;
TR0 = 1;
EA =0;
/*start /restart*/
/*dezactivare global intreruperi */
while(TF0 == 0) ;
TR0 = 0;
/* T0 oprit*/
TF0 = 0;
/* TF0 resetat la 0 */
EA = 1;
{
char count = 0;
char string[3] = {'0','0','0'};
if (number != 0)
{
while (number>0)
{
string[count]=(number%10)+48;
caracterului '0'*/
number/=10;
count++;
}
5
return &string;
}
else
return &string;
}
void init_uart(void)
{
S0CON = 0x40;
TMOD |= 0x20;
PCON |= 0x80;
TH1 = 0xFD;
TL1 = 0xFD;
TR1 = 1;
ET1 = 0;
ES0 = 1;
EA = 1;
PS0 = 0;
intToChar = conIntToChar(hour);
time_string[0] = *intToChar;
time_string[1]= *(intToChar+sizeof(char));
intToChar = conIntToChar(min);
time_string[3] = *intToChar;
time_string[4] = *(intToChar+sizeof(char));
intToChar = conIntToChar(sec);
time_string[6] = *intToChar;
time_string[7] = *(intToChar+sizeof(char));
intToChar = conIntToChar(msec);
time_string[9] = *intToChar;
caracter*/
/*milisecunda - primul
time_string[10] = *(intToChar+sizeof(char));
caracter*/
/*milisecunda - al doilea
time_string[11] = *(intToChar+2*sizeof(char));
caracter*/
/*secunda - al treilea
/*-----------------------------------------------main
------------------------------------------------*/
void main (void)
{
int hour = 0;
int min = 0;
int sec = 0;
int msec = 0;
int ms50count = 0;
time_string[2]=time_string[5]=time_string[8]=':';
init_uart();
while (1)
{
int i;
for (i=0; i<720; i++)
{
T0M3Delay();
}
ms50count+= 1;
if (ms50count == 3)
{
8
{
ms50count = 0;
msec = msec + 200;
if (msec == 1000)
{
msec = 0;
sec = sec + 1;
if (sec == 60 )
{
sec = 0;
min = min + 1;
if (min == 60 )
{
min = 0;
hour = hour + 1;
if (hour == 24 )
{
hour = 0;
}
}
}
}
}
9
}
}
Serial0 () interrupt 4
{
TI = 0;
timer1_uart_running = 0;
}
3. Concluzii
Keil permite simularea functionarii microcontrolerelor si pune la dispozitie o serie de
instrumente care ne faciliteaza activitatea. Astfel putem seta modul Timer-ului, porturile,
intreruperile si datele transmise pe UART.
10
Bibliografie
http://elearning.vtu.ac.in/10/enotes/06ES42/Unit6-RK.pdf
http://www.keil.com/support/man/docs/is51/is51_ov_cpu251.htm
http://www.8052.com/tutser.phtml
http://www.keil.com/support/docs/685.htm
http://www.8052.com/tutint.phtml
http://www.8052.com/tuttimer.phtml
11
12