Обучение : Программирование на Ассемблере для PIC


Передача данных в сторону компьютера

В предыдущем разделе мы узнали протокол передачи интерфейса RS232 и длительность битовой посылки.
Сейчас мы составим несколько элементарных программ для МК:
– передача от МК в сторону ПК набора символов;
– прием на стороне МК от ПК символов;
– двухсторонний обмен: ПК<=>МК.

Программа непрерывной передачи в сторону ПК фразы "Ура! ".
Периодичность посылки 1 сек.

            LIST        P=PIC16F84A
            __CONFIG    H3FF1

W           EQU         0
F           EQU         1
STATUS      EQU         H0003
PORTA       EQU         H0005
PORTB       EQU         H0006
TRISA       EQU         H0005
TRISB       EQU         H0006
C           EQU         0
Reg_1       EQU         H000C     ; для счетчика паузы 100 мкс
Reg_2       EQU         H000D     ; для счетчика битов в байте
Reg_3       EQU         H000E     ; для передаваемого символа
Reg_4       EQU         H000F
Reg_5       EQU         H0010
Reg_6       EQU         H0011


            org         0           ; начало программы            
; подготовительные моменты
Start       bsf         STATUS,5    ; переход в Банк 1
            movlw       b00011101 ; RA0 на выход, остальные на вход
            movwf       TRISA
            clrf        TRISB
            bcf         STATUS,5    ; переход назад в Банк 0
            bsf         PORTA,0     ; установка 1 - "режим ожидания"
            clrf        PORTB       ; очистка порта
; вставка символа "У" для передачи
m3          movlw       "У"         ; копируем букву У (рус) как символ, который
            movwf       Reg_3       ; пропишется в кодировке ANSI в Reg_4 (hС4)
            call        Tx
; о кодировке ANSI мы поговорим чуть позже
            movlw       "р"
            movwf       Reg_3
            call        Tx
            movlw       "а"
            movwf       Reg_3
            call        Tx
            movlw       "!"
            movwf       Reg_3
            call        Tx
            movlw       " "
            movwf       Reg_3
            call        Tx          ; т.о. отправлено "Ура! ",
            call        Pause2
            goto        m3          ; 5 символов, в т.ч. пробел
; сегмент передачи от МК в сторону ПК (9600, 8-N-1, 104 мкс)
Tx          movlw       .9          ; 8+1, т.е + бит C из STATUS
            movwf       Reg_2
            bcf         STATUS,C    ; подготовка стартового бита
m1          btfsc       STATUS,C
            goto        bit1
            goto        bit0
bit1        bsf         PORTA,1     ; передача единицы
            call        Pause
            goto        m2
bit0        bcf         PORTA,1     ; передача нуля
            call        Pause
            goto        m2
m2          rrf         Reg_3,F     ; сдвиг вправо для передачи с младшего бита
            decfsz      Reg_2,F
            goto        m1
            bsf         PORTA,1     ; установка 1 - "режим ожидания"
            call        Pause
            return
;delay = 95 machine cycles
Pause       movlw       .31
            movwf       Reg_1
wr          decfsz      Reg_1, F
            goto        wr
            nop
            return

;delay = 1000000 machine cycles
Pause2      movlw       .173
            movwf       Reg_4
            movlw       .19
            movwf       Reg_5
            movlw       .6
            movwf       Reg_6
wr2         decfsz      Reg_4, F
            goto        wr2
            decfsz      Reg_5, F
            goto        wr2
            decfsz      Reg_6, F
            goto        wr2
            return

            end                     ; конец программы

Далее текст прошивки:

:020000040000FA
:1000000083161D3085008601831205148601D330C6
:100010008E001820F0308E001820E0308E0018205E
:1000200021308E00182020308E0018203020072824
:1000300009308D00031003181E28212885142A205A
:10004000242885102A2024288E0C8D0B1B2885142B
:100050002A2008001F308C008C0B2C280000080080
:10006000AD308F0013309000063091008F0B362892
:0A007000900B3628910B362808008B
:02400E00F13F80
:00000001FF


В случае передачи более длинных фраз (или набора слов), программу можно упростить, создав таблицу в которой символы из фразы будут следовать друг за другом, а обращение к таблице будет организовано из счетчика.

Start
; организация счетчика передаваемых символов
            movlw      .6          ; всего 5 символов +1
            movwf      Reg_4       ; 6 => Reg_4
; организация передачи из таблицы
m4          movf       Reg_4,W     ; Reg_4 => W
            call       TABLE       ; уход в таблицу
            movwf      Reg_3       ; символ из таблицы W => Reg_3
            call       Tx          ; уход в передачу
            decfsz     Reg_4,F     ; уменьшаем (Reg_4)-1
            goto       m4          ; зацикливание
            goto       Start
TABLE       addwf      PC,F        ; Содержимое счетчика команд PC = PC + W
            nop                    ; для корректировки
            retlw      " "
            retlw      "!"
            retlw      "А"
            retlw      "Р"
            retlw      "У"


Размер таблицы накладывает некоторые ограничения, которые ранее мы не рассматривали для облегчения восприятия принципа работы. Выход на командные строчки таблицы производится путем принудительного увеличения счетчика команд PC. Этот счетчик команд организован с помощью обычного регистра, который может принять максимальное значение в 255. А теперь представим ситуацию, что перед таблицей находится некоторое количество других командных строк, например 32. Исходя из этого, таблица может содержать не более (255 – 32) = 223 строк, иначе будет переполнение регистра PC, что приведет к неправильному ходу выполнения программы. Это и есть ограничение размера таблицы для вышеуказанного примера.

Самостоятельно предлагаем сделать следующие модификации программы:
– посылка более длинных фраз (или набора слов) с использованием таблицы;
– посылка символов (фраз) по факту нажатия кнопки (кнопок);
– использование временных задержек между словами.
 


<<< назад далее >>>

Просмотров: 21045

 








 
 
 

В русском Интернете бестолку защищать свои права. Хотите использовать материалы - используйте,
но с письменного согласия авторов. В противном случае будут высланы соответствующие письма
в поисковые системы об ограничении индексации ваших сайтов. Не доводите до греха.