找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索

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

 火.. [复制链接]
 楼主| 发表于 2011-5-2 20:41:27 | 显示全部楼层
回复 metalstorm 的帖子: i9 p, h" n! s/ Y" X2 }

% s. W4 Q% |& }' }1 ~1 b' x4 }额,不好意思,没说清楚,在主函数中已经给order1赋值1了
 楼主| 发表于 2011-5-2 20:43:34 | 显示全部楼层
回复 robi 的帖子
! q- ]. i; q" A* n  M; {3 H
9 m; e8 ?5 N  A) `+ V* d+ ]额,那个是switch函数,和pwm没关系
发表于 2011-5-2 20:52:18 | 显示全部楼层
回复 三月的暴风雪 的帖子
2 c$ j3 `$ Z2 C6 X: v6 e
" [$ }2 P# z( }OOP编程思想一般都建议子函数使用参数传递机制。当单步执行到case12时,能否通过编程软件的调试功能查看timer()函数中的order1变量的实际值是多少?最好在order++语句前增加一个输出语句,将order1打印出来,这个值才是千真万确的判断条件。如果order1不等于1,能排除不少可能因素。, c, q; _2 V* U' r' {
发表于 2011-5-2 21:01:06 | 显示全部楼层
回复 三月的暴风雪 的帖子1 c) P* ]  m# _" {! A
2 o6 H8 s* I4 A7 }6 _+ Q9 S
               嗯~看懂了~
 楼主| 发表于 2011-5-2 21:41:59 | 显示全部楼层
回复 metalstorm 的帖子
9 T$ b8 Y7 _0 t4 z6 |4 F0 t6 l+ f  N* t
嗯,按您的方法调试了,在执行order1++之前一直等于1,直到执行完order1++之后,那个就是跳到TL0=-(3300-PWM_Value1[5])%256;    order1=0;, T9 Y9 V8 R3 i

' y7 I+ V! X( p, f$ F4 BTR1=0;
$ J! w2 Y3 W$ U! f! I1 `! m; d( }( V$ ~  Q9 D3 m* f
break;6 ^8 C8 t, L( s9 c% Y+ X& c( W

  o$ B6 Q+ i  g# ]8 f$ A相当郁闷
" N& X" X: o  N1 k) _7 w1 E% b
发表于 2011-5-2 22:11:59 | 显示全部楼层
不太明白,学习了,
发表于 2011-5-2 23:19:30 | 显示全部楼层
建议将timer()函数改写为参数传递机制:( I- j% ]7 `% N7 @7 k0 ?
int timer0(int par)' M! R# V" w- ~9 y4 Y- A0 a4 L# e( s
{6 @3 K  q$ b- x8 J1 j
        switch(par), v, A* a# N6 U" E
{6 L: |7 T! o7 v; S4 {# I
case 1:+ t' V  I. u. Y1 d- S
...1 v; ~( V( j- x5 ?/ b
...' a0 r4 H9 P& [% ~
case 12:  3 _1 z: h5 a5 l  c
        PWM0_5=0 ;
5 a7 n& R% Q; L# s! s        TH0=-(3300-PWM_Value1[5])/256;-1 E8 u$ s7 e0 O6 _# ~, U5 H
        TL0=-(3300-PWM_Value1[5])%256;5 e& C- F6 j; [7 G
        order1=0;  //为什么要在这里清零?建议删除该行,改为在主函数中调用timer0()后,判断如果order1==13,则=1。
. \' d2 ]$ x3 K        TR1=0;  //为什么要在这里清零?建议删除该行,改为在主函数中调用timer0()后,判断如果order1==13,则清零。$ \; L4 T* r4 `  W
        break;;
3 L; z! h, m9 Q; ^; b/ N4 b}, n9 b1 c0 Q( i) y) ?) k  \/ j
return(par++); ; j* R) N: d7 L5 |8 t$ N
}
2 a, y3 ^5 ~. P
3 i. |; l4 v( K: ~在主函数中调用timer0()的语句:+ s1 L% l$ C% D2 b; R4 `; s
order1=timer0(order1);* N1 [9 ~+ U$ P+ L+ @6 c  S4 L6 r
if(order1==13) {order1=1; TR1=0;}
  j; {/ u# a1 F' H2 \3 e

点评

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

点评

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

本版积分规则

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

GMT+8, 2025-10-21 12:33 , Processed in 0.078098 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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