11.asm

来自「我的大学单片机课程案例和ppt」· 汇编 代码 · 共 87 行

ASM
87
字号
	ORG	0H
	LJMP	START
	ORG    0003H              ;INT0中断处理程序入口地址
        AJMP   EXTINT0            ;跳转到EXINT0
	ORG	000BH		  ;定时/计数器0中断处理程序入口地址
	AJMP	TIMER0INT       	;跳转到TIMER0INT
        ORG    0013H              ;INT1中断处理程序入口地址
        AJMP   EXTINT1            ;跳转到EXINT1
	ORG	30H
START:	
	SETB   EX1		;开外部中断1
        SETB   EX0		;开外部中断0        
        SETB   IT1 		;外部中断1由下降沿触发
        SETB   IT0		;外部中断0由下降沿触发

	MOV TMOD,#00000001B     ;定时0工作于方式1(16位)
	MOV TH0,#0B1H 
	MOV TL0,#0E0H            ;设定定时时间20ms	
	SETB ET0                 ;开定时/计数器0允许
	CLR	TR0		;关闭定时器
	SETB EA                  ;开总中断允许			
	MOV	R3,#50		;计溢出次数50×20ms=1S

	MOV	P0,#0FFH	;P0口置1
	MOV	P2,#0H		;P2口清0
	MOV	30H,#0		;初始显示00
	MOV	31H,#0		;
	MOV	DPTR,#TABLE	;将数据表TABLE的首地址赋给DPTR
SCANK:	
	MOV	R4,#2		;数码管数目赋给R4
	MOV	R1,#30H		;R1装显示内容的地址
	MOV	R2,#10000000B	;R2装位选信号

		
DISPLAY:MOV	A,@R1	;R1中的数据作为地址,取数据给A
	MOVC	A,@A+DPTR;将(A+DPTR)地址中的值赋给A
	MOV	P2,R2	;选择第一个数码管
	MOV	P0,A	;送到P0口数码管显示
	LCALL	DELAY	;显示延时
	MOV	A,R2	;位选信号右移
	RR	A	;
	MOV	R2,A	;
	INC	R1	;下一个显示的内容的地址
	DJNZ	R4,DISPLAY;没显示完转DISPLAY
	LJMP	SCANK	;重新开始扫描

DELAY:
	MOV	R6,#2
D3:	MOV	R7,#100
D4:	DJNZ	R7,D4
	DJNZ	R6,D3
	RET
TIMER0INT:		;定时器0中断服务程序
	PUSH  PSW	
	MOV TH0,#0B1H
	MOV TL0,#0E0H   ;重置定时时间20ms
	DJNZ	R3,TRUESC;不到1S退出中断程序
	MOV	R3,#50	;重新赋溢出计数值
	INC	30H	;个位加1
	MOV	A,30H	;
	CJNE	A,#10,TRUESC;判断个位加到10否?
	MOV	30H,#0	;加到10重新赋0
	INC	31H	;十位加1
	MOV	A,31H	;
	CJNE	A,#2,TRUESC;判断加到2否?
	MOV	31H,#0	;加到2重新赋0
TRUESC:	POP  PSW
	RETI		;

EXTINT0:PUSH  PSW	;外部中断0服务程序
	MOV TH0,#0B1H
	MOV TL0,#0E0H   ;重置定时时间20ms
	MOV	R3,#50	;重新赋溢出计数值
	SETB	TR0	;启动定时器
	POP  PSW
	RETI		;中断返回

EXTINT1:PUSH  PSW	;外部中断1服务程序
	CLR	TR0	;关闭定时器
	POP  PSW
	RETI		;中断返回
TABLE:	DB	0C0H,0F9H,0A4H,0B0H		;0,1,2,3
	DB	99H,92H,82H,0F8H,80H,90H	;4,5,6,7,8,9
	END


⌨️ 快捷键说明

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