機械社區(qū)

 找回密碼
 注冊會員

QQ登錄

只需一步,快速開始

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

單片機C語言程序問題,請教

[復制鏈接]
11#
 樓主| 發(fā)表于 2011-5-2 20:41:27 | 只看該作者
回復 metalstorm 的帖子
" \/ D/ P% J' S9 n% n  I
, _/ ?+ }, i9 i* |4 S! r額,不好意思,沒說清楚,在主函數(shù)中已經(jīng)給order1賦值1了
回復 支持 反對

使用道具 舉報

12#
 樓主| 發(fā)表于 2011-5-2 20:43:34 | 只看該作者
回復 robi 的帖子
4 k& t+ m) ]5 S1 G1 g
0 `+ N! z9 _& h6 X+ F# ?" y6 A額,那個是switch函數(shù),和pwm沒關系
回復 支持 反對

使用道具 舉報

13#
發(fā)表于 2011-5-2 20:52:18 | 只看該作者
回復 三月的暴風雪 的帖子& M/ F% n" T0 }9 d( V6 O5 i( R
' M; {% _" g' S% p" p% b* f7 p
OOP編程思想一般都建議子函數(shù)使用參數(shù)傳遞機制。當單步執(zhí)行到case12時,能否通過編程軟件的調(diào)試功能查看timer()函數(shù)中的order1變量的實際值是多少?最好在order++語句前增加一個輸出語句,將order1打印出來,這個值才是千真萬確的判斷條件。如果order1不等于1,能排除不少可能因素。
+ n! L  c6 Q. q6 ]5 u" K" O' J
回復 支持 反對

使用道具 舉報

14#
發(fā)表于 2011-5-2 21:01:06 | 只看該作者
回復 三月的暴風雪 的帖子
2 X1 Q% y& s" _& N6 B3 T
+ F" k" K8 H, B) ?               嗯~看懂了~
回復 支持 反對

使用道具 舉報

15#
 樓主| 發(fā)表于 2011-5-2 21:41:59 | 只看該作者
回復 metalstorm 的帖子6 c. U' b/ }3 M! K1 g9 v* _
3 }! U, g, k- g3 D6 }
嗯,按您的方法調(diào)試了,在執(zhí)行order1++之前一直等于1,直到執(zhí)行完order1++之后,那個就是跳到TL0=-(3300-PWM_Value1[5])%256;    order1=0;3 z1 _1 l9 D2 A

4 }0 x# L& ]9 h4 J/ WTR1=0;5 \8 i" T9 [4 J! ^

: N/ |% Z" I1 m( E7 d8 Gbreak;" D) N3 H/ x+ M7 d; M

4 }% @8 c* |5 I: V0 D: a/ A7 q相當郁悶
- O. J6 [( v4 p8 w' ]
回復 支持 反對

使用道具 舉報

16#
發(fā)表于 2011-5-2 22:11:59 | 只看該作者
不太明白,學習了,
回復 支持 反對

使用道具 舉報

17#
發(fā)表于 2011-5-2 23:19:30 | 只看該作者
建議將timer()函數(shù)改寫為參數(shù)傳遞機制:4 L/ W2 j6 b3 H8 m
int timer0(int par)3 I# h, ~6 Q: A5 u! z
{( E7 e: ~- I( T: G4 ~
        switch(par)8 S, S9 \* O& X4 o. `2 r. @, m
{+ g- y5 z+ }) t4 [/ q  |1 x+ r
case 1:# l; u; g# I2 X: J/ ?; Q" {6 m5 R
...
( K2 m% a, ^$ B. C, I6 |) C, _...
8 t2 Y/ G7 s; }/ p6 e$ |1 D1 Ecase 12:  / z9 q# Q( p! ]: r$ \5 S& M
        PWM0_5=0 ;
% r. K6 a  W1 q9 D        TH0=-(3300-PWM_Value1[5])/256;-
( X4 Y, ~5 r" Y" m+ g: }        TL0=-(3300-PWM_Value1[5])%256;. Q. a2 g) P$ A" b* J! x
        order1=0;  //為什么要在這里清零?建議刪除該行,改為在主函數(shù)中調(diào)用timer0()后,判斷如果order1==13,則=1。
8 ~% @0 @" |( {1 S- C: g        TR1=0;  //為什么要在這里清零?建議刪除該行,改為在主函數(shù)中調(diào)用timer0()后,判斷如果order1==13,則清零。
* L! I1 m. ^! w9 }        break;;
7 W+ p. e% K% P  j& _}. @- k+ A. O8 g6 |. W7 [  Q+ Y' R
return(par++); 0 i6 o0 r# |- t' I/ F
}
: R4 S8 F7 W: L, ]5 X& t) h1 h, G' d! r! F
在主函數(shù)中調(diào)用timer0()的語句:* S9 z1 u2 b  x( z7 `
order1=timer0(order1);3 a. [5 m! Z5 k/ I
if(order1==13) {order1=1; TR1=0;}
) ^9 D2 f0 `) g7 `, d8 `( _& C

點評

Thank you very much!  發(fā)表于 2011-5-2 23:37
回復 支持 反對

使用道具 舉報

18#
發(fā)表于 2011-5-3 20:07:29 | 只看該作者
看了一下你的程序,沒看明白要實現(xiàn)什么功能,感覺有點亂,switch沒這么用的。
; j9 |( G7 V+ R( `9 f按說跳轉(zhuǎn)沒問題,如果出現(xiàn)異常,建議寫個測試函數(shù)test(),本函數(shù)逐個顯示所有變量的當前值,test()加在每個break;之前。

點評

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 注冊會員

本版積分規(guī)則

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

GMT+8, 2024-9-27 21:25 , Processed in 0.056915 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表