找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索

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

[复制链接]
 楼主| 发表于 2011-5-2 20:41:27 | 显示全部楼层
回复 metalstorm 的帖子
! ?6 t% t# x4 q0 |
; Z$ C- r+ |3 X& t8 u+ \* n额,不好意思,没说清楚,在主函数中已经给order1赋值1了
 楼主| 发表于 2011-5-2 20:43:34 | 显示全部楼层
回复 robi 的帖子
$ }. m( x: }. j# e3 y( d7 I4 m, K5 o1 n3 h; k
额,那个是switch函数,和pwm没关系
发表于 2011-5-2 20:52:18 | 显示全部楼层
回复 三月的暴风雪 的帖子: B& W9 I$ _# P1 R/ D  ^
2 H) `6 U8 }: K
OOP编程思想一般都建议子函数使用参数传递机制。当单步执行到case12时,能否通过编程软件的调试功能查看timer()函数中的order1变量的实际值是多少?最好在order++语句前增加一个输出语句,将order1打印出来,这个值才是千真万确的判断条件。如果order1不等于1,能排除不少可能因素。
0 S# L+ j" T" I& l3 q
发表于 2011-5-2 21:01:06 | 显示全部楼层
回复 三月的暴风雪 的帖子
  t% a2 B( k' Q7 f/ Z
& V0 u. b2 ]* @; A6 x7 \               嗯~看懂了~
 楼主| 发表于 2011-5-2 21:41:59 | 显示全部楼层
回复 metalstorm 的帖子" T$ g) A. V) L1 B* w

1 q3 p2 n: }  y1 B8 W; Z7 @( f嗯,按您的方法调试了,在执行order1++之前一直等于1,直到执行完order1++之后,那个就是跳到TL0=-(3300-PWM_Value1[5])%256;    order1=0;8 @% Y, X% c  J7 x. n  ^' Q! M
  A$ c6 Z% A$ F# [: E9 t: {0 W
TR1=0;
% m8 s/ A5 }! c' G3 A  w# v1 L/ z) ~( C6 l5 ?, V* N
break;
: O: i9 n# _3 K; H0 q2 o
+ F$ H" Z/ k4 I2 N$ `8 g相当郁闷5 }: n9 D& \1 q& A6 [% t% v+ Z) U
发表于 2011-5-2 22:11:59 | 显示全部楼层
不太明白,学习了,
发表于 2011-5-2 23:19:30 | 显示全部楼层
建议将timer()函数改写为参数传递机制:' h1 H0 k- ?3 H
int timer0(int par)
/ [2 i, F% P6 k+ A{6 H1 B& h, W1 f' v. F: {' S
        switch(par)$ b1 C& N6 C# s1 W5 T
{
( t/ ?1 z4 `* y6 d7 S+ tcase 1:
- o* b9 h8 Y8 U1 d% d6 a2 d! l...
. U, L4 k0 f1 x0 ^: Z$ Z' q/ G) Q...
0 H2 g0 y" }& D- ]2 I9 l2 p1 T4 K; x% \case 12:  
! _( Z8 x/ y5 ^0 {! s3 h        PWM0_5=0 ;
/ n) W* o+ K& \) ?+ }6 D        TH0=-(3300-PWM_Value1[5])/256;-- O1 _: a) C' t  s* P9 E
        TL0=-(3300-PWM_Value1[5])%256;% K  ?# J  f$ J  r$ D( G
        order1=0;  //为什么要在这里清零?建议删除该行,改为在主函数中调用timer0()后,判断如果order1==13,则=1。: H4 W8 B$ Z/ g  H- F
        TR1=0;  //为什么要在这里清零?建议删除该行,改为在主函数中调用timer0()后,判断如果order1==13,则清零。
1 j& w9 i; P( |+ r; P- K% m, @2 ?2 O        break;;
/ y/ A1 k" _) l. E6 }% e! p/ \, R}
, v2 u, U' [; z4 S: M1 ]return(par++); / ~- z' i9 j: f1 l' I: i' V
}
+ k! V8 [5 i7 g1 O/ h% W9 P* _  W4 {9 `$ Y6 t
在主函数中调用timer0()的语句:6 ^8 @2 k7 s$ f1 L. \  Y% t6 E! T8 P
order1=timer0(order1);7 K4 p' Y# N  \
if(order1==13) {order1=1; TR1=0;}
" ?+ ^5 N$ v: T1 O

点评

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

点评

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

本版积分规则

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

GMT+8, 2025-8-15 00:49 , Processed in 0.059455 second(s), 13 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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