今天用之前买的开发板做了个流水灯,结果运行的时候第一遍运行正常,第二遍运行的时候就跳不出for循环了,后续调整的时候发现for循环里的d--,都改为d++就运行正常,主函数里只要有一个d--存在就会产生这个问题(全改为d--也不行),这是为什么?
下方是程序:
#include <reg51.h>
#include "delay110592.h"//此处调用的是自建的延时函数,里边都是用的--
#include <intrins.h>
#define uncr unsigned char
#define ledp0 P0
void main()
{
uncr a,b,c,d;
ledp0=0x00;
a=CY;
b=0x20;
while(a!=1)
{
Delay100ms(10);
ledp0=ledp0;ledp0;
delay1s();
ledp0=
b=b<<1;
a=CY;
}
delay1s();
ledp0=0x01;
delay100ms();
for(c=0;c<3;c++)
{
for(d=0;d<7;d++) //有d--的情况下(不论这个d--在哪个循环 ),都会卡到这个循环里
{
ledp0=_crol_(ledp0,1);
delay100ms();
}
for(d=7;d>0;d--)
{
ledp0=cror(ledp0,1);
delay100ms();
}
}
}
我用keil的调试窗口看是没问题的,没有卡住啊
#include <reg51.h>
#include <intrins.h>
#define uncr unsigned char
#define ledp0 P0
void Delay100ms(uncr x)
{
unsigned char i, j, k;
for(;x>0;x--)
{
_nop_();
_nop_();
i = 5;
j = 52;
k = 195;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
}
void delay1s()
{
Delay100ms(10);
}
void delay100ms()
{
Delay100ms(1);
}
void main()
{
uncr a,b,c,d;
ledp0=0x00;
a=CY;
b=0x20;
while(a!=1)
{
Delay100ms(10);
ledp0=ledp0;
delay1s();
ledp0=ledp0;
b=b<<1;
a=CY;//溢出CY=1,则停止循环
}
delay1s();
ledp0=0x01;
delay100ms();
for(c=0;c<3;c++)
{
for(d=0;d<7;d++) //有d--的情况下(不论这个d--在哪个循环 ),都会卡到这个循环里
{
ledp0=_crol_(ledp0,1);
delay100ms();
}
for(d=7;d>0;d--)
{
ledp0=_cror_(ledp0,1);
delay100ms();
}
}
}