找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索

单片机C语言程序问题,请教

[复制链接]
 楼主| 发表于 2011-5-2 20:41:27 | 显示全部楼层
回复 metalstorm 的帖子) O' F& J. ?& c+ E# n7 O

$ o4 `( @+ W) e4 m* d+ |/ x额,不好意思,没说清楚,在主函数中已经给order1赋值1了
 楼主| 发表于 2011-5-2 20:43:34 | 显示全部楼层
回复 robi 的帖子
  }+ ~, l( R6 s2 E+ h5 }0 k2 f% ]1 T, x+ G
额,那个是switch函数,和pwm没关系
发表于 2011-5-2 20:52:18 | 显示全部楼层
回复 三月的暴风雪 的帖子
* A+ v& a/ N7 y$ C0 d( f( L9 }$ Q* W! e+ ^$ u* {
OOP编程思想一般都建议子函数使用参数传递机制。当单步执行到case12时,能否通过编程软件的调试功能查看timer()函数中的order1变量的实际值是多少?最好在order++语句前增加一个输出语句,将order1打印出来,这个值才是千真万确的判断条件。如果order1不等于1,能排除不少可能因素。$ L  y, T! Q' H; E& u5 [
发表于 2011-5-2 21:01:06 | 显示全部楼层
回复 三月的暴风雪 的帖子
$ }' M3 I& G, Y, Y
1 K' t4 W* e5 D0 v4 D! U               嗯~看懂了~
 楼主| 发表于 2011-5-2 21:41:59 | 显示全部楼层
回复 metalstorm 的帖子
  Y6 I2 A8 I! I/ }0 F- m+ k
- h+ k5 j2 j& N1 m5 U% W0 V嗯,按您的方法调试了,在执行order1++之前一直等于1,直到执行完order1++之后,那个就是跳到TL0=-(3300-PWM_Value1[5])%256;    order1=0;" `' k! f$ f4 H& M& H+ Y& k7 _
* f3 w, G( }" }7 A  Y5 G! V- f
TR1=0;
8 [6 H$ r; N! ^1 p: N7 {8 C3 _& Y8 j& }# x. N
break;
* Y5 o6 _. S6 F1 _1 G4 s( |) C* R4 M* {2 w6 o3 y2 v) P7 _
相当郁闷
* @. z7 w8 `( v0 V$ v+ O
发表于 2011-5-2 22:11:59 | 显示全部楼层
不太明白,学习了,
发表于 2011-5-2 23:19:30 | 显示全部楼层
建议将timer()函数改写为参数传递机制:
2 b- B) Z' K# h$ bint timer0(int par)$ Z) h9 B' d# P( |2 c$ P5 _
{/ N! v' l9 ?" W- m) p2 ^$ x
        switch(par)
, y. \( h( r; \  [: G{
' a0 m7 F" w& n5 S# b2 @# p- H3 vcase 1:
* b; ]8 o: A% r( ^' F* B...) w/ J: [/ Q1 F2 o9 o% L
...& n0 [" y: J. x  b/ R* P
case 12:  
8 S# P/ N+ {" o3 P% |% m7 D        PWM0_5=0 ;. O! r6 P8 ?3 f6 A" D" ^
        TH0=-(3300-PWM_Value1[5])/256;-
6 F9 a+ J( Y' Z' @# a! j. J/ i        TL0=-(3300-PWM_Value1[5])%256;5 o9 w: `9 i, U, \: \
        order1=0;  //为什么要在这里清零?建议删除该行,改为在主函数中调用timer0()后,判断如果order1==13,则=1。
8 i) }9 r. f5 q/ j        TR1=0;  //为什么要在这里清零?建议删除该行,改为在主函数中调用timer0()后,判断如果order1==13,则清零。
1 U; X2 k( S; M        break;;2 K0 ^/ Y' W6 s3 o
}
7 L" K  d9 Z& h% N$ R$ @) U& m5 b8 _return(par++); " \! T% C" X; o+ P' k5 E
}
) P& a( A% I1 J& r' D" a# V
: F- g) G; p+ V/ G# `7 _6 ~2 q- |) _在主函数中调用timer0()的语句:' d: \7 o1 b; }& m$ g6 J( M
order1=timer0(order1);# h. l  H0 j/ ?/ k) m  W8 l
if(order1==13) {order1=1; TR1=0;}
- z" _2 v' m: L! z$ [: _" ~" a

点评

Thank you very much!  发表于 2011-5-2 23:37
发表于 2011-5-3 20:07:29 | 显示全部楼层
看了一下你的程序,没看明白要实现什么功能,感觉有点乱,switch没这么用的。
; s- R4 q. _/ `6 v. w6 W按说跳转没问题,如果出现异常,建议写个测试函数test(),本函数逐个显示所有变量的当前值,test()加在每个break;之前。

点评

呵呵,谢谢,已经可以了  发表于 2011-5-3 23:02
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Archiver|手机版|小黑屋|机械社区 ( 京ICP备10217105号-1,京ICP证050210号,浙公网安备33038202004372号 )

GMT+8, 2025-8-15 00:54 , Processed in 0.060897 second(s), 13 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表