亚洲欧美日韩国产一区二区精品_亚洲国产精品一区二区动图_级婬片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# w
TL0=-(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 L
case 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' O
case 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 S
case 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! W
case 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# ]( V
case 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# v
case 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, y
case 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! P
case 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" O
TR1=0;
6 ?1 u' W* p7 @7 l2 I
0 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 o
int 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 R
case 1:
5 x$ [, M, `' W6 O
...
4 H# C0 w& V* [" _4 C, \
...
1 X- e( `% W- [" y4 h1 x
case 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. s
if(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