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

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

Модернизация схемы блока управления для привода Fm-Stepdrive фирмы siemens с целью расширения функциональных возможностей
История развития бытовой и промышленной микропроцессорной аппаратуры тесно связана с развитием средств ЭВТ. За время своего развития средства ЭВТ прошли ...

Система охранно-пожарной сигнализации ООО Завод Медсинтез
охранный сигнализация пожарный Пожарная безопасность предусматривает обеспечение безопасности людей и сохранения материальных ценностей предприятия н ...

Расчет приемника
- Диапазон принимаемых частот: ДВ, СВ - 65,7 - 73,7 МГц 87,5 - 108,5 МГц - Реальная чувствительность: Е=1,5 мкВ - Выходная мощность: =40 мВт - ...

Меню сайта