Informatics Point

Информатика и проектирование

Разработка управляющей программы

EQU 0x0c ; Временные регистры общего примененияEQU 0x0dEQU 0x0eEQU 0x20EQU 0x21EQU 0x0f ; Счетчик,EQU 0x10 ; Старший байт.EQU 0x11 ; Младший байт,EQU 0x12 ; Флаг клавиатуры,EQU 0 ; Бит 0 - значит, клавиша нажата,EQU 1EQU 2 ; Нет клавиши = 0.EQU 3 ; Бит 3 - значит, обработка клавиши.EQU 0x13EQU 0x14EQU 0x2fEQU 100_IMPULS EQU 0x15EQU 0x17EQU 0x18EQU 0x2eEQU 1EQU 2

; Макрос сохранения байта состояния и содержимого рабочего регистра в буфере

push macroWBufferWBufferSTATUS, wStatBuffer; Макрос считывания байта состояния и содержимого рабочего регистра из буфера,

pop macroStatBuffer,wSTATUSWBuffer, w0

goto Start ; Старт;4; Сохраняем рабочий регистр и регистр состояния в момент прерывания.

pushWBufferWBufferSTATUS, wStatBuffer

;extern ServiceInterruptsServiceInterruptsStatBuffer,wSTATUSWBuffer, wInitPortsInitTimersKeyFlag,ServKey ; Проверка флага нажатия,ServiceKey ; Да, тогда обработкаGenerate; выдача импульса

goto loop

; Подпрограмма обработки нажатия клавиши. Msd - старшая цифра, Lsd - младшая цифра.NewKey,w ; Считывание регистра NewKey.TempE ; Сохранение в TempE.MsdTime,w ; Считывание Msd и перестановка полубайтов.B'11110000'; Обнуление младшего полубайта,MsdTime ; Сохранение,LsdTime,w ; Считывание Lsd и перестановка полубайтов,B'00001111' ; Обнуление старшего полубайта.MsdTime ; Логическое сложение с Msd.LsdTime,w ; Считывание Lsd и перестановка полубайтов.B'11110000' ; Обнуление младшего полубайта,TempE,w ; Логическое сложение с TempE.LsdTime ; Сохранение,KeyFlag,ServKey ; Сброс флага нажатии.; Возврат

InitPortsSTATUS,RP0 ; Банк 1.

movlw 1 ; RAO цифровые порты,TRISA ; RA0 - выходы,TRISB ; RB0-RB7 - выходы,STATUS,RP0 ; банк 0PORTA ; Обнуление порта APORTB ; Обнуление порта В; Возврат

Частота тактового генератора - 4,096 MГц, частота командных циклов - 1,024 МГц что с предварительным делителем на 32 осуществляет инкрементацию RTCC каждые 31,25 мс.

Модуль счета таймера - 96, поэтому прерывание будет происходить каждые 5 мс.

InitTimersMsdTime ; Сброс MsdTime

clrf LsdTime ; и IsdTime.KeyFlag ; Сброс флагов,STATUS,RP0 ; Банк 1.B'10000100' ; Предварительное деление на 32.OptionReg ;STATUS,RP0 ; Банк 0.B'00100000' ; Разрешение прерывания таймера,INTCON;.96 ; Предзагрузка таймера,TMR0 ; Начало счета,; Выход из прерывания.

ServiceInterruptsINTCON, T0IF ; Прерывание таймера?

goto ServiceRTCC ; Да, обработка.INTCON ; Нет, сброс INTC0N,INTCON,T0IF ; Разршение прерывания от таймера.;.96 ; Инициализация таймера,TMR0 ;INTCON,T0IF ; Сброс флага прерываний таймера,PORTA, 0 ; Если бит 0 порта А равен единице,ScanKeys ; быстрое сканирование клавиатуры

Сканируем клавиатуру 4x3 и выдаем номер клавиши в NewKey, ели клавиша была нажата. Если нет, обнуляем указатель keyhit. Подпрограмма устраняет "дребезг контактов". Клавиатура сканируется каждые 20 м

KeyFlag, DebnceOn ; Задержка окончена?Scan1 ; Да, тогда сканирование клавиатуры.Debnce ;Нет, тогда уменьшаем счетчик задержки; Возвращаемся, если не 0KeyFlag, DebnceOn ; Сброс флага; и возврат.SavePorts ; Сохранение портов,B'1110111' ; Загрузка TempD.TempD ;PORTB, w ;INTCON,RBIF ; Сброс флага прерывания от порта BTempD ; Правый сдвиг TempD.STATUS,C ; Перенос = 1?

;goto NoKey ; Нет, тогда окончаниеTempD,w ; ИЛИ TempD и wPORTB ; и выдача в P0RT_B.INTCON,RBIF ; Значение флага прерывания от порта В равно 1?ScanNext ; Нет, тогда продолжаем,KeyFlag, keyhit ; Последняя клавиша отпущена?SKreturn ; Нет, тогда выход.KeyFlag,keyhit ; Устанавливаем флаг нажатия новой клавиши,PORTB,w ; Считывание порта 8-TempE ; Сохранение в TempE.GetKeyValue ; Считывание значения клавиши от 0 до F,NewKey ; Сохранение в NewKey.KeyFlag, ServKey ; Установка флага обработки клавиш,KeyFlag,DebnceOn ;4Debnce ;: Изменение времени задержки.RestorePorts ; Возмещение портов,; NoKeyKeyFlag,keyhit ; Сброс флага,SKreturn

; Соответствие номеров клавиш, строк, столбцов и портов.TempC ;TempD,3 ; Первая строка,RowValEnd ;TempC;TempD,2 ; Вторая строка.RowValEnd ;TempC ;TempD, 1 ; Третья строка.TempE,0 ; Первый столбец?GetValCom ; Да, считывание клавишей 1,2,3TempE, 1 ; Второй столбец?Get456 ; Да. считывание 4,5,6TempE, 2 ; Третий столбец?Get789 ; Да, считывание 7,8,9TempC,2 ;TempC, 3 ;GetValCom ;TempC,2 ;TempC, w ; Таблица номеров клавиш.PCL;1;2;3;4;5;6;7;8;9;0A ;0;

; Сохраняем состояния портов А и В во время сканирования клавиатуры, SavePortsPORTA, wPABuf ; Сохраняем Порт A.PORTB, wPBBuf ; Сохраняем порт В.0xff ; На всех линиях порта B высокий уровень,PORTBSTATUS,RP0 ; Банк 1.OptionReg,7; Разрешаем подключение подтягивающих резисторовb'10001111' ; Младшие четыре разряда порта B входы,TRISB; старшие - входы.STATUS,RP0 ; Банк 0;

Перейти на страницу: 1 2 3

Лучшие статьи по информатике

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

Разработка сети передачи данных Нуринского РУТ Карагандинской области на основе создания цифровых РРЛ
Оцифрованные магистрали, на базе которых строятся современные сети передачи информации, должны быть стандарта SDH (Synchronous Digital Hierarchy -это синхро ...

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

Меню сайта