找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索

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

[复制链接]
 楼主| 发表于 2011-5-2 20:41:27 | 显示全部楼层
回复 metalstorm 的帖子: c8 j% M5 x& d, }' s1 z" B( X! m

5 m) ?/ x4 M; G0 m- w- B! Y额,不好意思,没说清楚,在主函数中已经给order1赋值1了
 楼主| 发表于 2011-5-2 20:43:34 | 显示全部楼层
回复 robi 的帖子1 I3 \" d2 [; J4 M/ Z) I$ m3 [

( {* X( H' x. v* @, T2 O* Y额,那个是switch函数,和pwm没关系
发表于 2011-5-2 20:52:18 | 显示全部楼层
回复 三月的暴风雪 的帖子
# Q* _  L' `% F" \1 f- U% A% |. i0 J! M2 @9 b+ D
OOP编程思想一般都建议子函数使用参数传递机制。当单步执行到case12时,能否通过编程软件的调试功能查看timer()函数中的order1变量的实际值是多少?最好在order++语句前增加一个输出语句,将order1打印出来,这个值才是千真万确的判断条件。如果order1不等于1,能排除不少可能因素。
4 J. ^" F# ^4 ?* C% y- Q
发表于 2011-5-2 21:01:06 | 显示全部楼层
回复 三月的暴风雪 的帖子
9 [8 s5 E0 |* ~# C3 `7 n9 d+ F9 Z- W6 t+ I- Q9 {- F9 }( ]) \! V* Y
               嗯~看懂了~
 楼主| 发表于 2011-5-2 21:41:59 | 显示全部楼层
回复 metalstorm 的帖子4 ~. _1 @' V, [6 ~" i/ G

$ M& r8 z) A8 F& k嗯,按您的方法调试了,在执行order1++之前一直等于1,直到执行完order1++之后,那个就是跳到TL0=-(3300-PWM_Value1[5])%256;    order1=0;/ K8 W8 L" A- g3 n
6 _/ q# o$ d, z( J. |
TR1=0;$ r* Z+ }# V, R, N* v4 W& B! E" q
4 k- A0 v7 @5 [: h* ?0 _
break;; \, q2 x: w" f, L6 w

4 X% ^. c) g, q# V相当郁闷' R. `6 P% O1 ?6 H" `
发表于 2011-5-2 22:11:59 | 显示全部楼层
不太明白,学习了,
发表于 2011-5-2 23:19:30 | 显示全部楼层
建议将timer()函数改写为参数传递机制:  B1 S2 r! Y' c; |! {' k
int timer0(int par)
# f, L- H2 X5 S* o+ g; x# H{  j  K) v0 ^1 I( R
        switch(par)* W3 a+ c- R; J* H2 p: O
{
0 z* u  t) Q$ j3 B" acase 1:# D3 [; b% u( B" t4 N/ T
...
% S. o4 b( W& e' R...7 N5 K" H, Z- g. k0 l
case 12:  ) s* }: s7 [  O$ b/ p4 M7 f5 s
        PWM0_5=0 ;
& o9 V& ~9 Y; \4 \2 z* O' z+ n7 |        TH0=-(3300-PWM_Value1[5])/256;-1 V1 r# e$ J! V# O
        TL0=-(3300-PWM_Value1[5])%256;
3 |9 d6 N2 {8 b        order1=0;  //为什么要在这里清零?建议删除该行,改为在主函数中调用timer0()后,判断如果order1==13,则=1。& t. Z9 a  I, U; G
        TR1=0;  //为什么要在这里清零?建议删除该行,改为在主函数中调用timer0()后,判断如果order1==13,则清零。. y* d: {, K4 K: p* P' T3 W/ ^) D$ o
        break;;
2 P/ O. b9 [8 g% ]- _! y9 t}4 J5 }2 i  @9 L. u
return(par++); $ W9 s6 [0 a2 k- c3 Z
}
* u3 g  q6 |9 ?0 i0 @# `# S0 Q9 J9 b8 q: Y  d& @' K5 R
在主函数中调用timer0()的语句:  C# K0 u# ^  l0 k8 }# A
order1=timer0(order1);
9 y( a1 K5 ?5 A0 z( qif(order1==13) {order1=1; TR1=0;}/ D" ]3 e* H- f, K! h9 Q

点评

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

点评

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

本版积分规则

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

GMT+8, 2025-7-16 03:55 , Processed in 0.077910 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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