機械社區(qū)

 找回密碼
 注冊會員

QQ登錄

只需一步,快速開始

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

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

[復制鏈接]
11#
 樓主| 發(fā)表于 2011-5-2 20:41:27 | 只看該作者
回復 metalstorm 的帖子
  @/ w' T2 s. l, N5 V
" z$ s5 ^9 p* P! Y; n額,不好意思,沒說清楚,在主函數(shù)中已經(jīng)給order1賦值1了
回復 支持 反對

使用道具 舉報

12#
 樓主| 發(fā)表于 2011-5-2 20:43:34 | 只看該作者
回復 robi 的帖子
: }* _) {3 V, P8 g; `. |6 @
/ i. t7 x# U/ V7 u' Z' o4 ?# r額,那個是switch函數(shù),和pwm沒關系
回復 支持 反對

使用道具 舉報

13#
發(fā)表于 2011-5-2 20:52:18 | 只看該作者
回復 三月的暴風雪 的帖子& _$ z" o9 i* x4 b- f( c3 V

$ P' N  A+ D0 S4 T. dOOP編程思想一般都建議子函數(shù)使用參數(shù)傳遞機制。當單步執(zhí)行到case12時,能否通過編程軟件的調試功能查看timer()函數(shù)中的order1變量的實際值是多少?最好在order++語句前增加一個輸出語句,將order1打印出來,這個值才是千真萬確的判斷條件。如果order1不等于1,能排除不少可能因素。: P  w6 s2 ~" X& j7 g6 W/ H. o* t
回復 支持 反對

使用道具 舉報

14#
發(fā)表于 2011-5-2 21:01:06 | 只看該作者
回復 三月的暴風雪 的帖子
# r! v6 |* X- H/ a, W' C/ Q& c  M3 w# Y4 i6 M! Y1 \7 K. W
               嗯~看懂了~
回復 支持 反對

使用道具 舉報

15#
 樓主| 發(fā)表于 2011-5-2 21:41:59 | 只看該作者
回復 metalstorm 的帖子
  [  ?; ^* R: a) N- H: J7 Z# p" S& A8 H" B0 l" h8 c
嗯,按您的方法調試了,在執(zhí)行order1++之前一直等于1,直到執(zhí)行完order1++之后,那個就是跳到TL0=-(3300-PWM_Value1[5])%256;    order1=0;* D$ s7 E0 v$ h5 A
3 x* j( W9 W4 ]1 u: `! d2 }1 P
TR1=0;: u* F, g& g8 C3 T) K
  N3 L  E6 F4 m5 E5 I4 A6 a# M3 [
break;% }2 k) Z: W& o1 n1 w9 L
) _8 }( Q/ k  D% C  e, Q; S8 ?& H
相當郁悶* q4 \$ y5 ?6 T* P% p8 q
回復 支持 反對

使用道具 舉報

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

使用道具 舉報

17#
發(fā)表于 2011-5-2 23:19:30 | 只看該作者
建議將timer()函數(shù)改寫為參數(shù)傳遞機制:
6 y. J0 u5 `7 f  A' @, h& C/ Mint timer0(int par)
+ Y, H1 G8 Z: A1 T; T{7 e. _2 g  U/ o8 ?8 D  {9 Q
        switch(par)" r4 o  p' g" J3 S, d! i+ B
{2 `) P4 I: v4 s9 Q- A
case 1:9 I% u: Z) t; B, \
...
  v* c( W9 E$ J' o+ |..." p: s5 X( g& i; D8 @
case 12:  
0 H7 ~  t  e- H        PWM0_5=0 ;3 {" m) _* m4 F" @6 P" ?) A
        TH0=-(3300-PWM_Value1[5])/256;-1 i3 o4 v6 p' T1 `) i5 }1 {7 D
        TL0=-(3300-PWM_Value1[5])%256;
! U2 x* l4 I4 g+ h$ k3 K9 b        order1=0;  //為什么要在這里清零?建議刪除該行,改為在主函數(shù)中調用timer0()后,判斷如果order1==13,則=1。* U/ @% O: Y! G* A, f
        TR1=0;  //為什么要在這里清零?建議刪除該行,改為在主函數(shù)中調用timer0()后,判斷如果order1==13,則清零。: Y/ E& I( \+ y4 j
        break;;) `- S3 V; p5 H" b% u5 {7 S
}
7 h  t7 ]  t# P1 J+ Dreturn(par++); ( o  |) }6 q) ?7 H: c+ o
}/ x9 _. y6 \! H  P7 N2 X0 t/ J! K

% T/ q4 q8 f- c  ]9 X在主函數(shù)中調用timer0()的語句:
4 a3 Y3 i0 w+ ]3 ?; a4 }order1=timer0(order1);
) l# h; s: m6 T* a5 c1 lif(order1==13) {order1=1; TR1=0;}
  s$ ~# _8 s3 ^

點評

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

使用道具 舉報

18#
發(fā)表于 2011-5-3 20:07:29 | 只看該作者
看了一下你的程序,沒看明白要實現(xiàn)什么功能,感覺有點亂,switch沒這么用的。3 H/ X0 R9 A$ q4 O! w& g- ]) x
按說跳轉沒問題,如果出現(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-11-20 19:32 , Processed in 0.052936 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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