机械必威体育网址

找回密码
注册会员

QQ登录

只需一步,快速开始

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

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

[复制链接]
11#
楼主 | 发表于 2011-5-2 20:41:27 | 只看该作者
回复metalstorm的帖子: i$ v' \8 ]9 C& r$ k/ G! g/ D

9 k. G. r9 P$ n额,不好意思,没说清楚,在主函数中已经给order1赋值1了
12#
楼主 | 发表于 2011-5-2 20:43:34 | 只看该作者
回复robi的帖子
8 O& p& R3 c' w1 L. a9 B( ?
- x8 m. Z! R* P额,那个是switch函数,和pwm没关系
13#
发表于 2011-5-2 20:52:18 | 只看该作者
回复三月的暴风雪的帖子' _# v( R. d. B( W; x5 G! Q
- M0 O8 l4 V b, G% C2 e" E
OOP编程思想一般都建议子函数使用参数传递机制。当单步执行到case12时,能否通过编程软件的调试功能查看timer()函数中的order1变量的实际值是多少?最好在order++语句前增加一个输出语句,将order1打印出来,这个值才是千真万确的判断条件。如果order1不等于1,能排除不少可能因素。9 e* F( q0 r5 _; _( L9 `; i3 U5 ?
14#
发表于 2011-5-2 21:01:06 | 只看该作者
回复三月的暴风雪的帖子
2 ?+ x4 P. Y9 I9 i7 Y* _( g1 r
|# L/ j* e7 D2 {2 g! q! U* w( P! [嗯~看懂了~
15#
楼主 | 发表于 2011-5-2 21:41:59 | 只看该作者
回复metalstorm的帖子
& x6 n/ z* ^5 e6 i8 o, `
8 @' z: u+ H( d+ H" k嗯,按您的方法调试了,在执行order1++之前一直等于1,直到执行完order1++之后,那个就是跳到TL0=-(3300-PWM_Value1[5])%256; order1=0;
$ x7 H! `- x5 A+ k, r: f1 ^& r Z
4 X9 Y* w7 j( u' D6 z6 _' i3 ]- oTR1=0;/ _8 o. }6 h u. G
) H+ _" i0 M7 w2 k
break;
3 Z$ i# k0 `! |/ A% D: u4 u" ^% _% D( ]0 b' g
相当郁闷
t! J% p% q7 F9 M
16#
发表于 2011-5-2 22:11:59 | 只看该作者
不太明白,学习了,
17#
发表于 2011-5-2 23:19:30 | 只看该作者
建议将timer()函数改写为参数传递机制:1 z3 u! X% E0 ?- w2 s
int timer0(int par)& f5 a8 P$ M7 F. [+ n
{
* P# C" D U. f; N3 {switch(par)
" p Z! R/ g% x* v5 N% V, k2 I, G{
, f F8 F: \" K6 R( H/ Tcase 1:
# F8 s9 z5 h$ a6 j...2 W9 w* i G9 c: K4 Z8 s3 A2 _. V
...
1 w7 v) L2 Q' f6 acase 12:
( |4 l0 c! n0 n$ BPWM0_5=0 ;4 m7 d# `4 k; s) r1 g
TH0=-(3300-PWM_Value1[5])/256;-
+ K" R ^( e! x; J8 kTL0=-(3300-PWM_Value1[5])%256;
3 p+ y/ i$ `- g/ M9 q2 `order1=0; //为什么要在这里清零?建议删除该行,改为在主函数中调用timer0()后,判断如果order1==13,则=1。& J# G7 e) _- e0 g* u) ?- w9 ]& s
TR1=0; //为什么要在这里清零?建议删除该行,改为在主函数中调用timer0()后,判断如果order1==13,则清零。
! P# S4 [" ^( p3 _0 B0 Mbreak;;6 G% z8 M0 k( @' @. b! J7 U v
}5 D: R; B4 m6 a( y) O' ?, B
return(par++);9 N4 w6 O9 e1 T6 i7 h- @/ z# v' R% \ N
}8 `" z# t8 ^! w$ ?5 A4 M2 ?
& }" d% _. T0 c. M$ @% O, j
在主函数中调用timer0()的语句:& K0 _ U+ l$ R+ j* W7 ]
order1=timer0(order1);% J8 {2 K9 q: m5 r o
if(order1==13) {order1=1; TR1=0;}
U9 d$ `0 `0 o2 T; u

点评

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

点评

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

本版积分规则

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

GMT+8, 2024-5-1 05:58, Processed in 0.056522 second(s), 18 queries , Gzip On.

Powered byDiscuz!X3.4Licensed

? 2001-2017Comsenz Inc.

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