
用74LS148扩展中断
#include<reg51h>
#include<intrinsh>
#define uchar unsigned char
#define uint unsigned int
sbit LED=P1^0;
void EX_INT0() interrupt 0
{
uchar bi=P2&0x07;
P0=_cror_(0x7F,bi);
}
void main()
{
uint i;
IE=0x81;
IT0=0;
while(1)
{
LED=!LED;
for(i=0;i<30000;i++)
;
if(INT0==1)
P0=0xFF;
}
}
如果ProteusSTM32仿真无法进入定时器中断,可能是因为定时器中断的配置问题造成的。请检查定时器中断的中断优先级是否已正确设置,并且中断函数是否已正确添加到中断向量表中,最后再检查中断是否已正确使能,这样就可以保证定时器中断的正常运行了。
一、代码写的也很清楚,问题也很明白。先说一下你这个程序想完成的功能吧:
P0口的数码管属于后台程序,他一直循环计数 0~8 。他能被任何一个中段所打断,并且该中断退出后,P0口的数码管能接着被打断之前的数字继续计数,而不是从 0 重新开始,这一点你的程序没有做到。
P2口的数码管由 INT0 中断控制,中断一次,只完成一次 0~8 的计数。他可以打断 P0 口,而不能打断 P1 口,因为 INT0 的优先级低。如果 INT0 被 INT1 打断了,INT1 退出后,INT0 应接着原来的数继续计数,而不是 INT1 退出之后,INT0 不会动了,这一点你的程序也没做到。
P1口的数码管由 INT1 中断控制,中断一次,也完成一次 0~8 的计数。他可以打断 P0口,也可以打断 P2口(INT0),他退出之后,被中断的程序应该恢复之前的工作。
这些问题都是由于在中断服务程序中,没有对现场进行保护引起的。问题找到了,解决方法很简单,就是在每个中断服务程序中加上现场保护就行了,即在每个中断服务程序的开始各加一条语句“PUSH ACC”即可,现场恢复你的程序里边有。
二、下面是修改过的程序,并按照题目的要求添加了注释
ORG 0000HSJMP STAR
ORG 0003H
SJMP INT0S
ORG 0013H
SJMP INT1S
ORG 0030H
STAR:
MOV IE,#85H //中断允许
MOV TCON,#05H //低电平触发中断
MOV P3,#0FFH //P3口拉高,为两个按钮服务
SETB PX1 //提高 INT1 的优先级
ST0:
MOV A,#1 //立即数 1 送 A,准备读 0 的段码
ST1:
PUSH ACC //入栈保存
ACALL SEG7 //去读段码
MOV P0,A //送 P0 口显示
ACALL DELAY //延时一小会
POP ACC //把保存的 立即数d回 A
INC A //A 自身加 1,为读取下一个段码做准备
CJNE A,#10,ST1 // A=10:往下走,否则转到ST1
SJMP ST0 //开始下一轮 0~8 的显示
INT0S:
PUSH ACC //该句是添加的,用于现场保护
MOV A,#0
LOOP:
INC A
PUSH ACC
ACALL SEG7
MOV P2,A
POP ACC
ACALL DELAY
CJNE A,#9,LOOP
POP ACC //原来就有,用于现场恢复
MOV P2,#0FFH
RETI
INT1S:
PUSH ACC //这句也是现场保护
MOV A,#0
LOOP1:
INC A
PUSH ACC
ACALL SEG7
MOV P1,A
POP ACC
ACALL DELAY
CJNE A,#9,LOOP1
MOV P1,#0FFH
POP ACC //现场回复
RETI
DELAY:
MOV R7,#250
D1:
MOV R6,#250
D2:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R6,D2
DJNZ R7,D1
RET
SEG7:
MOVC A,@A+PC
RET //这条语句一字节,所以执行上句之前 A 要加 1
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H
END
如果感到满意,你就跺跺脚,踩------纳!!!!!
你的程序有问题,开中断不能在中断函数里面开,这就好像把钥匙放进保险柜一样,永远都无法打开保险柜了。
你把开中断的程序放到main函数里面就可以执行中断了。另外不能在中断函数的一开始就关中断(即:把EX0=0;挪到最后一个大括号前面)
以上就是关于仿真软件中如何用74LS148扩展中断全部的内容,包括:仿真软件中如何用74LS148扩展中断、proteusstm32仿真无法进入定时器中断、(keli和Protus仿真软件)单片机中断实验程序代码,小部分有错误,求修改等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)