人妻暴雨中被强制侵犯在线,亚洲国产欧美日韩精品一区二区三区,四虎影免看黄,国产无人区二卡三卡四卡不见星空

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

標(biāo)題: 單片機(jī)C語言程序問題,請教 [打印本頁]

作者: 三月的暴風(fēng)雪    時(shí)間: 2011-5-2 18:13
標(biāo)題: 單片機(jī)C語言程序問題,請教
  我在調(diào)試單片機(jī)程序的時(shí)候,發(fā)現(xiàn)switch語句中break不起作用,比如說本應(yīng)該從case11中結(jié)束循環(huán)的,但是發(fā)現(xiàn)沒有結(jié)束循環(huán),卻執(zhí)行了case12中的語句命令,請問各位大俠,這是何故
作者: 無能    時(shí)間: 2011-5-2 18:23
建議將源程序貼上來。
作者: 三月的暴風(fēng)雪    時(shí)間: 2011-5-2 18:35
這是部分程序,前面的程序沒有任何問題,當(dāng)執(zhí)行' F6 W# W/ p% e8 D# ?; q9 a' G
case 1:  * J, s+ |, U. n2 g
        PWM0_0=1;
. i- |& x' w  ]- ^) k! u% x        TH0=-PWM_Value1[0]/256;
4 b9 U2 A8 `8 n) Y8 a* y" Q        TL0=-PWM_Value1[0]%256;# i$ b; ]. w) \* N
        break;
( {. L- H' `7 @' S7 t# F( B3 [: w" i' `時(shí),break沒有起作用,反而直接到了case 12中的這一步; c4 n6 |1 x5 \7 e! k3 a0 S
TL0=-(3300-PWM_Value1[5])%256;
& N0 j1 @# L% E; F) ~    order1=0;  U4 `& V/ A/ D* f1 c
        TR1=0;* O2 y4 l# t+ \
        break;
6 A! M1 K: O; C8 ^  Z; j1 ]' t# c- ?    }
! a- H9 N, j9 M0 b# \order1++;' C9 g' H% R+ a
在case12中結(jié)束循環(huán)的& o2 U2 R2 I$ H4 o: C, I
/*===================================================================================
6 z$ G. e& ]+ k3 E( y6 u- V    定時(shí)器T0的中斷服務(wù)程序
" ~% B: @+ u  H( U5 p    一個(gè)循環(huán)20MS  ≈ 6*3.33ms
! w- ~. _0 }' \4 D=====================================================================================*/- O; E4 K0 i6 H8 R  s+ }
void timer0(void) interrupt 1 using 1
! ^& l& ^/ n; |, R& r3 ]{
. @1 Y, e7 \" k8 J/ @3 |2 R) V, q& H        switch(order1)
' R0 N( B, z$ p; o9 B9 @{+ O+ N5 B+ ~1 s; P$ i: x, f6 R
case 1:  5 j2 k7 Y% t% U+ S% |
        PWM0_0=1;4 u- {: i& ]7 e$ T9 y: }
        TH0=-PWM_Value1[0]/256;, V* w* x# \. @
        TL0=-PWM_Value1[0]%256;. I4 K( U8 R- P& P& c7 l6 r
        break;" t% B! t6 N3 e5 S5 e
case 2:  
3 ?7 w) @6 I. T* Y1 q9 }        PWM0_0=0;      
: e  P- a/ a8 R3 o4 e# y        TH0=-(3300-PWM_Value1[0])/256;, ~0 n& B. ]# E+ _
        TL0=-(3300-PWM_Value1[0])%256;, i* T4 G  B: H% p/ R" U! u
        break;* h* c1 [! f% }* Z' _& ^
case 3:   - a3 m4 k5 }* e
        PWM0_1=1;- P# {! j" M9 X! F" ?
        TH0=-PWM_Value1[1]/256;' z: P6 t( T1 f
        TL0=-PWM_Value1[1]%256;
3 N1 Y) a: i. ~; d7 P        break;1 ~6 z1 K  \: p$ u
case 4:   
8 S5 t9 p9 }; l! c3 m" k        PWM0_1=0;( k3 j; K4 Z$ |( i2 c. b& g( v
        TH0=-(3300-PWM_Value1[1])/256;
; R0 Z! G2 L, u6 |/ E) K6 r        TL0=-(3300-PWM_Value1[1])%256;9 x: c' u# q) @. U3 W0 [$ e
        break;
: c" x9 d3 S  bcase 5:   8 f, {. z/ G4 v' R8 v
        PWM0_2=1;! O8 G% J+ m( \7 z
        TH0=-PWM_Value1[2]/256;
  d. M8 C4 ?3 b" F6 [% A        TL0=-PWM_Value1[2]%256;5 T) J8 N0 _8 ?8 n) ~
        break;) P2 F2 |& f. @# z! Q5 g
case 6:   
! U* {9 Y6 Y! x  M2 ^4 }; r# j        PWM0_2=0 ;( l/ j  B8 @9 E$ l2 K. x
        TH0=-(3300-PWM_Value1[2])/256;
" ^& R+ ?- `  A$ B& Q) g        TL0=-(3300-PWM_Value1[2])%256;
; n  T/ Z; y0 L- z1 p        break;
- W: J) M- {1 }case 7:    S+ m: M, M; ~4 f/ s  N
        PWM0_3=1;
) ]2 ~. E" U5 u8 R        TH0=-PWM_Value1[3]/256;: {; b% k: d% l* E8 W
        TL0=-PWM_Value1[3]%256;
7 N- T+ x% `- Q) s; b0 {        break;4 U) x' {3 ?9 ^; y8 }; A1 t
case 8:  + @% i# ]% L0 I- ~: g* e
        PWM0_3=0;      
2 L+ `5 h# P( Z) v" O# O2 M% K        TH0=-(3300-PWM_Value1[3])/256;
* F9 L0 `6 Y* J3 Y. w        TL0=-(3300-PWM_Value1[3])%256;
9 `4 J; f( w" v; ?9 |* n        break;
- l% t; B8 g' i" o0 a: ]: {. M& gcase 9:   
4 Z, Q" ^9 k  c( E$ r! @        PWM0_4=1;+ j$ a$ i( H3 M* k0 c1 K/ Z
        TH0=-PWM_Value1[4]/256;" l8 M1 H! j+ S& q) A9 }
        TL0=-PWM_Value1[4]%256;. Q0 d  K( c5 d6 Z- x+ T
        break;
# i4 I7 U4 }" T, {/ ^* Fcase 10:   ! Z1 E9 X* r! ~* w7 k
        PWM0_4=0;  C6 M. J# D6 w' o. S
        TH0=-(3300-PWM_Value1[4])/256;
  s4 g6 o8 W0 A2 {% h        TL0=-(3300-PWM_Value1[4])%256;
/ ~9 [% `# W/ ^" A        break;8 S2 B$ T( Z' S4 [3 o1 [
case 11:   
* l8 g6 H, e  G0 H9 o; s& s/ v# `        PWM0_5=1;7 l2 r( D% U4 b
        TH0=-PWM_Value1[5]/256;
. h& o3 Q5 w) q5 G+ F$ Q9 \$ }        TL0=-PWM_Value1[5]%256;6 m2 o/ P3 E  z- {) v3 V- w6 A
        break;9 F0 D  @7 P. }8 N
case 12:   ( A" N0 q% c; I- f
        PWM0_5=0 ;
1 G: d; m7 u* l: z        TH0=-(3300-PWM_Value1[5])/256;
' M: G: u; y; B" Z7 J/ U        TL0=-(3300-PWM_Value1[5])%256;
) @3 @9 o4 `( P- e; s% I    order1=0;
: _0 _# k: J% Z" c9 P. z3 `( [        TR1=0;
, N7 _8 j# f1 k& v: i        break;* X& W# }$ m) S, A7 |9 S' C/ t1 R1 J& h
    }5 a0 j0 A( P1 \' Q
order1++;
- O1 u7 u% k& R, ?}
作者: Michael.MG    時(shí)間: 2011-5-2 18:35
仔細(xì)的慢慢檢查吧,有時(shí)候錯(cuò)誤的地方不是你想的地方,呵呵。
作者: 三月的暴風(fēng)雪    時(shí)間: 2011-5-2 18:37
回復(fù) Michael.MG 的帖子
8 K" k' A+ \5 F1 _% `
. i: l, ?8 J4 s1 y0 v這個(gè)實(shí)在是不明白了,才上來求教的
作者: 三月的暴風(fēng)雪    時(shí)間: 2011-5-2 18:51
回復(fù) 無能 的帖子) I: N; ]# q8 z* B( y) X
' k3 u4 Y5 N4 x+ e! L1 N, ]
前輩,能幫忙解決一下嗎?謝謝,程序貼出來了。
作者: 曉昀    時(shí)間: 2011-5-2 20:19
本帖最后由 曉昀 于 2011-5-2 20:20 編輯
7 y% t3 z: R: O' }0 [6 U; S! v/ [# s' ~5 ~  X8 D. J3 v% z
單步執(zhí)行,看看執(zhí)行到break之后去執(zhí)行哪一步?
% h- z+ e/ H& w+ d
! P/ T5 E2 Z( L0 d7 V: P很久不玩這個(gè),忘得差不多了。( F$ G- L& s# {

作者: metalstorm    時(shí)間: 2011-5-2 20:20
問題原因可能在于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++的大小。
作者: robi    時(shí)間: 2011-5-2 20:24
PWM是什么意思?有個(gè)問題不明白哈,如果PWM0_0,PWM0_1,PWM0_2,PWM0_3,PWM0_4,PWM0_5同時(shí)為0,執(zhí)行那個(gè)case?
作者: 三月的暴風(fēng)雪    時(shí)間: 2011-5-2 20:32
回復(fù) 曉昀 的帖子& e( q& D5 D/ X! X4 g4 v

$ F, t7 E/ ~  k* `4 d; i; u* d就是單步執(zhí)行的,才知道跳到case12中去了
作者: 三月的暴風(fēng)雪    時(shí)間: 2011-5-2 20:41
回復(fù) metalstorm 的帖子6 q8 Z/ r! H. x6 K

, X& g3 @, m: Q2 m額,不好意思,沒說清楚,在主函數(shù)中已經(jīng)給order1賦值1了
作者: 三月的暴風(fēng)雪    時(shí)間: 2011-5-2 20:43
回復(fù) robi 的帖子* |+ N7 k! b3 S( L4 \

2 v! C2 o2 P/ t; I; ^/ `額,那個(gè)是switch函數(shù),和pwm沒關(guān)系
作者: metalstorm    時(shí)間: 2011-5-2 20:52
回復(fù) 三月的暴風(fēng)雪 的帖子) ]7 o$ R. m% K$ S

4 G! Z' r4 v8 E4 ?1 i& I' E( q( lOOP編程思想一般都建議子函數(shù)使用參數(shù)傳遞機(jī)制。當(dāng)單步執(zhí)行到case12時(shí),能否通過編程軟件的調(diào)試功能查看timer()函數(shù)中的order1變量的實(shí)際值是多少?最好在order++語句前增加一個(gè)輸出語句,將order1打印出來,這個(gè)值才是千真萬確的判斷條件。如果order1不等于1,能排除不少可能因素。2 E2 @3 `* ~0 M

作者: robi    時(shí)間: 2011-5-2 21:01
回復(fù) 三月的暴風(fēng)雪 的帖子
; n0 Q2 q& C" z; j9 L
% Q" C9 p" `- u4 s               嗯~看懂了~
作者: 三月的暴風(fēng)雪    時(shí)間: 2011-5-2 21:41
回復(fù) metalstorm 的帖子
# q3 V% N* u$ r+ Y6 k5 e! `- J, y0 G
嗯,按您的方法調(diào)試了,在執(zhí)行order1++之前一直等于1,直到執(zhí)行完order1++之后,那個(gè)就是跳到TL0=-(3300-PWM_Value1[5])%256;    order1=0;
% g: c0 U! a, |$ Y# O3 E& L
4 h2 `" R5 D5 R7 w1 ]TR1=0;
9 S1 w: X8 q0 M% B2 ]5 e6 n) l) k; O% ]
break;
5 F' ^5 G( n. C6 Y  |& P& c. p0 g) i
相當(dāng)郁悶2 c3 ?: \$ I6 s. [

作者: quanxi1215    時(shí)間: 2011-5-2 22:11
不太明白,學(xué)習(xí)了,
作者: metalstorm    時(shí)間: 2011-5-2 23:19
建議將timer()函數(shù)改寫為參數(shù)傳遞機(jī)制:
1 t( ]( Q7 D0 H5 d  e1 \int timer0(int par)
4 u6 o2 H- S( t6 a2 u{# g9 E8 s9 M+ a
        switch(par)4 h. e7 G/ e" t* G$ D
{+ [/ p; ^7 I% [
case 1:
, b! v3 u+ V, q+ f2 L% \" Q...
& Y* [3 o  @" Z8 l6 s6 m+ i...
$ d5 u) J" z# M3 ccase 12:  : P1 K; e6 Q7 _9 O. j0 n6 Z: A7 _
        PWM0_5=0 ;% n7 i( k' U+ A) V" X
        TH0=-(3300-PWM_Value1[5])/256;-
8 ]4 Z) i4 R. R: }6 N  m        TL0=-(3300-PWM_Value1[5])%256;) b/ `# ?  Y8 Z! U& }5 S( s3 W9 T
        order1=0;  //為什么要在這里清零?建議刪除該行,改為在主函數(shù)中調(diào)用timer0()后,判斷如果order1==13,則=1。) W! i: ~% \; d2 f
        TR1=0;  //為什么要在這里清零?建議刪除該行,改為在主函數(shù)中調(diào)用timer0()后,判斷如果order1==13,則清零。
+ c# v8 {+ k0 s2 a* F5 o" U, H: n  C) l        break;;' {, d/ e8 Y5 v( z8 T
}
  a" Z6 q" h  C# y  W  \  ^7 _return(par++);
+ I$ x$ ?1 t7 s' \  p5 N}# D2 y9 x7 x" Y7 I& |' x

$ i& a/ O+ C  J$ D8 C2 z在主函數(shù)中調(diào)用timer0()的語句:' j0 l; Y& u) y. n5 H# v
order1=timer0(order1);
' Y' w, d8 ?% l' s5 X4 n) ^( kif(order1==13) {order1=1; TR1=0;}
. x- h0 a: g, I, m8 B* n
作者: 無能    時(shí)間: 2011-5-3 20:07
看了一下你的程序,沒看明白要實(shí)現(xiàn)什么功能,感覺有點(diǎn)亂,switch沒這么用的。
4 S4 S% m4 q' z+ O: K按說跳轉(zhuǎn)沒問題,如果出現(xiàn)異常,建議寫個(gè)測試函數(shù)test(),本函數(shù)逐個(gè)顯示所有變量的當(dāng)前值,test()加在每個(gè)break;之前。




歡迎光臨 機(jī)械社區(qū) (http://www.xa-space.com/) Powered by Discuz! X3.5