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

 找回密碼
 注冊(cè)會(huì)員

QQ登錄

只需一步,快速開始

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

單片機(jī)C語(yǔ)言程序問題,請(qǐng)教

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

使用道具 舉報(bào)

2#
發(fā)表于 2011-5-2 18:23:18 | 只看該作者
建議將源程序貼上來。
3#
 樓主| 發(fā)表于 2011-5-2 18:35:14 | 只看該作者
這是部分程序,前面的程序沒有任何問題,當(dāng)執(zhí)行
& ^9 k$ L$ T2 O$ |" B) Ecase 1:  
8 m, r$ O* a4 s7 N3 f3 N/ W8 X        PWM0_0=1;  s* b0 L5 @2 [8 d5 o& @( |
        TH0=-PWM_Value1[0]/256;
! ~/ g* m# T5 b8 D' y3 G8 {" k; B# B        TL0=-PWM_Value1[0]%256;% x$ c* I6 a0 F" p% r5 k- U% G
        break;
4 _- r" M  ]1 b" ]# _; {時(shí),break沒有起作用,反而直接到了case 12中的這一步
4 m2 Q' u  P* \8 A# \TL0=-(3300-PWM_Value1[5])%256;) }" X& c4 V4 [1 O" j8 q
    order1=0;7 V) d9 @* a8 [& B
        TR1=0;
) Y+ O" q2 J$ `9 F* C        break;+ c! _9 W8 p5 E9 a4 ^5 J1 K3 [
    }& l) t/ J1 A5 l; }( J3 P8 |
order1++;$ D( y3 G2 v4 Q) _: q: N4 U
在case12中結(jié)束循環(huán)的
* B, D6 y' Y0 ]/*===================================================================================
! [4 Q0 Q& u$ a    定時(shí)器T0的中斷服務(wù)程序
: E. u0 w" C5 Y+ C    一個(gè)循環(huán)20MS  ≈ 6*3.33ms+ P* N: O' q8 f7 }% h: s- K
=====================================================================================*/2 M: V2 n5 M1 H$ q7 ?2 `5 p; l" S6 X
void timer0(void) interrupt 1 using 1) @1 z8 ]9 q( R& J% v) O
{; T( r4 L9 h7 L6 I& \2 u
        switch(order1)
0 L* E* R3 v0 R. n{
1 [" K' D( m% G  d5 x( R4 pcase 1:  : N/ h6 R3 E' o& V9 F5 l' B6 a
        PWM0_0=1;  B$ J) A5 }* s% _
        TH0=-PWM_Value1[0]/256;
0 g- r' S9 Y) V6 ^. B& @7 ^        TL0=-PWM_Value1[0]%256;
9 n0 }) m/ Y9 f  Y9 M5 j        break;
0 I; a  Y6 V7 c7 f  c" dcase 2:  
/ J7 j7 ]2 n8 P        PWM0_0=0;      
$ T/ N8 Z4 ^/ l7 H4 a        TH0=-(3300-PWM_Value1[0])/256;' \1 B; ~0 \0 Q9 U2 o; \. Z
        TL0=-(3300-PWM_Value1[0])%256;/ W" L( o9 @+ P( A* O
        break;0 F  i3 G3 K+ Z" L8 W
case 3:   # Z4 ?. ^" |% d  @
        PWM0_1=1;
1 B- q% `8 s6 W; z1 K3 r6 t5 Z$ X        TH0=-PWM_Value1[1]/256;
0 m( W7 o( y0 W* T  o        TL0=-PWM_Value1[1]%256;
: {+ I% Q' A9 ^8 V        break;
, j2 }6 ~: {6 r. q; ]case 4:   
3 H& T3 E0 d, W& W        PWM0_1=0;5 B) N# B5 g, l3 q6 Y6 ]+ Z
        TH0=-(3300-PWM_Value1[1])/256;& Q$ M, W5 }3 d" ]( C6 w( c
        TL0=-(3300-PWM_Value1[1])%256;
1 D6 Z! E6 ~3 g1 v' T7 q        break;
% n- b% |8 \: J! g$ jcase 5:   + c% `7 n& s8 Q0 E0 p, C* k
        PWM0_2=1;! m7 d  I+ U! C. V
        TH0=-PWM_Value1[2]/256;( T8 K% p/ C* `& l" l
        TL0=-PWM_Value1[2]%256;
& {8 W: j1 B/ k& L        break;" }4 N0 {+ P, {. W  L9 B
case 6:   
* ]3 A% m7 o2 u' J8 E        PWM0_2=0 ;
: z6 m4 B; a+ Z5 B- E) y        TH0=-(3300-PWM_Value1[2])/256;
8 u2 ]$ g7 f; G/ p3 U( O' f) Z0 k2 N        TL0=-(3300-PWM_Value1[2])%256;3 g1 ?8 k1 C# C+ U
        break;8 N; ?$ ?+ t1 ^6 ]' |! S
case 7:  
* |" r3 y! J0 R4 r$ x        PWM0_3=1;8 Q/ Y9 Q. L2 ^- W" T8 P
        TH0=-PWM_Value1[3]/256;5 J, o, p9 B& [, K0 v; M
        TL0=-PWM_Value1[3]%256;
  Z( l  @0 p* L" L        break;: ?3 t0 \/ N! W
case 8:  
  |  m" e, v0 q' m        PWM0_3=0;       4 W/ G% ^" B5 W) T7 r0 V' u
        TH0=-(3300-PWM_Value1[3])/256;3 G) i0 s/ _  c
        TL0=-(3300-PWM_Value1[3])%256;
& _0 ^9 d: }: Y( g2 p$ w* Q4 ^4 W3 q        break;
, m9 {) i4 i3 d  Jcase 9:   
8 b  x" x: S* c/ Q2 p        PWM0_4=1;
+ r9 l: d$ U6 @# H3 u! I8 f+ f        TH0=-PWM_Value1[4]/256;, v1 C! Y' y5 I/ n
        TL0=-PWM_Value1[4]%256;
8 T3 c  x- o9 @% z4 K: a5 K8 v% H, C        break;- q( r0 a; z* |, R! a3 ]! n
case 10:   & q. H; h& z, A) T9 Y; x3 G
        PWM0_4=0;
, j& p" P7 D4 i' S        TH0=-(3300-PWM_Value1[4])/256;6 A( I( I( i4 K8 N
        TL0=-(3300-PWM_Value1[4])%256;
  R- }2 _, B$ h1 U8 ~, D        break;
: Z& @' i: ^  y, D& @( Y- |case 11:   
; R. [5 ?+ @2 C* c        PWM0_5=1;
; R, `1 S5 }$ T7 e9 u( f        TH0=-PWM_Value1[5]/256;1 J+ D$ n2 m: k  h
        TL0=-PWM_Value1[5]%256;
0 u' \8 p+ c- S        break;) K' [$ q5 r+ w7 F  t& Y
case 12:   + X2 `8 O0 d  q* G3 ^
        PWM0_5=0 ;
$ g" y- x  J1 s1 U8 Q7 |! N        TH0=-(3300-PWM_Value1[5])/256;
/ Y& |1 K6 z" }4 |1 e2 C        TL0=-(3300-PWM_Value1[5])%256;
" }- o- J, T8 E2 X& F- B4 z    order1=0;
2 ^* W; ^) j0 R; C$ X        TR1=0;1 O& O5 |/ B' v2 R8 S# X
        break;
6 A& R' y/ U+ \: [    }
' M! G" s  a7 Korder1++;
3 K4 D, Y% f! t6 d/ c3 {}
4#
發(fā)表于 2011-5-2 18:35:43 | 只看該作者
仔細(xì)的慢慢檢查吧,有時(shí)候錯(cuò)誤的地方不是你想的地方,呵呵。
5#
 樓主| 發(fā)表于 2011-5-2 18:37:06 | 只看該作者
回復(fù) Michael.MG 的帖子
7 M$ a. ]7 E3 Q1 }% i; {
5 z( c# O( K8 F, M" T這個(gè)實(shí)在是不明白了,才上來求教的
6#
 樓主| 發(fā)表于 2011-5-2 18:51:36 | 只看該作者
回復(fù) 無能 的帖子
* t$ f* Z1 S' C3 l6 t& n! \
. Q4 U2 r1 B0 e前輩,能幫忙解決一下嗎?謝謝,程序貼出來了。
7#
發(fā)表于 2011-5-2 20:19:19 | 只看該作者
本帖最后由 曉昀 于 2011-5-2 20:20 編輯 " A, q( s' a( k6 w/ D

0 x/ I5 w4 [6 a: t單步執(zhí)行,看看執(zhí)行到break之后去執(zhí)行哪一步?$ [& u' Y, U1 g. Y# b

- G' ^9 q5 b' o0 F* K很久不玩這個(gè),忘得差不多了。# g0 ?7 s  X% B7 W  V& g
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ù)時(shí)應(yīng)該將order1作為參數(shù)傳遞給該函數(shù),函數(shù)結(jié)束的時(shí)候返回order1++的大小。

點(diǎn)評(píng)

謝謝  發(fā)表于 2011-5-2 22:43
9#
發(fā)表于 2011-5-2 20:24:57 | 只看該作者
PWM是什么意思?有個(gè)問題不明白哈,如果PWM0_0,PWM0_1,PWM0_2,PWM0_3,PWM0_4,PWM0_5同時(shí)為0,執(zhí)行那個(gè)case?
10#
 樓主| 發(fā)表于 2011-5-2 20:32:17 | 只看該作者
回復(fù) 曉昀 的帖子' _0 d. A( d+ C. o4 [/ Y; S

/ Y6 ~- Y! x$ j就是單步執(zhí)行的,才知道跳到case12中去了

本版積分規(guī)則

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

GMT+8, 2024-11-20 17:15 , Processed in 0.054360 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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