Урок 14. Програмний UART в BASCOM-AVR
В некоторых AVR микроконтроллерах отсутствует аппаратный UART интерфейс связи или по некоторым причинам он не может быть использован. Как же тогда поступить? Можно конечно использовать другой микроконтроллер, но проще и дешевле реализовать программный UART. Его преимущество в том, что программный UART можно реализовать практически на любом AVR микроконтроллере и на любых портах ввода\вывода. Об этом и пойдёт речь в этом уроке.
Программный UART по работе практически ни чем не отличается от аппаратного за исключением того, что для программного нужно чуть больше Flash и RAM памяти чем для аппаратного.
Программная реализация
Чтобы в BASCOM-AVR реализовать программный UART нужно, сначала сконфигурировать порты ввода\вывода на передачу TXD:
Open " порт : скорость , биты , чётность , стоп биты " For Output As #1
И на приём RXD:
Open " порт : скорость , биты , чётность , стоп биты " For Input As #2
Порт необходимо указывать так: com ножка ввода\вывода, например: comb.3 порт на ножку ввода\вывода PB.3 . Скорость, биты, четность и стоп биты указывать как обычно.
Пример команды конфигурации на передачу TXD:
Open "comb.3:9600,8,n,1" For Output As #1
Пример команды конфигурации на приём RXD:
Open "comb.4:9600,8,n,1" For Input As #2
После конфигурации с программным UART можно работать с помощью команд на передачу: Print #1 , данные и на приём: Input #2 , переменная
Стоит помнить что частота, выставленная в BASCOM-AVR командой $crystal должна совпадать с реальной частотой микроконтроллера выставленной фьюз-битами.
Практическая реализация
Теперь попробуем на практике реализовать программный UART. За основу возьмём микроконтроллер без аппаратного UART – ATtiny13, светодиод, кнопку и пару резисторов. Соберём простую схему:
Программа для микроконтроллера будет работать по следующему алгоритму: сначала вывод сообщений потом ожидание команд (LED=1 – включить светодиод, LED=0 – выключить светодиод). В BASCOM-AVR программа выглядит так:
$regfile = "attiny13.dat" $crystal = 9600000 $hwstack = 16 $swstack = 16 $framesize = 16 Open "comb.3:9600,8,n,1" For Output As #1 Open "comb.4:9600,8,n,1" For Input As #2 Dim Cmd As String * 8 Config Portb.2 = Output Print #1 , "Program UART for AVR microcontroller Attiny13" Print #1 , "------" Print #1 , "Developer: Yakovlev Alexander" Print #1 , "E-mail: haker.by@mail.ru" Print #1 , "------" Print #1 , "Hello http://cxem.net !!!" Print #1 , "------" Do Print #1 , "Command:" Input #2 , Cmd If Cmd = "LED=1" Then Portb.2 = 1 Print #1 , "DONE!" End If If Cmd = "LED=0" Then Portb.2 = 0 Print #1 , "DONE!" End If Loop End
Откомпилируйте программу и прошейте ею микроконтроллер. Фьюз-биты необходимо установить на тактирование микроконтроллера от внутреннего тактового генератора на 9.6 МГц без делителя на 8. Пример установки фьюз-битов в программе SinaProg:
Для связи с микроконтроллером по UART можно использовать USB-UART переходник (я так и поступил) и программу Terminal Emulator в BASCOM-AVR. После подачи питания на микроконтроллер и запуска программы нажмите кнопку, указанную на схеме для сброса микроконтроллера.
Я собирал схему на макетной плате, вот что получилось:
Урок 15. Работа с датчиком температуры DS18B20 в BASCOM-AVR
Прикрепленные файлы:
- bascom14.rar (14 Кб)