⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rc5.asm

📁 红外线开发
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;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 + -