单片机C语言程序问题,请教
我在调试单片机程序的时候,发现switch语句中break不起作用,比如说本应该从case11中结束循环的,但是发现没有结束循环,却执行了case12中的语句命令,请问各位大侠,这是何故 建议将源程序贴上来。 这是部分程序,前面的程序没有任何问题,当执行case 1:
PWM0_0=1;
TH0=-PWM_Value1/256;
TL0=-PWM_Value1%256;
break;
时,break没有起作用,反而直接到了case 12中的这一步
TL0=-(3300-PWM_Value1)%256;
order1=0;
TR1=0;
break;
}
order1++;
在case12中结束循环的
/*===================================================================================
定时器T0的中断服务程序
一个循环20MS≈ 6*3.33ms
=====================================================================================*/
void timer0(void) interrupt 1 using 1
{
switch(order1)
{
case 1:
PWM0_0=1;
TH0=-PWM_Value1/256;
TL0=-PWM_Value1%256;
break;
case 2:
PWM0_0=0;
TH0=-(3300-PWM_Value1)/256;
TL0=-(3300-PWM_Value1)%256;
break;
case 3:
PWM0_1=1;
TH0=-PWM_Value1/256;
TL0=-PWM_Value1%256;
break;
case 4:
PWM0_1=0;
TH0=-(3300-PWM_Value1)/256;
TL0=-(3300-PWM_Value1)%256;
break;
case 5:
PWM0_2=1;
TH0=-PWM_Value1/256;
TL0=-PWM_Value1%256;
break;
case 6:
PWM0_2=0 ;
TH0=-(3300-PWM_Value1)/256;
TL0=-(3300-PWM_Value1)%256;
break;
case 7:
PWM0_3=1;
TH0=-PWM_Value1/256;
TL0=-PWM_Value1%256;
break;
case 8:
PWM0_3=0;
TH0=-(3300-PWM_Value1)/256;
TL0=-(3300-PWM_Value1)%256;
break;
case 9:
PWM0_4=1;
TH0=-PWM_Value1/256;
TL0=-PWM_Value1%256;
break;
case 10:
PWM0_4=0;
TH0=-(3300-PWM_Value1)/256;
TL0=-(3300-PWM_Value1)%256;
break;
case 11:
PWM0_5=1;
TH0=-PWM_Value1/256;
TL0=-PWM_Value1%256;
break;
case 12:
PWM0_5=0 ;
TH0=-(3300-PWM_Value1)/256;
TL0=-(3300-PWM_Value1)%256;
order1=0;
TR1=0;
break;
}
order1++;
} 仔细的慢慢检查吧,有时候错误的地方不是你想的地方,呵呵。 回复 Michael.MG 的帖子
这个实在是不明白了,才上来求教的 回复 无能 的帖子
前辈,能帮忙解决一下吗?谢谢,程序贴出来了。 本帖最后由 晓昀 于 2011-5-2 20:20 编辑
单步执行,看看执行到break之后去执行哪一步?
很久不玩这个,忘得差不多了。
问题原因可能在于switch(order1)的order1参数是局部变量,在timer()函数里没有被赋值,因此数值是多少是不确定的。建议函数void timer0(void)应该使用参数传递机制,每次调用timer()函数时应该将order1作为参数传递给该函数,函数结束的时候返回order1++的大小。 PWM是什么意思?有个问题不明白哈,如果PWM0_0,PWM0_1,PWM0_2,PWM0_3,PWM0_4,PWM0_5同时为0,执行那个case? 回复 晓昀 的帖子
就是单步执行的,才知道跳到case12中去了
页:
[1]
2