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.简化程序,将字符移动作为系统主资源程序,中断程序只进行按键读入,字符每移动一个点格就判断一次是否有新的按键按下,没有则继续执行此程序,有则跳转到相应程序,当然响应程序每隔一定语块也要加上按键判断语句,可以用循环完成,判断语句在循环末尾。
还有很多种用软件模拟扩展中断的方法,但都十分复杂。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)