ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 марта
477915
OlegALL (04.01.2014 09:25 - 09:31, просмотров: 1514)
В обработчике прерывания по приёму изменяю переменную flag (=1). Однако при переходе в основной цикл ветка if не обрабатывается. (не заходит внутрь). Не понимаю почему. Если бы вместо обработчика была простая функция, тогда всё ок - проверял. Компилятор AVR Studio 4.18 Код: int main (void){ init(); while (1){ if (flag == 1){ PORTC |= 1<<PC4; PORTC |= 1<<PC4; } asm("nop"); } } ISR(USART_RX_vect){ flag = 1; switch (rx_stage){ case WAITING_START: if (UDR0 == REQUEST_START){ request[rx_stage] = UDR0; rx_stage++; } break; case WAITING_COMMAND: request[rx_stage] = UDR0; rx_stage++; break; case WAITING_LRC_HIGH: request_lrc.byte.high = UDR0; rx_stage++; break; case WAITING_LRC_LOW: request_lrc.byte.low = UDR0; rx_stage = 0; //if (request_lrc.two_bytes == get_lrc()){ if (request_lrc.byte.high == 0x00){ // приём завершён debug(); } if (request_lrc.byte.low == 0x3b){ // приём завершён debug(); } /* if (request_lrc.two_bytes == 0x00){ // приём завершён debug(); }*/ break; default: rx_stage = 0; break; } }