机械必威体育网址

找回密码
注册会员

QQ登录

只需一步,快速开始

搜索
1 2
返回列表 发新帖
打印 上一主题 下一主题

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

[复制链接]
11#
楼主 | 发表于 2011-5-2 20:41:27 | 只看该作者
回复metalstorm的帖子
* q& Z7 f9 T4 o" a
: ~5 D2 v% T# o6 u6 |# C( s6 l! k额,不好意思,没说清楚,在主函数中已经给order1赋值1了
12#
楼主 | 发表于 2011-5-2 20:43:34 | 只看该作者
回复robi的帖子
$ p |$ n) C2 T6 q* n+ I- u
1 F# s/ r" A5 a! m% F l# @额,那个是switch函数,和pwm没关系
13#
发表于 2011-5-2 20:52:18 | 只看该作者
回复三月的暴风雪的帖子
( b" A/ G- g; t, O. j/ V8 k8 }2 @; E& m
OOP编程思想一般都建议子函数使用参数传递机制。当单步执行到case12时,能否通过编程软件的调试功能查看timer()函数中的order1变量的实际值是多少?最好在order++语句前增加一个输出语句,将order1打印出来,这个值才是千真万确的判断条件。如果order1不等于1,能排除不少可能因素。. R" z: m p2 ~$ C% ?1 I( Z
14#
发表于 2011-5-2 21:01:06 | 只看该作者
回复三月的暴风雪的帖子
) [3 @8 n# g2 k1 l
1 x5 M& R: E2 S嗯~看懂了~
15#
楼主 | 发表于 2011-5-2 21:41:59 | 只看该作者
回复metalstorm的帖子9 i2 B0 ?. A4 V8 T+ n+ J

0 n4 c0 n: [/ r! m; _嗯,按您的方法调试了,在执行order1++之前一直等于1,直到执行完order1++之后,那个就是跳到TL0=-(3300-PWM_Value1[5])%256; order1=0;
0 x( D5 t& m) b; j9 B* w- a+ N; b) A4 T7 }) k! b
TR1=0;
2 {) C0 r; [4 N. c
3 f2 t1 o0 z3 Q2 jbreak;0 Z# g1 G! S9 y: P
. a4 O$ ^1 x6 F& g+ l
相当郁闷
& g |* J' T. _+ q; w$ A
16#
发表于 2011-5-2 22:11:59 | 只看该作者
不太明白,学习了,
17#
发表于 2011-5-2 23:19:30 | 只看该作者
建议将timer()函数改写为参数传递机制:2 B1 G' K+ H/ [) m. M
int timer0(int par)
4 S% b" v" Z/ \' w6 H+ u1 P9 {; b{
! K8 P, ~* j9 A* ~. I+ Sswitch(par)' f5 S" l) ^3 `$ N
{; a! c, i4 C: s# _# T9 c5 B
case 1:; {; s6 M g/ g3 t* [& |- x$ s0 {
...6 Q: B/ w9 l5 n0 m) }; P) Z
...- F* |$ l, X) r3 u8 a
case 12:
$ H% O: E$ ^; o1 A% IPWM0_5=0 ;
, X _- M! C7 ^2 O3 {# vTH0=-(3300-PWM_Value1[5])/256;-; ?8 i7 y" Y2 Z1 P* L
TL0=-(3300-PWM_Value1[5])%256;
" G7 \: L$ P9 h w7 I! {: }; Eorder1=0; //为什么要在这里清零?建议删除该行,改为在主函数中调用timer0()后,判断如果order1==13,则=1。( B. M$ c# X \
TR1=0; //为什么要在这里清零?建议删除该行,改为在主函数中调用timer0()后,判断如果order1==13,则清零。
* I$ I2 Z1 m+ b9 K: [# s7 n8 \+ Q( qbreak;;: E3 |$ T$ W, s0 a
}
" b7 v+ L: N/ d/ k+ o3 Z Wreturn(par++);$ M" ^& O5 a- a q3 k1 Q9 ^0 y
}
2 v( J/ T/ {+ U3 p2 R( p
# ^1 S0 {) b, [在主函数中调用timer0()的语句:( T7 w" u+ S& ^( r& m' u
order1=timer0(order1);$ M( C0 p* [3 j n, V
if(order1==13) {order1=1; TR1=0;}% d( ~: k, h8 Q4 @8 |+ e

点评

Thank you very much! 发表于 2011-5-2 23:37
18#
发表于 2011-5-3 20:07:29 | 只看该作者
看了一下你的程序,没看明白要实现什么功能,感觉有点乱,switch没这么用的。4 z8 a6 C) X. q
按说跳转没问题,如果出现异常,建议写个测试函数test(),本函数逐个显示所有变量的当前值,test()加在每个break;之前。

点评

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

本版积分规则

小黑屋|手机版|Archiver|机械必威体育网址(京ICP备10217105号-1,京ICP证050210号,浙公网安备33038202004372号)

GMT+8, 2025-1-9 15:01, Processed in 0.049116 second(s), 14 queries , Gzip On.

Powered byDiscuz!X3.4Licensed

? 2001-2017Comsenz Inc.

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