Народ помогите разобраться где грабли. Устройство должно отвечать на длинный(12us) и коротрий(4us) старты. На которкий старт отвечает нормально а на длинный ну не хочт никак
#include <io.h> #include <interrupt.h> #include <sig-avr.h> //#include <avr\signal.h> #include <ina90.h> // _NOP();_SLEEP(); #include <eeprom.h>
typedef unsigned char u08; typedef char s08; typedef unsigned short u16; typedef short s16; typedef unsigned long u32; typedef long s32;
volatile u08 Fw=0;
/*****************************************************************************
******************************************************************************/ INTERRUPT(SIG_INTERRUPT0) //SIGNAL(SIG_INTERRUPT0) { /* // 6 us compare(8us) //TCCR0 = 0x89; TCCR0 = 1; TCNT0 = 0x00; //OCR0 = 0x20; TIFR = (1<<OCF0); while(bit_is_clear(TIFR,1)); if(bit_is_clear(PIND,0)) Fw=2; else if(bit_is_set(PIND,0)) Fw=1; TCCR0 = 0x00; TCNT0 = 0x00; //OCR0 = 0x00; sbi(TIFR,OCF0); while(bit_is_clear(PIND,0)); */ TCCR0 = 1; while(!(PIND&0x01)&&!(TIFR&2)); if(TIFR&2) Fw=2; else Fw=1; TCCR0 = 0; TCNT0 = 0; TIFR |= 1; while(!(PIND&0x01)); } /*****************************************************************************
******************************************************************************/ int main(void) { DDRA = 0x00; PORTA = 0x00; DDRB = 0x00; PORTB = 0x00; DDRC = 0xDF; PORTC = 0x40; DDRD = 0x00; PORTD = 0xFF; DDRE = 0x0F; PORTE = 0xC8; DDRF = 0x00; PORTF = 0x00; DDRG = 0x00; PORTG = 0x00; ACSR = 0x80; if(bit_is_set(PIND,1)) { SPI_Init(); /* init Timer0 */ //TCCR0 = 0x89; // old OCR0 = 0x20; /* init interrupt */ MCUCR = 0x00; //MCUCR = 0x30; // SLEP - Power Down //MCUCSR = (1<<PORF); MCUCSR = 0x00; EICRA = 0x00; EICRB = 0x00; EIMSK = (1<<INT0); sei(); for(;;) { if(Fw==1) { ReadDataSensor(); Fw=0; } else if(Fw==2) { ReadDataEEPROM(); Fw=0; } //_SLEEP(); } } else { for(;;) { _NOP(); } } }
|