📄 nokia4.asm
字号:
;*************************
;THIS PROGRAM IS FOR
;KC-24 (HEN QIGUAI)
;32 KEYS SYSTEM
;ACTION CORPORATION
;*************************
;SYSTEM REGISTER DEFINE
;*************************
IEX EQU 00H ;interrupt enable register
IRQ EQU 01H ;interrupt require flag
TM0 EQU 02H ;timer0 mode register(Prescaler)
PORTA EQU 08H ;i/o port a
PORTB EQU 09H ;i/o port b
PORTC EQU 0AH ;i/o port c
TBR EQU 0EH ;table branch register
PAOUT EQU 16H ;set porta to be output port
PBOUT EQU 17H ;set portb to be output port
PCOUT EQU 18H ;set portc to be output port
WDT EQU 1EH
;*************************
;DATA MEMORY TABLE DEFINE
;*************************
CN EQU 20H ;cycle variable register
COUNT EQU 21H ;counter
H_COUNT EQU 22H ;high 4-bit keynumber
KEYCOUNT EQU 23H ;key-press count
KEYNUMBER EQU 24H ;key-press number
H_KEYNUMBER EQU 25H ;high 4-bit key number
L_SENT EQU 26H ;low 4-bit key code
H_SENT EQU 27H ;high 4-bit key code
L_SYSKEY EQU 28H ;low 4-bit systme code
H_SYSKEY EQU 29H ;high 4-bit system code
SENTCODE EQU 2AH ;ready sent code to LED
BOOT_FLAG EQU 2BH ;sent flag of bootcode
PARM EQU 2CH ;delay cycle count
CT0 EQU 2DH
CT1 EQU 2EH
CT2 EQU 2FH
FAMA_FLAG EQU 30H ;continue to send code flag
TEMP EQU 31H
CM0 EQU 32H
CM1 EQU 33H
CM2 EQU 34H
CM3 EQU 35H
L_SENT1 EQU 36H
H_SENT1 EQU 37H
CM4 EQU 38H
LHW EQU 39H
CM5 EQU 3AH
CM6 EQU 3BH
FAMA_FLAG1 EQU 3CH
CM7 EQU 3DH
;*******************************
ORG 00H
JMP START
NOP
NOP
NOP
JMP IQPBC
;*******************************
IQPBC
LDI IEX,00H ;INTERRUPT ENABLE 0
LDI IRQ,00H ;INTERRUPT REQUEST 0
RTNI;*******************************
;PORTA,3 PULSE OUTPUT
;*******************************
CLOCK
LDI PORTA,1000B ;cell "1" (38KHz)
NOP ;"1"=10us & "0"=14us+ next call
NOP ;and LDI instructions=16us
NOP
LDI WDT,1000B
NOP
NOP
NOP
NOP
NOP
LDI PORTA,0000B
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RTNI ;appr. 26US
;********************************
CLOCK1
LDI PORTA,0000B ;cell "0" (38KHz)
NOP ;"0"=14us+ next call
NOP ;and LDI instructions=26us
NOP
LDI WDT,1000B
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RTNI ;appr.26US
;******************************************
CLOCK2
LDI PORTA,1000B ;buffer for code "0"
NOP ;"0"=8us+ next call and LDI instructions=10us
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RTNI ;appr. 10US
;********************************
CLOCK3
LDI PORTA,0000B ;buffer for code "0"
NOP ;"0"=8us+ next call and LDI instructions=10us
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RTNI ;appr. 10US
;********************************
;SCAN EVERY BIT OF PB,PC
SCANKEY
;********************************
SCANPB1
LDA PORTB,00H ;0
BA0 SCANPB2 ADIM KEYCOUNT,01H
LDA COUNT,00H
STA KEYNUMBER,00H
LDA H_COUNT,00H
STA H_KEYNUMBER,00H
SCANPB2
ADIM COUNT,01H ;1
LDA PORTB,00H
BA1 SCANPB3
ADIM KEYCOUNT,01H
LDA COUNT,00H
STA KEYNUMBER,00H
LDA H_COUNT,00H
STA H_KEYNUMBER,00H
SCANPB3
ADIM COUNT,01H ;2
LDA PORTB,00H
BA2 SCANPB4
ADIM KEYCOUNT,01H
LDA COUNT,00H
STA KEYNUMBER,00H
LDA H_COUNT,00H
STA H_KEYNUMBER,00H
SCANPB4
ADIM COUNT,01H ;3
LDA PORTB,00H
BA3 SCANPC1
ADIM KEYCOUNT,01H
LDA COUNT,00H
STA KEYNUMBER,00H
LDA H_COUNT,00H
STA H_KEYNUMBER,00H
SCANPC1
ADIM COUNT,01H ;4
LDA PORTC,00H
BA0 SCANPC2
ADIM KEYCOUNT,01H
LDA COUNT,00H
STA KEYNUMBER,00H
LDA H_COUNT,00H
STA H_KEYNUMBER,00H
SCANPC2
ADIM COUNT,01H ;5
LDA PORTC,00H
BA1 SCANPC3
ADIM KEYCOUNT,01H
LDA COUNT,00H
STA KEYNUMBER,00H
LDA H_COUNT,00H
STA H_KEYNUMBER,00H
SCANPC3
ADIM COUNT,01H ;6
LDA PORTC,00H
BA2 SCANPC4
ADIM KEYCOUNT,01H
LDA COUNT,00H
STA KEYNUMBER,00H
LDA H_COUNT,00H
STA H_KEYNUMBER,00H
SCANPC4
ADIM COUNT,01H ;7
LDA PORTC,00H
BA3 S_RTN
ADIM KEYCOUNT,01H
LDA COUNT,00H
STA KEYNUMBER,00H
LDA H_COUNT,00H
STA H_KEYNUMBER,00H
S_RTN
ADIM COUNT,01H
BC $+2
JMP $+2
ADIM H_COUNT,01H
RTNI
;*************************************
START
LDI FAMA_FLAG,00H ;"0"--not continuous send,"1"-continuous sen
LDI FAMA_FLAG1,00H
SETUP
LDI TM0,0010B ; (128:1)*7ms mode
LDI TBR,00H ; table branch 0
LDI PAOUT,0000B ; porta input
LDI PBOUT,00H ; portb input
LDI PCOUT,00H ; portc input
LDI KEYCOUNT,00H
LDI KEYNUMBER,00H
LDI H_KEYNUMBER,00H
LDI COUNT,00H
LDI H_COUNT,01H
LDI CN,00H
;*****************************
;SCAN KEYS & INITIAL SETUP
;*****************************
TEST0
LDI PORTA,0111B ;scan ground column
CALL SCANKEY ;K25-K32 keys
SBI KEYCOUNT,01H
BAZ READY_FM ;valid then send code
BC START
TEST1
LDI PAOUT,0100B ;porta.2 bit output
LDI PORTA,0011B ;scan porta.2 bit
CALL SCANKEY ;K17-K24 keys
TEST2
LDI PAOUT,0010B ;porta.1 bit output
LDI PORTA,0101B ;scan porta.1 bit
CALL SCANKEY ;K9-K16 keys
TEST3
LDI PAOUT,0001B ;porta.0 bit output
LDI PORTA,0110B ;scan porta.0 bit
CALL SCANKEY ;K1-K8 keys
;******************************
MAIN
SBI KEYCOUNT,01H ;single valid key
BAZ READY_FM
LDA KEYCOUNT,00H
BNZ START ;more than three keys
JMP NOKEY ;no keys put
;******************************
READY_FM
SBI KEYNUMBER,0CH
BAZ KEYC
SBI CM5,01H
BNZ FAMA1
JMP FAMA2
KEYC
SBI FAMA_FLAG1,01H
BAZ SETUP
LDI FAMA_FLAG1,01H
SBI H_KEYNUMBER,01H
BNZ $+7
LDA CM5,00H
BA1 $+3
LDI CM5,02H
JMP SETUP
LDI CM5,00H
JMP SETUP
LDA CM5,00H
BA0 $+3
LDI CM5,01H
JMP SETUP
LDI CM5,00H
JMP SETUP
;*******************************
FAMA1
LDA H_KEYNUMBER,00H
STA TBR,00H
LDA KEYNUMBER,00H
CALL 0300H
STA L_SENT,00H
LDA TBR,00H
STA H_SENT,00H
SBI H_SENT,0FH
BAZ SETUP
LDA CM5,00H
BA1 $+4
LDI H_SYSKEY,04H
LDI L_SYSKEY,0AH
JMP FAMA11
LDI H_SYSKEY,00H
LDI L_SYSKEY,0CH
SBI H_SENT,07H
BNZ $+4
LDI H_SENT,02H
LDI L_SENT,07H
JMP FAMA11
SBI H_SENT,08H
BAZ SETUP
SBI H_KEYNUMBER,02H
BNZ FAMA11
SBI KEYNUMBER,0EH
BNZ FAMA11
JMP SETUP
FAMA11
LDI PORTA,00H
LDI PAOUT,1000B
SBI FAMA_FLAG,00H
BNZ $+2
CALL JIESHUMA
CALL FA_CODE11
CALL DELAY4
CALL DELAY4
CALL DELAY7
CALL DELAY7
CALL DELAY7
CALL DELAY7
CALL FA_CODE11
LDA L_SENT,00H
STA SENTCODE,00H
CALL SEND_BIT
LDA H_SENT,00H
STA SENTCODE,00H
CALL SEND_BIT
LDA L_SYSKEY,00H
STA SENTCODE,00H
CALL SEND_BIT
LDA H_SYSKEY,00H
STA SENTCODE,00H
CALL SEND_BIT
LDI COUNT,0AH
LDI CN,09H
CALL DELAY4
SBIM CN,01H
BNZ $-2
SBIM COUNT,01H
BNZ $-5
LDI COUNT,0AH
LDI CN,0AH
NOP
NOP
SBIM CN,01H
BNZ $-3
SBIM COUNT,01H
BNZ $-6
LDI FAMA_FLAG,01H
JMP SETUP
;********************************8
JIESHUMA
CALL FA_CODE11
CALL DELAY4
CALL DELAY4
CALL DELAY7
CALL DELAY7
CALL DELAY7
CALL DELAY7
CALL FA_CODE11
CALL FA_CODE01
LDI CM7,0FH
CALL FA_CODE11
SBIM CM7,01H
BNZ $-2
LDI COUNT,07H
CALL DELAY4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -