找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索

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

 火.. [复制链接]
 楼主| 发表于 2011-5-2 20:41:27 | 显示全部楼层
回复 metalstorm 的帖子
6 I6 M" a: ?# A4 m
1 {0 U: j# e! Y7 h0 q8 [5 A' i额,不好意思,没说清楚,在主函数中已经给order1赋值1了
 楼主| 发表于 2011-5-2 20:43:34 | 显示全部楼层
回复 robi 的帖子
6 Z! f, ?& |6 A* J1 Q% ^: K6 h0 ?9 f
额,那个是switch函数,和pwm没关系
发表于 2011-5-2 20:52:18 | 显示全部楼层
回复 三月的暴风雪 的帖子
& v  h, Y1 V5 Y6 V
5 i3 o4 c- j) U" Z$ f( xOOP编程思想一般都建议子函数使用参数传递机制。当单步执行到case12时,能否通过编程软件的调试功能查看timer()函数中的order1变量的实际值是多少?最好在order++语句前增加一个输出语句,将order1打印出来,这个值才是千真万确的判断条件。如果order1不等于1,能排除不少可能因素。
1 Z1 \) R; M* G
发表于 2011-5-2 21:01:06 | 显示全部楼层
回复 三月的暴风雪 的帖子
2 ^% e2 l5 G5 \( K9 w. T- _: v" l( E! s( D: u. M0 n2 `  \
               嗯~看懂了~
 楼主| 发表于 2011-5-2 21:41:59 | 显示全部楼层
回复 metalstorm 的帖子
# Z6 f3 A$ |) T- D* J, p! u6 _) }& Z: K3 {
嗯,按您的方法调试了,在执行order1++之前一直等于1,直到执行完order1++之后,那个就是跳到TL0=-(3300-PWM_Value1[5])%256;    order1=0;' F) T- Z" ]3 Y( R/ G
/ W3 W8 s/ s2 |% }
TR1=0;
# K1 r9 R. Z( _8 T' H( f/ z$ h% r: q5 }+ m2 G
break;( W# B0 ^4 F( b( }; k8 A

" \. B3 {7 Y7 b' I3 O# P  W相当郁闷' Y- _+ `# D" I3 r, U1 t6 v0 L
发表于 2011-5-2 22:11:59 | 显示全部楼层
不太明白,学习了,
发表于 2011-5-2 23:19:30 | 显示全部楼层
建议将timer()函数改写为参数传递机制:& q, Q  ^$ E/ g9 r
int timer0(int par)( k  I, p; I5 v' ]& i
{
3 E: X( R2 A4 Y$ c  R; e! B8 \        switch(par)
; _. l. b+ @# Q4 f( f; v4 T{8 l' Y5 l  d/ l- I. B
case 1:# J! y  r3 B# y/ g
...9 l2 T) `" n9 n" @* j4 Q
...1 s! N& Y' p' N$ g
case 12:  8 `; r+ G/ n' {7 x0 X
        PWM0_5=0 ;7 ^% y8 ?  Z: A7 M8 l
        TH0=-(3300-PWM_Value1[5])/256;-
4 h% B! z  Q% u* r, @/ g1 G  ]        TL0=-(3300-PWM_Value1[5])%256;
7 b* v4 k/ h: Q! o" z" {        order1=0;  //为什么要在这里清零?建议删除该行,改为在主函数中调用timer0()后,判断如果order1==13,则=1。
0 {3 z  x2 T; n4 O# e2 W; _6 e        TR1=0;  //为什么要在这里清零?建议删除该行,改为在主函数中调用timer0()后,判断如果order1==13,则清零。( Z6 K0 D, W1 e, E8 n
        break;;
$ r. i7 d, t8 e7 {, y% W& K, v" P}% j( w, H1 w, T4 b- b2 x4 B
return(par++); * R$ g) d" \! w, r
}
  L  Y3 n  M- t8 B
; r( D( Y. ?. M# v" ?# D在主函数中调用timer0()的语句:
3 w/ ?0 U$ B( O; g; p" s4 `/ Uorder1=timer0(order1);8 i1 {5 V) y$ [% Q3 o2 ]9 V
if(order1==13) {order1=1; TR1=0;}
" \$ H" R7 p3 \$ H# ?+ z

点评

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

点评

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

本版积分规则

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

GMT+8, 2025-10-16 20:28 , Processed in 0.073410 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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