Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metodychka_labs.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.65 Mб
Скачать

Завдання:

Реалізувати пристрій – частотомір, на базі мікроконтролера, що використовує кварцовий резонатор з частотою заданою згідно варіанту. Розроблений пристрій повинен вимірювати частоту вихідної напруги мультивібратора напруги та відображати виміряне значення на рідкокристалічному дисплеї.

№ варіанту

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

Порядок виконання роботи

  1. Розробити та скласти схему пристрою.

  2. Написати та відлагодити програму роботи мікроконтролера.

  3. Запрограмувати мікроконтролер.

  4. Перевірити функціонування схеми.

  5. Оформити звіт.

Приклад схеми

Приклад програми на С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

Тема: Реалізація аналого-цифрового перетворювача.

Мета: Ознайомлення з принципом роботи аналого-цифрових перетворювачів порозрядного зрівноваження.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]