機(jī)械社區(qū)

 找回密碼
 注冊(cè)會(huì)員

QQ登錄

只需一步,快速開始

搜索
12
返回列表 發(fā)新帖
打印 上一主題 下一主題

單片機(jī)C語言程序問題,請(qǐng)教

[復(fù)制鏈接]
11#
 樓主| 發(fā)表于 2011-5-2 20:41:27 | 只看該作者
回復(fù) metalstorm 的帖子! I* _/ j4 d& [- }: W9 O

( q$ Z8 X3 Z. [2 ]額,不好意思,沒說清楚,在主函數(shù)中已經(jīng)給order1賦值1了
12#
 樓主| 發(fā)表于 2011-5-2 20:43:34 | 只看該作者
回復(fù) robi 的帖子+ c% x; x. m, E0 ]
' R$ n# X$ ^% k
額,那個(gè)是switch函數(shù),和pwm沒關(guān)系
13#
發(fā)表于 2011-5-2 20:52:18 | 只看該作者
回復(fù) 三月的暴風(fēng)雪 的帖子
+ T' X6 f, D. G1 Z$ u7 @; i; p9 \# H
OOP編程思想一般都建議子函數(shù)使用參數(shù)傳遞機(jī)制。當(dāng)單步執(zhí)行到case12時(shí),能否通過編程軟件的調(diào)試功能查看timer()函數(shù)中的order1變量的實(shí)際值是多少?最好在order++語句前增加一個(gè)輸出語句,將order1打印出來,這個(gè)值才是千真萬確的判斷條件。如果order1不等于1,能排除不少可能因素。8 _4 V; r) e. H1 B6 R! D
14#
發(fā)表于 2011-5-2 21:01:06 | 只看該作者
回復(fù) 三月的暴風(fēng)雪 的帖子
; n$ {: h( k' S$ J% c& H( N  X
3 i* i6 s' h7 L, {' y# @# B( a2 I8 c" D               嗯~看懂了~
15#
 樓主| 發(fā)表于 2011-5-2 21:41:59 | 只看該作者
回復(fù) metalstorm 的帖子
9 G: c; n! j) q; u) o( L! A
7 q$ ?; z# L. P嗯,按您的方法調(diào)試了,在執(zhí)行order1++之前一直等于1,直到執(zhí)行完order1++之后,那個(gè)就是跳到TL0=-(3300-PWM_Value1[5])%256;    order1=0;) `& ]6 g) n$ }  |
4 U) u% |: n2 \( l( G- \, g$ L
TR1=0;
2 v/ }8 l- A- z3 j
) B" z' m; H* m4 a: ]  A5 \5 \3 W: h9 ubreak;
& H% Z; F. v4 `& q1 q9 {- Z$ l+ p* U5 f6 |
相當(dāng)郁悶% W# x7 k7 X$ w1 k9 l
16#
發(fā)表于 2011-5-2 22:11:59 | 只看該作者
不太明白,學(xué)習(xí)了,
17#
發(fā)表于 2011-5-2 23:19:30 | 只看該作者
建議將timer()函數(shù)改寫為參數(shù)傳遞機(jī)制:
/ M7 G; }, S; ^* v) W* Iint timer0(int par)5 C% t# @6 O* `4 p3 u7 |8 P+ d: m
{3 W  L2 z( N6 v
        switch(par)
0 [. O5 v$ M6 b& a5 A{8 E" }, N" f+ F2 j2 b7 z, ^; x
case 1:' _9 f* k- G7 o2 r4 g! F
...
* d, `2 c. b# a. D1 `...
2 m0 F  P$ h7 s7 Z: P" mcase 12:  
: n; l, P: \5 `4 [* K/ S! J        PWM0_5=0 ;
( `; P4 A& _; }; q& k        TH0=-(3300-PWM_Value1[5])/256;-+ q# y5 O$ I- t3 K9 V  \
        TL0=-(3300-PWM_Value1[5])%256;
$ |  E5 v5 u- c2 U; X! k9 L        order1=0;  //為什么要在這里清零?建議刪除該行,改為在主函數(shù)中調(diào)用timer0()后,判斷如果order1==13,則=1。( C4 o, ~& p- i$ {% \$ L. h% E* U
        TR1=0;  //為什么要在這里清零?建議刪除該行,改為在主函數(shù)中調(diào)用timer0()后,判斷如果order1==13,則清零。7 e/ l: i4 V6 s
        break;;
2 \* ~& `- J: |1 J}
; N0 l3 u5 v4 f  \0 a3 Q& C) h" h& Creturn(par++);
& E1 X# j2 d( z, H( A' T6 J}
9 J# E/ R+ o( v# p; X$ P7 p5 f5 ]. m+ j
在主函數(shù)中調(diào)用timer0()的語句:+ f8 u$ G: f3 o9 y) x
order1=timer0(order1);
, O' O1 Z( [3 ?  Xif(order1==13) {order1=1; TR1=0;}
, g# J) P# @3 J4 t! \2 Z

點(diǎn)評(píng)

Thank you very much!  發(fā)表于 2011-5-2 23:37
18#
發(fā)表于 2011-5-3 20:07:29 | 只看該作者
看了一下你的程序,沒看明白要實(shí)現(xiàn)什么功能,感覺有點(diǎn)亂,switch沒這么用的。
/ c7 s2 m" I6 q, W按說跳轉(zhuǎn)沒問題,如果出現(xiàn)異常,建議寫個(gè)測(cè)試函數(shù)test(),本函數(shù)逐個(gè)顯示所有變量的當(dāng)前值,test()加在每個(gè)break;之前。

點(diǎn)評(píng)

呵呵,謝謝,已經(jīng)可以了  發(fā)表于 2011-5-3 23:02

本版積分規(guī)則

小黑屋|手機(jī)版|Archiver|機(jī)械社區(qū) ( 京ICP備10217105號(hào)-1,京ICP證050210號(hào),浙公網(wǎng)安備33038202004372號(hào) )

GMT+8, 2024-11-20 17:15 , Processed in 0.055597 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表