久久久国产一区二区_国产精品av电影_日韩精品中文字幕一区二区三区_精品一区二区三区免费毛片爱

 找回密碼
 注冊會員

QQ登錄

只需一步,快速開始

搜索
查看: 5434|回復: 17

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

[復制鏈接]
1#
發表于 2011-5-2 18:13:29 | 只看該作者 |倒序瀏覽 |閱讀模式
  我在調試單片機程序的時候,發現switch語句中break不起作用,比如說本應該從case11中結束循環的,但是發現沒有結束循環,卻執行了case12中的語句命令,請問各位大俠,這是何故
回復

使用道具 舉報

2#
發表于 2011-5-2 18:23:18 | 只看該作者
建議將源程序貼上來。
3#
 樓主| 發表于 2011-5-2 18:35:14 | 只看該作者
這是部分程序,前面的程序沒有任何問題,當執行
( X, S! T! f5 [9 s8 w9 F5 V, rcase 1:  * s/ x  _$ Q7 Y
        PWM0_0=1;
. G, g7 D8 Z" p- f9 L' Z) K        TH0=-PWM_Value1[0]/256;6 |" i( ?* D& A* @. z
        TL0=-PWM_Value1[0]%256;
, L) d( e# b1 Y0 `: g9 f        break;
/ y  C0 k9 x4 o7 F% t# u4 F, p' p時,break沒有起作用,反而直接到了case 12中的這一步5 q, l3 r0 k5 v6 b; b$ l5 p
TL0=-(3300-PWM_Value1[5])%256;: }4 O5 R4 v5 w0 }7 ~
    order1=0;9 O- O3 }* B) f# u$ m
        TR1=0;' L3 ?9 V- K9 }/ q5 g+ v3 M4 k
        break;
6 a+ n4 y* P! O# e$ @, b: Y    }
, y! e% I: G$ V% @" u8 jorder1++;2 |% a5 P4 ^/ m( _- [; i
在case12中結束循環的
3 o7 ^+ j2 h$ I! j4 ?8 P6 a/*===================================================================================6 i$ F: ^  b# r' K
    定時器T0的中斷服務程序
; q6 f2 h" I3 ?. A7 |0 d/ C& i    一個循環20MS  ≈ 6*3.33ms
! |8 `* a7 }- z  K6 q9 A( Q6 Q=====================================================================================*/# w( a* L/ n' e1 U; X) R
void timer0(void) interrupt 1 using 1
0 R) \- R/ j( [# W/ _  Y& c{
! H$ J! L7 V9 V+ c$ K" S+ e" ]        switch(order1)
* p3 y5 P+ _& u& `/ Q{7 V/ ]4 k  ?* B7 c; M
case 1:  
' a2 j2 K3 g7 Q        PWM0_0=1;
1 ^) E. [& ^& T, D# J        TH0=-PWM_Value1[0]/256;
8 x6 i: Q7 Y; D; r* I( q% U+ W        TL0=-PWM_Value1[0]%256;# a2 n/ P: D7 e; T& D
        break;, l4 e% \- [$ J4 g
case 2:  1 G! b3 n7 F& d$ ]2 ~, _+ L
        PWM0_0=0;       % y+ R6 L5 ?5 N
        TH0=-(3300-PWM_Value1[0])/256;( y, F, X) H7 a& b( [, N
        TL0=-(3300-PWM_Value1[0])%256;
+ \: r  M( e" N: @$ `. e2 m: z6 [        break;
, T9 b! ^7 R$ J) jcase 3:   
, J4 M) T1 H$ o7 A: _        PWM0_1=1;  i8 r2 t& S8 F" b4 c* s
        TH0=-PWM_Value1[1]/256;8 K  P) f3 [5 {& c* T0 e! j5 n
        TL0=-PWM_Value1[1]%256;
1 a0 |* p& x/ k- {9 `, J; n' c        break;3 V& r7 p7 [0 r6 @: h& B7 M0 C
case 4:   ' a) g  R; ^: b1 S
        PWM0_1=0;
  \* ^1 o. b* C/ u9 T        TH0=-(3300-PWM_Value1[1])/256;2 w5 k, j  y5 v4 g" \! R
        TL0=-(3300-PWM_Value1[1])%256;/ X5 \" G' a3 C0 l1 x
        break;
- }; d" E$ ~3 @% b) Ocase 5:   
! F& Y: C. |* J$ ~8 T. h        PWM0_2=1;8 l. J8 y$ Y1 s
        TH0=-PWM_Value1[2]/256;0 p6 i, t9 Y  s; P* P4 R# ]
        TL0=-PWM_Value1[2]%256;
; M* M; T: i  Q" q4 C0 W7 k2 F/ g: r        break;& D+ Q$ J) j, A7 x* j. T0 L7 c! J
case 6:   7 o3 H; `) y" L# P: z* E3 T
        PWM0_2=0 ;
. o  P9 R) t% F$ R4 u( v        TH0=-(3300-PWM_Value1[2])/256;
0 W) \, l* B7 l        TL0=-(3300-PWM_Value1[2])%256;
$ k0 g  k, H9 R        break;& t' a% i3 j/ S9 i7 @9 A2 P
case 7:  + {7 H  J+ K. K" ?" Q$ E3 H9 o
        PWM0_3=1;
, R7 j5 d9 H  L9 x( w        TH0=-PWM_Value1[3]/256;/ `! F% W. a  y9 E
        TL0=-PWM_Value1[3]%256;
0 y5 l. A2 V" Y8 s5 h        break;
; r1 x# q9 l/ ?* J# _case 8:  
" p( L9 x+ a, A3 S        PWM0_3=0;      
( j; U$ b1 m+ ~* S6 _" N        TH0=-(3300-PWM_Value1[3])/256;7 X! u% V+ s. y  q. T- C& I
        TL0=-(3300-PWM_Value1[3])%256;
5 W/ u: Y0 ?: O# z! u" c% D        break;
/ V$ h9 O5 e! y& K- Vcase 9:   
: Q, O" V4 |' ~        PWM0_4=1;& M* }2 e8 _5 J. ]: C
        TH0=-PWM_Value1[4]/256;+ Q( V3 p) t$ n1 W. j
        TL0=-PWM_Value1[4]%256;
" e- i) a! c* t6 v8 J        break;
* v1 n4 W- o3 s% ~$ Z$ m; j# rcase 10:   
* s" Y- s2 |3 O5 p% U! U3 L        PWM0_4=0;
! I/ G. ^4 D, j        TH0=-(3300-PWM_Value1[4])/256;
8 _2 I; t* f3 [- E$ L: S  m6 B$ i* ^        TL0=-(3300-PWM_Value1[4])%256;
! J/ k( k  z& s* G        break;
) v  l) w. u/ J* F0 P, xcase 11:   ! V3 h+ Y- A1 G$ i, ^9 g, Y% C
        PWM0_5=1;/ E3 J+ X! M- ]" P) Y7 t
        TH0=-PWM_Value1[5]/256;
: E. c; [. e2 D& o        TL0=-PWM_Value1[5]%256;7 \+ F4 t+ O  L0 L, u
        break;1 Z0 T, H6 X! T9 E
case 12:   
; q6 c- q/ M. r6 j" W% e        PWM0_5=0 ;$ P& |0 S2 Y+ o5 H$ B
        TH0=-(3300-PWM_Value1[5])/256;
- A1 ~; g) [7 f0 W2 p1 {        TL0=-(3300-PWM_Value1[5])%256;2 _& A1 \: D- X4 a! ]
    order1=0;
7 G- V3 |% s9 ?        TR1=0;
6 f, E& K1 ~5 ]7 j9 v        break;
: s; j' C/ K. @" @- ]5 k8 Y- y* @    }
+ y5 f& ~6 _* O  M% lorder1++;
) S/ H7 h- s7 U, K& G( V}
4#
發表于 2011-5-2 18:35:43 | 只看該作者
仔細的慢慢檢查吧,有時候錯誤的地方不是你想的地方,呵呵。
5#
 樓主| 發表于 2011-5-2 18:37:06 | 只看該作者
回復 Michael.MG 的帖子
' ~" ~+ b0 n5 w. o% m% d- n' y, Y! ^2 _  V4 P0 p. r; l
這個實在是不明白了,才上來求教的
6#
 樓主| 發表于 2011-5-2 18:51:36 | 只看該作者
回復 無能 的帖子
' T1 w; m6 `$ \# l/ j
" Q( L# R/ [9 r6 b4 d8 M9 M7 t前輩,能幫忙解決一下嗎?謝謝,程序貼出來了。
7#
發表于 2011-5-2 20:19:19 | 只看該作者
本帖最后由 曉昀 于 2011-5-2 20:20 編輯
, Z5 Y) f$ u1 I# |/ t$ {* M; @/ g5 `/ R/ v, S9 O4 Y
單步執行,看看執行到break之后去執行哪一步?7 y. w2 _% w& L; B# J& E) k" T
# ]2 i- ^; k) [, i9 a' t% T. e6 u3 y
很久不玩這個,忘得差不多了。* O, c  h0 y% u, H+ p9 L4 ~
8#
發表于 2011-5-2 20:20:46 | 只看該作者
問題原因可能在于switch(order1)的order1參數是局部變量,在timer()函數里沒有被賦值,因此數值是多少是不確定的。建議函數void timer0(void)應該使用參數傳遞機制,每次調用timer()函數時應該將order1作為參數傳遞給該函數,函數結束的時候返回order1++的大小。

點評

謝謝  發表于 2011-5-2 22:43
9#
發表于 2011-5-2 20:24:57 | 只看該作者
PWM是什么意思?有個問題不明白哈,如果PWM0_0,PWM0_1,PWM0_2,PWM0_3,PWM0_4,PWM0_5同時為0,執行那個case?
10#
 樓主| 發表于 2011-5-2 20:32:17 | 只看該作者
回復 曉昀 的帖子, @8 N# T0 u: Q' A% S7 x+ z1 W

" D% F4 U! i  O1 t7 q就是單步執行的,才知道跳到case12中去了
您需要登錄后才可以回帖 登錄 | 注冊會員

本版積分規則

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

GMT+8, 2025-7-17 03:14 , Processed in 0.083283 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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