static void wait_ready(void) { /* _delay_ms(1); return; */ uint8_t flag; lcdPrepareRead(); CMD_RS0(); do { CMD_E_MARK(); CMD_E_DELAY(); flag = PIN(LCD_D7); CMD_E_RELEASE(); CMD_E_DELAY(); wdr(); } while(flag); lcdPrepareWrite(); /* uint16_t i; for(i=0; i<2000; i++) asm volatile ("nop"); */ }
int main(void) { OSCCAL=eeprom_read_byte(0x00); // Настройка генератора. PRR=0x0b; // выключаем лишние устройства. DDRB=0b00000111; // настраиваем порт в PORTB=0b00000000; // сбрасываем в ноль DDRA= 0b10011000; // настраиваем порт А PORTA=0b00010000; // выключаем приемопередатчик DIDR0=0b00000110; // отключаем цифровые входы от компаратора // сторожевой таймер WDTCSR=0x18; // настраиваем сторожевой таймер WDTCSR=0x29; // сторожевой таймер сброс через 8 секунд. // настройка переменных flag=0; set_sleep_mode(SLEEP_MODE_IDLE); sleep_enable(); id_yd=0; while (1) { ClsBit(PORTA,pwr_up); // выключаем приемник flag=0; delay_ms(20); ACSR=0b00011011; // включаем компаратор. delay_ms(10); sei(); // разрешаем прерывания while(!flag) sleep_cpu(); //ждем удара и усыпляем контролер // удар произошел передаем данные // cli(); // запрещаем прерывания. SetBit(PORTA,pwr_up); // включаем приемник delay_ms(10); // задержка 10 ms. LoadConf(); // загружаем конфигурацию. // передаем пакет. PutChar(0xe7); PutChar(adr); PutChar(id_yd); ce0; // активизируем передачу delay_ms(9); // делаем выдержку по времени 1 ms. wdr(); // сбрасываем сторожевой таймер. } }