Современная электроника №8/2021
ПРОЕКТИРОВАНИЕ И МОДЕЛИРОВАНИЕ 45 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 8 2021 В этом состоянии флаг остаётся до сле- дующей записи в буфер. Выключение передатчика осущест- вляется сбросом бита TXEN регистра UCSRB. Если в момент выполнения этой команды осуществлялась переда- ча, сброс бита произойдёт только после завершения текущей и отложенной передач, то есть после очистки сдвиго- вого и буферного регистров передат- чика. При выключенном передатчике вывод TXD может использоваться как контакт ввода/вывода общего назна- чения. Работа приёмника разрешается уста- новкой бита RXEN регистра UCSRB. При установке бита вывод RXD подключает- ся к приёмнику USART и начинает функ- ционировать как вход, независимо от установок регистров управления пор- том. Если используется синхронный режим работы, переопределяется так- же функционирование вывода XCK. Выключение приёмника осущест- вляется сбросом бита RXEN регистра UCSRB. В отличие от передатчика, при- ёмник выключается сразу же после сброса бита, а значит, кадр, прини- маемый в этот момент, теряется. Кро- ме того, при выключении приёмника очищается его буфер, то есть теряются также все непрочитанные данные. При выключенном приёмнике вывод RXD может использоваться как контакт вво- да/вывода общего назначения. Рассмотрим работу модуля USART на конкретном примере. Передадим программным способом на экран вир- туального терминала комбинацию символов «ABC». Для этого создадим в Proteus новый проект с использова- нием микроконтроллера ATmega16 и добавим в рабочее поле виртуальный Рис. 20. Схема передачи данных при помощи модуля USART микроконтроллера ATmega16 Рис. 21. Код программы инициализации микроконтроллера ATmega16 на вкладке Source Code терминал, а также виртуальный осцил- лограф для просмотра осциллограммы работы USART. Подсоединим вывод TXD микрокон- троллера к выводу RXD виртуального терминала, а также к каналу А осцилло- графа. В окне настроек микроконтрол- лера Edit Component установим следу- ющие параметры (см. рис. 19): ● поле CKOPT (Oscillator Options) – (1) Unprogrammed; ● поле BOOTRST (Select Reset Vector) – (1) Unprogrammed; ● поле CKSEL Fuses – (1111) Ext.Crystal High Freq.; ● поле Boot Loader Size – (00) 1024 words. Starts at 0x1C00; ● поле SUT Fuses – (11); ● поле Advanced Properties – Clock Frequency 8000000. Окно настроек открывают двой- ным щелчком левой кнопки мыши по выбранному на схеме микроконтрол- леру. Для проверки работы собранной схе- мы (см. рис. 20) на языке программиро- вания ассемблер была написана следу- ющая программа (см. рис. 21): . include «m16def.inc» ; подключе- ние стандартного заголовочного фай- ла для ATmega16 .equ fCK = 8000000 ; частота в герцах .equ BAUD = 9600 ; скорость для USART в бодах .equ UBRR_value = (fCK/(BAUD × 16)) – 1 ; рассчитываем значение для регистра UBRR main: ; Код основной программы rcall init_USART ldi R16,0b01000001 ; двоичный код символа ‘A’ rcall USART_send ldi R16,0b01000010 ; двоичный код символа ‘B’ rcall USART_send ldi R16,0b01000011 ; двоичный код символа ‘C’ rcall USART_send loop: rjmp loop init_USART: ; Подпрограмма ини- циализации USART ldi R16,high(UBRR_value) ; уста- навливаем скорость 9600 бод out UBRRH,R16 ldi R16,low(UBRR_value) out UBRRL,R16 ldi R16,(1<<TXEN) ; разрешаем работу передатчика out UCSRB,R16 ldi R16,(1<< URSEL)|(1<< UCSZ0)|(1<< UCSZ1) out UCSRC,R16 ; устанавливаем режим 8 бит данных, без проверки чётности, ;асинхронный режим ret USART_send: sbis UCSRA,UDRE ; ждём пока бит UDRE регистра UCSRA не будет пуст rjmp USART_send out UDR,R16 ; посылаем байт по USART, кладём данные в регистр UDR ret После того как в рабочей области проекта собрана схема, а на вкладке Source Code введён код программы, можно запускать моделирование. Как видно из рис. 20, разработанный про- ект функционирует верно: на экран виртуального терминала была выведе- на указанная в коде программы комби- нация символов. Осциллограмма рабо- ты USART показана на рис. 22.
RkJQdWJsaXNoZXIy MTQ4NjUy