ОТОБРАЖЕНИЕ ИНФОРМАЦИИ В МКУ.

Во многих случаях в микроконтроллерных устройствах требуется наличие только простой индикации типа ДА/НЕТ, ВКЛ/ВЫКЛ. Такая индикация реализуется на основе отдельных светодиодов.

Для отображения многосимвольной информации используются линейные (однострочные) дисплеи. Такие дисплеи представляют собой «линейку» индикаторов (светодиодных или жидкокристаллических). Число знакомест дисплея определяется в соответствии с требованиями к МКУ. При этом, для отображения цифровой и буквенной информации широко используется семисегментные индикаторы (ССИ). Семь отображающих элементов позволяют высвечивать десятичные и шестнадцатеричные цифры, некоторые буквы русского и латинского алфавита, а также некоторые специальные символы.

Существуют два способа отображения многосимвольной информации: статический и динамический.

Первый требует наличия на входах каждого индикатора специальных буферных регистров для хранения кодов выводимых символов. Естественно, что с увеличением разрядности дисплея возрастает число дополнительных регистров, а следовательно, и стоимость МКУ.

Второй способ (динамический) основан на том, что любой световой индикатор является инерционным прибором, а человеческому глазу отображаемая на дисплее информация, если ее обновлять с частотой более 20 раз в секунду, представляется неизменяемой. Динамический способ вывода информации на дисплей требует значительно меньших аппаратурных затрат, но более сложного программного обеспечения. Именно этот способ организации отображения информации получил преимущественное распространение в МКУ.

Рассмотрим задачу, в которой необходимо предложить вариант микроконтроллерного устройства для динамической индикации 8-ми разрядных десятичных чисел на семисегментных жидкокристаллических индикаторах (ЖКИ). Индицируемые десятичные числа представляют собой результат вычислений, хранящихся в виде двоичных кодов в памяти данных микроконтроллера типа PIC 16F84.

Данную задачу можно решить различными способами. Рассмотрим более подробно один из возможных вариантов решения поставленной задачи. Для реализации исходного технического задания в данном случае необходимо осуществлять следующее (рис. 9.1.):

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

2. Преобразовать исходные двоичные коды в двоично-десятичные (2/10-е) и записать результат в регистры вывода OUTx, отведенные для этого также в памяти данных.

 

           
 
   
 
   
 

 

 


Рис. 9.1. Общий алгоритм программы

 

3. Вывести полученные данные для индикации на восьмиразрядном линейном дисплее, состоящем из 8-ми ЖКИ индикаторов.

Причем, для осуществления динамической индикации 8-ми разрядных десятичных чисел необходимо выполнить следующие действия:

1) Сформировать 3-х разрядный двоичный код адреса очередного знакоместа (индикатора) в восьмиразрядном дисплее.

2) Преобразовать полученный код адреса в сигналы выбора очередного индикатора ВБР-И.

3) Преобразовать двоично-десятичный код, соответствующий выбранному разряду числа, в семисегментный код ВБР-С, позволяющий засветить необходимые сегменты (обеспечить протекание тока через сегменты) в выбранном индикаторе.

4) Засвечивать выбранные сегменты на протяжении не менее (7-10) мс. Для этого можно использовать временную задержку выбора следующего индикатора.

5) Повторить п.1- 4 для каждого знака 8-ми разрядного десятичного числа. Таким образом, в одном полном цикле индикации числа п.1-4 повторяются восемь раз.

6) Повторять п.1-5 непрерывно пока включено питание устройства (Питание вкл.?). Для этого необходимо организовать внешний цикл регенерации, во время которого при необходимости можно будет осуществлять смену кодов чисел в регистрах хранения INPx.

Перечисленные выше функции можно реализовать либо чисто программным способом, либо с привлечением дополнительных аппаратных средств. Второй способ более предпочтителен, так как требует меньшего количества линий ввода/вывода и освобождает микроконтроллер от выполнения действий по п.2 и п.3 предложенного выше алгоритма индикации. Для этого необходимо использовать два дешифратора DC1 и DC2, первый из которых предназначен для реализации п.2, а второй п.3 рассмотренного алгоритма. Подключение DC1, DC2 и ЖКИ к выводам портов А и В показано на рис. 9.2.

 

 
 

 


На основании рассмотренных выше принципов построения устройства для динамической индикации, алгоритма его функционирования и распределения памяти данных можно предложить вариант текста программы (INDIK-D1), который приведен ниже:

 

;Текст фрагмента программы INDIK-D1

LIST P=PIC16C84

; Секция заголовка

; Описание специальных регистров

STATUS EQU 03H

PORTA EQU 05H

PORTB EQU 06H

INTCON EQU 0BH

TRISA EQU 05H

TRISB EQU 06H

; Описание битов регистра STATUS

RP0 EQU 05H ; Выбор страницы памяти данных

; Описание битов регистра INTCON

GIE EQU 07H ; Запрещение/разрешение всех

; прерываний

; Описание битов порта В

RB0 EQU 00H ; Выводы порта В предназна-

RB1 EQU 01H ; ченные для выдачи двоично-

RB2 EQU 02H ; десятичного кода разряда

RB3 EQU 03H ; числа (4 бита) на дешифратор

; DC2 с целью дальнейшего

; преобразования в семи-

; сегментный код ВБР-С

; (7 бит)

; Описание битов порта А

RA0 EQU 00H ; Выводы порта А предназна-

RA1 EQU 01H ; ченные для выдачи двоичного

RA2 EQU 02H ; кода адреса разряда числа

; (3 бита) на дешифратор DC1

; с целью формирования сигналов

; выбора одного из 8-ми индика-

; торов (ВБР-N)

; Описание регистров памяти данных

DELAY0 EQU 00CH ; Регистры-счетчики для органи-

DELAY1 EQU 00DH ; зации задержки (DELAY) боль-

; шой длительности (7-10 мс)

DAT0 EQU 00EH ; Регистры в которых формиру-

DAT1 EQU 00FH ; ются двоичные коды чисел

DAT2 EQU 010H ; (данные), подлежащие инди-

; кации

INP1 EQU 011H ; Регистры хранения двоичного

INP2 EQU 012H ; кода индицируемого числа

INP3 EQU 013H

OUT0 EQU 014H ; Регистры хранения двоично-

OUT1 EQU 015H ; десятичного кода индици-

OUT2 EQU 016H ; руемого числа

OUT3 EQU 017H

; Рабочая секция

; Начало основной программы

ORG 00H ; Следующая команда будет

; расположена по адресу 00H

GOTO BEGIN

INDIK ; Вывод на индикатор (Процедура

; динамической индикации)

BSF STATUS, fRP0 ; Устанавливаем активной

; вторую страницу памяти

MOVLW B ’00000000’ ; Устанавливаем направления ра- MOVLW TRISA ; боты всех выводов порта А

; на вывод информации

MOVLW B ’00000000’ ; Устанавливаем направление ра-

MOVLW TRISB ; боты всех выводов порта В

; на вывод информации

BCF STATUS, RP0 ; Делаем активной снова первую ; страницу памяти

NEXT CLRW ; Очищаем регистр W

MOVLW PORTA ; Записываем адрес сегмента В

; порт А

MOVF OUT0, 0 ; Записываем данные для сегмен- MOVWF PORTB ; та в порт В

CALL DELAY ; Вызываем процедуру

; задержки

INCF PORTA, 1 ; Остальная часть программы выпол

; няет аналогичные действия

SWAPF OUT0, 0

MOVWF PORTB

CALL DELAY

INCF PORTA, 1

MOVF OUT1, 0

MOVWF PORTB

CALL DELAY

INCF PORTA, 1

SWAPF OUT1, 0

MOVWF PORTB

CALL DELAY

INCF PORTA, 1

MOVF OUT2, 0

MOVWF PORTB

CALL DELAY

INCF PORTA, 1

SWAPF OUT2, 0

MOVWF PORTB

CALL DELAY

INCF PORTA, 1

MOVF OUT3, 0

MOVWF PORTB

CALL DELAY

INCF PORTA, 1

SWAPF OUT3, 0

MOVWF PORTB

CALL DELAY

GOTO NEXT

DELAY ; Процедура задержки на 200000 тактов (DELAY-H)

MOVLW 0FFH

MOVWF DELAY0

DELAY_0

MOVLW 0FFH

MOVWF DELAY1

DELAY_1 DECFSZ DELAY1, 1

GOTO DELAY_1

DECFSZ DELAY0, 1

GOTO DELAY_0

RETURN

BEGIN

MOVF DAT0, 0 ; Запись, сформированного в

MOVWF INP1 ; регистрах DAT0, DAT1 и DAT2

MOVF DAT1, 0 ; двоичного кода числа в реги-

MOVWF INP2 ; стры хранения INP1,INP2,INP3

MOVF DAT2, 0

MOVWF INP3

CALL BIN-DEC ; Данная процедура переводит

; двоичный код, хранимый в регистрах INP1,INP2,INP3 (причем старший

; байт в регистре INP1, а младший в регистре INP3), в двоично-десятичный

; код потетрадно в регистры OUT0, OUT1, OUT2, OUT3.

; При этом старшая тетрада регистра OUT0 содержит двоичный код

; старшего разряда десятичного числа, а младшая тетрада регистра OUT3

; содержит двоичный код младшего разряда десятичного числа.

GOTO INDIK ; Процедура индикации

END ; Конец программы

 

Этот фрагмент можно оформить как стандартную подпрограмму для динамической индикации INDIK-D1. Поэтому, а также с целью упрощения примера, подпрограмма преобразования двоичного кода индицируемого числа в двоично-десятичный код BIN-DEC не включена в текст приведенного фрагмента программы. Она аналогична подпрограмме BIN-DEC1, рассмотренной ранее.