机械必威体育网址

找回密码
注册会员

QQ登录

只需一步,快速开始

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

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

[复制链接]
11#
楼主 | 发表于 2011-5-2 20:41:27 | 只看该作者
回复metalstorm的帖子
5 Z1 Q1 I) z* I4 |
9 a7 ^! n, b: q) H( l额,不好意思,没说清楚,在主函数中已经给order1赋值1了
12#
楼主 | 发表于 2011-5-2 20:43:34 | 只看该作者
回复robi的帖子. `7 A% f# X# Z4 V0 R3 ~5 {

3 Z: [- f# R! y# |% `额,那个是switch函数,和pwm没关系
13#
发表于 2011-5-2 20:52:18 | 只看该作者
回复三月的暴风雪的帖子
& u" O8 q) L* Q: h$ x! W1 A1 K6 x3 \" H/ C/ `5 g
OOP编程思想一般都建议子函数使用参数传递机制。当单步执行到case12时,能否通过编程软件的调试功能查看timer()函数中的order1变量的实际值是多少?最好在order++语句前增加一个输出语句,将order1打印出来,这个值才是千真万确的判断条件。如果order1不等于1,能排除不少可能因素。
* I3 T2 h% Q: a! |
14#
发表于 2011-5-2 21:01:06 | 只看该作者
回复三月的暴风雪的帖子- O* e2 V! e/ d, z
; f; @' a) G$ ?& Y
嗯~看懂了~
15#
楼主 | 发表于 2011-5-2 21:41:59 | 只看该作者
回复metalstorm的帖子; ?: D9 [: w- v. X/ p6 w+ ~- @7 y7 I
- k2 F4 i) P7 V ]2 v( F- ^
嗯,按您的方法调试了,在执行order1++之前一直等于1,直到执行完order1++之后,那个就是跳到TL0=-(3300-PWM_Value1[5])%256; order1=0;# B% w. z3 G# Z5 e
' t( X' o# R1 I) u( f% ?4 ?
TR1=0;* ]4 n- L1 }4 ~
; J8 p( Q* }; b5 N6 z& i
break;
/ \6 E X( K0 q+ ~6 \/ E- w( v( u- E- H2 h9 U
相当郁闷1 Z1 N0 I3 R$ T9 m0 t! o; T
16#
发表于 2011-5-2 22:11:59 | 只看该作者
不太明白,学习了,
17#
发表于 2011-5-2 23:19:30 | 只看该作者
建议将timer()函数改写为参数传递机制:" D! ]1 v& f" h; Y6 L" H* w2 t
int timer0(int par)
3 Y( ]+ A3 k5 g7 `7 b# V; m% L4 p{2 K7 m( v7 v# {0 S; j
switch(par)
{+ y- d8 p7 V& H5 V{8 L3 m( N- X) v7 f
case 1:2 ?/ [% e. G5 r7 R, x0 R) T- y
...$ f3 e0 D5 G8 @1 @
...; k+ v% D" `% z, a/ h5 g- @
case 12:
* ?4 j0 p/ n' J% _9 y/ h2 |PWM0_5=0 ;" L* j& _% q9 v; G# G( x! N
TH0=-(3300-PWM_Value1[5])/256;-- A4 c; _: G7 U
TL0=-(3300-PWM_Value1[5])%256;- v9 u' R, U' \' B0 y$ V* _
order1=0; //为什么要在这里清零?建议删除该行,改为在主函数中调用timer0()后,判断如果order1==13,则=1。
% a0 S" y# F; j! n/ S2 R) \ dTR1=0; //为什么要在这里清零?建议删除该行,改为在主函数中调用timer0()后,判断如果order1==13,则清零。
- }0 M2 @2 D, F+ D) T0 Tbreak;;
6 ~% Y+ a9 l* a- N8 r}$ D4 P) O4 K- s+ u6 s' o' Q
return(par++);
3 ^( v! Q& }: i0 R- |}
! u* @$ Y: I( `& H/ _% [) u7 ~4 l( |8 x$ s% l4 ^6 M
在主函数中调用timer0()的语句:" h. J! W/ P: C, N h; _% P
order1=timer0(order1);
% o& D: U8 ^5 U& K" Qif(order1==13) {order1=1; TR1=0;}' `3 l, q4 V, F' E' {

点评

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

点评

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

本版积分规则

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

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

Powered byDiscuz!X3.4Licensed

? 2001-2017Comsenz Inc.

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