Изобрел я велосипед alex91, проверьте. Если работает, напишите. Я из за этого велосипеда уснуть не могу
/* ************************************
RC5
************************************* */
#include <avr/io.h>
#include <util/delay.h>
int main(void) /* начало основной программы */
{
DDRA = 0xff; /* порт A сконфигурировать как выход */
PORTA = 0x00; /* установить "0" на всех выводах порта A */
DDRD &= (~(1<<3)); /* PD3 сконфигурировать как вход, TSOP */
PORTD |= (1<<3); /* установить "1" на PD3, включаем подтягивающий резистор */
volatile unsigned char byte_high;
volatile unsigned char byte_low;
while(1) /* бесконечный цикл */
{
byte_high = 0;
byte_low = 0;
while( PIND & (1<<3) ); /* проверка TSOP */
_delay_us(200); /* задержка */
if( !(PIND & (1<<3)) ) byte_high += 32;
_delay_us(1778); /* задержка */
if( !(PIND & (1<<3)) ) byte_high += 16;
_delay_us(1778); /* задержка */
if( !(PIND & (1<<3)) ) byte_high += 8;
_delay_us(1778); /* задержка */
if( !(PIND & (1<<3)) ) byte_high += 4;
_delay_us(1778); /* задержка */
if( !(PIND & (1<<3)) ) byte_high += 2;
_delay_us(1778); /* задержка */
if( !(PIND & (1<<3)) ) byte_high += 1;
_delay_us(1778); /* задержка */
if( !(PIND & (1<<3)) ) byte_low += 128;
_delay_us(1778); /* задержка */
if( !(PIND & (1<<3)) ) byte_low += 64;
_delay_us(1778); /* задержка */
if( !(PIND & (1<<3)) ) byte_low += 32;
_delay_us(1778); /* задержка */
if( !(PIND & (1<<3)) ) byte_low += 16;
_delay_us(1778); /* задержка */
if( !(PIND & (1<<3)) ) byte_low += 8;
_delay_us(1778); /* задержка */
if( !(PIND & (1<<3)) ) byte_low += 4;
_delay_us(1778); /* задержка */
if( !(PIND & (1<<3)) ) byte_low += 2;
_delay_us(1778); /* задержка */
if( !(PIND & (1<<3)) ) byte_low += 1;
_delay_ms(40); /* задержка */
PORTA = byte_low; /* вывести младший байт на порт A */
} /* закрывающая скобка бесконечного цикла */
return 0;
} /* закрывающая скобка основной программы */
(Отредактировано автором: 24 Сентября, 2010 - 06:22:07) |