AFON // радиотехник affonya@mail.ru
← Проекты на PIC

Проект 35. Передача данных по UART

Контроллер передаёт текст в терминал компьютера через аппаратный USART. Проект вводит настройку скорости, формат кадра и передачу байта — базу любой связи с ПК.

Задача

Отправлять текстовую строку в терминал компьютера раз в секунду.

Микроконтроллер: PIC16F628A, кварц 4 МГц. Среда: MPLAB X + MPASM (или любой совместимый ассемблер). Как настроить среду и прошить контроллер — в статье программирование PIC.

Что понадобится

  • PIC16F628A
  • кварц 4 МГц + 2×22 пФ
  • преобразователь USB-UART (CP2102/CH340) или MAX232
  • резистор 10 кОм

Схема подключения

ВыводПодключение
RB2 / TXвход RXD преобразователя
RB1 / RXвыход TXD преобразователя
GNDобщий провод с преобразователем — обязательно
MCLRчерез 10 кОм на +5 В

Алгоритм

  1. Отключить компараторы, чтобы выводы работали как цифровые.
  2. Записать в SPBRG делитель скорости и включить BRGH.
  3. Разрешить передатчик битом TXEN и включить порт битом SPEN.
  4. Ждать флага TRMT и класть байт в TXREG.

Листинг на ассемблере

Код проверен ассемблером и собирается без ошибок. Скачать: p35.asm · p35.hex (готовая прошивка).

;=======================================================
; Проект 35. Передача по UART (аппаратный USART)
; PIC16F628A, 4 МГц, 9600 бод, 8N1
; TX — RB2, к ПК через преобразователь уровней (MAX232 или USB-UART)
;=======================================================
        LIST    p=16F628A
        #include <p16f628a.inc>
        __CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _LVP_OFF & _BODEN_OFF & _MCLRE_ON & _CP_OFF

        cblock  0x20
        d1, d2, idx, chr
        endc

        ORG     0x000
        goto    Start

;--- строка для передачи, 0 — признак конца ---
Text
        addwf   PCL,f
        retlw   'A'
        retlw   'F'
        retlw   'O'
        retlw   'N'
        retlw   ' '
        retlw   'P'
        retlw   'I'
        retlw   'C'
        retlw   0x0D            ; возврат каретки
        retlw   0x0A            ; перевод строки
        retlw   0x00

Start
        movlw   0x07
        movwf   CMCON           ; компараторы выключены, выводы цифровые

        bsf     STATUS,RP0      ; банк 1
        movlw   .25             ; 9600 бод при 4 МГц и BRGH=1
        movwf   SPBRG
        movlw   b'00100100'     ; TXEN=1, BRGH=1, асинхронный режим
        movwf   TXSTA
        bsf     TRISB,1         ; RB1/RX — вход
        bsf     TRISB,2         ; RB2/TX задаёт модуль USART
        bcf     STATUS,RP0      ; банк 0
        movlw   b'10000000'     ; SPEN=1 — порт включён
        movwf   RCSTA

Main
        clrf    idx
SendLoop
        movf    idx,w
        call    Text
        movwf   chr
        movf    chr,w
        btfsc   STATUS,Z        ; конец строки?
        goto    Pause
        movf    chr,w
        call    TxByte
        incf    idx,f
        goto    SendLoop
Pause
        call    Delay1s
        goto    Main

;--- передача байта из W ---
TxByte
        bsf     STATUS,RP0
TxWait
        btfss   TXSTA,TRMT      ; ждём опустошения регистра сдвига
        goto    TxWait
        bcf     STATUS,RP0
        movwf   TXREG           ; запуск передачи
        return

Delay1s
        movlw   .5
        movwf   d1
S1      movlw   .255
        movwf   d2
S2      nop
        nop
        nop
        nop
        nop
        nop
        nop
        decfsz  d2,f
        goto    S2
        decfsz  d1,f
        goto    S1
        return

        END

Пояснения

  • Делитель считается по формуле SPBRG = Fosc/(16 × скорость) − 1. При 4 МГц и 9600 бод получается 25 — ошибка около 0,2 %, что допустимо.
  • У PIC16F628A регистр CMCON после сброса включает компараторы; без записи 0x07 выводы порта A остаются аналоговыми.
  • Общий провод между контроллером и преобразователем обязателен — без него связь не работает, даже если сигнальные линии подключены верно.

Что дальше

Разобравшись с этим проектом, переходите к следующему в разделе проекты на PIC. Справочник по архитектуре и периферии контроллеров — на странице микроконтроллеры PIC.