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

#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不能仿真中断吗。求高手解释啊。

暮色呼如
浏览 82回答 2
2回答

海绵宝宝撒

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

茅侃侃

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