找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索

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

 火.. [复制链接]
 楼主| 发表于 2011-5-2 20:41:27 | 显示全部楼层
回复 metalstorm 的帖子/ l; V& Y* J9 C, P5 A
1 r; _1 r, d; x5 G' _# @- N/ }
额,不好意思,没说清楚,在主函数中已经给order1赋值1了
 楼主| 发表于 2011-5-2 20:43:34 | 显示全部楼层
回复 robi 的帖子
6 D: [  N2 d6 ]1 u9 q6 z! q1 K$ Z2 E6 D
额,那个是switch函数,和pwm没关系
发表于 2011-5-2 20:52:18 | 显示全部楼层
回复 三月的暴风雪 的帖子
+ L  R4 A( R. u0 r8 h# o. H  V- p' ]4 A/ f
OOP编程思想一般都建议子函数使用参数传递机制。当单步执行到case12时,能否通过编程软件的调试功能查看timer()函数中的order1变量的实际值是多少?最好在order++语句前增加一个输出语句,将order1打印出来,这个值才是千真万确的判断条件。如果order1不等于1,能排除不少可能因素。5 w" x4 j6 N) y. r
发表于 2011-5-2 21:01:06 | 显示全部楼层
回复 三月的暴风雪 的帖子
; [% {+ F" h3 t0 m  M2 B( x  \+ `5 H; o6 W7 K
               嗯~看懂了~
 楼主| 发表于 2011-5-2 21:41:59 | 显示全部楼层
回复 metalstorm 的帖子6 |8 z' o, @) ?# t# o
% l- u; M' R8 R3 W  Y% k
嗯,按您的方法调试了,在执行order1++之前一直等于1,直到执行完order1++之后,那个就是跳到TL0=-(3300-PWM_Value1[5])%256;    order1=0;
2 s( _' k. ?! ?5 ~8 S/ J' P6 t, l& Q0 j  f
TR1=0;
) R/ h* y7 f2 H: ~0 h9 u4 s1 ]! |6 H% @8 G- E) I2 `
break;
" i$ @2 z9 G& V$ w4 M- r/ k' O0 D% I. @$ J
相当郁闷+ Z" @$ U$ n7 o& b
发表于 2011-5-2 22:11:59 | 显示全部楼层
不太明白,学习了,
发表于 2011-5-2 23:19:30 | 显示全部楼层
建议将timer()函数改写为参数传递机制:; B) n: ?( H4 j% A
int timer0(int par)
" I$ q3 P; D" _* i! F7 {{
, k: @( d9 L; ?        switch(par)/ E6 ~' a7 v- c$ B" e) Z
{
7 @8 t: n7 O& Jcase 1:3 o* C& K; ]9 r2 }0 K2 ~# b- ^
...4 W+ f3 K1 [$ I+ L- t( Y
...
  d+ H' w, q7 a7 q% P/ Tcase 12:  
# W+ O* E& T- H2 D        PWM0_5=0 ;$ s; g9 H. c! V' ]9 M
        TH0=-(3300-PWM_Value1[5])/256;-
; ]2 @3 C* p3 p" ?7 [  @/ B        TL0=-(3300-PWM_Value1[5])%256;
: L# W6 H1 h% N3 ?- `1 E' d' G        order1=0;  //为什么要在这里清零?建议删除该行,改为在主函数中调用timer0()后,判断如果order1==13,则=1。
. G3 S8 V+ c; \3 l' m8 m0 I        TR1=0;  //为什么要在这里清零?建议删除该行,改为在主函数中调用timer0()后,判断如果order1==13,则清零。! l* o. h. j' z1 }9 m
        break;;0 P- {5 }! u0 `
}0 h# U3 I& F, \2 }, s% A; l' ]
return(par++); ; I; s/ b, |+ ~
}- y4 ~5 b3 t/ O" z, m

% @# J3 z: D, ]1 j' z( E2 d在主函数中调用timer0()的语句:% W+ i0 }  Q# w* r4 S) L3 N& h) D
order1=timer0(order1);
9 W& R& v& R& Y9 v% }if(order1==13) {order1=1; TR1=0;}
8 t1 M& E3 m4 E4 h( L3 r

点评

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

点评

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

本版积分规则

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

GMT+8, 2025-9-16 12:37 , Processed in 0.066452 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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