#include #include #include uint8_t period=0; uint32_t recievedData=0; void NextChannel(){ uint8_t chanSel = PORTB & 0x07; chanSel++; if (chanSel<4) chanSel=4; if (chanSel>7) chanSel=0; PORTB = ((PORTB & 0xf8)|chanSel); } void SwitchOff(){ if(PORTB & 0x07){ PORTB = ((PORTB & 0xf8)|0x00); }else{ PORTB = ((PORTB & 0xf8)|0x04); } } //Прерывание по сигналу на кнопке или ИК-приемнику. ISR(PCINT0_vect){ if(PINB&(1<80){ //Если это длительный пакет на входе. >5мс recievedData=0; //Обнуляем данные }else if (ticks>36){ //Пакет >2мс, но меньше 5 recievedData = (recievedData<<1)|1; }else if (ticks>5){ recievedData = (recievedData<<1)|0; } TCNT0=0; //Обнуляем счетчик. } //_delay_ms(200); } } //Прерывание по переполнению таймера. ISR (TIM0_OVF_vect){ //static uint32_t lastData = 0; TCCR0B &= ~(7<