русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

ОРГАНИЗАЦИЯ СВЯЗИ С ОПЕРАТОРОМ


Дата добавления: 2015-08-31; просмотров: 968; Нарушение авторских прав


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

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

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

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

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

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

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

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

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

 

 

+5В

WAIT

 


S1 ко входу МК

S1 замкнут?


нет

R1

U

 


выход
S1 замкнут

S1 разомкнут

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 вправо  
Сброс счетчика сдвигов
НАЧАЛО


нет

CС= СС +1
С = 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,в. Кнопки имеют нормально-разомкнутые контакты, поэтому стоит замкнуть кнопку, подключенную к столбцу, на которую подан ВЫСОКИЙ уровень как на соответствующей линии строки тоже появится ВЫСОКИЙ уровень. Таким образом, нажатую кнопку можно определить по пересечению столбца и строки.

 

 
SET
MEM

 


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

1 кОм RВ6 1 кОм RВ5 1 кОм RВ4 10 кОм RB3 10 кОм RB2 10 кОм RB1 10 кОм RB0 (0) (1) (0) б) обнаружение кнопки «5»

 

 

1 0 0 0 1 0 0 0 1

? !?

? ? ?

? ? ?

? ? ?

 

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

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

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

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

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

2. Для строк 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

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

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

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

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

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

·

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

 

 

Литературв

 

 



<== предыдущая лекция | следующая лекция ==>
Pис.7.12 | ЛАБОРАТОРНАЯ РАБОТА №12


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 2.967 сек.