代码如下: 当该下面带颜色的数据,该的氛围比较大,例如前面 2个该为delay (50),后面的一个数据改为600,调试发现会出现走不出delay这个函数.数据小一点,如下程序的话就可以正常的运行了,问题提出来,明天晚上再来研究一下.
#include
void delay ();
void main (void) {
P1DIR |= 0X41;
P1OUT = 0X00;
while (1) {
delay (10);
P1OUT = 0X00;
delay (10);
P1OUT = 0XFF;
}
}
void delay(unsigned int i)
{
unsigned int k,j;
for (j = 1;j < i;j ++) {
for (k = 1;k < 300;k ++) {
;
}
}
}
回复 沙发 qinkaiabc 的帖子
看样子不是啊,这个延时应该很短的吧!我觉得是你的错觉,你后面延时600,前面50,那你看到的应该是P1OUT = 0X00在执行,P1OUT = 0Xff为执行,所以建议:
1. 不要只看相信确定执行到哪,最好是仿真看真的有没有执行;
2. 把两个时间都加长到一样(差距不要太大)试试;
看你的程序,delay(10)是延时了3000条指令的时间,应该没有什么问题啊,你是不是调试的时候断点没有设置好,你这个交替闪烁的频率还是有点高,肉眼可能看不到LED灯在闪烁
我把你的代码放到CCS里运行了,首先说一下,你没有关闭看门狗定时器,然后你的代码在调试的时候delay函数好像没有运行,断点也加不上,单步调试也无法进入,把值改为50和600,也还是一样的,50改为500也是一样的,改为100和1000也还是一样,delay函数没有执行,但是我用本征函数__delay_cycles(10000)就能等到50hz左右的频率,所以延时我还是推荐本征函数
是的,开始是小小的延时,后来改了就忘了加wdt了,后来在配置了一下时钟,基本上就能跳出那个循环了,
因为你后面的600大于50,所以肉眼看到的知识执行
P1OUT = 0X00;可以仿真一下,能不能进入这条语句