Easyelectronics.ru

Электроника для всех
Текущее время: 22 янв 2021, 20:35

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: Имитация ошибки передачи USART в Proteus
СообщениеДобавлено: 03 окт 2019, 18:41 
Заглядывает иногда

Зарегистрирован: 14 июн 2019, 10:29
Сообщения: 57
Пытаюсь имитировать ошибку передачи данных по шине USART.
Путем уменьшения скорости (до 1200 бит\с) я смог добиться только одного флага ошибки DOR (Есть перезапись принятого байта).
Никак не получается имитировать ошибку по FE (Frame error), PE (parity error).
Старался и выставлять другую битность, четность, скорость. Но ошибки вызвать не получается.
Код главной функции:
Код:
while (1){
      //USART_transmit('1');
      //_delay_ms(1000);
      
      
      while (!(UCSRA & (1 << RXC)));
      
      if (!(UCSRA & (1 << DOR))){
         //TWI_init();   
         LCD_send_command(0x80);
         LCD_send_data('O');
         LCD_send_data('K');
         //TWI_stop();

      }else{
         //TWI_init();
         LCD_send_command(0x80);
         LCD_send_data('E');
         LCD_send_data('r');
         LCD_send_data('r');
         //TWI_stop();
      }
      
      if (!(UCSRA & (1 << FE))){
         //TWI_init();
         LCD_send_command(0xC0);
         LCD_send_data('O');
         LCD_send_data('K');
         //TWI_stop();
      }else {
         //TWI_init();
         LCD_send_command(0xC0);
         LCD_send_data('E');
         LCD_send_data('r');
         LCD_send_data('r');
         //TWI_stop();
      }
      
      if (!(UCSRA & (1 << PE))){
         //TWI_init();
         LCD_send_command(0x90);
         LCD_send_data('O');
         LCD_send_data('K');
         //TWI_stop();
      }else {
         //TWI_init();
         LCD_send_command(0x90);
         LCD_send_data('E');
         LCD_send_data('r');
         LCD_send_data('r');
         //TWI_stop();
      }
      
      
      
      char flushUsartDataRegister = UDR;
      
   }

Код настройки USART
Код:
void USART_init(uint8_t speed){
   UBRRL = (F_CPU/BAUDRATE/16-1); // Вычисляем скорость обмена данными
   UBRRH = (F_CPU/BAUDRATE/16-1) >> 8;
   
   UCSRB |= (1 << RXCIE)|
   (1 << RXEN)|(1 << TXEN);
   
   UCSRC |= (1 << URSEL)| (1 << UCSZ1)|(1 << UCSZ0) | (1 << UPM1) | (1 << UPM0) | (1 << USBS);
   
}


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB