Завдання:
Реалізувати пристрій – частотомір, на базі мікроконтролера, що використовує кварцовий резонатор з частотою заданою згідно варіанту. Розроблений пристрій повинен вимірювати частоту вихідної напруги мультивібратора напруги та відображати виміряне значення на рідкокристалічному дисплеї.
№ варіанту |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
0 |
Частота кварцу, МГц |
11,5 |
11 |
10,5 |
10 |
9,5 |
9 |
8,5 |
8 |
7,5 |
12 |
Порядок виконання роботи
Розробити та скласти схему пристрою.
Написати та відлагодити програму роботи мікроконтролера.
Запрограмувати мікроконтролер.
Перевірити функціонування схеми.
Оформити звіт.
Приклад схеми
Приклад програми на С51
#include <REGX52.H>
#include <stdio.h>
/*------------------------*/
#define Fclc 12000000
#define TREF 1.0
unsigned char idata THH0;
unsigned char idata TL0_T;
unsigned char idata TH0_T;
unsigned char idata THH0_T;
/*------------------------*/
#define LCD_DAT P2
#define LCD_RS P2_1
#define LCD_RW P2_2
#define LCD_E P2_3
/*------------------------*/
void init_LCD(void);
void out_com_lcd(char out);
char putchar(unsigned char out);
void inc_kursor_pos_lcd(unsigned char n);
unsigned char print_ram_adres_lcd;
unsigned char freq_pos;
/*------------------------*/
void init_T0(void);
void init_T1(void);
/*------------------------*/
void delay(unsigned int n);
/*------------------------*/
void main(void)
{
init_LCD();
printf("\nLab N2 Example Freq.=");
freq_pos=print_ram_adres_lcd;
init_T0(); //Timer
init_T1(); //Counter
EA=1;
while(1)
{
}
}
/*------------------------*/
void delay(unsigned int n)
{
unsigned int i,j;
for(j=0;j<n;j++)
for(i=0;i<0x200;i++);
}
/*------------------------*/
void init_LCD(void)
{
unsigned char init_comand[]={0x30,0x30,0x30,0x38,0x0F,0x1,0x6};
unsigned char i;
LCD_RS=0;
LCD_RW=0;
LCD_E=0;
delay(100);
for(i=0;i<7;i++)
out_com_lcd(init_comand[i]);
print_ram_adres_lcd=0;
}
/*------------------------*/
void out_com_lcd(char out)
{
unsigned char a;
LCD_RS=0;
LCD_RW=0;
LCD_DAT &= 0x0F; //4-bit interface
LCD_DAT |= out & 0xF0;
for(a=0;a<200;a++);
LCD_E=1;
for(a=0;a<200;a++);
LCD_E=0;
for(a=0;a<200;a++);
LCD_DAT &= 0x0F;
LCD_DAT |= (out <<4) & 0xF0;
for(a=0;a<200;a++);
LCD_E=1;
for(a=0;a<200;a++);
LCD_E=0;
for(a=0;a<200;a++);
delay(5);
}
/*------------------------*/
char putchar(unsigned char out)
{
unsigned char a;
if(out=='\n')
{
print_ram_adres_lcd=0x2;
out_com_lcd(0x80+print_ram_adres_lcd);
return out;
}
out_com_lcd(0x80+print_ram_adres_lcd);
LCD_RS=1;
LCD_RW=0;
LCD_E=0;
LCD_DAT &= 0x0F; //4-bit interface
LCD_DAT |= out & 0xF0;
for(a=0;a<200;a++);
LCD_E=1;
for(a=0;a<200;a++);
LCD_E=0;
for(a=0;a<200;a++);
LCD_DAT &= 0x0F;
LCD_DAT |= (out <<4) & 0xF0;
for(a=0;a<200;a++);
LCD_E=1;
for(a=0;a<200;a++);
LCD_E=0;
inc_kursor_pos_lcd(1);
return out;
}
/*------------------------*/
void inc_kursor_pos_lcd(unsigned char n)
{
unsigned char i;
for(i=0;i<n;i++)
{
print_ram_adres_lcd++;
if(print_ram_adres_lcd==0x11)print_ram_adres_lcd=0x42;
if(print_ram_adres_lcd==0x51)print_ram_adres_lcd=0x12;
if(print_ram_adres_lcd==0x21)print_ram_adres_lcd=0x52;
if(print_ram_adres_lcd==0x61)print_ram_adres_lcd=0x2;
}
}
/*------------------------*/
void init_T0(void)
{
long t,NT0;
t=TREF*Fclc/12.0;
NT0=0xFFFFFF-t;
TL0_T=NT0;
TH0_T=(NT0&0xFF00)>>8;
THH0_T=(NT0&0xFF0000)>>16;
TL0 = TL0_T;
TH0 = TH0_T;
THH0= THH0_T;
TMOD &= 0XF0; /* clear Timer 0 */
TMOD |= 0X1;
ET0 = 1; /* IE.1*/
TR0 = 1; /* TCON.4 start timer */
}
/*------------------------*/
void init_T1(void)
{
TMOD &= 0XF; /* clear Timer 1 control */
TMOD = 0X51 ;
TL1 = 0X0 ; /* value set by user */
TH1 = 0X0 ; /* value set by user */
ET1 = 1 ; /* ET0 is IE.3 */
TR1 = 1; /* TCON.6 start timer */
}
/*------------------------*/
void int_T0(void) interrupt 1
{
unsigned int N,Freq;
THH0++;
if(THH0==0)
{
TR0=0;
TR1=0;
TL0 = TL0_T;
TH0 = TH0_T;
THH0=THH0_T;
N=(TH1<<8);
N=N|TL1;
TH1=0;
TL1=0;
Freq = N/TREF;
print_ram_adres_lcd=freq_pos;
printf("%d Hz",Freq);
TR0=1;
TR1=1;
}
}
/*------------------------*/
void int_T1(void) interrupt 3
{
TR1=0;
TR1=1;
}
/*------------------------*/
Робота схеми
Лабораторна робота № 3
Тема: Реалізація аналого-цифрового перетворювача.
Мета: Ознайомлення з принципом роботи аналого-цифрових перетворювачів порозрядного зрівноваження.
