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

 找回密碼
 注冊會員

QQ登錄

只需一步,快速開始

搜索
查看: 4925|回復(fù): 17
打印 上一主題 下一主題

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

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2011-5-2 18:13:29 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  我在調(diào)試單片機(jī)程序的時候,發(fā)現(xiàn)switch語句中break不起作用,比如說本應(yīng)該從case11中結(jié)束循環(huán)的,但是發(fā)現(xiàn)沒有結(jié)束循環(huán),卻執(zhí)行了case12中的語句命令,請問各位大俠,這是何故
回復(fù)

使用道具 舉報

2#
發(fā)表于 2011-5-2 18:23:18 | 只看該作者
建議將源程序貼上來。
回復(fù) 支持 反對

使用道具 舉報

3#
 樓主| 發(fā)表于 2011-5-2 18:35:14 | 只看該作者
這是部分程序,前面的程序沒有任何問題,當(dāng)執(zhí)行
7 V! _9 K" w5 N5 K1 ~case 1:  
; k* Z9 v3 w1 p7 r" V8 C! g        PWM0_0=1;* j: u- o# s8 p4 ^
        TH0=-PWM_Value1[0]/256;2 S; A0 B$ H# O7 Z0 J4 x
        TL0=-PWM_Value1[0]%256;
/ d( w' F# Z0 ^4 \+ v5 M, ]        break;& t9 |' ?9 q0 ~1 I6 z
時,break沒有起作用,反而直接到了case 12中的這一步
5 G/ t2 b* }; Q/ ?" [TL0=-(3300-PWM_Value1[5])%256;
2 J6 F0 n$ j2 J: v  L, t, M3 s1 a6 g    order1=0;7 `, s' d9 p" ^# E( a
        TR1=0;
4 z$ ^4 U4 p. s2 j4 C: `& B        break;
+ O2 q6 t. M1 C7 ~5 X    }7 ?- q. B3 b8 V- a4 E1 y: m
order1++;
& y. A- l6 a6 n在case12中結(jié)束循環(huán)的
! @, \, H; K  I* Z/*===================================================================================$ h1 w" Z# K; W2 [
    定時器T0的中斷服務(wù)程序7 q/ U% R7 F' R" f* m
    一個循環(huán)20MS  ≈ 6*3.33ms' X3 j5 b. P2 n. R, s6 W  I
=====================================================================================*/: w* {# ]3 \5 I# b
void timer0(void) interrupt 1 using 1
# R& J' ]: L; H. P) O) |{2 V; b( W* ^* c4 Y9 f, k, I
        switch(order1)
3 v- E- @5 Y( S8 K9 _0 x{! a2 O& Q7 r( g3 M! [6 C! Q- }
case 1:  3 }. X( V7 u& G2 b
        PWM0_0=1;1 y: J+ q! R8 R9 P8 F: {: l& P
        TH0=-PWM_Value1[0]/256;
' a  ~3 H) x( ~' [: @        TL0=-PWM_Value1[0]%256;' `6 d% }& n" ]8 E4 m( \" O4 e9 r
        break;
( B* O) Y, v6 }, u5 x0 S+ Wcase 2:  & D6 K5 A& n6 {" C# @
        PWM0_0=0;       0 n8 t# O9 q: K1 k+ V
        TH0=-(3300-PWM_Value1[0])/256;. O: h3 t" G* T7 S6 ?: W3 I" J
        TL0=-(3300-PWM_Value1[0])%256;
4 i1 g8 {+ \! x. }- W5 J9 |        break;
0 ^2 q) Y, {% m8 Kcase 3:   % n4 F* H/ M( |8 ^* J" y. [
        PWM0_1=1;
" u( A4 `/ K8 e. {! A; X( o        TH0=-PWM_Value1[1]/256;
- F( I9 ^8 m; w8 j6 d. m# L        TL0=-PWM_Value1[1]%256;
- I) z: `% i$ i        break;! b( t2 u3 m7 _. g- ]6 Q* ?) V
case 4:   
6 g! N! U% v$ n8 A8 ~6 W        PWM0_1=0;
1 Z3 h- L( @/ w6 `& a0 a8 k" b        TH0=-(3300-PWM_Value1[1])/256;
5 j4 ?" s6 D' e1 x7 i/ ?        TL0=-(3300-PWM_Value1[1])%256;; v1 w% O) z6 p6 K0 x0 A4 I8 t7 K
        break;
! t  i2 I$ v) O' _case 5:   8 j3 j; C" K; @* f3 c: f1 H1 y
        PWM0_2=1;) I# \9 a" k& V
        TH0=-PWM_Value1[2]/256;
' H8 K, ]5 D9 {# ?        TL0=-PWM_Value1[2]%256;- D  z. {' e  e( W
        break;% ?/ Z( Y8 N. w9 n* m8 e
case 6:   1 \5 a* }3 n$ E5 K4 S& _6 q# m
        PWM0_2=0 ;
; K' t$ k% _% w) _- m, l: C& q        TH0=-(3300-PWM_Value1[2])/256;
" I  \4 X! _$ A! a7 @7 B7 O        TL0=-(3300-PWM_Value1[2])%256;
& M& B0 M6 j' q* V/ X# Z3 g0 ?        break;
( ?! m+ B: E: K9 q% fcase 7:  4 p$ E$ Q( Q$ W+ @. O
        PWM0_3=1;6 s$ Q2 W( e" @
        TH0=-PWM_Value1[3]/256;
3 r1 |9 T: \  ]$ K        TL0=-PWM_Value1[3]%256;0 h/ ]1 q- q& L% I: e, \- A5 D
        break;$ A2 j; E  A6 i! h1 M& ~" M; u3 B  S
case 8:  
" n0 J' a* p' m. R0 O6 G        PWM0_3=0;      
& t) h3 O  @* V# G6 M% t" _( I: l        TH0=-(3300-PWM_Value1[3])/256;
2 y" x! _! M; P1 K! k8 ^" U* \        TL0=-(3300-PWM_Value1[3])%256;
* S! N. w, D8 s6 B4 v$ [& t        break;
) B/ ?* \0 E: l5 N: {case 9:   2 w, k5 c; z: @; M& p) u9 `
        PWM0_4=1;: J: d; d: r' }% v, {1 X
        TH0=-PWM_Value1[4]/256;
8 V) w' N& C% U9 f3 [        TL0=-PWM_Value1[4]%256;
" `, ?# z9 @7 U7 _! Q% C9 Q7 g2 K( E        break;
& z4 N: i2 B! c4 B- hcase 10:   
! l; f- B" B+ b        PWM0_4=0;* {0 i. K% O5 P( H4 w5 U( f
        TH0=-(3300-PWM_Value1[4])/256;+ d+ d* Z( C# K7 B/ D7 `9 p" F  P0 ~
        TL0=-(3300-PWM_Value1[4])%256;
0 c6 Q3 q, N9 v8 V! g# e" i        break;
3 _/ t7 h& b# `! ]9 ncase 11:   
. l7 F3 e  i+ d/ `! J$ T- r  m        PWM0_5=1;5 c6 D0 l, V+ X0 p2 M% `
        TH0=-PWM_Value1[5]/256;) m6 B% F3 R/ I( ?
        TL0=-PWM_Value1[5]%256;
4 [1 H$ `; u/ P2 }6 y        break;
# U% Z% _8 m( y! {! ~: D' dcase 12:   
/ g% C1 K# w8 G) b2 l- T' L/ {' p        PWM0_5=0 ;1 k* \$ I. I9 F6 T+ P! Q4 ^
        TH0=-(3300-PWM_Value1[5])/256;
( h/ h* z; S8 w2 Y8 C        TL0=-(3300-PWM_Value1[5])%256;* Z" X7 n- t3 a, [7 U8 E  S( K: }
    order1=0;. e; s4 n7 c6 j
        TR1=0;4 P2 ^% P5 Z! m% h  m
        break;9 Z, k7 U. f3 O& Z
    }+ W% G6 ~8 J* g2 j, B
order1++;
1 o9 W- u: s, V}
回復(fù) 支持 反對

使用道具 舉報

4#
發(fā)表于 2011-5-2 18:35:43 | 只看該作者
仔細(xì)的慢慢檢查吧,有時候錯誤的地方不是你想的地方,呵呵。
回復(fù) 支持 反對

使用道具 舉報

5#
 樓主| 發(fā)表于 2011-5-2 18:37:06 | 只看該作者
回復(fù) Michael.MG 的帖子
9 [$ r2 }+ U8 n# a% P6 J4 A* O$ ~
這個實在是不明白了,才上來求教的
回復(fù) 支持 反對

使用道具 舉報

6#
 樓主| 發(fā)表于 2011-5-2 18:51:36 | 只看該作者
回復(fù) 無能 的帖子
. P) c" a# C; Y% }4 G+ e
3 `4 P' w; {; ?) E9 ~前輩,能幫忙解決一下嗎?謝謝,程序貼出來了。
回復(fù) 支持 反對

使用道具 舉報

7#
發(fā)表于 2011-5-2 20:19:19 | 只看該作者
本帖最后由 曉昀 于 2011-5-2 20:20 編輯
. t! X  U9 h0 H4 O8 Y% A# e" C2 X3 z) n+ O! C" w! S( E' h- w
單步執(zhí)行,看看執(zhí)行到break之后去執(zhí)行哪一步?; v# P! b5 P4 M' ?& j; u- P
6 N6 s1 X6 q9 h) Z" D
很久不玩這個,忘得差不多了。
+ f0 r1 `6 D" H% x9 h; ~3 L4 X) L
回復(fù) 支持 反對

使用道具 舉報

8#
發(fā)表于 2011-5-2 20:20:46 | 只看該作者
問題原因可能在于switch(order1)的order1參數(shù)是局部變量,在timer()函數(shù)里沒有被賦值,因此數(shù)值是多少是不確定的。建議函數(shù)void timer0(void)應(yīng)該使用參數(shù)傳遞機(jī)制,每次調(diào)用timer()函數(shù)時應(yīng)該將order1作為參數(shù)傳遞給該函數(shù),函數(shù)結(jié)束的時候返回order1++的大小。

點評

謝謝  發(fā)表于 2011-5-2 22:43
回復(fù) 支持 反對

使用道具 舉報

9#
發(fā)表于 2011-5-2 20:24:57 | 只看該作者
PWM是什么意思?有個問題不明白哈,如果PWM0_0,PWM0_1,PWM0_2,PWM0_3,PWM0_4,PWM0_5同時為0,執(zhí)行那個case?
回復(fù) 支持 反對

使用道具 舉報

10#
 樓主| 發(fā)表于 2011-5-2 20:32:17 | 只看該作者
回復(fù) 曉昀 的帖子" F4 K( h: S5 g
- U9 \! n/ c+ n' j7 b( _
就是單步執(zhí)行的,才知道跳到case12中去了
回復(fù) 支持 反對

使用道具 舉報

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

本版積分規(guī)則

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

GMT+8, 2024-9-27 23:24 , Processed in 0.055236 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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