Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
Національний університет «Львівська політехніка»
Звіт
до лабораторної роботи №3
з курсу „Проектування контролерів периферійних пристроїв”
«Формування дискретних сигналів з заданими параметрами»
Підготувала: ст. гр.
Шалай І .Є.
Перевірив:
Кочин Р. В.
Львів 2008
Тема: Формування дискретних сигналів з заданими параметрами
Мета: Ознайомлення з режимами роботи таймерів/лічильників в мікроконтролера АТ89С51 та його можливостями по зв'язку з персональним комп'ютером.
Виконання роботи
Завдання:
Настроїти UART на задану частоту;
Прийняти дані з UART
Сформувати вихідний сигнал з шпарністю згідно варіанту та частотою (періодом) прийнятою через UART;
№ варіанту
4
Частота роботи послідовного порту
2400
Парність імпульсів
1/2
Вихідний порт
P1.5
Параметр, прийнятий по UART
Частота, kГц
Текст програми
#include <reg51.h>
#define Fclk 11059000
#define P_OUT P1_5
unsigned char freq=1000;
unsigned int Time_nul;
unsigned int Time_one;
void init_UART(void);
void init_T0(void);
void comp_THTL(unsigned char f);
/*---------------------------------*/
void main(void)
{
init_UART();
init_T0();
EA=1;
while(1);
}
/*---------------------------------*/
void init_UART(void)
{
SCON=0x50;
PCON=0;
TMOD=0x20;
TH1=0xF4;
TR1=1;
RI=0;
ES=1;
}
/*---------------------------------*/
void int_UART(void) interrupt 4
{
unsigned char k;
if(RI)
{
RI=0;
k=SBUF;
if((k>='0')&&(k<='9'))
{
freq=k-'0';
comp_THTL(freq);
}
}
if(TI)TI=0;
}
/*---------------------------------*/
void init_T0(void)
{
unsigned int k;
ET0=1;
TMOD &= 0XF0; /* clear Timer 0 */
TMOD |= 0X1;
comp_THTL(freq);
P_OUT=0;
k=Time_nul;
TL0=k;
k=(k&0xFF00);
k>>=8;
TH0=k;
TR0=1;
}
/*---------------------------------*/
void int_T0(void) interrupt 1
{
unsigned int k;
TR0=0;
if(P_OUT)
{
P_OUT=0;
k=Time_nul;
}
else
{
P_OUT=1;
k=Time_one;
}
TL0=k;
k=(k&0xFF00);
k>>=8;
TH0=k;
TR0=1;
}
/*---------------------------------*/
void comp_THTL(unsigned char f)
{
float Period,Timer_tic;
Period=1/(f*1e3);
Timer_tic=Period*Fclk/12-0x3C; //0x3C***
Time_one=0xFFFF-Timer_tic/2; //signal 1/2: _ _-_ _-
Time_nul=0xFFFF-Timer_tic*2/3;
}
/*---------------------------------*/
Схема
Результат роботи програми
Висновок: ознайомилась з режимами роботи таймерів/лічильників мікроконтролера АТ89С51 та його можливостями по зв'язку з персональним комп'ютером.