找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索

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

[复制链接]
 楼主| 发表于 2011-5-2 20:41:27 | 显示全部楼层
回复 metalstorm 的帖子& T/ K) F% j! z3 c/ |
6 q9 h; Z" r4 g7 B4 Q) {1 a
额,不好意思,没说清楚,在主函数中已经给order1赋值1了
 楼主| 发表于 2011-5-2 20:43:34 | 显示全部楼层
回复 robi 的帖子  g% s' w$ q8 N# Q. g3 |) T

+ i8 }' [# K* p+ W% V额,那个是switch函数,和pwm没关系
发表于 2011-5-2 20:52:18 | 显示全部楼层
回复 三月的暴风雪 的帖子
- K& y  Q  f2 o+ {! }. P2 Q' e* A$ M+ }6 p! L" g
OOP编程思想一般都建议子函数使用参数传递机制。当单步执行到case12时,能否通过编程软件的调试功能查看timer()函数中的order1变量的实际值是多少?最好在order++语句前增加一个输出语句,将order1打印出来,这个值才是千真万确的判断条件。如果order1不等于1,能排除不少可能因素。& x8 g2 o. N* {
发表于 2011-5-2 21:01:06 | 显示全部楼层
回复 三月的暴风雪 的帖子* o: O1 z* h% m0 x" M  ?* I

6 S! R8 X3 W; A4 |               嗯~看懂了~
 楼主| 发表于 2011-5-2 21:41:59 | 显示全部楼层
回复 metalstorm 的帖子7 R/ m# t. `) r# f; d

+ D* S9 j. Z" d嗯,按您的方法调试了,在执行order1++之前一直等于1,直到执行完order1++之后,那个就是跳到TL0=-(3300-PWM_Value1[5])%256;    order1=0;
. h! s  g$ A4 g6 l* B2 I: ?1 D
TR1=0;
# u( O  k: F0 W8 ?2 O* K, k7 k. j5 Y3 G
break;( |# Q* Y7 W2 L3 H% D7 W

7 X$ N- V* `7 P( \! @相当郁闷
8 d" u" @# A- L; n! Y
发表于 2011-5-2 22:11:59 | 显示全部楼层
不太明白,学习了,
发表于 2011-5-2 23:19:30 | 显示全部楼层
建议将timer()函数改写为参数传递机制:
) \# [5 j4 y' @. F- N) Yint timer0(int par)  K/ c# @! i5 R- q
{6 R% @$ t: K+ W7 X
        switch(par)
/ Q! Z+ L' B/ e9 w{
( k0 W( k* H8 W2 b+ B% Pcase 1:+ d5 t1 i" |" q, M# e2 ~) ^) K
...5 m! L% L0 v3 q) j- \# o  v
...& P0 z% d: H) i( l# G4 c
case 12:  
5 w7 Z# `; k8 C. n        PWM0_5=0 ;
6 h7 t5 y3 ^* Q: ]+ k        TH0=-(3300-PWM_Value1[5])/256;-! H% P4 m: x5 m1 f- z
        TL0=-(3300-PWM_Value1[5])%256;
6 t0 ?% B" J* G0 i        order1=0;  //为什么要在这里清零?建议删除该行,改为在主函数中调用timer0()后,判断如果order1==13,则=1。
! E1 L  o, s" H  U" ]        TR1=0;  //为什么要在这里清零?建议删除该行,改为在主函数中调用timer0()后,判断如果order1==13,则清零。
1 A& b, R; X, y" W6 r$ ]        break;;
( k; [4 ^7 J' N, J* x0 }' \. _}
) f% z5 m# {; V& E9 x3 |4 N- {4 i& zreturn(par++);
$ @, I! {& D. h0 x- r3 m}0 L/ @2 a& L5 U& r; Q6 N
) l  v! A& ?; `  X
在主函数中调用timer0()的语句:' I$ F- K1 ]/ V" O0 V# G6 u8 f
order1=timer0(order1);
1 ^5 P+ @! C2 }1 v! sif(order1==13) {order1=1; TR1=0;}
" Y8 M4 k/ U& h0 t0 n5 h( U

点评

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

点评

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

本版积分规则

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

GMT+8, 2025-7-2 12:23 , Processed in 0.070257 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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