Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PIC микроконтроллеры.docx
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
22 Мб
Скачать
☆

10. Организация связи с оператором

ВВОД ИНФОРМАЦИИ

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

Ожидание статического сигнала от датчика

Типовая процедура ожидания события состоит из следующих действий:

-ввода сигнала от датчика,

-анализа значения сигнала

-передачи управления в зависимости от состояния датчика.

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

В зависимости от способа подключения датчика при его замыкании он может формировать на входе микроконтроллера сигнал высокого (рис.6.1.а) или низкого уровня (на схеме поменять местами S1 и R 1).

+ 5В

WAIT

S 1 ко входу МК

S1 замкнут?

нет

R1

U

S

выход

1 замкнут

S 1 разомкнут

t

а) б)

Рис.10.1Двоичный датчик

Программа реализации процедуры замыкания датчика рис. 6.1., подключенного к 1-му разряду PORTB:

WAIT

BTFSS PORTB,1 ; ЕСЛИ контакт датчика разомкнут

GOTO WAIT ; ТО повторить ввод

…….. ……. ; ИНАЧЕ выход из процедуры

Опрос группы двоичных датчиков

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

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

MOVFW PORTA ; ввод информацииотдатчика

ТАВ ADDWF PCL,f ; вычисляемый переход (PCL=PCL+W+1)

GOTO EXIT ; датчики не сработали

GOTO PROC1 ; передача управления

GOTO PROC2 ; процедурам

GOTO PROC3 ; 1, 2, 3

EXIT

…. …… ; выход

Адрес строки таблицы, в которой хранятся адреса переходов, находится как сумма текущего состояния программного счетчика PCL и W-регистра, содержащего номер сработавшего датчика. В результате будет выполнена команда GOTOPROC, отстоящая от ADDWF PCL,F на величину кода из W+1.

А дальше: сработал первый датчик - исполнился PROC1 (что-то запищало), сработал второй - исполнился PROC2 (что-то заморгало), сработали оба - исполнился PROC3 (что-то закрутилось) и т.д. Вариантов может быть великое множество.

Применение кнопок

Если планируется не более 6 кнопок, разумно использовать прямое соединение каждой кнопки с выводом микроконтроллера и общим проводом. Реализовать реакцию на нажатие, удерживание и отпускание кнопок в программе можно следующим образом:в цикле ведется постоянный опрос портов, к которым подключены кнопки. Прочитанная 1 говорит о том, что кнопка нажата (в отпущенном состоянии читается 0). Если прочитали 1, то запускается процедура обработки этой кнопки.

В простейшую обработку входит:

  • Ожидание нажатия кнопки

  • Проверка на дребезг

  • Реакция на нажатие

  • Ожидание освобождения кнопки

Проверка на дребезг кнопки состоит из задержки и повторной проверки нажатия. Задержка может быть до 50 мс (подбирается экспериментальным путем). Если нажатие подтверждено, тогда переходим к реакции на нажатие. Как реагировать, решаете вы. Возвращаться к опросу нельзя, пока не отпущена кнопка, поэтому в цикле ждем ее освобождения.

;======================================

; KEYBRD – Простейшая клавиатура

;======================================

; Кнопка подключена к РОRТВ<0>

; определение рабочих регистров-------------------------

CNT0 EQU 0CH ; счетчики

CNT1 EQU 0BH ;задержки

GOTO START

;********************************************

;ПОДПРОГРАММЫ

;********************************************

;задержка 12 мс-----------------------------------------------

DELAY MOVLW .20 ;

MOVWF CNT1

BETA MOVLW .200

MOVWF CNT0

ALFA DECFSZ CNT0,F ;

GOTO ALFA

DECFSZ CNT1,F

GOTO BETA

RETURN

;Реакция нанажатие-------------------------------------------

PROC_1 ………………; кнопки 1

RETURN ;

;**********************************************

;ОСНОВНАЯ ПРОГРАММА

;**********************************************

START BSFSTATUS,RP0 ; банк 1

MOVLW B’00000111;’ RB0 – RB3

MOVWF TRISB ; -входы

BCF STATUS,RP0 ; банк 0

; Опрос_порта---------------------------------------------------

BEGIN

BTFSC PORTB,0 ;ЕСЛИ кнопка 1 нажата (=1),

GOTO ON_1 ; ТО обработать нажатие

GOTO BEGIN ; ИНАЧЕ к опросу порта

;Обработка нажатия кнопки 1-------------------------------

ON_1

CALL DELAY ; устранение дребезга контактов

BTFSS PORTB,0 ; ЕСЛИ кнопка 1 нажата (=1),

GOTO BEGIN ;

CALL PROC_1 ; ТО выполнить PROC_1

; ожидание освобождения кнопки 1------------------------

OFF_1

BTFSC PORTB,1 ; ЕСЛИ кнопка 1 освобождена (=0),

GOTO OFF_1 ;

GOTO BEGIN ; ТО к опросу порта

; конец всем командам-----------------------------------------

END

Рис. 10.2. Программа реализации работы кнопки

Клавиатура

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

В качестве устройств ввода информации наиболее широкое применение получили простейшие, цифровые, алфавитно-цифровые и специальные клавиатуры:

  1. -простейшие, состоящие из клавиш типа СБРОС, ПУСК, СТОП и т.п.

  2. - цифровые, предназначенные для ввода данных и управления режимами и состоящие из шестнадцатеричной клавиатуры и управляющих клавиш: ЗАГРУЗКА, АДРЕС/ДАННЫЕ, ПОШАГОВЫЙ РЕЖИМ, ИНДИКАЦИЯ и т.п.

  3. - алфавитно-цифровые

  4. - специализированные клавиатуры, в которых каждая клавиша соответствует процессу управления: ПОВЫСИТЬ ДАВЛЕНИЕ В МАСЛЯННОЙ МАГИСТРАЛИ, ПОНИЗИТЬ ТЕМПЕРАТУРУ ОХЛАЖДАЮЩЕЙ ЖИДКОСТИ и т.п.

Цифровая клавиатура

Процедура опроса импульсных датчиков состоит из последовательности действий:

ожидание замыкания одного из контактов,

устранение дребезга,

ожидание отпускания замкнутого контакта.

НАЧАЛО

Сброс счетчика сдвигов

Сдвиг PORT_B вправо

н ет

С = 1?

CС= СС +1

ВЫХОД

Рис. 10.3Алгоритм процедуры Преобразование кодов

Для группы двоичных датчиков, представляющих собой клавиатурный регистр, процедура работы KBRD приведенная на Рис.6.2.дополнена процедурой идентификации нажатой клавиши. Можно ее и дополнить защитой от одновременного нажатия двух и более клавиш CHEK.

Программная реализация процедуры для случая подключения импульсных датчиков KBRD приведена ниже. Преобразование десятичного кода нажатой клавиши в двоичный код выполняется программно методом сдвига исходного десятичного кода и подсчетом числа сдвигов в счетчике до появления первого переноса. Результат формируется в регистре CODE. Ввод десятичного кода и его сдвиг организован в буферном регистре PORT_B.

;================================================

; KBRD - Опрос импульсных датчиков (цифровая клавиатура)

;================================================

; клавиатура подключена к Rb0-Rb3

; Описание регистров общего назначения------

CODE EQU 0CH ; cчетчик сдвигов

PORT_B EQU 10H ; регистр кода

;Инициализация порта В-----------------------------

BSF STATUS,RP0 ; page1

MOVLW B'00001111' ; Rb0-Rb3 – входы,

MOVWF TRISB ; остальные - выходы

BCF STATUS,RP0 ; page0

; Ожидание нажатия клавиши-----------------------

WAIT1 MOVFW PORTB ; ввод кода

BTFSS STATUS,Z ; ЕСЛИ клавиша не нажата

GOTO WAIT1 ; ТО ждать

MOVWF PORT_B ; ИНАЧЕ сохранить код

;устранение дребезга-----------------------------------

CALL DELAY ;

; Ожидание отпускания клавиши-------------------

WAIT0

MOVFW PORTB ; ввод кода клавиши

BTFSC STATUS,Z ; ЕСЛИ клавиша нажата

GOTO WAIT0 ; ТО ждать

EXIT

CLRF STATUS,C ; ИНАЧЕ сбросить флаг С

CLRF CODE ; сбросить счетчик сдвигов

; Идентификация клавиши-------------------------------

ROTATE

RRF PORT_B, F ; сдвиг десятичного кода

BTFSC STATUS, C ;ЕСЛИ обнаружена нажатая

GOTO CHEK ; ТО выход

INCF CODE, F ; ИНАЧЕ - инкремент счетчика сдвигов

GOTO ROTATE ; и продолжить сдвиг

; Вывод кода------------------------------------------------

CHEK

GOTO $ ; цикл

; Конец всем командам-----------------------------------

END ; выход из процедуры;

Рис.10.4.

Защиту от множественного нажатия клавиш можно организовать путем анализа содержимого PORT_B после появления переноса с загрузкой экстракода FF в регистр CODE:

CHEK

MOVFW PORT_B ; копировать в W

BTFSS STATUS,Z ; ЕСЛИ нет нажатых клавиш

GOTO $ ; ТО выход

MOVLW 0FFH ; ИНАЧЕ загрузить

MOVWF CODE ; экстракод

GOTO $ ; выход

Матричная клавиатура

Из-за большого объема неунифицированной аппаратуры и ростом ее стоимости, которая резко возрастает с увеличение числа знаков, в МК системах применяются дешевые матричные клавиатуры. Рассмотрим пример организации матричной клавиатуры, состоящей из 12 кнопок. В принципе, ничто не мешает нам использовать столько же линий ввода/вывода. Однако более эффективным решением будет организация этих кнопок в виде матрицы 4 х 3, как показано на рис.6.7.В этом случае количество выводов уменьшается до 7.В случае клавиатур большего размера эта экономия будет ещё, для клавиатуры на 64 кнопки (8 х 8) потребуется всего 16 линий ввода/вывода.

Хотя организация матриц может быть различной, нарис.6.7,а. представлена наиболее типичная. Сигналы с четырех строк считываются с выводов RB<7:5>.Сканирование каждого из столбцов, подключенных к выводам RB<2:0>, осуществляется подачей на соответствующий вывод ВЫСОКОГО уровня, как показано на рис.6.7,в. Кнопки имеют нормально-разомкнутые контакты, поэтому стоит замкнуть кнопку, подключенную к столбцу, на которую подан ВЫСОКИЙ уровень как на соответствующей линии строки тоже появится ВЫСОКИЙ уровень. Таким образом, нажатую кнопку можно определить по пересечению столбца и строки.

5

9

1

2

6

SET

3

7

0

4

8

MEM

а) клавиатура 3 х 4

1 кОм

R В6

1 кОм

R В5

1 кОм

R В4

10 кОм

R B3

1 0 кОм

R B2

1 0 кОм

R B1

10 кОм

R B0

(0) (1) (0)

б) обнаружение кнопки «5»

1 0 0 0 1 0 0 0 1

? ! ?

? ? ?

? ? ?

? ? ?

в) сканирование матрицы кнопок

Рис.10.5. Подключение клавиатуры

Работа программы соответствует следующему алгоритму:

  1. Для столбцов = 0 – 2 установить байт сканирования SCAN = 1

- выбрать столбец 0

  1. Для строк 0 – 3

- проверить строку: ЕСЛИ 1

-, ТО перейти к шагу 4

- ИНАЧЕ инкрементировать SCANCODE и продолжить проверку строк

3. ЕСЛИ нажатых клавиш не обнаружено, установить SCAN = 1 в следующем столбце

и вернуться к шагу 2

4. Установить SCANCODE

4. Вернуться в начало

ПРОГРАММА: МАТРИЧНАЯ КЛАВИАТУРА

Отсчет начинается с кнопки №1, приэтом на 0-й столбец выставляется напряжение ВЫСОКОГО уровня. По мере проверки каждой строки на ноль содержимое регистра SCANCODE инкрементируется. При отсутствии замыкания (ВЫСОКОГО значения) осуществляется переход к следующему столбцу, для чего значение шаблона SCAN сдвигается на одну позицию влево.

Выход из цикла сканирования происходит в двух случаях:

  • Если в процессе сканирования будет обнаружено ВЫСОКОЕ значение. В регистре SCANCODE будет при этом находиться номер нажатой клавиши, который в конце программы копируется в рабочий регистр W.

  • Если в результате сдвига рабочий бит шаблона (1) окажется во 2-м разряде регистра PORTB.В этом случае в рабочий регистр W заносится число FF, означающее, что нажатых клавиш не обнаружено.

;**********************************************

;KPD_MATRIX - Матричная клавиатура

;**********************************************

;Сканирует клавиатуру 4х3 и возвращает № клавиши

;№клавишивW, [SET]=B,[0]=CMEM=D

;Возвращает 1 если не было нажатой клавиши

;***********************************************

SCANCODE EQU 0CH

SCAN EQU 10H

;инициализация----------------------------------

BSF STATUS,RP0

MOVLW B'11110000'

MOVWFTRISB

BCF STATUS,RP0

;формирование исходного значения скэн-кода-------

BEGIN

MOVLW B'00000001';начальное

MOVWF SCAN ;значение

MOVLW 1 ;первая

MOVWF SCANCODE;клавиша - "1"

START

MOVFW SCAN ;считываем шаблон из памяти

MOVWF PORTB ;выдаем на строку высокий уровень

;Теперь проверяем каждую строку----------------

BTFSC PORTB,4 ; ЕСЛИ единица

GOTO ON ; ТО клавиша обнаружена на 1ой строке

INCF SCANCODE,f ;ИНАЧЕ инкрементируем счетчик

BTFSC PORTB,5 ; ЕСЛИ единица

GOTO ON ; ТО клавиша обнаружена на 2ой строке

INCF SCANCODE,f ;ИНАЧЕ инкрементируем счетчик

BTFSC PORTB,6 ; ЕСЛИ единица

GOTO ON ; ТО клавиша обнаружена на 3ей строке

INCF SCANCODE,f ;ИНАЧЕ инкрементируем счетчик

BTFSC PORTB,7 ; ЕСЛИ единица

GOTO ON ; ТО клавиша обнаружена на 4ой строке

INCF SCANCODE,f;ИНАЧЕ инкрементируем счетчик

; ЕСЛИ нет нажатых клавиш------------------------------------

RLF SCAN,f ;сдвигаем шаблон

BTFSS PORTB,2 ;ЕСЛИ не появилась 1 в 3-ом бите

GOTO START ;ТО переходим к следующей строке

; ИНАЧЕ на клавиатуре нет нажатых клавиш-----------------------

MOVLW H’0FF’ ;код FF

MOVWF SCANCODE ;вSCANCODE

GOTO BEGIN;

ON

MOVFW SCANCODE ;копируемSCANCODEв W

GOTO START ;

Идентификация нажатой клавиши. Для сложных клавиатур SCANCODE не всегда удается совместить с истинным кодом клавиши. В этом случае необходима дополнительная перекодировка, которая выполняется табличным способом с использованием W в качестве указателя.

CALL TAB ; перекодировка

MOVWF SCAN ; возврат скэн кода

GOTO $ ; завeршить

TAB

ADDWF PCL,f ; вычисляемый переход

RETLW B’скэн код клавиши’

RETLW B’скэн код клавиши’

RETLW B’скэн код клавиши’

ВЫВОД И ОТОБРАЖЕНИЕ ИНФОРМАЦИИ

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

рис. 10.6.Семисегментный индикатор: а - внешний вид; 6 - схемы; в, г - способы подключения

Семисегментные индикаторы (ССИ) широко используются для отображения цифровой и буквенной информации. Семь отображающих элементов позволяют высвечивать десятичные и шестнадцатеричные цифры, некоторые буквы русского и латинского алфавитов, а также некоторые специальные знаки. Структура ССИ и способы его подключения к МК показаны на рис. 6.1. Для засветки одного сегмента большинства типов ССИ необходимо обеспечить протекание через сегмент тока 10-15 мА при напряжении 2,0—2,5 В.В качестве промежуточных усилителей тока могут использоваться логические элементы серии К155 или интегральные схемы преобразователей кодов для управления ССИ.

Преобразование двоичных кодов в коды для ССИ может осуществляться либо программно, либо аппаратурно с использованием преобразователей К514ИД1, К514ИД2, 133ПП4, 564ИД5рис.6.8.г.

Матричные светодиодные индикаторы (МСИ) используются для отображения алфавитно-цифровой информации. Каждый из таких МСИ, выполненный в виде интегральной микросхемы, представляет собой матрицу светодиодов размерностью т хп, где п — число колонок, т- число строк матрицы. Наибольшее распространение получили МСИ с размерностью матрицы 7х5 и 9х7 (рис. 7.5).

Матричные светодиодные индикаторы (МСИ) используются для отображения алфавитно-цифровой информации. Каждый из таких МСИ, выполненный в виде интегральной микросхемы, представляет собой матрицу светодиодов размерностью т хп, где п — число колонок, т- число строк матрицы. Наибольшее распространение получили МСИ с размерностью матрицы 7х5 и 9х7 (рис. 7.5).

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

Существует два способа организации интерфейса МК с линейным дисплеем: статический и динамический.

Вывод символа на ССИ

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

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

При программной перекодировке МК должен поставить в соответствие двоичному коду индицируемого символа определенный байт индикации (БИ), который выдается в выходной порт. Перекодировку удобнее всего производить табличным способом. Для этого байты индикации должны располагаться в смежных ячейках памяти программ в порядке возрастания двоичных кодов символов.

DC7 ADDWF PCL,F ;вычисляемый переход, W содержит

------------------------------------------------- ;двоичный код символа

RETLW B'0111111' ; Цифра 0

RETLW B'0000110' ; Цифра 1

RETLW B'1011011' ; Цифра 2

RETLW B'1001111' ; Цифра 3

RETLW B'1100110' ; Цифра 4

RETLW B'1101101' ; Цифра 5

RETLW B'1111101' ; Цифра 6

RETLW B'0000111' Цифра 7

RETLW B'1111111' ; Цифра 8

RETLW B'1101111' ; Цифра 9

ПРОГРАММА: СУММИРУЮЩИЙ ДЕСЯТИЧНЫЙ СЧЕТЧИК

Программа считает число нажатий кнопки с отображением результата в регистре FIG1. При нажатии кнопки происходит сравнение FIG1 с константой 9.Если значение FIG1меньше 9, то FIG1 инкрементируется. Когда значение FIG1 достигает 9, регистр FIG1 обнуляется (CLRF FIG1).

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

После выполнения подпрограммы DC7 в регистре W будет находиться "семисегментный" код цифры, в котором светящимся элементам соответствуют лог.1.

Однако, прежде чем воспользоваться "ответом" из таблицы, необходимо перенести его в один из регистров памяти данных. У микроконтроллеров семейства PICmicro, это делает RETLW K(возврат из подпрограммы с копированием k в W-reg).

Таблицу оформляют в виде подпрограммы DC7. Перед ее вызовом значение кода, который необходимо преобразовать, следует поместить в регистр W:

MOVFW FIG1

CALL DC7

Выполняя первую команду подпрограммы DC7 (ADDWF PCL,F),микроконтроллер добавит к значению программного счетчика (PCL) число из регистра W+1. В результате будет выполнена команда RETLW K, отстоящая от ADDWF PCL,F на величину кода из регистра FIG1.

;==============================================================

;COUNTER_10 - Суммирующий десятичный счетчик. Статическая индикация

;==============================================================

; PORTB,0 подключен к сегменту a

; PORTB,1 подключен к сегменту b

; PORTB,2 подключен к сегменту c

; PORTB,3 подключен к сегменту d

; PORTB,4 подключен к сегменту e

; PORTB,5 подключен к сегменту f

; PORTB,6 подключен к сегменту g

; PORTB,7 кнопка счета (RB7=0)

; определение рабочих регистров---------------------------------

FIG1 EQU 0CH ; счетчик единиц

CNT1 EQU 12H ; счетчики

CNT2 EQU 13H ; задержки

GOTO START ; обход подпрограмм

; ПОДПРОГРАММЫ-----------------------------------------------------

; преобразование двоичного кода в семисегментный---------

DC7 ADDWFPCL,f ;вычисляемый переход

RETLW B'0111111' ; Цифра 0

RETLW B'0000110' ; Цифра 1

RETLW B'1011011' ; Цифра 2

RETLW B'1001111' ; Цифра 3

RETLW B'1100110' ; Цифра 4

RETLW B'1101101' ; Цифра 5

RETLW B'1111101' ; Цифра 6

RETLW B'0000111' ; Цифра 7

RETLW B'1111111' ; Цифра 8

RETLW B'1101111' ; Цифра 9

;суммирующий счетчик---------------------------------------

ADD MOVFW FIG1 ; единицы в W

SUBLW 9 ; 9 - W

BTFSC STATUS,Z ; ЕСЛИ число единиц равно 0

GOTO B10 ; ТО к B10

INCF FIG1,F ; ИНАЧЕ увеличиваем число

RETURN

B10 CLRF FIG1 ; сброс FIG1

RETURN

; Индикация--------------------------------------------------------

DISPLAY MOVFW ; цифра в W

CALL DC7 ; перекодировка

MOVWF PORTB ; вывод

RETURN

;-----------------------------------------------------------------------

;ОСНОВНАЯ ПРОГРАММА

;-----------------------------------------------------------------------

; инициализация ------------------------------------------------

START: BSF STATUS,5 ; перейти в 1-й банк .

MOVLW B'10000000 '; порт В: RB0-RB6 - вывод

MOVWF TRISB ; RB7 - вход

BCF STATUS,5 ; вернуться в банк 0

CLRF FIG1 ; сбросить счетчик единиц

CALL DISPLAY

; опрос порта ---------------------------------------------------

BEGIN BTFSCPORTB,7 ; ЕСЛИ кнопка нажата (RB7=1)

GOTOON ; ТО обработать нажатие

GOTOBEGIN ; ИНАЧЕ ожидаем нажатия

; обработка нажатия кнопки------------------------------------

ON ;CALL DELAY

BTFSS PORTB,7 ; ЕСЛИ кнопка отжата (RB7=0)

GOTO BEGIN ;ТО продолжить опрос

CALL ADD ;ИНАЧЕ реакция на нажатие

CALLDISPLAY

; цикл освобождения-------------------------------------------

OFF BTFSCPORTB,7 ; ЕСЛИ кнопка освобождена

GOTOOFF ; ИНАЧЕ ожидаем освобождения

GOTOBEGIN ; ТО к опросу порта

; Конец всем командам--------------------------------------

END

Вывод информации на линейный дисплей ССИ

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

БАЙТ ИНДИКАЦИИ

старшее знакоместо младшее

P

O

МК R

T

B

Е Е Е

P 4

О 3

R 2

T 1 Е– СИГНАЛ РАЗРЕШЕНИЯ

A 0

Рис 10.7. Линейный дисплей на семисегментных индикаторах

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

  • запретить выборку на время изменения байта индикации в порт В

  • регенерировать изображение на каждом знакоместе с частотой 20 раз в секунду, т.е. обращаться к процедуре вывода информации через каждые 50/Nмс, где N – число знакомест на дисплее.

Для динамической индикации группы символов можно воспользоваться программой:

MOVFW CODE ; в W младший код символа

CALL DC7 ; перекодировка

MOVWFPORTB ; вывод байта индикации

PORTA,0 ; выбор младшего знакоместа

CALL DELAY ; длительность

BCF PORTA,0 ; гашение младшего знакоместа

При динамической индикации байт индикации поступает одновременно на входы всех ССИ, образующих линейный дисплей рис.6.13, а выбор знакоместа осуществляемого подачей сигнала разрешения. Для динамической индикации группы символов необходимо выполнять соответствие между разрядами символов и разрядами знакоместа. Максимальное число знакомест линейного дисплея ограничено разрядностью порта А.

ПРОГРАММА: ДВУХРАЗРЯДНЫЙ ДЕСЯТИЧНЫЙ СЧЕТЧИК

Программа выводит на индикаторы текущий счет встречи спортивной игры. Текущий счет встречи находится в регистрах FIG1—младший разряд (единицы) и FIG2 — старший разряд (десятки). Содержимое регистров изменяется при нажатии кнопки СЧЕТ. После перекодировки двоичного кода в семисегментный он выводится на линейный дисплей на ССИ. Схема подключения дисплея к МК показана на Рис.2.

По метке BEGIN программа циклически анализирует состояние кнопок СЧЕТ (RВ7), СБРОС (RА4), и осуществляет выводит состояние регистров-счетчиков (FIG2 и FIG1) на ССИ.

При нажатии кнопки СЧЕТ (RВ7) выполняется процедура устранения дребезга контактов (DRBZG), обработка нажатия (ON) и ожидание освобождения (OFF) кнопки СЧЕТ. Процедура обработки нажатия представлена подпрограммой суммирующего двух разрядного десятичного счетчика (ADD_1) и подпрограммой вывода на ССИ (DISPL).

Перед выводом на дисплей подпрограммой DC7 выполняется перекодировка двоичного кода двухразрядного счетчика в регистрах FIG1—младший разряд (единицы) и FIG2 — старший разряд (десятки) в семисегментный.

Подпрограмма DISPL последовательно подает семисегментный код единиц в виде байта индикации на все ССИ и дает разрешение на работу индикатору единиц (BSF PORTA,0). В течении 10мс индикатор единиц отображает содержимое FIG1, затем гаснет (BСF PORTA,0). Далее на все ССИ подается байт индикации, содержащий семисегментный код десятков и дается разрешение на работу индикатору десятков (BSF PORTA,1). В течении 10мс индикатор десятков отображает содержимое FIG2, затем гаснет (BСF PORTA,1).

После освобождения кнопки СЧЕТ процедура опроса кнопок продолжается и проверяется состояние кнопки СБРОС (RB4). При нажатии кнопки СБРОС состояние регистров-счетчиков (FIG2 и FIG1) обнуляется.

;===============================================================

;COUNTER_100 - Двухразрядный десятичный счетчик. Динамическая индикация

;===============================================================

; RB7- кнопка СЧЕТ, RB7=0

; RA4 - кнопка СБРОС, RB4=0

; определение рабочих регистров-----------------------------

FIG1 EQU 10H ; регистр единиц

FIG2 EQU 11H ; регистр десятков

CNT1 EQU 14H ; счетчики

CNT2 EQU 15H ; задержки

GOTO START

;**************************************************

; ПОДПРОГРАММЫ--------------------------------------

;**************************************************

; двухразрядный десятичный счетчик---------------

ADD1 MOVFW FIG1 ; единицы в W

SUBLW 9 ;9 - W

BTFSC STATUS,Z ;ЕСЛИ число единиц равно 0

GOTO C10 ; ТО перенос в следующий разряд

INCF FIG1,f ; ИНАЧЕ увеличиваем на 1

RETURN ; и возвращаемся.

C10 CLRF FIG1 ; сброс единиц

MOVFW FIG2 ; десятки в W

SUBLW 9 ; 9 - W

BTFSC STATUS,Z ;ЕСЛИ число десятков равно 0

GOTO D10 ; ТО перенос в следующий разряд

INCF FIG2,F ; ИНАЧЕ увеличиваем на 1

RETURN ; и возвращаемся.

D10 CLRF FIG2 ; Все цифры oбработаны,

RETURN ; возвращаемся

; задержка, частота индикации 25 Гц---------------------

DELAY MOVLW .10

MOVWFCNT1

NOP

BETA MOVLW .13

MOVWF CNT2

ALFA DECFSZ CNT2, F

GOTO ALFA

DECFSZ CNT1, F

GOTO BETA

RETURN ;возвращаемся

;сброс индикаторов--------------------------------------------

RESET MOVLW 0

MOVWF FIG1

MOVWF FIG2

RETURN

;преобразование двоичного кода в семисегментный---

DC7 ADDWF PCL,F

RETLW B'0111111' ; Цифра 0

RETLW B'0000110' ; Цифра 1

RETLW B'1011011' ; Цифра 2

RETLW B'1001111' ; Цифра 3

RETLW B'1100110' ; Цифра 4

RETLW B'1101101' ; Цифра 5

RETLW B'1111101' ; Цифра 6

RETLW B'0000111' ; Цифра 7

RETLW B'1111111' ; Цифра 8

RETLW B'1101111' ; Цифра 9

;*********************************

; ОСНОВНАЯ ПРОГРАММА

;*********************************

;инициализация-----------------------------------------------------------------------

START: BSF STATUS,5 ; банк 1

MOVLWB'10000' ; портА: RA4 - вход,

MOVWF TRISA ; остальные-выход

MOVLW B'10000000' ; порт В: RB0 - RB6 на выход

MOVWF TRISB ; RB7 - вход

BCF STATUS,5 ; банк 0

CLR FFIG1 ; сброс индикатора мл. разряда

CLRF FIG2 ; сброс индикатора ст. разряда

;опрос порта----------------------------------------------------------------------------

BEGIN BTFSC PORTB,7 ; ЕСЛИ нажата кнопка СЧЕТ (RВ7=1)

GOTO SHET ; ТО перейти к обработке нажатия

BTFSC PORTA,4 ; ЕСЛИ нажата кнопка СБРОС (RА4=1)

GOTO CLR ; ТО перейти к обработке нажатия

CALL DISPL ; вывод на индикаторы

GOTO BEGIN ; к опросу порта

;обработка нажатия кнопки SHET------------------------------------------------

SHET BTFSS PORTB,7 ; ЕСЛИ кнопка СЧЕТ освобождена (RВ7=0)

GOTO BEGIN ; ТО вернуться к опросу кнопок

CALL ADD1 ; ИНАЧЕ перейти к программе суммирующего счетчика

CALL DISPL ; И вывести на индикатор

;ожидание освобождения кнопки SHET------------------------------------------

OFF_1 BTFSC PORTB,7 ;ЕСЛИ кнопка СЧЕТ нажата

GOTO OFF_1 ; ТО ждать освобождения

GOTO BEGIN ; ИНАЧЕ вернуться к опросу порта

;обработка нажатия кнопки СБРОС-----------------------------------------------

CLR BTFSS PORTA,4 ; ЕСЛИ кнопка СБРОС освобождена (RА4=0)

GOTO BEGIN ; ТО перейти к опросу порта

CALL RESET ; ИНАЧЕ сбросить индикаторы

;ожидание освобождения кнопки СБРОС---------------------------------------

OFF_2 BTFSC PORTA,4 ; ЕСЛИ кнопка СБРОС нажата

GOTO OFF_2 ; ТО ждать освобождения

GOTO BEGIN ; ИНАЧЕ вернуться к опросу порта

; индикация---------------------------------------------------------------------------

DISPL MOVFW FIG1 ; вFIG1 единицы

CALL DC7 ;

MOVWF PORTB ; вывод в порт В

BSF PORTA,0 ; включение индикатора FIG1

CALL DELAY ; на 10 мс

BCF PORTA,0 ; гашение индикатора FIG1

MOVFW FIG2 ; в FIG2 десятки

CALL DC7 ;

MOVWF PORTB ; вывод в порт В

BSF PORTA,1 ; включение индикатора FIG2

CALL DELAY ; на 10 мс

BCF PORTA,1 ; гашение индикатора FIG2

RETURN

;-----------------------------------------------------------------------------------------

END

ОСНОВНЫЕ ПОЛОЖЕНИЯ НА ПАМЯТЬ

  • Типовая процедура ожидания события состоит из следующих действий:

-ввода сигнала от датчика,

-анализа значения сигнала

-передачи управления в зависимости от состояния датчика.

ВОПРОСЫ ДЛЯ САМОПРОВЕРКИ

Литературв

124

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]