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

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

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

暮色呼如 2023-01-12 15:11:01
#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charsbit 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贡献1809条经验 获得超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贡献1842条经验 获得超21个赞

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


查看完整回答
反对 回复 2023-01-15
  • 2 回答
  • 0 关注
  • 77 浏览

添加回答

举报

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