OlegALL (23.01.2014 08:22 - 09:26, просмотров: 7647)
Проблема: после изменения переменной в обработчике прерывания по приёму в UART в другой функции она не изменяется. Поставил volatile, как надо, отключал оптимизацию - не помогает. Компилятор: AVR Studio 4.18, процессор ATMega 168
Код:
#include "main.h"
volatile unsigned int send_flag = 0;
int main (void){
init();
while (1){
//if (flags.send_answer == 1){
//send_flag = 1;
if (send_flag == 1){
// КОД НИЖЕ НЕ ИСПОЛНЯЕТСЯ
PORTC |= 1<<PC4;
}
}
}
ISR(USART_RX_vect){
send_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;
debug();
//get_lrc();
if (request_lrc.two_bytes == 0x3b){
// приём завершён
}
//flags.send_answer = 1;
break;
default:
rx_stage = 0;
break;
}
}