Счас кусок вырежу, выложу
Код
#include <avr/io.h>
#include <avr/delay.h>
#include <avr/wdt.h>
#include <avr/sleep.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
//********************************************************************************
**
#define ADC_VREF_TYPE 0x40
#define REMOTE PIND0
#define LANC_IN PIND2
#define LANC_OUT_1 PORTB|=_BV(PORTB1);
#define LANC_OUT_0 PORTB&=~(_BV(PORTB1));
#define INT0_ENABLE GICR |=_BV(6);
#define INT0_DISABLE GICR &=~(_BV(6));
unsigned char sub_command = 0x18;
unsigned char command = 0x33;
unsigned char lanc_count;
unsigned char bit_count;
//********************************************************************************
**
//********************************************************************************
**
void init_mk(void)
{
ACSR=0x80; //запрет компаратора
DDRB=0x06; //PB1,PB2 - выхода
PORTB=0xF9; //подтягивающие резисторы на входах
DDRD=0xE2; //PD1,PD5,PD6,PD7 - выхода
PORTD=0xC0; //PD6,PD7 - установлены в "1"
DDRC=0x00; //все входа
PORTC=0x00; //подтягиващих резисторов нет
_wdt_write(15);
ADCSRA=0x86; //установка Vref для АЦП на AVCC и внешний конденсатор
ADMUX=ADC_VREF_TYPE & 0xff;
MCUCR |=(1<<ISC01); //установка внешнего прерывания со спаду уровня
INT0_ENABLE; //разрешение внешнего прерывания
GIFR=0x40;
}
//********************************************************************************
******
ISR(SIG_INTERRUPT0)
{
INT0_DISABLE;
GIFR |= _BV(INTF0); //очистка флага прерывания
if(lanc_count==0)
{
for(bit_count=0; bit_count<8; bit_count++)
{
if(bit_is_set(sub_command,bit_count))
{
LANC_OUT_1;
}
else
{
LANC_OUT_0;
}
}
}
INT0_ENABLE;
}
//********************************************************************************
*****
//********************************************************************************
*****
//********************************************************************************
*****
int main (void)
{
init_mk();
sei();
START:
wdt_reset();
goto START;
}