?? rc5.asm
字號:
;this program use mitsubishi microcomputers.--M34283*
;all 7x8 KEY matrix
;have to use timer 1 and timer 2 to timing and send code.
;RAM DEFINE
GPORTDATA .EQU 0,0
EPORTDATA .EQU 0,1
ROWNO_NEW .EQU 0,2 ; KEY ROW NO (D0_7)
COLNO_NEW .EQU 0,3 ; KEY COL NO (G0_3,E0_2)
ROWNO_OLD .EQU 0,4 ; KEY ROW NO (D0_7)
COLNO_OLD .EQU 0,5 ; KEY COL NO (G0_3,E0_2)
ROWNO_SAE .EQU 0,6 ; KEY ROW NO (D0_7)
COLNO_SAE .EQU 0,7 ; KEY COL NO (G0_3,E0_2)
ROWNO_CUR .EQU 0,8
COLNO_CUR .EQU 0,9
CUR_FLAG .EQU 0,10
CUR_OK .EQU 0,11
;=========================
START_BIT .EQU 1,0
TOGGLE_BIT .EQU 1,1
CUSTOMH .EQU 1,2
CUSTOML .EQU 1,3
DATAH .EQU 1,4
DATAL .EQU 1,5
CUSTOMH_ .EQU 1,6
CUSTOML_ .EQU 1,7
DATAH_ .EQU 1,8
DATAL_ .EQU 1,9
;=========================
COUNTERA .EQU 2,0
COUNTERB .EQU 2,1
ROWNO_SEC .EQU 2,2
COLNO_SEC .EQU 2,3
ROWNO_FIRST .EQU 2,4
COLNO_FIRST .EQU 2,5
COUNTERA_S .EQU 2,6
;=============================
CHESUM_LoBYTELO .EQU 3,0 ;00H
CHESUM_LoBYTEHI .EQU 3,1 ;
CHESUM_HiBYTELO .EQU 3,2 ;00H
CHESUM_HiBYTEHI .EQU 3,3 ;0000H
INDEX .EQU 3,4
INDEX_D .EQU 3,5
P_INDEX .EQU 3,6
;=========================
DIGT0 .EQU 0
DIGT1 .EQU 1
DIGT2 .EQU 2
DIGT3 .EQU 3
DIGT4 .EQU 4
DIGT5 .EQU 5
DIGT6 .EQU 6
DIGT7 .EQU 7
DIGT8 .EQU 8
DIGT9 .EQU 9
DIGTA .EQU 10
DIGTB .EQU 11
DIGTC .EQU 12
DIGTD .EQU 13
DIGTE .EQU 14
DIGTF .EQU 15
;=============================
.ORG 0000H
START:
NOP
CLD ;clear all D port to 0.
RCAR ;enable high level output invaild.
SNZP ;if cold start or warm. test flag P.
BL COLD_BOOT
WARM_BOOT:
LA DIGTF ;all G/E port set pull-down transistor
TPU0A ;and key-on wakeup valid
LA DIGT0 ;set D7-D4 port no pull-down transistor.
TPU1A ;and key-on wakeup invalid.
;set Timer1
LA DIGT1 ;may 32Ms to wait.
TBA
LA DIGT6
T1AB
LA DIGT3
TV1A
LA DIGT2
TBA
LA DIGTA
T1AB
WRST
RESCAN:
WaitToScan:
SNZT1
B WaitToScan
;send a code,and scan key twice all time(use in)may 32MS
;first scan key, if have key save for second compare.
BML SCANKEY
LXY COUNTERA
TAM 0
SEA 1
BL COLD1
LXY ROWNO_NEW
TAM 0
LXY ROWNO_OLD
XAM 0
LXY COLNO_NEW
TAM 0
LXY COLNO_OLD
XAM 0
BML SCANKEY
LXY COUNTERA
TAM 0
SEA 1
BL COLD1
LXY ROWNO_NEW
TAM 0
LXY ROWNO_OLD
SEAM
BL RESCAN ;second scan key no equal first key
LXY COLNO_NEW
TAM 0
LXY COLNO_OLD ;second scan key no equal first key
SEAM
BL RESCAN
;;=======================================================
SEND_IR:
URSC
LXY COLNO_NEW
TAM 0
TBA
LXY ROWNO_NEW
TAM 0
TDA
TAB
TABP 6
TEAB
;-----------------------2006-10-19 8:11------------------------------
TOSETDATA2:
SZC
BL GET_10_START ;if CY=1,the start bits are 10,ohterwise will be 11.
LA DIGT3 ;CY=0,
LXY START_BIT ;
XAM 0
BL FETCH_DATA
GET_10_START: ;CY=1,
LA DIGT2 ;
LXY START_BIT
XAM 0
FETCH_DATA:
LA DIGT0 ;The custom code is 00000.
LXY CUSTOMH
XAMI 0
LA DIGT0
XAM 0
;-------------------------------------------------------------------
TABE ;get the data code from E register.
LXY DATAH
XAM 0
TAB
LXY DATAL
XAM 0
LXY DATAH
TAM 0
SEA DIGTF
BL FIND_KEY
LXY DATAL
TAM 0
SEA DIGTF
BL FIND_KEY
BL RESCAN
FIND_KEY:
BML COMP_KEY ;if equal no skip,else skip(new key)
BL HEADER
BL REP_SE
REP_SE:
LXY TOGGLE_BIT
SZB 0
BL SET1
SET0:
SB 0
BL HEADER
SET1:
RB 0
;==============================================================
HEADER:
;send form030 ir code.
;0:889us/889us. 1: 889us/889us.
;Timer 2 input source use f(Xin). use 0.25us CARR unit.
;set T2 and R2H/R2L.
;Timer2 start with R2L.
;==============================================================
LA DIGT4
TBA ;the lower time is 18.52us
LA DIGT9
T2AB
LA DIGT2
TBA ;the higher time is 9.26us
LA DIGT4
T2HAB
WRST
LA DIGT1
TBA ;
LA DIGTE
T1AB
LA DIGTD ;
PreSendCode:
SNZT1
B PreSendCode
TV2A
LA 0 ;Stop the timer1 to change the count source to Carrier wave output (CARRY).
TV1A
LXY START_BIT ;
TAM 0
RAR
SZC
LA DIGT5
LA DIGT1
TV1A
SENDDATA:
LXY START_BIT
BML SEND_1BIT ;
LXY TOGGLE_BIT
BML TOGGLE
LXY CUSTOMH ;
BML WORD ;CUSTOM CODE LOW DATA
LXY CUSTOML ;
BML SEND_1BIT ;CUSTOM CODE HIGH DATA
LXY DATAH
BML WORD ;LOW DATA CODE
LXY DATAL
BML SEND_2BIT ;HIGH DATA CODE
LA DIGT5
TBA
LA DIGT7
T1AB
LA DIGT9
WaitEnd:
SNZT1
BL WaitEnd
TV2A
LA DIGT0
TV2A
TV1A
LA DIGT3
TV1A
BL RESCAN
;===========================================================
; START SCAN KEY !
SCANKEY:
WRST
LXY 0,7
CLSDPORT:
RD
DEY
BL CLSDPORT
LXY ROWNO_NEW ;CLEAR ROW & COL NO. TO 'F'
LA DIGTF
XAMI 0
LA DIGTF
XAM 0
LXY COUNTERA
LA 0
XAM 0 ;CLEAR COUNTERA
LXY COUNTERA_S
LA 0
XAM 0
;;-------------------------------------
LA DIGT7 ;DIGT7
LXY COUNTERB
TBA
XAM 0 ;7==>COUNTERB
TAB
TYA
SetPortD1:
SD ;SET Di TO 1
LA DIGTF ;all G/E port set pull-down transistorE0
TPU0A
BML WAIT10
NOP
IAE
LXY EPORTDATA ;save E port data to EPORTDATA.
XAM 0
IAG
LXY GPORTDATA ;save G port data to GPORTDATA.
XAM 0
LXY COUNTERB ;CLEAR Di TO 0.
TAM 0
TYA
RD
G3_ROW:
LXY GPORTDATA
SZB 3
BL G3_KEY
BL G2_ROW
G3_KEY:
BML INC_COUNTERA
LXY ROWNO_NEW
LA 0
XAM 0
BML COL_TRAN
G2_ROW:
LXY GPORTDATA
SZB 2
BL G2_KEY
BL G1_ROW
G2_KEY:
BML INC_COUNTERA
LXY ROWNO_NEW
LA 0
XAM 0
BML COLADD8
G1_ROW:
LXY GPORTDATA
SZB 1
BL G1_KEY
BL G0_ROW
G1_KEY:
BML INC_COUNTERA
LXY ROWNO_NEW
LA 1
XAM 0
BML COL_TRAN
G0_ROW:
LXY GPORTDATA
SZB 0
BL G0_KEY
BL E0_ROW ;E2_ROW
G0_KEY:
BML INC_COUNTERA
LXY ROWNO_NEW
LA 1
XAM 0
BML COLADD8
;E2_ROW:
; LXY EPORTDATA
; SZB 2
; BL E2_KEY
; BL E1_ROW
;E2_KEY:
; BML INC_COUNTERA
; LXY ROWNO_NEW
; LA 2
; XAM 0
; BML COL_TRAN
;E1_ROW:
; LXY EPORTDATA
; SZB 1
; BL E1_KEY
; BL E0_ROW
;E1_KEY:
; BML INC_COUNTERA
; LXY ROWNO_NEW
; LA 2
; XAM 0
; BML COLADD8
E0_ROW:
LXY EPORTDATA
SZB 0
BL E0_KEY
BL NEXT_COL
E0_KEY:
BML INC_COUNTERA
LXY ROWNO_NEW
LA 2
XAM 0
BML COL_TRAN
;=====================================================
NEXT_COL:
LXY COUNTERB
TAM 0
TYA
DEY
BL DPortNext
BL SCANEND
DPortNext:
TAY
LXY COUNTERB
XAM 0
TAM 0
TYA
BL SetPortD1
SCANEND:
LA DIGTF
TPU0A
NOP
RT
;=====================================
INC_COUNTERA:
LXY COUNTERA
TAM 0
SEA 1
BL EAU_2
LXY ROWNO_NEW
TAM 0
LXY ROWNO_FIRST
XAM 0
LXY COLNO_NEW
TAM 0
LXY COLNO_FIRST
XAM 0
BL INC_COUNTER
EAU_2:
SEA 2
BL INC_COUNTER
LXY ROWNO_NEW
TAM 0
LXY ROWNO_SEC
XAM 0
LXY COLNO_NEW
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -