USART/UART на ATmega16 — Обмен данными по последовательному каналу

USART/UART на ATmega16 — микроконтроллер ATmega16 (ATmega32) имеет в своем составе модуль универсального синхронно/асинхронного приемопередатчика —  USART. С его помощью можно организовать обмен данными по последовательному каналу между компьютером и микроконтроллером или между двумя микроконтроллерами.
Как создать проект в Atmel Studio 7 смотрим здесь.

Пример программы в Atmel Studio 7 на C

// UART на ATmega16
#define F_CPU 8000000UL 
#define BAUD 9600
#define MYUBRR F_CPU/16/BAUD-1

#include <avr/io.h>

void USARTInit(unsigned int ubrr) {
  //  нормальный асинхронный двунаправленный режим работы
  //  UBRR = f / (16 * band)
  //  Установка скорости
  UBRRH = (unsigned char)(ubrr>>8);
  UBRRL = (unsigned char)(ubrr);

  //  RXC         - завершение приёма
  //  |TXC        - завершение передачи
  //  ||UDRE      - отсутствие данных для отправки
  //  |||FE       - ошибка кадра
  //  ||||DOR     - ошибка переполнение буфера
  //  |||||PE     - ошибка чётности
  //  ||||||U2X   - Двойная скорость
  //  |||||||MPCM - Многопроцессорный режим
  //  ||||||||
  //  76543210
  UCSRA = 0;
  
  //  RXCIE       - прерывание при приёме данных
  //  |TXCIE      - прерывание при завершение передачи
  //  ||UDRIE     - прерывание отсутствие данных для отправки
  //  |||RXEN     - разрешение приёма
  //  ||||TXEN    - разрешение передачи
  //  |||||UCSZ2  - UCSZ0:2 размер кадра данных
  //  ||||||RXB8  - 9 бит принятых данных
  //  |||||||TXB8 - 9 бит переданных данных
  //  ||||||||
  //  76543210

  //  разрешен приём и передача данных по UART
  UCSRB = 1<<RXEN | 1<<TXEN;
  
  //  URSEL        - всегда 1
  //  |UMSEL       - режим: 1-синхронный 0-асинхронный
  //  ||UPM1       - UPM0:  1 чётность
  //  |||UPM0      - UPM0:  1 чётность
  //  ||||USBS     - стоп биты: 0-1, 1-2
  //  |||||UCSZ1   - UCSZ0: 2 размер кадра данных
  //  ||||||UCSZ0  - UCSZ0: 2 размер кадра данных
  //  |||||||UCPOL - в синхронном режиме - тактирование
  //  ||||||||
  //  76543210
  //  8-битовая посылка, 2 стоп бита
  UCSRC = 1<<URSEL | 1<<USBS | 1<<UCSZ0 | 1<<UCSZ1;
}

//  Отправка байта
void USARTTransmitChar(char c) {
  //  Устанавливается, когда регистр свободен
  while(!( UCSRA & (1<<UDRE)));
  UDR = c;
}

//  Отправка строки
void USARTTransmitString(char str[]) {
  register char i = 0;
  while(str[i]) {
    USARTTransmitChar(str[i++]);
  }
}

//  Отправка строки
void USARTTransmitStringLn(char str[]) {
  USARTTransmitString(str);
  USARTTransmitChar((char)13);
  USARTTransmitChar((char)10);
}

//  Получение байта
char USARTReceiveChar(void) {
  //  Устанавливается, когда регистр свободен
  while(!(UCSRA & (1<<RXC)));
  return UDR;
}

int main(void) {
  USARTInit(MYUBRR);
  USARTTransmitStringLn("Привет");
  USARTTransmitStringLn("Сайт: micro-pi.ru");
  while (1) {
    char c = USARTReceiveChar();
    USARTTransmitString("Вы отправили: ");
    USARTTransmitChar(c);
    USARTTransmitStringLn("");
  }
}

Регистры UART на ATmega16

UBRRL и UBRRH
UBRRL и UBRRH Register - UART(USART) ATmega16 - Обмен данными по последовательному каналу (6)
UCSRA
UCSRA Register - UART(USART) ATmega16 - Обмен данными по последовательному каналу (5)
UCSRB
UCSRB Register - UART(USART) ATmega16 - Обмен данными по последовательному каналу (8)
UCSRC
UCSRC Register - UART(USART) ATmega16 - Обмен данными по последовательному каналу (7)
UDR
UDR Register - UART(USART) ATmega16 - Обмен данными по последовательному каналу (4)

Схема подключения. Создание схемы в ISIS 7 Professional — Proteus. Симуляция программы на ATmega16

Для начала нам нужно создать схему, добавить компоненты, указывать путь к .hex или .elf файлу. Если не знаем как это делается переходим на странице Мигание светодиодом на ATmega16/32.

  1. В Virtual Instruments Mode выбираем VIRTUAL TERMINAL и добавляем его.Схема подключения. USART/UART на ATmega16 - Обмен данными по последовательному каналу (1)
  2. Соединяем терминал к микроконтроллеру: RXD контроллера к TXD терминала и RXD терминала к TXD контроллера.
    Схема подключения. USART/UART на ATmega16 - Обмен данными по последовательному каналу (2)
  3. Нажимаем кнопку Play для запуска симуляции. В терминале нажимаем на клавиши чтобы отправить на контроллер данные. К примеру, если нажать ‘x‘ контроллер отвечает нам сообщением: ‘Вы отправили: x‘, где  нажатая клавиша.
    Схема подключения. USART/UART на ATmega16 - Обмен данными по последовательному каналу (3)

 

 

Похожие записи

Комментарии 6

  • Привет. Хороший материал. Вот только почему то в протеусе нет русского текста и ошибки в студии. Ничего не изменял, все скопировал и вставил в студию. Спасибо


    • Опция Set Font вызывает дополнительное окно выбора шрифта для окна терминала.

      Хочу отметить, что обычно после установки Протеуса для терминала принят западноевропейский шрифт, поэтому, если вам нужна кириллица в терминале, то вам прямиком сюда. Здесь необходимо выбрать шрифт, в котором наверняка имеется кириллица, например, Courier. В этом же окне можно установить и размер шрифта по умолчанию стоит 8, что, например, для меня полуслепого мелковато. Шрифт достаточно установить один раз, потом в последующих проектах при выборе терминала он будет таким, каким вы его прописали ранее.

      А вот по поводу ошибок можно по подробнее, какие именно ошибки и выдаёт?

  • Здравствуйте, я надеюсь, что тема еще жива. Спасибо автору за статью, в общем работает в симуляторе но не очень правильно. Мне нужна помощь. В консоли терминала протеуса рисует одну верхнюю кавычку, в терминале путти пишет строку micro-pi.ru но при этом есть куча мусора, вместо символов прямоугольники полосами. Не понимаю что нужно делать, что я не так настроил.

  • Здравствуйте, а между двумя контроллерами можно сделать такую же связь?

  • All football predictions on OneMillionPredictions are completely free. Tomorrow — 18:45 Combined Newsletters For further information about football bets and different categories, please see the free predictions & football betting tips page. Tomorrow — 18:45 Sportpesa TZ Jackpot Predictions Here we will have wins and loses but odd is very big every day and with our bank management of the bets we will bring you long term success from betting on soccer matches! We are here only to help you choose the right matches for your bets, and we will do our best to provide you our best match predictions. But nothing is guaranteed, so please don’t bet money you can’t afford to lose, because ZuluBet are not responsible for any losses you may have using the free tips on our website.
    https://lifeinsys.com/user/pauprocmacu1984
    While Major League Baseball teams play pretty much every day throughout the season, they’re used to it. Chewing gum tobacco sunflower seeds, sprinting for the odd ball on defense, scratching your jock and taking 10 swings in a game isn’t quite as draining as playing the close-to-30 minutes of NHL hockey that a top defenceman might see. oldest active nhl players 23-24 nhl player with most goals 2024 The total is a number set by the sportsbook, which indicates the combined number of goals they expect to be scored by both teams in a specific game. This number allows bettors to take a side (over under) and wager against the total. our NHL over under predictions are more than just educated guesses. We crunch numbers like Zambonis on overtime, factoring in everything from scorching trends to obscure goalie matchups to predict the symphony of goals each game will unleash. Here’s a peek into the magic behind our puck-tastic predictions:

  • Профессиональный сервисный центр по ремонту бытовой техники с выездом на дом.
    Мы предлагаем: ремонт крупногабаритной техники в москве
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *