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


Пример 3. Включение символов на индикаторе

Большой практический интерес представляет включение группы светодиодов, которые в совокупности образуют понятные на бытовом уровне символы. Во-первых, это цифры от нуля до девяти. Во-вторых, это некоторые кириллические и латинские буквы. В-третьих, это специфичные символы, например, нижнего подчеркивания "_", знака равно "=" и пр. Наличие таких возможностей в программе определяет совершенство и привлекательность разрабатываемого устройства.

Чтобы повысить уровень вашего интереса к этой теме обратимся к простому примеру из жизни. Многие товары в магазинах бытовой техники имеют встроенные индикаторы, например, стиральные машинки. Почти такая же модель стиральной машинки, но без индикатора, будет стоить на 20-30% дешевле. И разница эта совсем не копеечная. Мы же эти знания получим за сущие копейки.

Опыт и практика полученные в предыдущих примерах позволят вам создать следующую программу. Отрисуем на индикаторе последовательно символы фразы "УРА", затем символ нижнего подчеркивания "_", одновременно сформируем звуковой сигнал и зациклим нашу программу.

Ниже приведен пример такой программы с использованием так называемой таблицы символов. К таблице символов можно обращаться из любого места программы, что очень удобно и практично.

 

            LIST        P=PIC16F84A
            __CONFIG    H3FF1

PC          EQU         H0002
STATUS      EQU         H0003
PORTB       EQU         H0006
TRISB       EQU         H0006
Reg_1       EQU         H000C
Reg_2       EQU         H000D
Reg_3       EQU         H000E

            org         0           ; начало программы            
; подготовительные моменты
            bsf         STATUS,5    ; переход в Банк 1
            clrf        TRISB
            bcf         STATUS,5    ; переход назад в Банк 0
; отрисовка фразы "УРА_" + звук
m1          clrf        PORTB       ; очистка порта
            movlw       .10
            call        TABLE       ; переход на метку TABLE
            movwf       PORTB
            call        Pause
            movlw       .11
            call        TABLE       ; переход на метку TABLE
            movwf       PORTB
            call        Pause
            movlw       .12
            call        TABLE       ; переход на метку TABLE
            movwf       PORTB
            call        Pause
            movlw       .13
            call        TABLE       ; переход на метку TABLE
            movwf       PORTB
            bsf         PORTB,7     ; звук
            call        Pause
            goto        m1          ; переход на метку (зацикливание)
;====================================
TABLE       addwf      PC,F        ; Содержимое счетчика команд PC = PC + W
            retlw      b01101111 ; 0
            retlw      b00001100 ; 1
            retlw      b01011011 ; 2
            retlw      b01011110 ; 3
            retlw      b00111100 ; 4
            retlw      b01110110 ; 5
            retlw      b01110111 ; 6
            retlw      b01001100 ; 7
            retlw      b01111111 ; 8
            retlw      b01111110 ; 9
            retlw      b00111110 ; У
            retlw      b01111001 ; Р
            retlw      b01111101 ; А
            retlw      b00000010 ; _
            retlw      b00110101 ; h
;====================================
;delay = 500000 machine cycles
Pause       movlw       .85
            movwf       Reg_1
            movlw       .138
            movwf       Reg_2
            movlw       .3
            movwf       Reg_3
wr          decfsz      Reg_1, F
            goto        wr
            decfsz      Reg_2, F
            goto        wr
            decfsz      Reg_3, F
            goto        wr
            return

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

 

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

:020000040000FA
:1000000083168601831286010A3016208600262078
:100010000B301620860026200C3016208600262065
:100020000D301620860086172620032882076F349D
:100030000C345B345E343C34763477344C347F3467
:100040007E343E3479347D340234353455308C007E
:100050008A308D0003308E008C0B2C288D0B2C28C1
:060060008E0B2C280800A5
:02400E00F13F80
:00000001FF


В сегмент таблицы в программе включены символы цифр. Если нам нужны другие символы, мы можем расширить эту таблицу.

Внимательно изучив текст программы – мы увидим однотипность выполняемых действий. В сегменте отрисовки копируем в аккумулятор W число (последовательно 10, 11, 12, 13). Затем отправляемся в сегмент таблицы. С помощью команды addwf PC,F мы складываем содержимое аккумулятора с регистром  PC (в этом регистре у МК реализован аппаратный счетчик команд). В результате сложения счетчик увеличивается на величину, которая у нас содержится в аккумуляторе W и происходит переход на соответствующую команду в таблице. По команде retlw bхххххххх мы помещаем в аккумулятор указанное число (bхххххххх) и возвращаемся назад в сегмент отрисовки. Указанное число представляет собой комбинацию битов, которое затем записывается в порт и приводит к отображению осмысленного символа.

Строго говоря, поставленную в примере задачу можно было бы решить гораздо проще, без таблицы символов и лишних скачков по тексту программы. Однако, этот пример показывает классический подход к работе с символами. Обоснуем это. Например, работа двух кнопок может выполнять функцию увеличения и уменьшения значения какого либо регистра. Мониторинг значения этого регистра мы можем в автоматическом режиме осуществлять через индикатор. Как видим из этого примера, число в регистре в любой момент времени может принять любое значение и, следовательно, значение непредсказуемо. Но это не препятствие, т.к. это значение будет автоматически обрабатываться  и без таблицы символов в этом случае не обойтись.

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


Наше устройство станет более интересным и привлекательным если в нем будут задействованы кнопки. Это будет не безликая мигалка-пищалка, а послушное устройство, способное быть управляемым, а самое главное – быть полезным и выполнять необходимые функции.


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

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

 








 
 
 

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