为了账号安全,请及时绑定邮箱和手机立即绑定

怎么回事,我的程序问题出在哪里?

怎么回事,我的程序问题出在哪里?

暮色呼如 2023-01-12 15:11:01

#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit d1=P1^0;
uchar temp;
void delay(uint);
void main()
{
EA=1;
EX0=1;
temp=0xfe;
P1=temp;
while(1)
{
delay(1000);
temp=_crol_(temp,1);
P1=temp;
}
}
void delay(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=100;j>0;j--);
}
void exter0() interrupt 0
{
d1=0;
}
这是一个流水灯程序。第一,就是定义那个temp时,开始我是在主函数里面定义并同时赋值,结果编译通不过,改成如上程序后(就是主函数之前定义)译通过,为什么?二,这个程序有个中断,即p3.2接低电平后应该是P1.0一直低电平,而流水灯停止流动,但是我把它下载到单片机后,触发中断,单片机只是运行速度变慢了,即流水变慢而没有停止流水灯流动,怎么回事,程序错了吗?三,用proteus仿真则中断完全不起作用,好像根本没中断这回事,难道proteus不能仿真中断吗。求高手解释啊。

查看完整描述

2 回答

?
海绵宝宝撒

TA贡献1532条经验 获得超8个赞

while(1) {
delay(1000);
temp=_crol_(temp,1);
P1=temp;
}
你的中断程序里只是把P0^1=0而已,并没有什么停止的命令,你的while还是一直在循环,一直流,要么你直接把while里的条件改了,比如先定义一个变量,
unchar x;
x=1;
while(x)
{...}
中断函数里改为
x=0;
那就可以了啊

查看完整回答
反对 回复 2023-01-15
?
茅侃侃

TA贡献1587条经验 获得超21个赞

TCON寄存器没有赋值
IT0是定时 计数器 你程序里面根本就没有停止流水灯的操作  除非是 低电平始终触发中断() 直到变为高电平 但是你的TCON寄存器没有赋值 也就是说 你的外部中断类型没有定义为是 低电平触发 还是跳变触发 你要让中断工作 你必须给他 完整的工作条件才可以 你要是想在函数里面定义变量 必须在开头定义也就是变量之前不能有别的指令操作比如
main()
{uchar temp;
EA=1;
}这样是可以的
main()
{EA=1;
uchar temp;
}这样就编译不了


查看完整回答
反对 回复 2023-01-15

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信