机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖

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

[复制链接]
 楼主| 发表于 2011-5-2 20:41:27 | 显示全部楼层
回复 metalstorm 的帖子
7 q9 {6 {5 H* X. ^" |. j. G
& P/ z; q: o' R/ C5 j3 K' B额,不好意思,没说清楚,在主函数中已经给order1赋值1了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-5-2 20:43:34 | 显示全部楼层
回复 robi 的帖子
- R; G/ u: j7 T7 p$ X' Q' U# T, N$ ]; m7 ^
额,那个是switch函数,和pwm没关系
回复 支持 反对

使用道具 举报

发表于 2011-5-2 20:52:18 | 显示全部楼层
回复 三月的暴风雪 的帖子: |) E$ b7 J9 @# i
1 j: i/ h4 B/ r
OOP编程思想一般都建议子函数使用参数传递机制。当单步执行到case12时,能否通过编程软件的调试功能查看timer()函数中的order1变量的实际值是多少?最好在order++语句前增加一个输出语句,将order1打印出来,这个值才是千真万确的判断条件。如果order1不等于1,能排除不少可能因素。/ k# j1 r! n. N  F
回复 支持 反对

使用道具 举报

发表于 2011-5-2 21:01:06 | 显示全部楼层
回复 三月的暴风雪 的帖子
5 u) K7 w& V) s# X7 ?9 z9 D& ^
' v- t$ ^+ {3 F2 z$ e9 @* e               嗯~看懂了~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-5-2 21:41:59 | 显示全部楼层
回复 metalstorm 的帖子" r4 p7 i3 x% d  @9 F3 ]
* t4 V. F4 Y- q; ^) g
嗯,按您的方法调试了,在执行order1++之前一直等于1,直到执行完order1++之后,那个就是跳到TL0=-(3300-PWM_Value1[5])%256;    order1=0;
$ }* K0 v2 C0 H5 C& J
( }# N" _1 {8 j( ?5 [3 k# f/ OTR1=0;
" |" I8 L1 p% o* }
" b) I" O% n' J8 h9 p& Vbreak;
& R, ]% e/ i0 U3 W" G4 C: P& `' s% v1 j$ s
相当郁闷
" f: P2 P& h- p9 F
回复 支持 反对

使用道具 举报

发表于 2011-5-2 22:11:59 | 显示全部楼层
不太明白,学习了,
回复 支持 反对

使用道具 举报

发表于 2011-5-2 23:19:30 | 显示全部楼层
建议将timer()函数改写为参数传递机制:
4 ?/ f4 L! R# x6 eint timer0(int par)
! I: o/ }3 D' ~0 ^* A{  {, [& t+ R! _& X  h/ v
        switch(par); ~7 c1 Y- p6 z
{. N( y2 z0 v- X
case 1:
3 W6 D# ?9 V  S2 E" o: P5 k...
6 f# g0 q. C$ w$ L1 P...2 ~; t8 N5 S" X7 }3 ]. b( ^
case 12:  
) D3 v- X& F& v6 N  r        PWM0_5=0 ;
. x5 L- c  K3 s) U        TH0=-(3300-PWM_Value1[5])/256;-! y8 U8 a8 l9 L" w9 `
        TL0=-(3300-PWM_Value1[5])%256;8 f/ i  }: R/ F' S
        order1=0;  //为什么要在这里清零?建议删除该行,改为在主函数中调用timer0()后,判断如果order1==13,则=1。
& r. V  m$ C0 ~; C        TR1=0;  //为什么要在这里清零?建议删除该行,改为在主函数中调用timer0()后,判断如果order1==13,则清零。0 @) v# W0 p- ]; H8 `4 @0 M5 D  o
        break;;
/ O1 U% j( I) j" _7 L7 G0 s5 M/ C3 Y  U}' s3 T5 ?+ }9 S! c0 U
return(par++); 6 X- ~/ O+ O6 L
}
& g) y8 V9 ^: |0 }* b# p" y& U5 _
. k" H, l3 A1 C( F1 N# y在主函数中调用timer0()的语句:
' Q: T& c$ g) ^5 M6 {% V( Jorder1=timer0(order1);
% ]' Y& K( P; ^6 @8 w. k: s1 cif(order1==13) {order1=1; TR1=0;}2 E: `$ ]# w7 N! x8 x. k

点评

Thank you very much!  发表于 2011-5-2 23:37
回复 支持 反对

使用道具 举报

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

点评

呵呵,谢谢,已经可以了  发表于 2011-5-3 23:02
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-2-19 06:01 , Processed in 0.084527 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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