//В этом листинге будем использовать Таймер1-TIMER_COUNTER_1.Схема и задача как и в прошлом листинге.
#include <avr/io.h>
void delay(unsigned int kdel)
{
TCNT1=0; //сбос два счетных байта на 0.
while(TCNT1<kdel){} //пока счётчик меньше параметра.
}
void main(void)
{
unsigned char rab;
DDRD&=(~(1<<DDD0));
DDRB=0xff;
PORTB=0xff;
PORTD=0x7f;
ACSR=0x80;
TCCR1B=0x05; //Таймер1 включен.Предделитель 1\1024
while(1)
{
if (PIND&(1<<PIND0))
{
rab=1;
while(rab!=0)
{
PORTB=rab^0xff;
rab=rab<<1;
delay(50); //Вызов функции задержки с параметром 50.
}
}
else
{
rab=0x80;
while(rab!=0)
{
PORTB=rab^0xff;
rab=rab>>1;
delay(50);
}
}
}
}