Приветствую, вот пробую научится, принимаю с 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;}}
Заголовок сообщения: Re: а не подскажет ли кто нубу
Добавлено: Вс май 10, 2020 03:55:08
Собутыльник Кота
Карма: 38
Рейтинг сообщений: 268
Зарегистрирован: Пт сен 07, 2018 20:20:02 Сообщений: 2723 Откуда: деревня в Тульской губернии
Рейтинг сообщения:0 Медали: 1
ata100, после того, как NStorm отформатировал Ваш код, что-то стало проясняться. Однако, "огласите весь список, пожалуйста" (с). То бишь, приведите весь код, чтобы, например, я убедился, что переменная x объявлена volatile
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 28
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения