51汇编中 中断程序中 可以自定义跳出循环么 即不通过reti 返回

51汇编中 中断程序中 可以自定义跳出循环么 即不通过reti 返回,第1张

1、用汇编编写程序。CPU只会忠实执行代码的意图,而不是程序员的“意图”。

2、什么是跳出循环?直接LJMP当然可以。永远不再执行RETI,没有RETI,当然也可以。

3、但是你需要明确这样做,是否符合你的真实意愿。回顾一下中断的概念。

a、当相关中断源及总中断被允许,有中断源请求时。CPU停止主程序执行,保护断点及PSW。跳转至中断入口地址。

b、如果没有RETI,将不会自动返回到之前的断点,及断点时刻的PSW恢复等。而且当前的中断源再次触发将不再理会。有时候,程序员会直接让程序复位,如LJMP 0,或者中断入口堆栈处理。但这种热重启还需要更多的初始化SFR设置,如PSW,SP等。

不知道你要显示几位,我写了个1位显示的。前提是共阴数码LED且一端已接地,由P1口控制。

ORG 0000H

LJMP START

ORG 0003H

LJMP INTT0

ORG 0600H

START: SETB EA

SETB EX0 打开外部中断0

CLR IT0 令中断0为电平触发

MOV @R0,#00H

DISPLAY: MOV DPTR,#TAB给字形表的初地址

MOV A,R0将要显示的数给A

MOVC A,@A+DPTR 在字形表中取数放到A

MOV P1,A 假设是P1口输出要显示的数据把A放到P1中

SJMP DISPLAY 循环显示等待中断

INTT0:INC @R0 ;中断中有按键着加1

RETI

TAB:DB 3FH,06H,5BH,4FH,66H 字形表

DB 6DH,7DH,07H,7FH,6FH

DB 77H,7CH,39H,5EH,79H

END

这个问题有很多种解决方法,各种方法如下:

1.扩展外部中断,但成本会很高;

2.简化程序,将字符移动作为系统主资源程序,中断程序只进行按键读入,字符每移动一个点格就判断一次是否有新的按键按下,没有则继续执行此程序,有则跳转到相应程序,当然响应程序每隔一定语块也要加上按键判断语句,可以用循环完成,判断语句在循环末尾。

还有很多种用软件模拟扩展中断的方法,但都十分复杂。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8078107.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存