Приветствую, вот пробую научится, принимаю с usart данные и отображаю (tiny2313). в протеусе,
если функция if и switch стоит в прерывании ,все работает,вот этот код работает в симуляторе,, но если переношу ее в main ,в прерывании оставляю только x=UDR; то switch отрабатывает только case 8и9,и PORTD |= (1 <<6) тоже непроисходит, т.е. влючается только PD5. я ничего кроме переноса в меин не меняю .подскажите плиз ,в чем дело, Спасибо!
ISR(USART_RX_vect)
{
x=UDR;
if(x&(1<<7))//включаю D6 если 1 бит=1
{PORTD |= (1 <<6) ;x=x>>4;//получаю первые 4 бита/
switch(x){
case 8:PORTD &= ~(1<<5); //если0х80
break;
case 9:PORTD |= (1<<5);//0x90
break;
case 10:PORTD |= (1<<2);PORTA |=(1<<1); //если 0ха0
break;
case 11:PORTD |= (1<<3);//если 0хв
break;
case 12:PORTD |= (1<<4);//если 0хс
break;};}else{PORTD &= ~((1 <<6)|(1 <<2)|(1 <<3)|(1 <<4));PORTA &= ~(1<<1);};
}
int main(void)
{ io_init();
port_ini();
while(1){PORTB=x;}}
если функция if и switch стоит в прерывании ,все работает,вот этот код работает в симуляторе,, но если переношу ее в main ,в прерывании оставляю только x=UDR; то switch отрабатывает только case 8и9,и PORTD |= (1 <<6) тоже непроисходит, т.е. влючается только PD5. я ничего кроме переноса в меин не меняю .подскажите плиз ,в чем дело, Спасибо!
ISR(USART_RX_vect)
{
x=UDR;
if(x&(1<<7))//включаю D6 если 1 бит=1
{PORTD |= (1 <<6) ;x=x>>4;//получаю первые 4 бита/
switch(x){
case 8:PORTD &= ~(1<<5); //если0х80
break;
case 9:PORTD |= (1<<5);//0x90
break;
case 10:PORTD |= (1<<2);PORTA |=(1<<1); //если 0ха0
break;
case 11:PORTD |= (1<<3);//если 0хв
break;
case 12:PORTD |= (1<<4);//если 0хс
break;};}else{PORTD &= ~((1 <<6)|(1 <<2)|(1 <<3)|(1 <<4));PORTA &= ~(1<<1);};
}
int main(void)
{ io_init();
port_ini();
while(1){PORTB=x;}}
