Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
8
Добавлен:
26.01.2023
Размер:
2.92 Кб
Скачать
Напишите программу определения частоты сети с точностью не хуже 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;
  }	
}
Соседние файлы в папке Примеры решения лабораторных работ