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;
Модернизация схемы блока управления для привода Fm-Stepdrive фирмы siemens с целью расширения функциональных возможностей
История
развития бытовой и промышленной микропроцессорной аппаратуры тесно связана с
развитием средств ЭВТ.
За
время своего развития средства ЭВТ прошли ...
Система охранно-пожарной сигнализации ООО Завод Медсинтез
охранный сигнализация пожарный
Пожарная безопасность предусматривает обеспечение
безопасности людей и сохранения материальных ценностей предприятия н ...
Расчет приемника
- Диапазон принимаемых частот: ДВ, СВ
-
65,7 - 73,7 МГц
87,5 - 108,5 МГц
- Реальная чувствительность: Е=1,5 мкВ
- Выходная мощность: =40
мВт
- ...
Меню сайта
2024 © www.informaticspoint.ru