int main(void) { // Разрешить светодиод arduino pro mini. DDRB |= _BV(DDB5); timer_init(); uart_async_init(); i2c_init(); queue_init(); init_int0(); // Разрешить прерывания. sei(); uart_readln(&commands_reciver); uart_writeln("start"); // Бесконечный цикл с энергосбережением. for(;;) { switch(queue_getTask()) { case DO_REQUEST_RTC_DATA_START : //Установть позицию на регистр 0x0 ds3231_buf[0] = 0; i2c_send(0xD0, ds3231_buf, 1, &callBackForRequestRtcData); break; case DO_REQUEST_RTC_DATA_END : //Читаем 7 байт i2c_recive(0xD0 + 1, ds3231_buf, 7, &callBackForRequestRtcData); break; case DO_TIMER1_OVF : i2c_init(); //queue_putTask(DO_REQUEST_RTC_DATA_START); timer1_doing = 0; break; case COMMAND_SEND_I2C : i2c_send(commands_reciver_param1[0], // Адресс. commands_reciver_param2, // Буфер. commands_reciver_param3[0], // Количество. &callBackForSendI2CData); break; case COMMAND_RECIVE_I2C : i2c_recive(commands_reciver_param1[0], // Адресс. ds3231_buf, // Буфер. commands_reciver_param3[0], // Количество. &callBackForReciveI2CData); break; default : sleep_mode(); } } return 0; }
int main(void) { uint16_t CalcCRC16(uint8_t data_array[], int data_lenght); int i; /////////////////////OSCYLATOR 32MHZ/////////////////////////////////////////// init_osc32(); ////KONFIGURACJA ADC//////////////////////////////////////////////////////////////// konfiguracja_adc(); /////////UART//////////////////////////////////////////////////////////////////////// PORTC_OUTSET = PIN7_bm; //Let's make PC7 as TX PORTC_DIRSET = PIN7_bm; //TX pin as output PORTC_OUTCLR = PIN6_bm; PORTC_DIRCLR = PIN6_bm; //PC6 as RX setUpSerial(); /////////////////////////////////////////////////////////////////////////////// PORTF_DIR=PIN0_bm; //PORTF_OUTSET=PIN0_bm; //zapalenie diody PORTC.DIRSET = PIN0_bm; // pin C0 jako wyjœcie PORTC.DIRSET = PIN1_bm; // pin C0 jako wyjœcie ////////////////////////Flip//////////////////////////////////////////////// PORTE.DIRCLR = PIN5_bm; // pin E5 jako wejœcie PORTE.PIN5CTRL = PORT_OPC_PULLUP_gc; // podci¹gniêcie do zasilania ////////////////////////////Klawisze gora do³ prawo lewo////////////////////////////////////////// PORTF.DIRCLR = PIN1_bm|PIN2_bm|PIN5_bm|PIN6_bm; PORTF.PIN1CTRL = PORT_OPC_PULLUP_gc|PORT_ISC_FALLING_gc; PORTF.PIN2CTRL = PORT_OPC_PULLUP_gc; PORTF.PIN5CTRL = PORT_OPC_PULLUP_gc; PORTF.PIN6CTRL = PORT_OPC_PULLUP_gc; ///////////////////////////////////Przerwanie INT0///////////////////////////////////////////////////// init_int0(); //////////////////////////TIMER0////////////////////////////////////////////////////// timer(); //////////////////////W£¥CZENIE PRZERWAÑ////////////////////////////////////////// sei(); // globalne w³¹czenie przerwañ //////////////////////////////////////////////////////////////////////////////////////// LcdInit(); // inicjalizacja sterownika LCD LcdGoto(0,0); Lcd("*Inzynierka_DiagBoX*"); // wyœwietlenie napisu LcdGoto(20,0); Lcd("Przedstawia:"); LcdGoto(25,1); Lcd("Marek Wudarczyk"); _delay_ms(1000); LcdClear(); while (1){ LcdClear(); LcdGoto(0,0); LcdDec(ADC); LcdGoto(5,0); Lcd("CNT = "); LcdDec(TCC0.CNT); LcdGoto(0,1); LcdDec(TCC0.PER); LcdGoto(20,1); Lcd("czas:"); LcdDec(c); i=usart_getc(); if(i==2){ while(1){ uint8_t i,j=0; i=usart_getc(); uint16_t ADC = ADC_GetResults(); uint8_t buff[] = {mlody_bajt(ADC),stary_bajt(ADC)}; buff[2] = mlody_bajt(CalcCRC16(buff,2)); buff[3] = stary_bajt(CalcCRC16(buff,2)); while(j<4){ sendChar(buff[j]); j++; } LcdClear(); Lcd("CRC:"); LcdDec(buff[2]); _delay_ms(10); if(i == 2){ break; } } i=0; } if(i==1){ PORTF_OUTTGL=PIN0_bm; i=0; } if(!(PORTE.IN & PIN5_bm)) /* je¿eli przycisk FLIP jest wciœniêty*/ { while(1){ uint32_t licz; licz++; if((licz>15100)&&(PORTE.IN & PIN5_bm)){ licz=0; c+=10; break; } } } _delay_ms(100); } }