📄 p1672y.asm
字号:
;*************************
;THIS PROGRAM IS FOR
;IR 260/N(25660)
;55(5*11) KEY SYSTEM
;3004 CODE SYSTEM,SYSTEM CODE IS 117,107
;FIRST DATE 2002/10/11
;*************************
;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 ;"LIAN XU FA MA" FLAG
TEMP EQU 31H
L_SENT2 EQU 32H
H_SENT2 EQU 33H
L_SYSKEY2 EQU 34H
H_SYSKEY2 EQU 35H
UN EQU 36H
TH EQU 37H
TT EQU 38H
;*******************************
ORG 00H
LDI TT,0000B
LDI TH,00B
JMP START
NOP
NOP
NOP
JMP IQPBC
;*******************************
IQPBC
LDI IEX,00H ;INTERRUPT ENABLE 0
LDI IRQ,00H ;INTERRUPT REQUEST 0
ADIM TH,01B
RTNI
;*******************************
;PORTA,3 PULSE OUT
;*******************************
CLOCK
LDI PORTA,1000B
NOP
NOP
NOP
LDI WDT,1000B
NOP
NOP
NOP
NOP
LDI PORTA,0000B
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RTNI ;EXE 9+18=27US
******************************
CLOCK1
LDI PORTA,0000B
NOP
NOP
NOP
NOP
LDI WDT,1000B
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RTNI ;EXE 27US
;********************************
CLOCK2
LDI PORTA,0000B
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RTNI ;EXE 10US
;********************************
;SCAN 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
;****************************
;HIT 2 KEY AT THE SAME TIME
;****************************
DOUBLEKEY
LDI KEYCOUNT,00H
SBI H_KEYNUMBER,02H
BNZ SETUP
LDA KEYNUMBER,00H
STA TEMP,00H
SBI KEYNUMBER,08H
BNC DBL3
DBL1
LDI PAOUT,0100B ;PORTA(2) OUTPUT
LDI PORTA,0011B ;SCAN PORTA.2
CALL SCANKEY ;
SBI KEYCOUNT,01H ; "17" $ "1"
BNZ DBL2 ; PORTA(0) $ PORTA(2)
SBIM TEMP,08H
SUB KEYNUMBER,00H
BNZ SETUP
JMP READY_FM
DBL2
LDI PAOUT,0010B ;PORTA(1) OUTPUT
LDI PORTA,0101B ;SCAN PORTA.1
CALL SCANKEY ;
SBI KEYCOUNT,01H ; "17" $ "18"
BNZ SETUP ; PORTA(0) $ PORTA(1)
LDA TEMP,00H
SUB KEYNUMBER,00H
BNZ SETUP
ADIM H_KEYNUMBER,01H
SBIM KEYNUMBER,08H
JMP READY_FM
DBL3
LDI PAOUT,0100B ;PORTA(2) OUTPUT
LDI PORTA,0011B ;SCAN PORTA.2
CALL SCANKEY ;
SBI KEYCOUNT,01H ; "18" $ "1"
BNZ SETUP ; PORTA(1) $ PORTA(2)
LDA TEMP,00H
SUB KEYNUMBER,00H
BNZ SETUP
ADIM KEYNUMBER,08H
JMP READY_FM
;*****************************
START
LDI FAMA_FLAG,00H
SETUP
LDI TM0,0010B ; (128:1)*7US 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 PRESS INITIAL SETUP
;*****************************
TEST0
LDI PORTA,0111B ; SCAN GROUND
CALL SCANKEY
SBI KEYCOUNT,01H
BAZ READY_FM
BC START
TEST1
LDI PAOUT,0100B ;PORTA(2) OUTPUT
LDI PORTA,0011B ; SCAN PORTA.2
CALL SCANKEY
TEST2
LDI PAOUT,0010B ;PORTA(1) OUTPUT
LDI PORTA,0101B ; SCAN PORTA.1
CALL SCANKEY
TEST3
LDI PAOUT,0001B ;PORTA(0) OUTPUT
LDI PORTA,0110B ; SCAN PORTA.0
CALL SCANKEY
;******************************
MAIN
SBI KEYCOUNT,02H
BAZ DOUBLEKEY
SBI KEYCOUNT,01H
BAZ READY_FM
LDA KEYCOUNT,00H
BNZ START
JMP NOKEY
;******************************
READY_FM
LDA H_KEYNUMBER,00H
STA TBR,00H
LDA KEYNUMBER,00H
CALL 0300H
STA L_SENT,00H
LDA TBR,00H
STA H_SENT,00H ; EXE 14US
SBI H_SENT,0BH
BAZ START
JMP FAMA80
;*******************************
FAMA80
LDI PORTA,00H
LDI PAOUT,1000B
CALL FA_CODE1
LDA TH
STA SENTCODE
CALL SB80
LDI SENTCODE,111B ;HIGH SYSTEM CODE
CALL SENT_BIT3
LDA L_SENT,00H ;LOW CODE
STA SENTCODE
CALL SENT_BIT
LDA H_SENT,00H ;HIGH CODE
STA SENTCODE
CALL SENT_BIT2
CALL FA_CODE0
LDI PARM,06H
CALL DELAY
LDI PARM,01
CALL DELAY1
CALL DELAY4
CALL DELAY4
CALL DELAY7
CALL DELAY7
CALL DELAY7
CALL DELAY7
JMP SETUP
;*******************************
;4 TIMES SENT 1 BIT AFTER SHIFT
;********************************
SENT_BIT
LDA SENTCODE,00H
BA0 SB11
CALL FA_CODE0
JMP SB10
SB11
CALL FA_CODE1
SB10
LDA SENTCODE,00H
BA1 SB21
CALL FA_CODE0
JMP SB20
SB21
CALL FA_CODE1
SB20
LDA SENTCODE,00H
BA2 SB31
CALL FA_CODE0
JMP SB30
SB31
CALL FA_CODE1
SB30
LDA SENTCODE,00H
BA3 SB41
CALL FA_CODE0
RTNI
SB41
CALL FA_CODE1
RTNI
;****************************
;发两位码的SENT_BIT
;****************************
SENT_BIT2
LDA SENTCODE,00H
BA0 SB51
CALL FA_CODE0
JMP SB50
SB51
CALL FA_CODE1
SB50
LDA SENTCODE,00H
BA1 SB61
CALL FA_CODE0
RTNI
SB61
CALL FA_CODE1
RTNI
;********************************
;发三位码的SENT_BIT
;********************************
SENT_BIT3
LDA SENTCODE,00H
BA2 SB71
CALL FA_CODE0
JMP SB70
SB71
CALL FA_CODE1
SB70
LDA SENTCODE,00H
BA1 SB81
CALL FA_CODE0
JMP SB80
SB81
CALL FA_CODE1
SB80
LDA SENTCODE,00H
BA0 SB91
CALL FA_CODE0
RTNI
SB91
CALL FA_CODE1
RTNI
;********************************
;SENT CODE WHEN IS "1"
;****************************
FA_CODE1 ; HIGH 440US LOW 1330US
CALL CLOCK
CALL CLOCK
CALL CLOCK
CALL CLOCK
CALL CLOCK
CALL CLOCK
LDI CN,0AH
LDI UN,06H
CALL CLOCK1
SBIM UN,01H
BNZ $-2
LDI UN,0AH
CALL CLOCK1
CALL CLOCK1
SBIM UN,01H
BNZ $-3
SBIM CN,01H
BNZ $-10
LDI CN,0CH
CALL CLOCK2
SBIM CN,01H
BNZ $-2
LDI CN,09H
CALL DELAY7
SBIM CN,01H
BNZ $-2
RTNI
;****************************
;SENT CODE WHEN IS "0"
;****************************
FA_CODE0 ;HIGH 412US LOW 452US
CALL CLOCK
CALL CLOCK
CALL CLOCK
CALL CLOCK
CALL CLOCK
CALL CLOCK
LDI CN,0AH
LDI UN,0FH
CALL CLOCK1
SBIM UN,01H
BNZ $-2
SBIM CN,01H
BNZ $-5
LDI CN,05H
CALL CLOCK1
SBIM CN,01H
BNZ $-2
LDI CN,03H
CALL CLOCK2
SBIM CN,01H
BNZ $-2
CALL DELAY4
CALL DELAY7
RTNI
;***************************
NOKEY
LDI WDT,1000B ;CLEAR WDT
LDI PBOUT,00H
LDI PCOUT,00H
LDI PAOUT,0FH
LDI PORTA,00H
LDI IEX,0001B
LDI IRQ,00H
STOP
NOP
JMP START
;****************************
;"YAN SHI"
;****************************
DELAY
SBIM PARM,01H
BC $+2
RTNI
LDI CT2,09H
LDI CT1,0DH
LDI CT0,0EH
SBIM CT0,01H
BC $-1
SBIM CT1,01H
BC $-4
SBIM CT2,01H
BC $-7
JMP DELAY ;EXE 6.24MS
;****************************
DELAY1
SBIM PARM,01H
BC $+2
RTNI
LDI CT2,0FH
LDI CT1,0FH
LDI CT0,0FH
LDI WDT,1000B
SBIM CT0,01H
BC $-2
SBIM CT1,01H
BC $-5
SBIM CT2,01H
BC $-8
JMP DELAY1 ;EXE 13.1MS
;****************************
DELAY2
SBIM PARM,01H
BC $+2
RTNI
LDI CT2,0FH
LDI CT1,0FH
LDI CT0,0FH
SBIM CT0,01H
BC $-1
LDI WDT,1000B
NOP
SBIM CT1,01H
BC $-6
SBIM CT2,01H
BC $-9
JMP DELAY2 ;EXE 10MS
;**************************************
DELAY3
LDI CT2,0FH
LDI CT1,0FH
LDI CT0,0FH
LDI WDT,1000B
SBIM CT0,01H
BC $-2
SBIM CT1,01H
BC $-5
SBIM CT2,01H
NOP
NOP
NOP
NOP
NOP
NOP
BC $-14
RTNI ;EXE 10MS
;****************************
DELAY4
LDI CT2,0AH
LDI CT1,0FH
NOP
NOP
NOP
NOP
SBIM CT1,01H
BNZ $-5
SBIM CT2,01H
BNZ $-8
LDI CT2,05H
SBIM CT2,01H
BNZ $-1
RTNI
;****************************
DELAY7
LDI CT2,0AH
NOP
NOP
NOP
SBIM CT2,01H
BNZ $-4
LDI CT2,0AH
NOP
NOP
NOP
SBIM CT2,01H
BNZ $-4 ; 100
RTNI
;****************************
;KEY NUMBER DEFINE TABLE
;****************************
ORG 0300H
TJMP
ORG 0310H
RTNW 03H,0EH ;10 -81-
RTNW 02H,05H ;11 -FF-
RTNW 00H,0FH ;12 -81-
RTNW 0BH,02H ;13 -FF-
RTNW 00H,01H ;14 -81-
RTNW 01H,05H ;15 -81-
RTNW 02H,0FH ;16 -81-
RTNW 0BH,02H ;1F -01-
RTNW 01H,00H ;17 -81-
RTNW 01H,04H ;18 -01-
RTNW 01H,02H ;19 -FF-
RTNW 0BH,0EH ;1A -81-
RTNW 01H,0FH ;1B -FF-
RTNW 01H,0CH ;1C -81-
RTNW 01H,0EH ;1D -01-
RTNW 0BH,0FH ;1E -81-
ORG 0320H
RTNW 00H,00H ;20 -01-
RTNW 00H,04H ;21 -01-
RTNW 00H,02H ;22 -01-
RTNW 0BH,04H ;23 -81-
RTNW 02H,00H ;24 -01-
RTNW 02H,04H ;25 -01-
RTNW 02H,02H ;26 -01-
RTNW 0BH,00H ;27 -81-
RTNW 0BH,0EH ;28 -01-
RTNW 0BH,08H ;29 -FF-
RTNW 0BH,04H ;2A -FF-
RTNW 0BH,0EH ;2B -01-
RTNW 01H,0EH ;2C -01-
RTNW 02H,08H ;2D -01-
RTNW 0BH,02H ;2E -01-
RTNW 02H,0EH ;2F -01-
ORG 0330H
RTNW 02H,07H ;20 -01-
RTNW 03H,07H ;21 -01-
RTNW 00H,07H ;22 -01-
RTNW 02H,0AH ;23 -81-
RTNW 02H,00H ;24 -01-
RTNW 02H,04H ;25 -01-
RTNW 02H,02H ;26 -01-
RTNW 0BH,00H ;27 -81-
RTNW 0BH,0EH ;28 -01-
RTNW 0BH,08H ;29 -FF-
RTNW 0BH,04H ;2A -FF-
RTNW 0BH,0EH ;2B -01-
RTNW 01H,0EH ;2C -01-
RTNW 02H,08H ;2D -01-
RTNW 0BH,02H ;2E -01-
RTNW 02H,0EH ;2F -01-
;************************************
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -