找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索

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

[复制链接]
 楼主| 发表于 2011-5-2 20:41:27 | 显示全部楼层
回复 metalstorm 的帖子
; P. }* X: Q0 Y( P
" A2 |; z; R  H  d  @9 c额,不好意思,没说清楚,在主函数中已经给order1赋值1了
 楼主| 发表于 2011-5-2 20:43:34 | 显示全部楼层
回复 robi 的帖子
% y/ G! M8 J5 Q/ P0 y/ T  s6 `% B, f4 E& C) \9 y7 c
额,那个是switch函数,和pwm没关系
发表于 2011-5-2 20:52:18 | 显示全部楼层
回复 三月的暴风雪 的帖子
) P& p/ @8 s5 V* O& G$ _3 T, T) Z3 P, e+ r" B$ v, J
OOP编程思想一般都建议子函数使用参数传递机制。当单步执行到case12时,能否通过编程软件的调试功能查看timer()函数中的order1变量的实际值是多少?最好在order++语句前增加一个输出语句,将order1打印出来,这个值才是千真万确的判断条件。如果order1不等于1,能排除不少可能因素。# [: K( l- f  o0 D  U
发表于 2011-5-2 21:01:06 | 显示全部楼层
回复 三月的暴风雪 的帖子
7 e( E; j, W- N" R5 Y
1 \! C% d. ?- I% U4 V) D) X$ T               嗯~看懂了~
 楼主| 发表于 2011-5-2 21:41:59 | 显示全部楼层
回复 metalstorm 的帖子2 [" O* t& B- h% R, z( H; E; c
0 t! `- {9 _3 M* X
嗯,按您的方法调试了,在执行order1++之前一直等于1,直到执行完order1++之后,那个就是跳到TL0=-(3300-PWM_Value1[5])%256;    order1=0;1 x' f0 W; z# \$ r% u% b. C- O
# Y& b+ X, ~2 \- }  m5 [5 V
TR1=0;/ e! |. [, s2 D! T# ^/ Y- R4 w

3 @: u- R. i  v" J: _1 A( Mbreak;. @0 B6 J9 X6 [  c

1 l2 E/ h$ o9 _+ S/ U% R- X; q相当郁闷$ A. W2 c( H& x3 B( @
发表于 2011-5-2 22:11:59 | 显示全部楼层
不太明白,学习了,
发表于 2011-5-2 23:19:30 | 显示全部楼层
建议将timer()函数改写为参数传递机制:7 ?- H- b+ z) ?1 G
int timer0(int par)& k1 }6 j  `. d) R
{
, ^& ^/ f1 r1 ^& M: P& W2 D$ o        switch(par)$ u* N, }) O$ t+ j+ v
{' v! y) H$ k- |6 ?/ A2 c
case 1:
: h8 B2 Y( `' W1 W...
5 A5 r' b% r( k' }9 k$ M  ~; O...
6 j& \. E& p: W  E6 d  ccase 12:  $ `" [7 d3 o* _" a% w* N3 Q
        PWM0_5=0 ;
( J+ ^" @3 D8 ]        TH0=-(3300-PWM_Value1[5])/256;-
, V1 Z9 N* a1 A" [1 W+ l        TL0=-(3300-PWM_Value1[5])%256;. }5 x+ d) W: l# F
        order1=0;  //为什么要在这里清零?建议删除该行,改为在主函数中调用timer0()后,判断如果order1==13,则=1。
3 T: @2 b8 R  _5 K9 R$ c3 `        TR1=0;  //为什么要在这里清零?建议删除该行,改为在主函数中调用timer0()后,判断如果order1==13,则清零。+ t6 U! M$ v4 K- M3 s
        break;;
/ K% M5 _- D  O9 u}5 U7 y' l% `* Z2 e
return(par++);
9 S2 D9 \3 c9 r# r1 ~; b4 M}2 |0 i& u2 q7 P: ]& k4 @
1 q) ^: E8 a- W9 Q( L" J( p
在主函数中调用timer0()的语句:# c! @8 f! B4 u5 F- ?
order1=timer0(order1);- t+ p$ g3 W$ c% |7 _
if(order1==13) {order1=1; TR1=0;}
( T+ h% l2 e/ [7 u

点评

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

点评

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

本版积分规则

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

GMT+8, 2025-6-22 19:29 , Processed in 0.066506 second(s), 13 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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