Добавил:
Andrejjavd
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Примеры решения лабораторных работ / Лаб7
.txtНапишите программу определения частоты сети с точностью не хуже 1 Гц. Результат выводить на 7-ми сегментный индикатор
с шагом по времени 1 секунда. Время между сетевыми импульсами измерять с помощью таймера.
#include <iom8535v.h>
#include <macros.h>
#include <math.h>
#define NUM 1000
unsigned char count=0;
int number[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
int values[2]={0,0};
int k=0;
void port_init(void)
{
PORTA = 0x00;
DDRA = 0xff;
PORTC = 0x00;
DDRC = 0xc0;
PORTD = 0x04;
DDRD = 0x00;
}
#pragma interrupt_handler int0_isr:2
void int0_isr(void)
{
count++;
}
void timer0_init(void)
{
TCCR0 = 0x00;
TCNT0 = 0x00;
TCCR0 = 0x05;
OCR0 = 0x4e;
}
#pragma interrupt_handler timer0_ovf_isr:20
void timer0_ovf_isr(void)
{
int j=0;
CLI();
k++;
//0x64
if (k==0x32)
{
k=0;
count--;
while (j<2)
{
values[j]=count%10;
count/=10;
j++;
}
TCNT0 = 0x00;
count=0;
}
SEI();
}
void init_devices(void)
{
CLI ();
port_init();
timer0_init();
int0_isr();
MCUCR = 0x80;
GICR = 0x40;
TIMSK=0x02;
SEI () ;
}
void main (void)
{
int i;
init_devices();
while(1)
{
for (i=0; i<NUM; i++)
PORTA=number[values[1]];
PORTC=0x80;
for (i=0; i<NUM; i++)
PORTA=number[values[0]];
PORTC=0x40;
}
}
#include <iom8535v.h>
#include <macros.h>
#include <math.h>
#include <stdlib.h>
#define NUM 1000
unsigned char count=0;
int number[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
int values[2]={0,0};
int chi[4]={51,49,50,51};
int k=0;
void port_init(void)
{
PORTA = 0x00;
DDRA = 0xff;
PORTC = 0x00;
DDRC = 0xc0;
PORTD = 0x04;
DDRD = 0x00;
}
#pragma interrupt_handler int0_isr:2
void int0_isr(void)
{
count++;
}
void timer0_init(void)
{
TCCR0 = 0x00;
TCNT0 = 0x00;
TCCR0 = 0x05;
OCR0 = 0x4e;
}
#pragma interrupt_handler timer0_ovf_isr:20
void timer0_ovf_isr(void)
{
int j=0;
int index=rand()%3;
int tempChi=chi[index];
CLI();
k++;
//0x64
if (k==10)
{
k=0;
//count--;
while (j<2)
{
values[j]=tempChi%10;
tempChi/=10;
//values[j]=count%10;
//count/=10;
j++;
}
TCNT0 = 0x00;
count=0;
}
SEI();
}
void init_devices(void)
{
CLI ();
port_init();
timer0_init();
int0_isr();
MCUCR = 0x80;
GICR = 0x40;
TIMSK=0x02;
SEI () ;
}
void main (void)
{
int i;
init_devices();
while(1)
{
for (i=0; i<NUM; i++)
PORTA=number[values[1]];
PORTC=0x80;
for (i=0; i<NUM; i++)
PORTA=number[values[0]];
PORTC=0x40;
}
}
Соседние файлы в папке Примеры решения лабораторных работ