можно таймер Т0 в режим CTC
нужно только подсчитать значение OCR0 и делителя для таймера
#include <mega8.h>
#include <delay.h>
void main()
{
DDRC = 0xff;
DDRD = 0x02;
DDRB = 0xff;
PORTB = 0x00;
while(1){ // цикл
PORTD.1 = 1; // зажигаем ИК диод
delay_us(13); // половинка периода
PORTD.1 = 0; // гасим
delay_us(13);
if (PIND.0 == 0){ // пришел "0"
PORTC.5 = 1; // зажигаем индикацию
delay_ms(100); // чтобы успеть заметить
}
PORTC.5 = 0; // гасим
}}// конец цикла
while(1){ // бесконечный цикл
PORTD.1 = 1; // зажигаем ИК диод
delay_ms(50);
PORTD.1 = 0;
if (PIND.0 == 0){ // пришел "0"
PORTC.5 = 1; // зажигаем индикацию
delay_ms(100); // чтобы успеть заметить
}
PORTC.5 = 0; // гасим
}}// конец цикла
/////////////////////////////////////////////////////////////////////
void flash_l()
{
unsigned int i,j;
for (j=0;j<10;j++)
{
for(i=0; i<12; i++)
{
PORTB.2=1;
delay_us(13);
PORTB.2=0 ;
delay_us(13);
}
delay_us(600); // 0,6 ms
};
}
//////////////////////////////////////////////////////////////////////////
void main(void)
{
init();
while (1)
{
flash_l();
delay_ms(60); // 60 ms
};
}
#include <mega8.h>
#include <delay.h>
void flash_l()
{
unsigned int i,j;
for (j=0;j<10;j++)
{
for(i=0; i<12; i++)
{
PORTD.1=1;
delay_us(13);
PORTD.1=0 ;
delay_us(13);
}
delay_us(600); // 0,6 ms
};
}
void main()
{
DDRC = 0xff;
DDRD = 0x02;
DDRB = 0xff;
PORTB = 0x00;
while (1)
{
flash_l();
delay_ms(60); // 15 ms
if (PIND.0 == 0){ // пришел "0"
PORTC.5 = 1; // зажигаем индикацию
delay_ms(100); // чтобы успеть заметить
}
PORTC.5 = 0; // гасим
}
}
/////////////////////////////////////////////////////////////////////
void flash_l()
{
unsigned int i,j;
for (j=0;j<10;j++)
{
delay_us(600); // 0,6 ms
for(i=0; i<12; i++)
{
PORTB.2=1;
delay_us(13);
PORTB.2=0 ;
delay_us(13);
}
};
}
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0