Добавил:
Andrejjavd
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Примеры решения лабораторных работ / Контр
.txtДвоичный счетчик импульсов. Счетный вход - вход 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;
}
}
}