汇编十一、汇编实现外部中断

1、实现目的

(1)实现8颗LED灯呈流水灯依次被点亮;静态数码管通过按键按下,显示数值发生改变,通过按键依次显示0-9。

(2)按键检测采用外部中断检测。

2、原理图及硬件连接

2.1、LED灯

(1)51单片机P1端口接八个共阴极LED灯,即IO口输出高电平,LED点亮。

2.2、静态数码管

(1)P0端口连接静态数码管(JP3)

(2)IO口对应数码段。

P0.0对应aP0.1对应b

P0.2对应c

P0.3对应d

P0.4对应eP0.5对应fP0.6对应gP0.7对应dp

(3)数码管为共阳数码管。

(4)P0端口的对应IO输出低电平,对应数码段被点亮,输出高电平,数码管熄灭。

2.3、按键

(1)独立按键接P32引脚。

3、代码

3.1、部分汇编语句

(1)SETB  <bit>

SETB指令可将相应的位置1,其操作对象可以是进位标志或其他可以直接寻址的位。该指令不影响其他标志位。

(2)PUSH和POP为入栈和出栈指令。

(3)有中断需要注意判断哪些寄存器在中断服务程序和主程序中均有用到,需要进行入栈出栈操作。

(4)一般情况下,涉及中断,ACC和PSW需要进行入栈和出栈。

3.2、示例代码

(1)注:按键无延时消抖函数。

;使用P0接静态数码管
;使用P1接LED灯
;使用P32接独立按键K1,外部中断0和P32引脚绑定
;按键无消抖
;-------------------------------------	
	ORG 0000H     ;ORG为程序段说明伪指令,它向汇编程序说明该程序段的起始地址,所以可以当中断向量地址用
	LJMP L_Main   ;跳转到L_Main标号处
	ORG 0003H     ;0003H为外部中断0向量地址
	LJMP I_INT0   ;跳转到I_INF0标号处
	ORG 0030H
L_Main:
	;your code
	;初始化中断
	SETB EA           ;总中断允许控制位设置为1
	SETB EX0          ;外部中断0允许位设置为1
	SETB PX0          ;外部中断0优先级设置为1
	SETB IT0          ;外部中断0设置为下降沿除法方式

	MOV DPTR,#T_table ;T_table所在地址赋值给DPTR
	MOV R0,#0x00      ;立即数赋值给R0,给R0赋初值,在中断中用到
	MOV P0,#0xC0      ;设置数码管显示的初始值
	;流水灯
	MOV A,#0x01        ;把立即数0x01赋值给累加器A
L_loop:
	MOV P1,A          
	LCALL F_Delay1S    ;调用子程序,函数延时1秒
	RL	A              ;累加器循环左移
	LJMP L_loop        ;跳到标号L_loop处

;---------------------------------------
F_Delay1S:                 ;1S = 2us*500000	(50*100*100)
	MOV R7,#50             ;立即数50赋值给寄存器R7
L_loop2:
	MOV R6,#100            ;立即数100赋值给寄存器R6
L_loop1:
  	MOV R5,#100            ;立即数100赋值给R5寄存器
	DJNZ R5,$	           ;R5寄存器值减1,不是零就跳转到当前位置,即减到零才跳出循环
	DJNZ R6,L_loop1        ;相当于了100*100了
	DJNZ R7,L_loop2        ;相当于50*100*100了
	RET
;---------------------------------------
I_INT0:
	PUSH ACC           ;ACC地址单元中的数据压栈
	PUSH PSW           ;程序状态字寄存器压栈
	MOV A,R0           ;
	MOVC A,@A+DPTR     ;基地址变质
	MOV P0,A
	INC R0             ;R0寄存器值加1
	CJNE R0,#10,L_Next ;如果R0不等于10就跳转到L_next
	MOV R0,#0x00
L_Next:
	POP PSW   ;程序状态字寄存器出栈
	POP ACC   ;ACC地址单元中的数据出栈
	RETI      ;中断返回
;---------------------------------------
T_table:
	;声明并初始化数据。
	;声明数据的本质就是:在内存中占用一块空间 ;
	;初始化数据的本质就是:给这个空间赋予一个值 。
	DB	0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90  
	END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码织梦师小猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值