AVR для начинающих. Урок 10.UART.Продолжение

Автор: | 24.09.2016

Здравствуйте!

В прошлом уроке мы начали говорить об интерфейсе UART. Ознакомиться с ним Вы можете здесь.

Сейчас, изучив все регистры, мы готовы приступить к написанию прошивки, осуществляющей передачу данных.

Вот её код:

Рассмотрим его подробнее.

В функции UART_Init мы инициализируем соответствующие регистры. Установив биты TXCIE и TXEN регистра UCSRB, мы включаем передатчик микроконтроллера и разрешаем прерывание по окончании передачи. После установки битов UCSZ1 и UCSZ передача будет осуществляться по 8 бит. Не забываем также установить бит URSEL, что позволит нам обратиться к регистру UCSRC.Затем мы записываем в младшую часть регистра UBRR число 51. Откуда оно взялось, смотрите в первой части урока.

Функция UART_Send_Char реализует передачу одного байта(8 бит) данных. В ней мы задаем ожидающий цикл while (!(UCSRA&(1<<UDRE))) , который задержит выполнение программы до установки бита UDRE, что будет означать готовность регистра UDR принимать данные. Затем мы записываем необходимый байт в регистр UDR. Дальнейшие заботы по передаче содержимого регистра UDR возьмет на себя контроллер.

Читайте также  AVR для начинающих. Урок 12.SPI.Регистры.

В функции UART_Send_Str реализована отправка строки данных. Каждый символ строки – байт. В цикле while мы посимвольно передаем строку функции UART_Send_Char, описанной выше. Цикл будет повторяться до окончания строки.

В главной функции main вызывается команды UART_Init и UART_Send_Str, описанные выше. Тем самым мы реализуем передачу строки символов «MKPROG.RU» через интерфейс UART.

Проверить работоспособность данной прошивки мы можем в программном комплексе Proteus, уроки по которому вы можете посмотреть здесь.

Создав новый проект, добавляем в него микроконтроллер AtMega8 и VIRTUAL TERMINAL. Виртуальный терминал позволит нам получить данные, передаваемые микроконтроллером по UART интерфейсу. Настроить его необходимо следующим образом:

В результате запуска симуляции видим:

На этом сегодня остановимся. В следующий раз соберем переходник между UART и RS-232, что позволит нам передавать данные с нашего устройства на компьютер!

Спасибо за внимание!

Другие уроки цикла.


Любое копирование, воспроизведение, цитирование материала, или его частей разрешено только с письменного согласия администрации MKPROG.RU. Незаконное копирование, цитирование, воспроизведение преследуется по закону!

AVR для начинающих. Урок 10.UART.Продолжение: 11 комментариев

  1. Владимир

    Подскажи пожалуйста как отправить по UARTу данные АЦП
    для контроля АКБ по SMS. AtMega32.

    1. DamiKK Автор записи

      В прерывании окончания преобразования АЦП, необходимо поместить результат преобразования АЦП(ADCH:ADCL) в регистр UDR.

    2. DamiKK Автор записи

      Напишите пожалуйста Вконтакте(Администратору нашей группы). Там общение будет идти быстрее.

  2. Мао

    Зачем разрешать прерывание по окончании передачи, если не разрешены глобальные прерывания и не прописан сам обработчик прерывания?

    1. DamiKK Автор записи

      Спасибо за замечание!
      Вы правы, это рудимент. Будет исправлено.

  3. Basel

    Спасибо большое за ваш, сайт. У меня вот какой вопрос. не могу настроить атмега8 uart в протеусе. Посылаю char , в осцилографе все нормально согласно ASCII а терминал мусор выдает. уже менял частоту процессора, baud rate не pomogaet. Подскажите в чем причина может быть.

    1. DamiKK Автор записи

      Добрый день!
      Первым делом проверьте настройки контроллера в среде Proteus.Не забудьте поставить кварцевый резонатор(при необходимости),выставить фьюзы, а так же прописать соответствующую частоту работы контроллера, в его свойствах.
      В большинстве случаев, именно из за неправильно выставленной частоты в терминале появляется мусор.
      Если это не поможет, то пишите вновь.

      1. Basel

        Спасибо, за ваш ответ. все перепроверил, частоту процессора, baud rate, число стоп битов, не помогает. Подключаю атмегу 8 через uart usb конвертер к компьютеру , в терминале тоже только точки, что не пошло одни точки в терминале. Нечего не пойму, в чем дело

        1. DamiKK Автор записи

          UART-USB переходник какой модели?Быть может дело в нем?
          И приведите Ваш код, пожалуйста.

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

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