int main(void) { soft_spi1__init(); usart0__init(); usart0__rx__enabled__set(1); USE_AS_OUTPUT(LCD__LED); lcd__init(); lcd__clear(); lcd__terminal__reset(); #if !defined(__AVR_ARCH__) #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wmissing-noreturn" #endif for(;;) { uint8_t c = usart0__in__read(); if (c == 0) { lcd__terminal__reset(); } else if (c == 1) { c = usart0__in__read(); lcd__contrast(c); } else if (c == 2) { OUT_1(LCD__LED); } else if (c == 3) { OUT_0(LCD__LED); } else if (c == 13) { } else if (c == 10) { lcd__terminal__line_feed(); } else if (c == 0x1F) { uint8_t count = usart0__in__read(); for (;;) { c = usart0__in__read(); soft_spi1__write(c); if (!(--count)) break; } } else { lcd__terminal__putch(c); } } #if !defined(__AVR_ARCH__) #pragma clang diagnostic pop #endif #if !defined(__AVR_ARCH__) #pragma clang diagnostic push #pragma ide diagnostic ignored "OCDFAInspection" #endif return 0; #if !defined(__AVR_ARCH__) #pragma clang diagnostic pop #endif }
int main(void) { USE_AS_OUTPUT(LED); onewire__bus__init(); onewire__bus__set(1); _delay_ms(1); timer2__compare_a__interrupt__enable(); timer2__overflow__interrupt__enable(); timer2__conf__set(TIMER2_CONF_PRESCALER_64|TIMER2_CONF_WGM_NORMAL); sei(); for(;;) { onewire__bus__set(0); timer2__value__set(256 - 138); // 118 timer2__compare_a__value__set(256 - 138 + 120); // 238 // will count 238-118 = 120 cycles until compare event (480uS), and 18 more cycles (72uS) until flag is set _delay_ms(1); } }
void led__init(void) { USE_AS_OUTPUT(LED); }
void soft_spi0__init(void) { USE_AS_OUTPUT(SOFT_SPI0__MOSI); USE_AS_OUTPUT(SOFT_SPI0__SCK); }
void init(void) { #if 1 /*НАСТРОЙКА ПОРТОВ*/ /* ============================================================================================== ddr(x) - задает чем будет вывод: 1 - выход 0 - вход ============================================================================================== port(x) - включает подтяжку входа: 1 - подтяжка включена 0 - подтяжка выключена значение 0 так же устанавливает выход в 0 при включении мик-ра, если вывод сконфигурирован выходом, а 1 включает выход относительно минуса питания ==============================================================================================*/ /*НАСТРОЙКА ПОРТОВ*/ // DDRA = 0b11111111; //если 0 значит вход // PORTA = 0b00000000; //если 1 подтяжка включена // DDRB = 0b11111111; // PORTB = 0b00000000; // DDRC = 0b11111111; // PORTC = 0b00000000; // DDRD = 0b11111111; // PORTD = 0b00000000; #ifdef LCD_8BIT USE_AS_OUTPUT(LCD__D0); USE_AS_OUTPUT(LCD__D1); USE_AS_OUTPUT(LCD__D2); USE_AS_OUTPUT(LCD__D3); #endif USE_AS_OUTPUT(LCD__D4); USE_AS_OUTPUT(LCD__D5); USE_AS_OUTPUT(LCD__D6); USE_AS_OUTPUT(LCD__D7); USE_AS_OUTPUT(LCD__RES); USE_AS_OUTPUT(LCD__RW); USE_AS_OUTPUT(LCD__E); #endif //============================================================================================== #if 0 /*Настройка таймера TCNT0*/ TCCR0=(0<<FOC0)|(0<<WGM00)|(0<<COM01)|(0<<COM00)|(0<<WGM01)|(0<<CS02)|(0<<CS01)|(1<<CS00); /* CS02...CS00 - настройка предделителя. 000-таймер выкл, 001-1, 010-8, 011 - 64, 100 - 256, 101 - 1024*/ TIMSK|=(1<<OCIE0)|(0<<TOIE0); //установка разрешений прерываний /* бит0 Разр. прер. по переполнению счетного регистра Т0 (TOIE0) бит1 Разр. прер. по совпадению регистра совпадения с регистром счета Т0 (OCIE0) бит2 Разр. прер. по переполнению счетного регистра Т1 (TOIE1) бит3 Разр. прер. по совпадению регистра совпадения с регистром счета Т1 (OCIE1B) бит4 Разр. прер. по совпадению регистра совпадения с регистром счета Т1 (OCIE1A) бит5 Разр. прер. по захвату Т1 (TICIE1) бит6 Разр. прер. по переполнению счетного регистра Т2 (TOIE2) бит7 Разр. прер. по совпадению регистра совпадения с регистром счета Т2 (OCIE2) */ SFIOR|=(0<<PSR10);//Сброс предделителя Т0,Т1 лог. единицей. OCR0=1; #endif //============================================================================================== LCDinit(); //sei(); }
void onewire__bus__init(void) { USE_AS_OUTPUT(ONEWIRE__OUT); OUT_1(ONEWIRE__OUT); }