机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖

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

[复制链接]
 楼主| 发表于 2011-5-2 20:41:27 | 显示全部楼层
回复 metalstorm 的帖子: T  U6 {, ]& o! [4 ^

' K* h/ D& b' I# j  K额,不好意思,没说清楚,在主函数中已经给order1赋值1了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-5-2 20:43:34 | 显示全部楼层
回复 robi 的帖子
3 a8 [- B& f5 O5 i) w. [- k; k7 Q. M& P. M
额,那个是switch函数,和pwm没关系
回复 支持 反对

使用道具 举报

发表于 2011-5-2 20:52:18 | 显示全部楼层
回复 三月的暴风雪 的帖子$ `, c$ e" w0 O# y

! `4 J  Y4 u' L8 E( o- T  I8 nOOP编程思想一般都建议子函数使用参数传递机制。当单步执行到case12时,能否通过编程软件的调试功能查看timer()函数中的order1变量的实际值是多少?最好在order++语句前增加一个输出语句,将order1打印出来,这个值才是千真万确的判断条件。如果order1不等于1,能排除不少可能因素。
7 i  ?; a0 ?% X0 m" R
回复 支持 反对

使用道具 举报

发表于 2011-5-2 21:01:06 | 显示全部楼层
回复 三月的暴风雪 的帖子
8 G+ l1 t4 y0 D2 x8 D* X+ V, c# y3 g! }
               嗯~看懂了~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-5-2 21:41:59 | 显示全部楼层
回复 metalstorm 的帖子
2 a' m: u3 {9 \" C9 f/ n# a& Z. k% J1 F6 {- J% m0 B- F
嗯,按您的方法调试了,在执行order1++之前一直等于1,直到执行完order1++之后,那个就是跳到TL0=-(3300-PWM_Value1[5])%256;    order1=0;
+ \% f) e' ~' Y2 d5 K% x# Q. u4 c
; V% U9 u2 `+ b  [. F% iTR1=0;
" B$ r) k, ]8 g& W, T% V
2 t$ g5 T% b( |/ z8 wbreak;( e7 {5 S9 s5 J, h! \

* e, a9 ]9 i$ i& _, h相当郁闷
  |& Y" W( W! o/ [5 p3 ^
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2011-5-2 23:19:30 | 显示全部楼层
建议将timer()函数改写为参数传递机制:
2 A) `3 N, N& u& X6 E7 i$ B2 Fint timer0(int par)
+ g: R' v3 N3 k. \& m{
1 k4 g: b; y% n* W% C6 N        switch(par)7 _2 M( I" X6 s
{
9 @" z. V8 W0 Y, X$ [9 @2 J5 Ucase 1:
! _) v$ E8 ^% Y* M# f...1 V/ D, e4 A4 j$ |8 P+ W
...
4 y- ?+ T" j/ J& j4 L# S, w+ ucase 12:  
2 P. L( G8 o) M5 J/ o: {6 d* g2 y9 z6 g        PWM0_5=0 ;$ V' {9 k  l1 }7 \5 C1 t. ?
        TH0=-(3300-PWM_Value1[5])/256;-7 q- C7 j8 ?, l- E  q
        TL0=-(3300-PWM_Value1[5])%256;8 X, q( ^5 W+ ]8 Y# n1 ~/ S3 f
        order1=0;  //为什么要在这里清零?建议删除该行,改为在主函数中调用timer0()后,判断如果order1==13,则=1。+ }9 C' J* t! O8 w& {
        TR1=0;  //为什么要在这里清零?建议删除该行,改为在主函数中调用timer0()后,判断如果order1==13,则清零。6 V0 r; [; [5 B
        break;;, M" e/ ~0 s( m, R& K0 W. F
}
; @( a! `/ r; e  F, L4 a9 Yreturn(par++);
# L; l' K& l0 u: F# n}  T- B5 N7 `: j" O+ _: I. {
% L+ k/ {" j8 q4 e7 s" z$ k; \
在主函数中调用timer0()的语句:! E0 M1 R' K6 W% D$ E' `0 \
order1=timer0(order1);
) Q, b, l( i1 {& {- Kif(order1==13) {order1=1; TR1=0;}) k4 ^- W/ ^1 l. O1 D

点评

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

使用道具 举报

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

点评

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-10 17:17 , Processed in 0.050119 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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