Главная страница  Комбинированное использование портов 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 [ 32 ] 33 34 35 36 37 38 39 40

RETLW

B-01001111

; Семисегментный

цифры 3.

RETLW

BOIIOOIIO-

; Семисегментный

цифры 4.

RETLW

B-01101101-

; Семисегментный

цифры 5.

RETLW

В-0111110Г

; Семисегментный

цифры 6.

RETLW

B00000111

; Семисегментный

цифры 7.

RETLW

B 0111n11

; Семисегментный

цифры 8.

RETLW

B 011001ir

; Семисегментный

цифры 9.

Эта подпрограмма сканирует клавиатуру 4x4.

Если клавиша нажата, KEY.HIT переходит в 1 и номер клавиши помещается в NEWKEY Если никакая клавиша не нажата, OFF помещается в NEW KEY и KEY HIT и переходит в 0.

SCAN KP

BTFSC FLAG,KEY HIT ; Клавиша обслуживается ?

GOTO UP DSP 1 ; Если да, пропускаем обычную процедуру,

MOVLW В11111111 ; иначе вьщаем 1 на все линии

MOVWF PORTJ ; порта В.

H0VLW В11110111 ; Устанавливаем ключ C0L на низкий уровень.

H0VWF TEMP ; Сохраняем в регистр TEMP.

SKP1

MOVLW В00000000 ; Все линии порта С определяем как выходы.

TRIS PORT C : /

MOVF TEMP.W ; Пересылаем TEMP в регистр W.

ANDLW ВООООШГ ; Опрашиваем клавиатуру.

MOVWF PORT C ; /

MOVLW В11110000 ; Старшие 4 линии порта С - входы,

TRIS P0RT C ; младшие - выходы.

MOVF TEMP,W ; Восстанавливаем предыдущее значение

; линий порта С.

MOVWF PORT C ; /

HOVF PORT C,W ; Считываем текущее значение в регистр W.

ANDLW В 11110000 ; Маскируем младшую тетраду.

XORLW В 11110000 ; Проверяем, была ли нажата клавиша,

BTFSS STATUS.Z ; Если нет - пропускаем,

GOTO DET KEY ; да - определяем нажатую клавишу.

BSF STATUS,С ; Установить бит переноса.

RRF TEMP ; Опросить следующий столбец.

BTFSC STATUS, С ; Если все выполнено, пропускаем.

GOTO SKP1

CLRF NEW KEY ; Устанавливаем NEW KEY = FF.

DECr NEW KP ; /

CLRF POflT C ; Обнуляем регистр PORT C

MOVLW B00000000 ; и задаем все линии порта С как выходы.

TRIS P0RT C ; /

GOTO UP DSP J ; Возвращаемся.

нажатая клавиша обнаружена.

INCF

NEW KB,W

BTFSS

STATUS, Z

GOTO

SKP2

MO/F

PORT C,W

lORLW

ВООООШГ

ANDWF

TEMP.W

MOVWF

NEW KEY

GALL

GEr KE VAL

MOVWF

NEW KEY

FLAG,KEY HIT

GOTO

SKP2

Клавиша отжата?

Если нет, то возвращаемся. Считываем номер строки клавиатуры.

Переписываем в регистр W. Получаем значение клавиши.

Устанавливаем флажок Клавиша нажата Возвращаемся.

Эта подпрограмма декодирует код клавиши.

THREE

FOUR

FIVE

SEVEN

EIGHT

NINE

ZERO

SKP3

SKP2

GET KEY VAL

ANDLW

ВООООШГ

; Маскируем старший полубайт.

MOVWF

KE NIBL

; Сохраняем.

MOVLW

; Задаем счет до 4.

MOVWF

TEMP

GKVI

STATUS,С

; Устанавливаем бит переноса.

KE NIBL

; Сдвигаем KEYJIBL.

BTFSS

STATUS,С

; Проверяем перенос.

GOTO

GET HI KEY

; Перходии.

DECFSZ

TEMP

; Уменьшаем значение счетчика

GOTO

GKVI

; Повторяем.

GOJESET



BSF BSF GOTO GET HI KEY DECF SWAPF ANDLW MOVWF MOVF ADDWF GOTO GOTO GOTO GOTO

STATUS.PAD STATUS,PAl SYSJESET

TEMP

NEW.KEY.W 8-00001111 KEYJIBL TEMP.W

GET147A GET2580 СЕГЗбЭВ GETCDEF

; Банк 3.

RETLW

Клавиша 2.

RBLW

Клавиша 5.

; Сброс.

RETLW

Клавиша 6.

RETLW

Клавиша 0.

; Декрементируем TEMP.

RETLW

Клавиша 3.

; Меняем местами полубайты.

RETLW

, Клавиша 6.

RETLW

Клавиша 9.

; Сохраняем.

RETLW

Клавиша В.

; Определяем смещение для таблицы переходов.

RETLW

Клавиша С.

; Модифицируем программный счетчик.

RETLW

Клавиша D.

; Переходим по таблице.

RETLW

; Клавиша Е.

RETLW

; Клавиша F.

GET147A

MOVLW

; Задаем счет до 4.

GETCOM

MOVWF

TEMP

GETC0M1

STATUS,С

; Устанавливаем бит переноса.

KE NIBL

; Сдвигаем KEYJIBL.

BTFSS

STATUS,С

; Проверяем перенос.

GOTO

KEY TBL

; Переходим к таблице.

DECFSZ

TEHP

; Декрементируем счетчик и проверяем на 0.

GOTO

GETCOMI

; Если не 0. то повторяем,

GOTO

GO RESET

; иначе сбрасываем.

GET2580

MOVLW

8 ;

Задаем счет до 8.

GOTO

GETCOM

GET369B

MOVLW

D-12- ;

Задаем счет до 12.

GOTO

GETCOM

GETCDEF

MOVLW

D-16- ;

Задаем счет до 16.

GOTO

GETCOM

KEYJBL

DECF

TEMP ;

Декрементируем TEMP.

MOVF

TEMP.W ;

Переписываем в W.

ADDWF

PC :

Переходим по таблице.

RETLW

1 ;

Клавиша 1.

RETLW

4 ;

Клавиша 4.

RERW

7 ;

Клавиша 7.

RERW

CA :

Клавиша А.

MASK ANNC

MOVLW

B-11111100-

; Первая цифра?

XORWF

PORTJ. 0

BTFSC

STATUS. Z

; Если нет, то пропускаем,

GOTO

MASK.ALARM

; иначе переходим к MASK ALARM.

MDVLW

B11110011-

; Вторая цифра?

XORWF

P0RTJ,0

BTPSC

STATUS,Z

; Если нет, то пропускаем.

GOTO

MASKJOLON

; иначе переходим к MASKJOLON.

MOVLW

B-11001111-

; Третья цифра?

XORWF

PORTJ,0

BTFSC

STATUS,Z

; Если нет, то пропускаем.

GOTO

MASK.PM

; иначе переходим к MASK PM.

HASK AM

INCF

; Инкрементируем FSR.

BTFSS

FO,AHJM

; Проверяем разряд АМ РМ, если он равен 0, значит - AM.

DIGn,7

; Устанавливаем 7 разряд (MSB).

GOTO

BLNK.LEADJ

; Продолжаем.

NASKJM

INCF

; Инкрементируем FSR.

BTFSC

FO.AMJM

; Проверяем разряд АМ РМ. если он равен 1, значит - РМ.

DIGIT.7

; Устанавливаем старший разряд (MSB).

GOTO

BLNK LEAD 0

; Продолжаем.

KASOUKM

BTFSC

FLAG,ALRMLED

; Если 1, то включаем светодиод (ALARM).

DIGIT,7

GOTO

BLNKJEADJ .

; Продолжаем.

KASKJOLON

BTFSC

FLAG,COLON

; Если 1. то включаем двоеточие (COLON).

DIGn,7

GOTO

BLNK.LEADJ

; Продолжаем.

BLNK LEADJ

MOVF

FLAG,W

; Перемещаем флаги в регистр W.



ANDLW

B-00000011

: Маскируем (IN DEN).

XORLW

В-00000010

; Проверяем.

BTPSC

STATUS.Z

; Если 0, то выполняем.

RETLW

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

MOVLW

B-11111100-

; Если первая цифра.

XORWF

PORTJ, 0

BTFSS

STATUS, Z

; то пропускаем.

RETLW

; Возвращаемся,

MOVLW

B-00111111

; иначе маскируем G и ANUNC

ANDWF

DIGn,0

; и пересылаем в регистр W.

xorlw

В-0011111Г

; Проверяем на 0.

BTFSS

STATUS,Z

; Если 0, то пропускаем.

RETLW

; Возвращаемся,

MOVLW

В10000000

; иначе выключаем D1.

ANDWF

DIGF

RETLW

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

MOVWF

CLRF

ALFUG

CLRF

AAFUG

CLRF

ENTFLG

GOTO

TEST HARDWARE

все подпрограммы, относящиеся к таймеру, помещены выше адреса 200. ORG 0200

; Инициализация портов RTCC. IMIT CLK

MOVLW

В-0000111Г

; Активизируем.

MOVWF

PORT A

MOVLW

B00000000

; Определяем все линии порта А как выходы

TRIS

PORT A

MOVLW

Bllllllir

; Устанавливаем все разряды порта В в 1.

MOVWF

PORTJ

MOVLW

BOOOOOOOO

; Определяем все линии порта В как выходы

TRIS

PORTJ

MOVLW

В00000000

; Все разряды порта С устанавливаем в 0.

MOVWF

PORTJ

MOVLW

В00000000

; Все линии порта С определяем как выходы

rais

PORTJ

MOVLW

В00000100

; Определяем коэффициент деления

; предварительного делителя частоты.

MOVWF

OPnON

MOVLW

MSEC5

; RTCC = 5 mc.

MOVWF

RTCC

CLRF

MSTMR

: Обнуляем HSTMR (счетчик миллисекунд).

CLRF

STWR

: STMR (секунд).

CLRF

MTWR

; и MTMR (минут).

MOVLW

; Устанавливаем 12 часов.

MOVWF

HTMR

MOVWF

HALARM

: Устанавливаем будильник на 12 часов.

CLRF

МАиШМ

MOVLW

В00000011

; Устанавливаем режим тестирования.

UPDATEJIHERS HOVF BTFSS GOTO HOVLW MOVWF INCF BTFSC GOTO

UP TMRJ HOVF ANDLW XORLW BTFSS GOTO BSF BSF MOVLW SUBWF BTFSS BCF GOTO

UP TMR 2 BSF MOVLW SUBWF BTFSS BCF

UPTHfi 3 MOVF XORLW BTFSS RETLW

RTCC,W

STATUS, Z

UPDATEJIHERS

MSEC5

RTCC

MSTMR

FLAG. КРГJIT CHKJEJOUNCE

FLA6.W BOOOOOOU В00000001 STATUS,Z UPJMR 2 FLAG.ALRMLED FLAG, COLON DlOO HSTMR,0 STATUS.С FLAG.ALRMLED UP TMRJ

FLAG, COLON DlOO MSTMR. 0 STATUS.С FLAG. COLON

HSTWR.O 0200 STATUS. Z

Приращение счетчика секунд.

CLRF MOVF

MSTMR MINJEC.W

RTCC перемещаем в регистр W.

Проверяем на 0.

Если не О - повторяем,

иначе RTCC = 5 mc.

Инкрементируем счетчик миллисекунд. Если клавиша не нажата, пропускаем, иначе переходим.

Режим будильника?

Проверяем на О, если да, то пропускаем

и включаем светодиод ALARM. Включаем светодиоды двоеточия. Организуем мигание с периодом 1/2 с / /

светодиода ALARM. Переходим к UPJMRJ.

Включаем светодиоды двоеточия.

Задаем режим мигания.

Пересылаем MSTMR в W.

= 200 ?

Обнуляем MS TMR.

Пересылаем MINJEC в регистр W.



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 [ 32 ] 33 34 35 36 37 38 39 40

© 2000 - 2024 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования.