亚洲欧美日韩国产一区二区精品_亚洲国产精品一区二区动图_级婬片A片手机免费播放_亚洲国产成人Av毛片大全,男女爱爱好爽好疼视频免费,中文日韩AV在线,无码视频免费,欧美在线观看成人高清视频,在线播放免费人成毛片,成 人 网 站 在 线 视 频A片 ,亚洲AV成人精品一区二区三区

機械社區(qū)

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

作者: 三月的暴風(fēng)雪    時間: 2011-5-2 18:13
標(biāo)題: 單片機C語言程序問題,,請教
  我在調(diào)試單片機程序的時候,,發(fā)現(xiàn)switch語句中break不起作用,,比如說本應(yīng)該從case11中結(jié)束循環(huán)的,,但是發(fā)現(xiàn)沒有結(jié)束循環(huán),,卻執(zhí)行了case12中的語句命令,,請問各位大俠,,這是何故
作者: 無能    時間: 2011-5-2 18:23
建議將源程序貼上來,。
作者: 三月的暴風(fēng)雪    時間: 2011-5-2 18:35
這是部分程序,,前面的程序沒有任何問題,當(dāng)執(zhí)行
# F+ k8 \* f0 S7 G  i# \case 1:  
4 g/ v1 V5 f! u) }- t' h; D        PWM0_0=1;' p# M$ G  B( |+ }( O
        TH0=-PWM_Value1[0]/256;
7 y8 t6 g- \) A; d        TL0=-PWM_Value1[0]%256;+ j# @2 E. |5 q0 i% [: `2 N
        break;
: {6 z1 g! l0 s% {; K時,,break沒有起作用,,反而直接到了case 12中的這一步
4 T$ b! w8 j4 J# wTL0=-(3300-PWM_Value1[5])%256;  D1 P% F# f, k5 d5 M' y; g4 l
    order1=0;8 @" O3 s; k: b# T
        TR1=0;2 X# n# C/ H0 K( T% L
        break;
  `. K# ~5 i/ r% p7 l( t    }0 G4 i; C% U$ ?' |/ A
order1++;$ x& H' ^' o" T; t' l" O
在case12中結(jié)束循環(huán)的6 ?+ K# W3 X& |) q, I8 O
/*===================================================================================- Y% S9 A  W4 s) g& z7 r, u" @8 E
    定時器T0的中斷服務(wù)程序
% U. ^3 Q1 \- x9 F+ T    一個循環(huán)20MS  ≈ 6*3.33ms
, J7 j) E3 O! X% N1 j=====================================================================================*/% x6 L8 i' W7 |3 x7 T( c  p
void timer0(void) interrupt 1 using 1
1 x- a6 X. k4 J& x- N; L{: C$ Y3 E% ~% ^; q  k/ w
        switch(order1)2 I+ ^- T1 f( u6 E/ ?; g
{
: t% {8 P$ l+ e- W1 A. {3 Lcase 1:  
, b6 b8 [9 J+ N4 u) E; l* e1 f        PWM0_0=1;; S7 b2 w) i" e% Z! I. R
        TH0=-PWM_Value1[0]/256;
, A8 s( W& V& L        TL0=-PWM_Value1[0]%256;, C$ c4 w# P3 R
        break;* g) ~5 R2 b) w& Z/ W2 K9 _% a
case 2:  
; @" e  f- b7 z2 C# b. V4 k        PWM0_0=0;       5 G" y5 a) ^' U
        TH0=-(3300-PWM_Value1[0])/256;; Q0 m, ~6 F! g  F. D
        TL0=-(3300-PWM_Value1[0])%256;
9 _7 h5 R# F! ^3 s5 N        break;
. S. G" G% S8 [( y" G' Ocase 3:     [. ~2 ~3 {+ Z' c
        PWM0_1=1;
% f6 W5 ]+ |' |3 @) M+ E        TH0=-PWM_Value1[1]/256;* b( \$ A8 G0 C8 I$ e% P5 f8 W
        TL0=-PWM_Value1[1]%256;3 c" `; P8 C" [) d7 @; \" w* t' G  |
        break;' J, e+ [; Z/ R8 T# A, t) w
case 4:   , a$ m$ w8 a$ d6 X) n9 v# I
        PWM0_1=0;  k, f  n0 @0 u! s! @' F
        TH0=-(3300-PWM_Value1[1])/256;
' z, Q0 y+ J; Y4 s; @5 ?! B6 M        TL0=-(3300-PWM_Value1[1])%256;9 _- Q/ H# V! {4 A+ I) p8 f
        break;
# W6 s# |( S4 }4 Scase 5:   
3 R9 {* |* K. x9 s4 ~2 V        PWM0_2=1;
6 l4 y0 `: z2 v, s        TH0=-PWM_Value1[2]/256;
. q' o8 {3 S* ^        TL0=-PWM_Value1[2]%256;8 c# ]) D5 J7 k
        break;
& ^8 ?/ b3 Y# i! q4 `case 6:   & W0 ^7 V  P$ s+ _6 Z- U; h  R
        PWM0_2=0 ;
: L! R5 Z$ l3 E/ Z+ k7 C+ Y        TH0=-(3300-PWM_Value1[2])/256;* n& U7 p! V; ?4 |' m# \$ R
        TL0=-(3300-PWM_Value1[2])%256;
- m' K* X: K% H+ u) N% V0 n        break;
: ^9 S) D" @' L% `9 f/ d' H! Wcase 7:  7 D3 z% D# u% Q. |
        PWM0_3=1;% q$ _7 T# Y# D* O7 ?- ~, q9 B
        TH0=-PWM_Value1[3]/256;3 S+ V1 ]  h1 T
        TL0=-PWM_Value1[3]%256;7 }4 r  _; `- D
        break;
' W; F1 j" e2 g* c5 G! s) G# ]( Vcase 8:  
: D  M& r; T: R        PWM0_3=0;      
& Z6 {: Q% V$ b$ v0 {. X        TH0=-(3300-PWM_Value1[3])/256;
2 _; y; ?; w7 ]        TL0=-(3300-PWM_Value1[3])%256;
$ O' e+ y  W7 u, o  p        break;
5 m& }# z- n% U8 ]$ b# vcase 9:   
$ ?& F' Q$ @6 `8 A- V4 V        PWM0_4=1;
  l7 a! q: ]: S8 M: P. E        TH0=-PWM_Value1[4]/256;1 {5 `, P0 a3 ^% `
        TL0=-PWM_Value1[4]%256;
- Q& V+ K, E. i+ }. Z        break;* K$ x( x. ?% v) z/ z
case 10:   
7 V6 ^- n; ]& x% X        PWM0_4=0;3 a; Y9 z* b8 W9 |
        TH0=-(3300-PWM_Value1[4])/256;: R4 C0 G) W9 k$ Z
        TL0=-(3300-PWM_Value1[4])%256;! i8 }4 b, I3 M& G. J2 d
        break;
& A2 [: W/ F: V# C; g, ycase 11:   # j1 B) Z- N. H* c1 V
        PWM0_5=1;( p4 ~$ p% a1 a* h3 T
        TH0=-PWM_Value1[5]/256;
5 j* H$ a: I8 }2 J$ p& D        TL0=-PWM_Value1[5]%256;
. i- j5 O2 H& I6 ~6 m# L9 Z        break;
! T2 x. W6 r+ r! f8 q" d! Pcase 12:   ' S7 i3 g- v% u* h$ c: k' O
        PWM0_5=0 ;  O# f2 u& g: [0 k  c" S
        TH0=-(3300-PWM_Value1[5])/256;
, y! v# ?- K% _3 O+ l3 |        TL0=-(3300-PWM_Value1[5])%256;
; [% M& G& u! r    order1=0;7 @; A& o$ t3 {$ C; s- @
        TR1=0;: J8 {$ R0 T5 f0 Q! R6 G, E
        break;
; _$ v! f# B( N8 h+ ^    }( k: S  k/ K: j: J0 ^
order1++;0 N7 F0 q% e5 G
}
作者: Michael.MG    時間: 2011-5-2 18:35
仔細(xì)的慢慢檢查吧,有時候錯誤的地方不是你想的地方,,呵呵,。
作者: 三月的暴風(fēng)雪    時間: 2011-5-2 18:37
回復(fù) Michael.MG 的帖子+ B! M6 M- j# l) H9 A8 g

& k( s' S# g6 \這個實在是不明白了,才上來求教的
作者: 三月的暴風(fēng)雪    時間: 2011-5-2 18:51
回復(fù) 無能 的帖子4 b$ Z- q. S1 X! F0 E

8 H9 w! o3 ?5 f# o/ x, h8 @前輩,,能幫忙解決一下嗎,?謝謝,程序貼出來了,。
作者: 曉昀    時間: 2011-5-2 20:19
本帖最后由 曉昀 于 2011-5-2 20:20 編輯
1 `2 a! F/ B1 L; g/ l) H, w8 J" X* x
單步執(zhí)行,,看看執(zhí)行到break之后去執(zhí)行哪一步?
4 e$ V$ w# t/ X: G$ {* n
0 P% M6 X% X: ~8 [/ k' V& g很久不玩這個,,忘得差不多了,。
- g3 q! i1 c2 s* {8 M, }: u! I6 h
作者: metalstorm    時間: 2011-5-2 20:20
問題原因可能在于switch(order1)的order1參數(shù)是局部變量,在timer()函數(shù)里沒有被賦值,,因此數(shù)值是多少是不確定的,。建議函數(shù)void timer0(void)應(yīng)該使用參數(shù)傳遞機制,每次調(diào)用timer()函數(shù)時應(yīng)該將order1作為參數(shù)傳遞給該函數(shù),,函數(shù)結(jié)束的時候返回order1++的大小,。
作者: robi    時間: 2011-5-2 20:24
PWM是什么意思?有個問題不明白哈,,如果PWM0_0,,PWM0_1,PWM0_2,,PWM0_3,,PWM0_4,PWM0_5同時為0,執(zhí)行那個case?
作者: 三月的暴風(fēng)雪    時間: 2011-5-2 20:32
回復(fù) 曉昀 的帖子
& v5 k5 m7 `9 G! X
, ^/ w3 T- N  p& ]" m8 O7 `就是單步執(zhí)行的,,才知道跳到case12中去了
作者: 三月的暴風(fēng)雪    時間: 2011-5-2 20:41
回復(fù) metalstorm 的帖子( L6 w5 f8 j. |5 J/ j$ Z
( b7 ^, b6 @8 {8 m, [( T$ k% L
額,,不好意思,沒說清楚,,在主函數(shù)中已經(jīng)給order1賦值1了
作者: 三月的暴風(fēng)雪    時間: 2011-5-2 20:43
回復(fù) robi 的帖子9 N$ Q" n, ^9 z

) V0 |2 Z1 F& I額,,那個是switch函數(shù),和pwm沒關(guān)系
作者: metalstorm    時間: 2011-5-2 20:52
回復(fù) 三月的暴風(fēng)雪 的帖子3 _# i- n) J; Z. M
. N; R# `( E' g9 j2 |; F) x
OOP編程思想一般都建議子函數(shù)使用參數(shù)傳遞機制,。當(dāng)單步執(zhí)行到case12時,,能否通過編程軟件的調(diào)試功能查看timer()函數(shù)中的order1變量的實際值是多少?最好在order++語句前增加一個輸出語句,,將order1打印出來,,這個值才是千真萬確的判斷條件。如果order1不等于1,,能排除不少可能因素,。9 j3 R; v2 [1 A

作者: robi    時間: 2011-5-2 21:01
回復(fù) 三月的暴風(fēng)雪 的帖子
$ e3 R- [# C9 m6 R- t$ e, n1 L! Z* H* ]# H5 J% ^- F9 Q
               嗯~看懂了~
作者: 三月的暴風(fēng)雪    時間: 2011-5-2 21:41
回復(fù) metalstorm 的帖子
, z- x& {) S  X+ }' Z! ^* [$ C
1 i2 f# {+ K* x+ T嗯,按您的方法調(diào)試了,,在執(zhí)行order1++之前一直等于1,,直到執(zhí)行完order1++之后,那個就是跳到TL0=-(3300-PWM_Value1[5])%256;    order1=0;2 x# F! Z6 J9 _5 \, h

5 L! ^% [8 u; J  ^( D" OTR1=0;
6 ?1 u' W* p7 @7 l2 I0 u# ?; [4 W3 P
break;
: y) @4 I; I0 \! N  R9 T, y! D7 v5 Q7 {2 b: M
相當(dāng)郁悶% ~2 @) `7 j7 A! d5 V3 w& x3 ]* P9 j* h

作者: quanxi1215    時間: 2011-5-2 22:11
不太明白,,學(xué)習(xí)了,,
作者: metalstorm    時間: 2011-5-2 23:19
建議將timer()函數(shù)改寫為參數(shù)傳遞機制:
0 i. w! X% i6 oint timer0(int par)2 W1 @( C& |2 r& D4 H3 V, ?# Z
{
, K3 S/ q3 e% o. X        switch(par)! I4 r: @: d  ?: Q
{
, r/ `* |' l8 Rcase 1:5 x$ [, M, `' W6 O
...4 H# C0 w& V* [" _4 C, \
...
1 X- e( `% W- [" y4 h1 xcase 12:  6 o3 ], ^( c9 o# w$ P, n% v: h
        PWM0_5=0 ;; L! J: h+ N2 Q2 g8 t. D: D& z
        TH0=-(3300-PWM_Value1[5])/256;-( z* E6 M1 {+ ]# B9 S& C" W
        TL0=-(3300-PWM_Value1[5])%256;
+ }' @" w' v* r) ]4 j: P+ g        order1=0;  //為什么要在這里清零?建議刪除該行,,改為在主函數(shù)中調(diào)用timer0()后,,判斷如果order1==13,則=1,。
- Y" O3 w. I* T2 [5 W% E# c        TR1=0;  //為什么要在這里清零,?建議刪除該行,改為在主函數(shù)中調(diào)用timer0()后,,判斷如果order1==13,,則清零。
9 e- n  e$ \  C, L: U        break;;
# G4 Z( L6 x4 u' c0 u4 A}5 l) J. d% h5 b) f& [0 S
return(par++);
: p* t( j: m8 z' I$ f# [% \& |7 U}
5 L. U( @3 |' O) R, y+ Q2 b" {0 E+ y: m$ I" k* s
在主函數(shù)中調(diào)用timer0()的語句:: g9 U" C. O$ o( [
order1=timer0(order1),;
! R# Y7 y1 [5 B$ i. sif(order1==13) {order1=1; TR1=0;}
5 i( ~( N/ X- n" w5 D
作者: 無能    時間: 2011-5-3 20:07
看了一下你的程序,,沒看明白要實現(xiàn)什么功能,感覺有點亂,,switch沒這么用的,。
: D" `& N5 w9 x5 O+ [; P- K6 O按說跳轉(zhuǎn)沒問題,如果出現(xiàn)異常,,建議寫個測試函數(shù)test(),本函數(shù)逐個顯示所有變量的當(dāng)前值,test()加在每個break;之前,。




歡迎光臨 機械社區(qū) (http://giwivy.com.cn/) Powered by Discuz! X3.4