rf.asm

来自「一个简单单片机教程」· 汇编 代码 · 共 172 行

ASM
172
字号
	EN	EQU	P1.7
       	DOUT 	EQU  	P1.6
       	CLK  	EQU  	P1.3
       	DOT  	EQU  	30H
        D_1  	EQU  	31H
       	D_2  	EQU  	32H
       	D_3  	EQU  	33H
       	D_4  	EQU  	34H
        D_5  	EQU  	35H
        D_6  	EQU  	36H
        ID   	EQU  	37H
        BZ   	EQU  	38H
	ORG 	0000H
	AJMP 	START
	ORG 	000BH
	AJMP 	MAIN_PRO_0
START:             
	MOV 	ID,#01H
	MOV 	BZ,#00H
	MOV 	DOT,#00H
	MOV 	D_1,#00H
	MOV 	D_2,#00H
	MOV 	D_3,#00H
	MOV 	D_4,#00H
	MOV 	D_5,#00H
	MOV 	D_6,#00H
	
	ACALL 	TS_LED
	MOV   	5CH,#00H                 
        MOV   	5DH,#00H
        MOV   	62H,#00H
        MOV   	63H,#00H          ;数据5CH,5DH,62H,63H区清零 
        MOV   	TMOD,#06H         ;T0工作于计数模式;方式2:自动装载;1 TO 0            
        MOV   	TH0,#0FFH                    
        MOV   	TL0,#0FFH
        SETB  	EA                          
       	SETB  	ET0               ;允许T0中断              
        SETB  	TR0               ;T0运行  
                   
MAIN:   JBC   	TF0,MAIN_PRO_0    ;检测T0是否溢出         
        SJMP  	MAIN                        
                                  
MAIN_PRO_0:        
	MOV   	R6,#08H                      
PROCESS_0:         
	ACALL 	DL0MS                        
        JB    	P3.4,PRO_END      ;P3.4=1跳出         
        DJNZ  	R6,PROCESS_0      ;P3.4=0的时间是否=0.887*8           
        JNB   	P3.4,$            ;时间满足后,当P3.4=0,等待          
        ACALL 	DL5MS                        
        MOV   	R1,#5CH                     
        MOV   	R2,#02H                      
MAIN_PRO_1:        
	MOV   	R3,#08H                     
PROCESS_1:         
	JNB   	P3.4,$            ;当P3.4=0,等待            
        LCALL 	DL0MS                       
        MOV   	C,P3.4                       
        JNC   	PROCESS_2         ;P3.4=0(即C=0),去处理           
        LCALL 	DL1MS             ;P3.4=1(即C=1),延时1.005MS           
PROCESS_2:         
	MOV   	A,@R1             ;处理程序           
        RRC   	A                           
        MOV   	@R1,A                        
        DJNZ  	R3,PROCESS_1                     
        INC   	R1                          
        LCALL 	DL5MS                        
        DJNZ  	R2,MAIN_PRO_1                     
        MOV  	63H,5DH            ;                             
        MOV   	62H,5CH
        MOV   	R0,#62H
        MOV   	A,@R0
        CJNE  	A,#0C4H,PRO_END   ;判断是否是键盘按下 
        MOV   	R0,#63H
        MOV   	A,@R0
	CJNE  	A,#20H,LOOP1
	AJMP  	MAIN
LOOP1:
	JC    	LOOP2
	AJMP  	MAIN
LOOP2:
        ANL   	A,#0FH
        MOV   	D_1,A
        MOV   	A,@R0
        SWAP  	A
        ANL   	A,#0FH
        MOV   	D_2,A
       	MOV   	D_3,#04H
        MOV   	D_4,#0CH
       	ACALL 	TS_LED
                                   
PRO_END: ;SETB  EA                           
        LJMP  	MAIN                       
;==========================================================================
DL0MS:  MOV   	R4,#13H           ;延时0.887MS
DL0LP:  MOV   	R5,#14H                      
        DJNZ  	R5,$                         
        DJNZ  	R4,DL0LP                     
        RET                                
;==========================================================================
DL5MS:  MOV   	R4,#0AH           ;延时4.743MS
DL5LP:  MOV   	R5,#0D9H                     
        DJNZ  	R5,$                         
        DJNZ  	R4,DL5LP                    
        RET                                
;==========================================================================
DL1MS:  MOV   	R4,#02H           ;延时1.005MS
DL1LP:  MOV   	R5,#0E6H                    
        DJNZ  	R5,$                         
        DJNZ  	R4,DL1LP                    
        RET
;==========================================================================
DL:
	MOV   	R7,#03H             ;延时425.843MS
DL0:
	MOV   	R6,#0FFH
DL1:
	MOV   	R5,#0FFH
	DJNZ  	R5,$
	DJNZ  	R6,DL1
	DJNZ  	R7,DL0
	RET 
TS_LED:
	MOV 	R1,#30H
	MOV 	R2,#09H 
	CLR 	CLK
	CLR 	EN
        NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
TS_LOOP1:
	MOV 	A,@R1
        SWAP 	A
	MOV 	R3,#04H
TS_LOOP2:
	SETB 	CLK
	RLC 	A
        MOV 	DOUT,C
        CLR 	C
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	CLR 	CLK
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	DJNZ 	R3,TS_LOOP2
	INC 	R1
	DJNZ 	R2,TS_LOOP1
	SETB 	EN
	RET                              
        END

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?