void main() { EA=1; P1&=0XEF; Timer0_Init(1); Timer1_Init(); INT0_Init(); while(1) { if(Flag_IR) { Flag_IR=0; LedBuff[0]=LedChar[IRBuff[0]/16]; LedBuff[1]=LedChar[IRBuff[0]%16];; LedBuff[4]=LedChar[IRBuff[2]/16];; LedBuff[5]=LedChar[IRBuff[2]%16];; } } }
void main(void) { PORT_Init (); TIMER1_Init(); ADC_Init(); INT0_Init (); INT1_Init (); //Habilitación de interrupciones sei(); while(1) { if (cont_INT0 == 1 || cont_INT1 == 1) { //Nueva conversión startConversion(); } //No interrupción externa INT0 if (FlagINT == false) { //Habilitación de interrupción externa INT0 EIMSK |= (1 << INT0); //Habilitación de interrupción externa INT1 EIMSK |= (1 << INT1); } //Interrupción externa INT0 else { //Espera de 40 ms _delay_ms(40); //Terminación de atención interrupción externa INT0 FlagINT = false; } } }
int main(void) { /*Ждем пока все включится*/ _delay_ms(100); /*Настраиваем порты ввода-вывода*/ DDRB = 1<<PORTB0|1<<PORTB1|1<<PORTB2|1<<PORTB3|1<<PORTB4|1<<PORTB5|1<<PORTB6|1<<PORTB7; DDRC = 1<<PORTC0|1<<PORTC1|1<<PORTC2|0<<PORTC3|0<<PORTC4|0<<PORTC5|0<<PORTC6|0<<PORTC7; DDRD = 0<<PORTD0|0<<PORTD1|0<<PORTD2|0<<PORTD3|1<<PORTD4|0<<PORTD5|0<<PORTD6|1<<PORTD7; PORTB = 1; PORTD = 1 << PORTD2; /*Тяга двигателей на минимум*/ for(uint8_t k = 0; k < CHANNELS_COUNT; ++k) { counter[k] = LOW; } /*Настраиваем I2C*/ TWSR = 0x00; TWBR = ((F_CPU / I2C_SPEED) - 16) / 2; _delay_us(10); /*Включаем Таймер0*/ TCCR0 = 1<<CS02 | 0<<CS01 | 0<<CS00; /*Включаем Таймер1*/ OCR1A=HIGH; //TOP TCCR1A=0<<COM1A1|0<<COM1A0|1<<COM1B1|0<<COM1B0|0<<FOC1A|0<<FOC1B|1<<WGM11|1<<WGM10; TCCR1B=0<<ICNC1|0<<ICES1|1<<WGM13|1<<WGM12|0<<CS12|0<<CS11|1<<CS10; TIMSK= 1<<TOIE2 | 1<<OCIE1A|1<<OCIE1B|0<<TOIE1|1<<TOIE0|0<<OCIE0; OCR1B=LOW; /*Включаем АЦП*/ ADC_Init(); /*Включаем прерывание INT0(высотомер)*/ INT0_Init(); /*Разрешаем работу прерываний*/ sei(); /*Настраиваем Modbus*/ eMBErrorCode eStatus = eMBInit( MB_RTU, 0x01, 0, 57600, MB_PAR_NONE ); eStatus = eMBEnable(); /*Настраиваем сенсоры*/ SensorsInit(); /*Загружаем в Holding Registers и в массив параметров значения из EEPROM*/ ModbusInitValues(); filterInit(); while(1) { /*Актуализируем значения Modbus-регистров в соответствии со значениями параметров*/ ModbusLoader(); /*Актуализируем значения параметров в соответствии со значениями Holding Registers*/ ModbusSaver(); /*Итерация Modbus*/ eMBPoll(); /*Ресурсоемкий расчет курса*/ Course_Calc(); } }
int main(void) { stdout = &usart_str; // указываем, куда будет выводить printf ports_Init(); MT8870_Init(); USART_init(); // включаем uart INT0_Init(); timerDelayInit(); nDevices = search_ow_devices(); // ищем все устройства printf("---------- Found %d devices ----------", nDevices); for (unsigned char i=0; i<nDevices; i++) // теперь сотируем устройства и запрашиваем данные { // узнать устройство можно по его груповому коду, который расположен в первом байте адресса switch (owDevicesIDs[i][0]) { case OW_DS18B20_FAMILY_CODE: { // если найден термодатчик DS18B20 printf("\r"); print_address(owDevicesIDs[i]); // печатаем знак переноса строки, затем - адрес printf(" - Thermometer DS18B20"); // печатаем тип устройства DS18x20_StartMeasureAddressed(owDevicesIDs[i]); // запускаем измерение timerDelayMs(800); // ждем минимум 750 мс, пока конвентируется температура unsigned char data[2]; // переменная для хранения старшего и младшего байта данных DS18x20_ReadData(owDevicesIDs[i], data); // считываем данные unsigned char themperature[3]; // в этот массив будет записана температура DS18x20_ConvertToThemperature(data, themperature); // преобразовываем температуру в человекопонятный вид printf(": %d.%d C", themperature[1],themperature[2]); } break; case OW_DS18S20_FAMILY_CODE: { // если найден термодатчик DS18B20 printf("\r"); print_address(owDevicesIDs[i]); // печатаем знак переноса строки, затем - адрес printf(" - Thermometer DS18S20"); // печатаем тип устройства } break; case OW_DS1990_FAMILY_CODE: { // если найден электронный ключ DS1990 printf("\r"); print_address(owDevicesIDs[i]); // печатаем знак переноса строки, затем - адрес printf(" - Serial button DS1990"); // печатаем тип устройства } break; case OW_DS2430_FAMILY_CODE: { // если найдена EEPROM printf("\r"); print_address(owDevicesIDs[i]); // печатаем знак переноса строки, затем - адрес printf(" - EEPROM DS2430"); // печатаем тип устройства } break; case OW_DS2413_FAMILY_CODE: { // если найден ключ printf("\r"); print_address(owDevicesIDs[i]); // печатаем знак переноса строки, затем - адрес printf(" - Switch 2413"); // печатаем тип устройства } break; case OW_DS2405_FAMILY_CODE: { // если найден ключ printf("\r"); print_address(owDevicesIDs[i]); // печатаем знак переноса строки, затем - адрес printf(" - Switch 2405"); // печатаем тип устройства addSwitchIndex(i); DS24x05_Add(owDevicesIDs[i]); } break; } } commands_Reset(); sei(); for(;;) { toggleSwitches(); } }