Программная реализация передачи данных по последовательному порту в микроконтроллерах PIC16
Автор: Захаров Д.С., Леонтьев Н.А.
Журнал: Форум молодых ученых @forum-nauka
Статья в выпуске: 12-2 (28), 2018 года.
Бесплатный доступ
В данной статье рассматривается программная реализация передачи данных по последовательному порту в микроконтроллерах PIC16. Разработка алгоритма для передачи данных по последовательному формату и реализация алгоритма на языке программирования Assembler, симуляция в интегрированной среде разработки MPLab IDE.
Ключевые деятельности слова:uart, передача данных, keyword: системе uart
Короткий адрес: https://sciup.org/140281058
IDR: 140281058
Текст научной статьи Программная реализация передачи данных по последовательному порту в микроконтроллерах PIC16
Keyword: сUART, data transmission, PIC16
Микроконтроллеры часто применяются в качестве управляющего элемента для датчиков и различных модулей. В данном случае контроль работы осуществляется непосредственно передачей и приемом данных по последовательному (UART) порту. В микроконтроллерах PIC для реализации данной задачи обычно используется модуль USART, которая включается и настраивается изменением соответствующих регистров. В данной статье будет рассматриваться программная реализация последовательной передачи данных без использования модуля USART. [1]
Для реализации передачи данных по UART порту используется формат последовательной передачи данных (Рисунок 1). Данный формат подразумевает побитную передачу данных, начиная с младшего бита старшего байта. Перед передачей данных на выходную ножку устанавливается режим ожидания в качестве «1», поначалу передачи данных на ножку подается стартовый бит «0», по окончанию стоповый бит «1». Также следует рассчитать длительность одного бита в зависимости от скорости передачи данных. Скорость передачи данных для большинства устройств 9600 бод, тогда длительность одного передаваемого бита:
т = = 104 мкс
movlw |
.9 |
movwf |
Reg_2 |
bcf |
STATUS,C |
Режим ожидания

Рисунок 1. Формат последовательных данных
Для побитной передачи данных используется команда RRF, которая позволяет сдвигать регистр передаваемых данных направо на один бит. Значение сдвинутого бита присваивается на бит C регистра STATUS. Также необходимо использовать декрементируемый регистр, в котором записывается число 9 (стартовый бит + 8 бит данных). Передача данных производится с помощью команды проверки флага STATUS,C если «0» то на выход подаем «0», если «1» то подаем «1».
Запись декрементируемого регистра и подготовка стартового бита:
ожидания
Передача данных начинается с проверки флага STATUS, C заранее настроенного на стартовый бит. После подачи стартового бита выполняется команда сдвига направо и, начиная с младшего бита, происходит передача данных посредством проверки значение флага STATUS, C и подачей на выход. По окончанию декремента, что соответствует последнему передаваемому биту, устанавливается стоповый бит и режим ожидания «0».
btfsc STATUS,C
bsf PORTB,2
bcf PORTB,2
rrf Data,1
decfsz Decrement,1
goto |
m1 |
bsf |
PORTB,2 |
call |
Pause |
После каждой подачи бита необходимо реализовать задержку на 104 мкс начиная со стартового бита:
Pause movlw .31 movwf Reg_1 wr decfsz Reg_1, 1 goto wr nop return end;
Результат симуляции программы в среде разработки MPLab IDE:
022 dlit2_h 00000001
023 dllt^l 10011111

Рисунок 2. Последовательная передача 2х байтов.
Результат проверки алгоритма через логический анализатор.

Рисунок 3. Результат последовательной передачи данных на логическом анализаторе
Таким образом, данная программа выполняет последовательную передачу данных на микроконтроллере PIC16. Данный формат передачи обычно используется при работе с модулями, которым нужно передавать вычисленные данные для дальнейшей обработки, при передаче каких либо данных на устройство через UART порт.
Список литературы Программная реализация передачи данных по последовательному порту в микроконтроллерах PIC16
- Datasheet PIC16F628A [Электронный ресурс] URL: https://www.microchip.com/wwwproducts/en/PIC16F628A