?? p3026y.asm
字號:
;*************************
;THIS PROGRAM IS FOR
;IR 4432
;56 KEY SYSTEM
;4432 CODE SYSTEM
;*************************
;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
CLOCK_COUNT EQU 39H
L_SYSKEY1 EQU 3AH
DD EQU 3BH
;*******************************
ORG 00H
LDI L_SYSKEY1,1100B
LDI L_SYSKEY2,0000B
LDI DD,01H
JMP START
NOP
NOP
NOP
JMP IQPBC
;*******************************
IQPBC
LDI IEX,00H ;INTERRUPT ENABLE 0
LDI IRQ,00H ;INTERRUPT REQUEST 0
RTNI
;*******************************
;PORTA,3 PULSE OUT
;*******************************
CLOCK
LDI PORTA,1000B
NOP
NOP
NOP
LDI WDT,1000B
NOP
NOP
NOP
NOP
NOP
LDI PORTA,0000B
LDI CLOCK_COUNT,7
SBIM CLOCK_COUNT,1
BNZ $-1
RTNI ;EXE 10+18=28US
******************************
CLOCK1
LDI PORTA,0000B
NOP
NOP
NOP
LDI WDT,1000B
LDI CLOCK_COUNT,10
SBIM CLOCK_COUNT,1
BNZ $-1
RTNI ;EXE 28US
;********************************
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
;*****************************
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 L_SYSKEY,00H
LDI COUNT,00H
LDI H_COUNT,01H
LDI CN,00H
LDI UN,00H
LDI PARM,08H
CALL DELAY2
LDI PARM,02H
CALL DELAY
CALL DELAY4
CALL DELAY4
CALL DELAY4
CALL DELAY4
CALL DELAY8
CALL DELAY8
CALL DELAY8
CALL DELAY8
;*****************************
;SCAN PRESS INITIAL SETUP
;*****************************
TEST0
LDI PORTA,0111B ; SCAN GROUND
CALL SCANKEY
SBI KEYCOUNT,01H
BAZ $+3
BC START
JMP TEST1
SBI KEYNUMBER,02H
BAZ $+4
SBI KEYNUMBER,03H
BAZ $+4
JMP READY_FM
LDI TT,08H
JMP $+2
LDI TT,09H
LDI PAOUT,0100B ;PORTA(2) OUTPUT
LDI PORTA,0011B ; SCAN PORTA.2
LDA PORTC,00H
BA3 READY_FM
LDI H_KEYNUMBER,04H
LDA TT
STA KEYNUMBER
JMP READY_FM
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,0EH
BAZ START
JMP FA01
FA51
EORIM L_SYSKEY1,0100B STA L_SYSKEY
LDI H_SYSKEY,101B
JMP FAMA80
FA00
EORIM L_SYSKEY2,0000B
STA L_SYSKEY
LDI H_SYSKEY,0000B
JMP FAMA80
FA01
EORIM L_SYSKEY1,0100B
STA L_SYSKEY
LDI H_SYSKEY,0000B
JMP FAMA80
*******************************
FAMA80
LDI PORTA,00H
LDI PAOUT,1000B
CALL BOOT_MA
LDA L_SYSKEY
STA SENTCODE
CALL SENT_BIT
LDA H_SYSKEY ;HIGH SYSTEM CODE
STA SENTCODE
CALL SB10
LDA H_SENT,00H ;LOW CODE
STA SENTCODE
CALL SB20
LDA L_SENT,00H ;HIGH CODE
STA SENTCODE
CALL SENT_BIT
JMP SETUP
;*******************************
;4 TIMES SENT 1 BIT AFTER SHIFT
;********************************
SENT_BIT
LDA SENTCODE,00H
BA3 SB11
CALL FA_CODE0
JMP SB10
SB11
CALL FA_CODE1
SB10
LDA SENTCODE,00H
BA2 SB21
CALL FA_CODE0
JMP SB20
SB21
CALL FA_CODE1
SB20
LDA SENTCODE,00H
BA1 SB31
CALL FA_CODE0 JMP SB30
SB31
CALL FA_CODE1
SB30
LDA SENTCODE,00H
BA0 SB41 CALL FA_CODE0
RTNI
SB41
CALL FA_CODE1
RTNI
;********************************
;BOOT CODE (3010)
;********************************
BOOT_MA ;SENT BOOT CODE
LDI CN,3
CALL CLOCK
CALL CLOCK ;----
CALL CLOCK ;
CALL CLOCK ;
CALL CLOCK ;
CALL CLOCK ;
CALL CLOCK ;
CALL CLOCK ;
CALL CLOCK ; 808US
CALL CLOCK ;
CALL CLOCK ;
SBIM CN,01H
BNZ $-10
CALL CLOCK
CALL CLOCK
RTNI
;********************************
;SENT CODE WHEN IS "1"
;****************************
FA_CODE1 ;LOW 876US HIGH 808US
LDI CN,14
CALL CLOCK1 ; 29*28US
CALL CLOCK1 ; =840US
CALL CLOCK1 ;-----
NOP
SBIM CN,01H
BNZ $-4
CALL CLOCK2
CALL CLOCK2
CALL CLOCK2
LDI CN,3
CALL CLOCK
CALL CLOCK ;----
CALL CLOCK ;
CALL CLOCK ;
CALL CLOCK ;
CALL CLOCK ;
CALL CLOCK ;
CALL CLOCK ;32*27US
CALL CLOCK ; =808US
CALL CLOCK ;
CALL CLOCK ;----
SBIM CN,01H
BNZ $-10
CALL CLOCK
CALL CLOCK
CALL CLOCK
LDI PORTA,1000B
RTNI
;****************************
;SENT CODE WHEN IS "0"
;****************************
FA_CODE0 ;HIGH 808US LOW 876US
LDI CN,3
CALL CLOCK
CALL CLOCK ;----
CALL CLOCK ;
CALL CLOCK ;
CALL CLOCK ;
CALL CLOCK ;
CALL CLOCK ;
CALL CLOCK ;
CALL CLOCK ; 808US
CALL CLOCK ;
CALL CLOCK ;
SBIM CN,01H
BNZ $-10
CALL CLOCK
CALL CLOCK
CALL CLOCK
LDI CN,14
CALL CLOCK1 ; 29*28US
CALL CLOCK1 ; =840US
CALL CLOCK1 ;-----
NOP
SBIM CN,01H
BNZ $-4
CALL CLOCK2
CALL CLOCK2
CALL CLOCK2
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 CT1,0AH
LDI CT2,0FH
NOP
NOP
NOP
NOP
SBIM CT2,01H
BNZ $-5
SBIM CT1,01H
BNZ $-8
LDI CT1,05H
SBIM CT1,01H
BNZ $-1
RTNI ;(6*16+2)*10+2+12=1000|¨?s
DELAY8
LDI CT1,0AH
NOP NOP
NOP
SBIM CT1,01H
BNZ $-4
LDI CT1,0AH
NOP NOP
NOP
SBIM CT1,01H
BNZ $-4
RTNI
;****************************
;KEY NUMBER DEFINE TABLE
;****************************
ORG 0300H
TJMP
ORG 0310H
RTNW 02H,04H
RTNW 02H,03H ;1F -01-
RTNW 01H,0BH ;10 -81-
RTNW 01H,0AH ;11 -FF-
RTNW 01H,05H ;12 -81-
RTNW 01H,04H ;13 -FF-
RTNW 01H,09H ;14 -81-
RTNW 01H,08H ;15 -81-
RTNW 00H,09H
RTNW 00H,00H
RTNW 00H,0BH ;18 -01-
RTNW 00H,0AH ;19 -FF-
RTNW 03H,0BH
RTNW 01H,01H
RTNW 01H,00H
RTNW 0EH,0BH
ORG 0320H
RTNW 00H,01H ;1A -81-
RTNW 00H,02H ;1B -FF-
RTNW 00H,03H
RTNW 00H,04H RTNW 00H,05H ;2F -01-
RTNW 00H,06H ;20 -01-
RTNW 00H,07H ;21 -01-
RTNW 00H,08H
RTNW 02H,06H
RTNW 00H,0EH
RTNW 00H,0DH ;24 -01-
RTNW 00H,0CH
RTNW 02H,05H
RTNW 00H,0FH
RTNW 01H,0EH
RTNW 3,8
ORG 0330H
RTNW 01H,03H ;25 -01-
RTNW 01H,02H ;28 -01-
RTNW 01H,07H
RTNW 01H,06H
RTNW 01H,01H ;29 -FF-
RTNW 02H,00H ;2F -01-
RTNW 02H,01H ;20 -01-
RTNW 01H,00H ;21 -01-
RTNW 02H,09H ;22 -01-
RTNW 02H,0CH
RTNW 02H,0BH
RTNW 03H,0EH
RTNW 2,14
RTNW 2,10
RTNW 3,5
RTNW 3,15
ORG 0340H
RTNW 02H,0DH ;25 -01-
RTNW 02H,01H ;28 -01-
RTNW 02H,00H
RTNW 03H,0CH
RTNW 03H,07H ;29 -FF-
RTNW 03H,06H ;2F -01-
RTNW 03H,02H ;20 -01-
RTNW 03H,04H ;21 -01-
RTNW 01H,0DH ;22 -01-
RTNW 01H,0CH
;************************************
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -