找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索

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

 火.. [复制链接]
 楼主| 发表于 2011-5-2 20:41:27 | 显示全部楼层
回复 metalstorm 的帖子7 Q( b$ }8 Z) ?9 A+ m5 Q  T/ A# B

( w" m9 O9 h- Q% D  N额,不好意思,没说清楚,在主函数中已经给order1赋值1了
 楼主| 发表于 2011-5-2 20:43:34 | 显示全部楼层
回复 robi 的帖子  n0 g6 I; r9 t5 \# v( |, L  h
+ ?2 G, [# t% d
额,那个是switch函数,和pwm没关系
发表于 2011-5-2 20:52:18 | 显示全部楼层
回复 三月的暴风雪 的帖子( {" @2 t) X, f7 d: Y: G
6 a1 R2 E/ e* P4 Q' W$ [) j3 T
OOP编程思想一般都建议子函数使用参数传递机制。当单步执行到case12时,能否通过编程软件的调试功能查看timer()函数中的order1变量的实际值是多少?最好在order++语句前增加一个输出语句,将order1打印出来,这个值才是千真万确的判断条件。如果order1不等于1,能排除不少可能因素。
! V4 l9 R5 }5 {+ ]+ h9 P/ P
发表于 2011-5-2 21:01:06 | 显示全部楼层
回复 三月的暴风雪 的帖子; q$ X& R$ Y( v5 b, {' w
9 t) w% c7 \# p8 P4 U
               嗯~看懂了~
 楼主| 发表于 2011-5-2 21:41:59 | 显示全部楼层
回复 metalstorm 的帖子# G9 o# M9 V/ B' ^1 {0 {
7 L7 B) e$ \$ A! l; X  U( w
嗯,按您的方法调试了,在执行order1++之前一直等于1,直到执行完order1++之后,那个就是跳到TL0=-(3300-PWM_Value1[5])%256;    order1=0;$ p6 x: b( ^4 d3 B* w! b) j( o
& X. \( f; M! y- b; M8 [
TR1=0;# a9 P& E0 f3 p% U
  t5 T5 H# F$ S3 a' t3 v& w
break;
  y) i5 B2 v' {+ [  e# S
% L" }' i: P2 [! R相当郁闷9 O; C( K6 f  D! _$ Q
发表于 2011-5-2 22:11:59 | 显示全部楼层
不太明白,学习了,
发表于 2011-5-2 23:19:30 | 显示全部楼层
建议将timer()函数改写为参数传递机制:: ?. I1 c& X8 Q' ]; j  O7 J
int timer0(int par)
: S- F" m  A/ _5 q: }{
* O7 k% Z) j4 u" A3 J. R8 o        switch(par)* f& \5 x8 G+ n
{2 C3 ]" V& @( ]4 W- M" Q
case 1:+ `7 Z& h) M% E( l, {
...- g; G2 T; g* h9 q
...5 J( A6 W  Q- O. n8 Y& }+ Y
case 12:  & h1 S& F5 {# ?
        PWM0_5=0 ;5 Y  n$ V! O' N; X4 k; Q
        TH0=-(3300-PWM_Value1[5])/256;-
% T: |* M* n; }( }5 a4 u1 Q4 b        TL0=-(3300-PWM_Value1[5])%256;2 o! H+ |$ x$ F" J/ U0 }
        order1=0;  //为什么要在这里清零?建议删除该行,改为在主函数中调用timer0()后,判断如果order1==13,则=1。
! ?& F/ z3 r, P( z+ H% @        TR1=0;  //为什么要在这里清零?建议删除该行,改为在主函数中调用timer0()后,判断如果order1==13,则清零。, T# v3 O* L6 |( j- c: e
        break;;
9 A) e- ?1 W8 F}
/ h; [( W% r/ _1 h0 }return(par++); 3 ^- r) W' d" r5 f/ h# J, r
}6 C- l4 `- ?% b+ s6 T$ J5 d# ?

; }9 ^  H/ R  O7 n# I) W5 }: |$ ]0 J在主函数中调用timer0()的语句:
/ \+ W" o- E7 f* F3 P. Iorder1=timer0(order1);
0 A4 }4 G5 T" Q+ w$ Q$ Q( bif(order1==13) {order1=1; TR1=0;}
& y6 B: }) a! \% t  l* T

点评

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

点评

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

本版积分规则

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

GMT+8, 2025-10-17 06:20 , Processed in 0.068898 second(s), 13 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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