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

 找回密碼
 注冊會員

QQ登錄

只需一步,快速開始

搜索
查看: 5433|回復: 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 | 只看該作者
這是部分程序,前面的程序沒有任何問題,當執行
9 C7 `8 g" w. M  Z; f/ Ecase 1:  . H4 v- q# g* G+ i3 Z, Q
        PWM0_0=1;
' C: G% R4 G6 m9 z        TH0=-PWM_Value1[0]/256;
# B) f% l4 d  u1 V; E$ h        TL0=-PWM_Value1[0]%256;( _& e- I, \# p: K% s7 J
        break;
5 @) n# x3 ]& |/ f# L. q時,break沒有起作用,反而直接到了case 12中的這一步
& k" i% u4 o3 |/ V) h2 u' |TL0=-(3300-PWM_Value1[5])%256;
) Z: L, d! l1 k" Q: D+ {5 q+ F: [    order1=0;& m& G- [4 E( B, o
        TR1=0;
& q% X, s& ~0 D5 Z$ P2 n9 S        break;2 C1 [; l  \! \8 ~$ s
    }
5 q$ l8 @$ U5 f, Sorder1++;
4 P  m# Y2 g5 z在case12中結束循環的; W6 X) s* F8 n+ ]* r
/*===================================================================================
4 r# P/ \) J! a7 n" I+ |9 ^    定時器T0的中斷服務程序
) S! ?4 k5 ]3 Y2 O  h7 b    一個循環20MS  ≈ 6*3.33ms
2 V, C" i' b0 @=====================================================================================*/
6 E$ q" O% `! ?, uvoid timer0(void) interrupt 1 using 1" l2 R6 ?! P5 E; h$ E% ]
{, K0 b" p7 e' N  g) v/ c* k# @
        switch(order1)
. Y7 O& J" {8 V{
( G: y0 n0 c! p- Ecase 1:  
$ X) j, y/ Q  p        PWM0_0=1;0 X6 R9 t' n1 P4 M& Q1 \% U
        TH0=-PWM_Value1[0]/256;: g3 }& {9 L; _- I& T2 @5 w
        TL0=-PWM_Value1[0]%256;; b) o$ Q5 c3 g( J6 w
        break;2 ]& ^. [9 r( Z  ~7 Q5 C( H# S
case 2:  ; o& h, r1 |3 X  M+ y
        PWM0_0=0;       . ^( J6 K& W# y4 X
        TH0=-(3300-PWM_Value1[0])/256;  {5 G& ?4 K! L
        TL0=-(3300-PWM_Value1[0])%256;
# M$ h% p: ~( P4 X; d  _        break;
8 W& k. _1 s& [1 y' [! D, z; Jcase 3:   6 u/ [8 q; p* [. n' t  x; ?4 `* s7 C' i
        PWM0_1=1;
5 [9 ~; V: V1 B' p& Y8 O        TH0=-PWM_Value1[1]/256;1 @2 N1 E+ m8 Y! J
        TL0=-PWM_Value1[1]%256;$ e& `# I1 g1 Z/ d1 h
        break;& m; j: F5 L, v4 X/ i; w5 Z' v, Y. k
case 4:   4 o0 A0 O2 A0 _0 y9 e* `( c- j% a
        PWM0_1=0;9 t& I7 i* l; C
        TH0=-(3300-PWM_Value1[1])/256;
7 t$ x2 p7 M: H$ s. F        TL0=-(3300-PWM_Value1[1])%256;' g" ]3 @1 N8 f/ j2 @+ `8 Y
        break;
( w0 Q; \6 ?# ]0 a" y8 T# _7 ~5 ?case 5:   $ X" a9 E7 Z2 D
        PWM0_2=1;
5 a4 c' J5 k3 K' ^, `8 A8 n        TH0=-PWM_Value1[2]/256;- f  c7 {3 Y4 r3 V8 q' F) L4 V
        TL0=-PWM_Value1[2]%256;0 ~, y; l5 k* |& q- Q# i/ a
        break;' {# i/ l8 ]# Q5 P
case 6:   
" ]0 D4 G- _4 z* m/ n5 U        PWM0_2=0 ;1 G# c5 A5 N7 X# b8 E! J4 h* ~" S2 [
        TH0=-(3300-PWM_Value1[2])/256;" q1 S# A% r! ?8 r" Q9 \/ ?- x4 i$ T
        TL0=-(3300-PWM_Value1[2])%256;7 ]/ _4 Z( i( j. x
        break;9 [! A8 X$ W+ i) C8 ^8 F- e! r
case 7:  3 b5 {  g' C' U0 p! I
        PWM0_3=1;' l1 A4 {( I0 J$ t0 C
        TH0=-PWM_Value1[3]/256;1 q6 R5 y6 H+ I/ l0 d
        TL0=-PWM_Value1[3]%256;3 \7 r5 E- a- o- b, B
        break;
# e# t( B% E$ H& M( y. w) a& ]case 8:  ; h% j4 i8 {& k/ N4 ]
        PWM0_3=0;      
' t' Q( [, k  a8 R% v2 F' [1 B; t$ X        TH0=-(3300-PWM_Value1[3])/256;
7 a+ I: c0 i' X1 H7 y/ t) ^0 ^' t        TL0=-(3300-PWM_Value1[3])%256;
! K" S; d2 x8 D% X9 V        break;
/ U  u0 I0 w+ }5 T* c0 _; ucase 9:   ) m# T) K; f/ I
        PWM0_4=1;, W" j' r9 I( T/ e" ~1 [
        TH0=-PWM_Value1[4]/256;
3 n' [8 S4 ]: t  M1 i        TL0=-PWM_Value1[4]%256;
- m# ~) R1 `+ Q* i        break;
  V% L; Q) Z8 k4 F1 `case 10:   
/ G; h/ b: U- W- P" A4 K        PWM0_4=0;
1 V  W, _7 I0 Q0 _9 i) h2 V& [4 m        TH0=-(3300-PWM_Value1[4])/256;) B8 Z; w) K8 U0 [6 `2 X
        TL0=-(3300-PWM_Value1[4])%256;1 \/ `) ~+ i. N9 A6 t8 f" d' S2 |* a
        break;# S, f- {* a2 y7 D
case 11:   
# P$ \" ?/ l4 T( q  s        PWM0_5=1;
0 n. K# \" ^& Y5 p  j% g" d/ I/ L+ ^- c        TH0=-PWM_Value1[5]/256;
: A5 H. D+ M$ y9 M        TL0=-PWM_Value1[5]%256;
/ e, [4 ]% x: e0 `        break;& N! |3 x# C8 o4 L/ S
case 12:   
, J0 D$ |6 {/ d4 C) O4 U        PWM0_5=0 ;
7 k0 x4 r/ U4 \1 o        TH0=-(3300-PWM_Value1[5])/256;
+ ^' r3 r3 N# v# ]9 X. ~+ z        TL0=-(3300-PWM_Value1[5])%256;" u: {0 J  Y/ A3 v
    order1=0;
, p. Q# E. Y3 [% R; w  E        TR1=0;, b& h0 |  Q" m  O7 a
        break;
. J" U/ @, @' S" E, f  `8 w    }$ v" I4 d# V5 a. w: \5 K3 z5 {* A
order1++;9 Y9 h# t& D& O: W( B& t+ a
}
4#
發表于 2011-5-2 18:35:43 | 只看該作者
仔細的慢慢檢查吧,有時候錯誤的地方不是你想的地方,呵呵。
5#
 樓主| 發表于 2011-5-2 18:37:06 | 只看該作者
回復 Michael.MG 的帖子
4 {* s" s9 e) K, O3 d2 y- T) p7 l3 b2 ^1 E3 s; h
這個實在是不明白了,才上來求教的
6#
 樓主| 發表于 2011-5-2 18:51:36 | 只看該作者
回復 無能 的帖子
6 r' x! E0 S7 T1 u) o8 R3 U, h" t* q, f: ~2 E; \8 w
前輩,能幫忙解決一下嗎?謝謝,程序貼出來了。
7#
發表于 2011-5-2 20:19:19 | 只看該作者
本帖最后由 曉昀 于 2011-5-2 20:20 編輯 , d+ s% e8 P" _1 w

8 ~) d0 |5 ]3 Y( u) L單步執行,看看執行到break之后去執行哪一步?2 Q! J. L0 m+ |( D% H/ A* I* e

1 |3 G" \  e7 ~0 t# }3 z很久不玩這個,忘得差不多了。
- u7 _  b/ [% w+ n% V/ j3 K
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 | 只看該作者
回復 曉昀 的帖子! Q  s8 W' V0 S4 l; E/ U% {
, C1 o/ I: ]  h4 ^! L$ V: c$ u
就是單步執行的,才知道跳到case12中去了
您需要登錄后才可以回帖 登錄 | 注冊會員

本版積分規則

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

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

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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