Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
8
Добавлен:
26.01.2023
Размер:
2.82 Кб
Скачать
Двоичный счетчик импульсов. Счетный вход - вход PA0, выход счетчика - разряды PD0...PD7. В исходном состоянии не включен 
ни один выход PD0...PD7. При переполнении счетчика счет начинается с нуля.
2. «Программируемый светофор». Выходы P^, Pd и PС2 имитируют сигналы светофора. Биты PA0...PA1 порта А задают режим 
работы светофора: «00» - светофор отключен, «01» - зеленый и красный свет включены 10 с, желтый - 3 с, 
«10» - зеленый включен 20 с, красный свет включены 10 с, желтый - 3 с, «11» - ночной режим (только мигающий желтый свет).


#include <iom8535v.h>
#include <macros.h>
#include <math.h>

void port_init(void)
{
  PORTA = 0x01;
  DDRA = 0x00;
  PORTD = 0xfd;	
  DDRD = 0xFF; 
}


void Delay(int i)
{
  unsigned int p;
  for (p=0;p<i;p++)
  {
    int tiks=1000000;
    while (tiks>0)
    tiks--;
  } 
}

void init_devices(void)
{
  CLI ();
  port_init();
  SEI () ;
}
void main (void)
{
  init_devices();
  while(1)
  {
    PORTA=1;
    if (PORTA==1)
	{
	  if (PORTD==255)
	  {
	    PORTD=0;
      }
	  else
	  {
	    PORTD++;
	    PORTA=0;
	  }
	  Delay(4);
	}
  }	
}

#include <iom8535v.h>
#include <macros.h>
#include <math.h>
int light=-1;

void port_init(void)
{
  PORTC=0x00;
  DDRC=0x07;
  PORTA=0x00;
  DDRA=0x03;
}

void Delay(int i,int prov)
{
  unsigned int p;
  int oc=0x90;
  int temp=0;
  for (p=0;p<i*1000;p++)
  {
    light=PINA;
    if (light!=prov)
	  break;
	while (temp<oc)
	  temp++;
	temp=0;    
  }
}

void init_devices(void)
{
  CLI ();
  port_init();
  SEI () ;
}

void ModeOne()
{
 // if (light!=1)
	//{
	  light=1;
	  PORTC=0x01;
	//}
	Delay(10,1);
	PORTC=PORTC<<1;
	Delay(3,1);
	PORTC=PORTC<<1;
	Delay(10,1);
	PORTC=PORTC>>1;
    Delay(3,1);
	//PORTC=PORTC>>1;	
}

void ModeTwo()
{
  //if (light!=2)
	//{
	  light=2;
	  PORTC=0x01;
	//}
	Delay(10,2);
	PORTC=PORTC<<1;
	Delay(3,2);
	PORTC=PORTC<<1;
	Delay(20,2);
	PORTC=PORTC>>1;
    Delay(3,2);
	//PORTC=PORTC>>1;	
}

void ModeThree()
{
 // if (light!=3)
	//{
	  light=3;
	  PORTC=0x02;
	//}
	Delay(3,3);
	PORTC=0;
	Delay(3,3);
	//PORTC=2;
}
void main (void)
{
  init_devices();
  while(1)
  {
  switch(PINA)
  {
  case 0:
   // if (light!=0)
	  light=0;
    PORTC=0x00;
	break;
  case 1:
    ModeOne();
	break;
  case 2:
    ModeTwo();
	break;
  case 3:
	ModeThree();
	break;    	
  }	
  }
}

Соседние файлы в папке Примеры решения лабораторных работ