コード例 #1
0
ファイル: main.c プロジェクト: semicontinuity/embedded
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
}
コード例 #2
0
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);
    }
}
コード例 #3
0
ファイル: main.c プロジェクト: semicontinuity/embedded
void led__init(void) {
    USE_AS_OUTPUT(LED);
}
コード例 #4
0
ファイル: soft_spi0.c プロジェクト: semicontinuity/embedded
void soft_spi0__init(void) {
    USE_AS_OUTPUT(SOFT_SPI0__MOSI);
    USE_AS_OUTPUT(SOFT_SPI0__SCK);
}
コード例 #5
0
ファイル: init.c プロジェクト: semicontinuity/embedded
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();
}
コード例 #6
0
void onewire__bus__init(void) {
    USE_AS_OUTPUT(ONEWIRE__OUT);
    OUT_1(ONEWIRE__OUT);
}