单片机期末复习

单片机期末复习(汇编)

一、1+2+3+…+n

ORG 0000H        ;伪指令,定义下面的指令所在地址,此句为主程序开始地址
LJMP MAIN        ;无条件转移到MAIN
MAIN:
	MOV A,#100
	MOV R3,A;100个数(循环100次)
	MOV DPTR,#0;将DPTR置0
	MOV A,#0
	
L: 
    MOV A,DPL;       将DPTR低八位拿出来
    ADD A,R3;        与R3中的值相加 ①
    MOV DPL,A;       送入DPTR低八位(0~128)
	
    MOV A,DPH;       将DPTR的高八位(即高八位的原有值)送入A中
    ADDC A,#0;       带进位+;A+0+CY(前一个加法①的进位)
    MOV DPH,A;       放入送入DPTR高八位
	
    DJNZ R3,L;       R3的值减一
	
    RET
   
END

二、10进制每秒加一

在这里插入图片描述

ORG 0000H
LJMP MAIN
ORG 000BH
LJMP TT0    //TT0处中断

GE1 DATA 41H	
SH1 DATA 42H
BA1 DATA 43H
QI1 DATA 03H	
L40 DATA 30H
L100 DATA 31H
	
DELAY DATA 32H
L250 DATA 33H
L4 DATA 34H	
LX DATA 35H	
TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
ORG 0200H
MAIN:	
	MOV TMOD,#2  
	MOV TH0,#6  
	MOV TL0,#6 
		
	MOV R0,#00H
	MOV GE1,#0	
	MOV SH1,#0
	MOV BA1,#0
	MOV QI1,#0	
	MOV P3,#0FFH
	MOV DPTR,#TABLE
	MOV L40,#40
	MOV L100,#100
	SETB ET0				
	SETB EA					
	SETB TR0				
   		
L0:
    PUSH ACC
	
    MOV A,GE1
	MOVC A,@A+DPTR
	MOV P2,A
	SETB P3.3
	LCALL DLAY_1MS
	CLR P3.3
	
    MOV A,SH1
	MOVC A,@A+DPTR
	MOV P2,A
	SETB P3.2
	LCALL DLAY_1MS
	CLR P3.2
	
	
	MOV A,BA1
	MOVC A,@A+DPTR
	MOV P2,A
	SETB P3.1
	LCALL DLAY_1MS
	CLR P3.1
	
	MOV A,QI1
	MOVC A,@A+DPTR
	MOV P2,A
	SETB P3.0
	LCALL DLAY_1MS
	CLR P3.0
	POP ACC
	
	MOV R1,QI1
	CJNE R1,#10,L0
	LJMP L0
	
TT0:        //中断
    PUSH PSW
	PUSH ACC   
	//使程序达到1s再继续执行
	DJNZ L40,TTE      
	MOV L40,#40         
	DJNZ L100,TTE
	MOV L100,#100   
    
	INC GE1	             
	MOV A,#10            
	CJNE A,GE1,TTE   
	MOV GE1,#0   
    
	INC SH1     
	MOV A,#10                
	CJNE A,SH1,TTE   
	MOV SH1,#0
	
	INC BA1      
	MOV A,#10              
	CJNE A,BA1,TTE     
	MOV BA1,#0
	
	INC QI1     
	MOV A,#10               
	CJNE A,QI1,TTE    
	
	MOV QI1,#0
	MOV BA1,#0
	MOV GE1,#0
	MOV SH1,#0
TTE:	  //中断返回
    POP ACC
	POP PSW
    RETI

DLAY_1MS:
	MOV L250,#250
	MOV L4,#4
G0:	DJNZ L4,G1
    RET
G1: DJNZ L250,G1
     MOV L250,#250
	 SJMP G0
	 
END
	

另一种写法:

ORG    0000H         ;复位入口
LJMP   MAIN     
ORG    000BH         ;定时器中断程序T0_0入口
LJMP   T0_0     

A_BIT EQU 30H      ;个位数存放处
B_BIT EQU 31H      ;十位数存放处
C_BIT EQU 32H      ;百位数存放处
D_BIT EQU 33H      ;千位数存放处
TEMP EQU 34H       ;计数器寄存器
TEMP1 EQU 35H       ;计数器寄存器
TEMP2 EQU 36H       ;计数器寄存器

	
ORG    0200H         ;主程序入口
MAIN:   
    MOV    TMOD,#01H     ;T1设置为计数方式2:0110,T0设置为定时方式0:0000
	MOV    TH0,#3CH	     ;T0定时初值 
	MOV    TL0,#0B0H     ;此时中断为50ms
	MOV    R4,#20        ;需要中断20次,即20*50ms=1s,
	SETB   TR0           ;启动定时器T0
	SETB   EA            ;开中断
	SETB   ET0           ;允许T0中断
	
	
START:
	MOV TEMP2,#11;   初始化
	MOV TEMP1,#97;   初始化

DISPLAY:
	//个位与十位
	MOV A,TEMP1
	MOV B,#10
	DIV AB          ;十位在A,个位在B
	MOV B_BIT,A     ;个位十位放入
	MOV A_BIT,B
	
	
	//百位与千位
	MOV A,TEMP2
	MOV B,#10
	DIV AB          ;十位在A,个位在B
	MOV D_BIT,A     ;个位十位放入
	MOV C_BIT,B
	
	MOV DPTR,#TAB   ;TAB表的值放入DPTR

	//放入数码管
	MOV A,A_BIT
	MOVC A,@A+DPTR   ;查找个位数的七段码
	MOV P0,A         ;送出个位的七段码
	SETB P2.3        ;开个位显示,P2.3,P2.2控制是改变个位还是改变十位
	ACALL DELAY
	CLR P2.3

	MOV A,B_BIT
	MOVC A,@A+DPTR   ;查找十位数的七段码
	MOV P0,A
	SETB P2.2
	ACALL DELAY
	CLR P2.2

	MOV A,C_BIT
	MOVC A,@A+DPTR   ;查找十位数的七段码
	MOV P0,A
	SETB P2.1
	ACALL DELAY
	CLR P2.1

	MOV A,D_BIT
	MOVC A,@A+DPTR   ;查找十位数的七段码
	MOV P0,A
	SETB P2.0
	ACALL DELAY
	CLR P2.0

	MOV R0,TEMP2
	CJNE R0,#100,DISPLAY
	LJMP START
	
T0_0:
	DJNZ R4,RE0      ;中断20次达到1s,再执行之后的计算
	MOV R4,#20       ;达到1s后重新给r4赋20
	
	INC TEMP1
	MOV A,TEMP1
	CJNE A,#100,RE0 ;个位十位满100则进一(继续执行),不满则跳转到DISPLAY
	MOV TEMP1,#0
	INC TEMP2           ;满100进1
	MOV A,TEMP2
	CJNE A,#100,RE0 ;计数到100,回到起始处
	MOV TEMP2,#0
	MOV TEMP1,#0
	RETI           ;中断返回

RE0:
	RETI           ;中断返回
	
DELAY:
	MOV R6,#14H  
DL1:
	MOV R7,#19H
DL2:
	DJNZ R7,DL2
	DJNZ R6,DL1
	RET
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;
END

三、16进制每秒加一

在这里插入图片描述

ORG 0000H
LJMP MAIN
ORG 000BH
LJMP TT0    //TT0处中断

GE1 DATA 41H	
SH1 DATA 42H
BA1 DATA 43H
QI1 DATA 03H	
L40 DATA 30H
L100 DATA 31H
	
DELAY DATA 32H
L250 DATA 33H
L4 DATA 34H	
LX DATA 35H	
TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH
ORG 0200H
MAIN:	
	MOV TMOD,#2  
	MOV TH0,#6  
	MOV TL0,#6 
		
	MOV R0,#00H
	MOV GE1,#0	
	MOV SH1,#0
	MOV BA1,#0
	MOV QI1,#0	
	MOV P3,#0FFH
	MOV DPTR,#TABLE
	MOV L40,#40
	MOV L100,#100
	SETB ET0				
	SETB EA					
	SETB TR0				
   		
L0:
    PUSH ACC
	
    MOV A,GE1
	MOVC A,@A+DPTR
	MOV P2,A
	SETB P3.3
	LCALL DLAY_1MS
	CLR P3.3
	
    MOV A,SH1
	MOVC A,@A+DPTR
	MOV P2,A
	SETB P3.2
	LCALL DLAY_1MS
	CLR P3.2
	
	
	MOV A,BA1
	MOVC A,@A+DPTR
	MOV P2,A
	SETB P3.1
	LCALL DLAY_1MS
	CLR P3.1
	
	MOV A,QI1
	MOVC A,@A+DPTR
	MOV P2,A
	SETB P3.0
	LCALL DLAY_1MS
	CLR P3.0
	POP ACC
	
	MOV R1,QI1
	CJNE R1,#16,L0
	LJMP L0
	
TT0:        //中断
    PUSH PSW
	PUSH ACC   
	//使程序达到1s再继续执行
	DJNZ L40,TTE      
	MOV L40,#40         
	DJNZ L100,TTE
	MOV L100,#100   
    
	INC GE1	             
	MOV A,#16            
	CJNE A,GE1,TTE   
	MOV GE1,#0   
    
	INC SH1     
	MOV A,#16                
	CJNE A,SH1,TTE   
	MOV SH1,#0
	
	INC BA1      
	MOV A,#16              
	CJNE A,BA1,TTE     
	MOV BA1,#0
	
	INC QI1     
	MOV A,#16               
	CJNE A,QI1,TTE    
	
	MOV QI1,#0
	MOV BA1,#0
	MOV GE1,#0
	MOV SH1,#0
TTE:	  //中断返回
    POP ACC
	POP PSW
    RETI

DLAY_1MS:
	MOV L250,#250
	MOV L4,#4
G0:	DJNZ L4,G1
    RET
G1: DJNZ L250,G1
     MOV L250,#250
	 SJMP G0
	 
END

四、10进制每秒减一

ORG 0000H
LJMP MAIN
ORG 000BH
LJMP TT0    //TT0处中断

GE1 DATA 41H	
SH1 DATA 42H
BA1 DATA 43H
QI1 DATA 03H	
L40 DATA 30H
L100 DATA 31H
	
DELAY DATA 32H
L250 DATA 33H
L4 DATA 34H	
LX DATA 35H	
TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
ORG 0200H
MAIN:	
	MOV TMOD,#2  
	MOV TH0,#6  
	MOV TL0,#6 
		
	MOV R0,#00H
	MOV GE1,#9	
	MOV SH1,#9
	MOV BA1,#9
	MOV QI1,#9	
	MOV P3,#0FFH
	MOV DPTR,#TABLE
	MOV L40,#40
	MOV L100,#100
	SETB ET0				
	SETB EA					
	SETB TR0				
   		
L0:
    PUSH ACC
	
    MOV A,GE1
	MOVC A,@A+DPTR
	MOV P2,A
	SETB P3.3
	LCALL DLAY_1MS
	CLR P3.3
	
    MOV A,SH1
	MOVC A,@A+DPTR
	MOV P2,A
	SETB P3.2
	LCALL DLAY_1MS
	CLR P3.2
	
	
	MOV A,BA1
	MOVC A,@A+DPTR
	MOV P2,A
	SETB P3.1
	LCALL DLAY_1MS
	CLR P3.1
	
	MOV A,QI1
	MOVC A,@A+DPTR
	MOV P2,A
	SETB P3.0
	LCALL DLAY_1MS
	CLR P3.0
	POP ACC
	
	MOV R1,QI1
	CJNE R1,#10,L0
	LJMP L0
	
TT0:        //中断
    PUSH PSW
	PUSH ACC   
	//使程序达到1s再继续执行
	DJNZ L40,TTE      
	MOV L40,#40         
	DJNZ L100,TTE
	MOV L100,#100   
    
	DEC GE1	             
	MOV A,#0FFH          
	CJNE A,GE1,TTE   
	MOV GE1,#9   
    
	DEC SH1     
	MOV A,#0FFH              
	CJNE A,SH1,TTE   
	MOV SH1,#9
	
	DEC BA1      
	MOV A,#0FFH             
	CJNE A,BA1,TTE     
	MOV BA1,#9
	
	DEC QI1     
	MOV A,#0FFH          
	CJNE A,QI1,TTE    
	
	MOV QI1,#9
	MOV BA1,#9
	MOV GE1,#9
	MOV SH1,#9

TTE:	  //中断返回
    POP ACC
	POP PSW
    RETI

DLAY_1MS:
	MOV L250,#250
	MOV L4,#4
G0:	DJNZ L4,G1
    RET
G1: DJNZ L250,G1
     MOV L250,#250
	 SJMP G0
	 
END
	

五、按键加一减一

在这里插入图片描述

ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INTT0   //中断0
ORG 0013H
LJMP INTT1   //中断1

GE1 DATA 41H	
SH1 DATA 42H
BA1 DATA 43H
QI1 DATA 03H	
L40 DATA 30H
L100 DATA 31H
	
DELAY DATA 32H
L250 DATA 33H
L4 DATA 34H	
LX DATA 35H	
TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
ORG 0200H
MAIN:	
	
		
	MOV R0,#00H
	MOV GE1,#1	
	MOV SH1,#2
	MOV BA1,#3
	MOV QI1,#4	
	MOV P2,#0FFH
	MOV DPTR,#TABLE
	
	SETB IT0	  ;选择下降沿触发
	SETB EX0
	SETB IT1	  ;选择下降沿触发
	SETB EX1
	SETB EA			
   		
L0:
    PUSH ACC
	
    MOV A,GE1
	MOVC A,@A+DPTR
	MOV P0,A
	SETB P2.3
	LCALL DLAY_1MS
	CLR P2.3
	
    MOV A,SH1
	MOVC A,@A+DPTR
	MOV P0,A
	SETB P2.2
	LCALL DLAY_1MS
	CLR P2.2
	
	
	MOV A,BA1
	MOVC A,@A+DPTR
	MOV P0,A
	SETB P2.1
	LCALL DLAY_1MS
	CLR P2.1
	
	MOV A,QI1
	MOVC A,@A+DPTR
	MOV P0,A
	SETB P2.0
	LCALL DLAY_1MS
	CLR P2.0
	POP ACC
	
	MOV R1,QI1
	CJNE R1,#10,L0
	LJMP L0
	
INTT0:        //中断0,按键加一
	INC GE1	             
	MOV A,#10            
	CJNE A,GE1,TTE   
	MOV GE1,#0   
    
	INC SH1     
	MOV A,#10                
	CJNE A,SH1,TTE   
	MOV SH1,#0
	
	INC BA1      
	MOV A,#10              
	CJNE A,BA1,TTE     
	MOV BA1,#0
	
	INC QI1     
	MOV A,#10               
	CJNE A,QI1,TTE    
	
	MOV QI1,#0
	MOV BA1,#0
	MOV GE1,#0
	MOV SH1,#0
	
INTT1:        //中断1,按键减一
	DEC GE1	             
	MOV A,#0FFH          
	CJNE A,GE1,TTE   
	MOV GE1,#9   
    
	DEC SH1     
	MOV A,#0FFH              
	CJNE A,SH1,TTE   
	MOV SH1,#9
	
	DEC BA1      
	MOV A,#0FFH             
	CJNE A,BA1,TTE     
	MOV BA1,#9
	
	DEC QI1     
	MOV A,#0FFH          
	CJNE A,QI1,TTE    
	
	MOV QI1,#9
	MOV BA1,#9
	MOV GE1,#9
	MOV SH1,#9
	
TTE:	  //中断返回
    POP ACC
	POP PSW
    RETI

DLAY_1MS:
	MOV L250,#250
	MOV L4,#4
G0:	DJNZ L4,G1
    RET
G1: DJNZ L250,G1
     MOV L250,#250
	 SJMP G0
	 
END

六、按键加一减一+延时连续加

在这里插入图片描述

ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INTT0   //中断0
ORG 0013H
LJMP INTT1   //中断1

GE1 DATA 41H	
SH1 DATA 42H
BA1 DATA 43H
QI1 DATA 03H	
L40 DATA 30H
L100 DATA 31H
	
DELAY DATA 32H
L250 DATA 33H
L4 DATA 34H	
LX DATA 35H	
TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
ORG 0200H
MAIN:	
	
		
	MOV R0,#00H
	MOV GE1,#1	
	MOV SH1,#2
	MOV BA1,#3
	MOV QI1,#4	
	MOV P2,#0FFH
	MOV DPTR,#TABLE
	
	SETB IT0	  ;选择下降沿触发
	SETB EX0
	SETB IT1	  ;选择下降沿触发
	SETB EX1
	SETB EA			
   		
L0:
    PUSH ACC
	
    MOV A,GE1
	MOVC A,@A+DPTR
	MOV P0,A
	SETB P2.3
	LCALL DLAY_1MS
	CLR P2.3
	
    MOV A,SH1
	MOVC A,@A+DPTR
	MOV P0,A
	SETB P2.2
	LCALL DLAY_1MS
	CLR P2.2
	
	
	MOV A,BA1
	MOVC A,@A+DPTR
	MOV P0,A
	SETB P2.1
	LCALL DLAY_1MS
	CLR P2.1
	
	MOV A,QI1
	MOVC A,@A+DPTR
	MOV P0,A
	SETB P2.0
	LCALL DLAY_1MS
	CLR P2.0
	POP ACC
	
	MOV R1,QI1
	CJNE R1,#10,L0
	LJMP L0
	
INTT0:        //中断0,按键加一
	
	LCALL DELAY1
	JNB P3.2,CON0
	
	INC GE1	             
	MOV A,#10            
	CJNE A,GE1,TTE   
	MOV GE1,#0   
    
	INC SH1     
	MOV A,#10                
	CJNE A,SH1,TTE   
	MOV SH1,#0
	
	INC BA1      
	MOV A,#10              
	CJNE A,BA1,TTE     
	MOV BA1,#0
	
	INC QI1     
	MOV A,#10               
	CJNE A,QI1,TTE    
	
	MOV QI1,#0
	MOV BA1,#0
	MOV GE1,#0
	MOV SH1,#0
	
INTT1:        //中断1,按键减一

	LCALL DELAY1
	JNB P3.3,CON1
	
	DEC GE1	             
	MOV A,#0FFH          
	CJNE A,GE1,TTE   
	MOV GE1,#9   
    
	DEC SH1     
	MOV A,#0FFH              
	CJNE A,SH1,TTE   
	MOV SH1,#9
	
	DEC BA1      
	MOV A,#0FFH             
	CJNE A,BA1,TTE     
	MOV BA1,#9
	
	DEC QI1     
	MOV A,#0FFH          
	CJNE A,QI1,TTE    
	
	MOV QI1,#9
	MOV BA1,#9
	MOV GE1,#9
	MOV SH1,#9
	
TTE:	  //中断返回
    POP ACC
	POP PSW
    RETI
	
CON0:    //连续加

	MOV R0,#60
	
	INC GE1	             
	MOV A,#10            
	CJNE A,GE1,TTE0   
	MOV GE1,#0   
    
	INC SH1     
	MOV A,#10                
	CJNE A,SH1,TTE0   
	MOV SH1,#0
	
	INC BA1      
	MOV A,#10              
	CJNE A,BA1,TTE0     
	MOV BA1,#0
	
	INC QI1     
	MOV A,#10               
	CJNE A,QI1,TTE0    
	
	MOV QI1,#0
	MOV BA1,#0
	MOV GE1,#0
	MOV SH1,#0
	
CON1:     //连续减

	MOV R0,#60
	DEC GE1	             
	MOV A,#0FFH          
	CJNE A,GE1,TTE1   
	MOV GE1,#9   
    
	DEC SH1     
	MOV A,#0FFH              
	CJNE A,SH1,TTE1   
	MOV SH1,#9
	
	DEC BA1      
	MOV A,#0FFH             
	CJNE A,BA1,TTE1     
	MOV BA1,#9
	
	DEC QI1     
	MOV A,#0FFH          
	CJNE A,QI1,TTE1    
	
	MOV QI1,#9
	MOV BA1,#9
	MOV GE1,#9
	MOV SH1,#9

TTE0:       //连续加显示
	PUSH ACC
	
    MOV A,GE1
	MOVC A,@A+DPTR
	MOV P0,A
	SETB P2.3
	LCALL DLAY_1MS
	CLR P2.3
	
    MOV A,SH1
	MOVC A,@A+DPTR
	MOV P0,A
	SETB P2.2
	LCALL DLAY_1MS
	CLR P2.2
	
	MOV A,BA1
	MOVC A,@A+DPTR
	MOV P0,A
	SETB P2.1
	LCALL DLAY_1MS
	CLR P2.1
	
	MOV A,QI1
	MOVC A,@A+DPTR
	MOV P0,A
	SETB P2.0
	LCALL DLAY_1MS
	CLR P2.0
	POP ACC
	
	DJNZ R0,TTE0
	LJMP CON0

TTE1:      //连续减显示
	PUSH ACC
	
    MOV A,GE1
	MOVC A,@A+DPTR
	MOV P0,A
	SETB P2.3
	LCALL DLAY_1MS
	CLR P2.3
	
    MOV A,SH1
	MOVC A,@A+DPTR
	MOV P0,A
	SETB P2.2
	LCALL DLAY_1MS
	CLR P2.2
	
	MOV A,BA1
	MOVC A,@A+DPTR
	MOV P0,A
	SETB P2.1
	LCALL DLAY_1MS
	CLR P2.1
	
	MOV A,QI1
	MOVC A,@A+DPTR
	MOV P0,A
	SETB P2.0
	LCALL DLAY_1MS
	CLR P2.0
	POP ACC
	
	DJNZ R0,TTE1
	LJMP CON1

DLAY_1MS:
	MOV L250,#250
	MOV L4,#4
G0:	DJNZ L4,G1
    RET
G1: DJNZ L250,G1
     MOV L250,#250
	 SJMP G0
	 
DELAY1:	  //延时0.5S子程序
MOV 55H,#9		
A3:   	MOV 54H,#94
A2:    	MOV 53H,#196
A1:    	NOP				 
		DJNZ 53H,A1
		DJNZ 54H,A2
		DJNZ 55H,A3	
RET
	 
END
	
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 黑客帝国 设计师:白松林 返回首页