|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
小弟是做FPGA/CPLD和一些简单硬件设计的,这两天逼于要写一个单片机程序(没办法,谁知道公司人少!)...可是,委实不会啊!!折腾了半天,参考了不少书籍,好不容易码出了一段~但是调试它愣是没反应!!时间又紧,小弟实在是没办法,只好上论坛来求救~~还望大侠们指点迷津~6 \ A0 Z4 n( p& H3 r5 j
& N0 S0 c4 v) F) ?/ L) Q 要到达的功能: 80C2051单片机的中断源外接两个按键——当按下键1时把11AA通过串口发送到另一个单片机上;当按下键2时把1199通过串口发送到另一个单片机上...无按键时候等待操作!!# C3 ]: M2 U4 w3 g. e
程序见下:
6 `) ]9 j/ [% A nei_in EQU P p! t% Q, f3 v5 m$ \4 _
wai_in EQU P1 {) h6 O( k4 C, ^& T
nei_show EQU P1.3
0 N$ S0 g0 k9 O J% U+ N wai_show EQU P1.4
) Z2 W9 J, n. _ G/ {/ n send EQU P1.2
$ M# }( X2 w% E' n& y @6 c;-----------------------------------------------------------------------------------------------' ?1 G6 Y0 l5 E4 c* m
ORG 0000H
$ t5 Q* f; ~* k7 _' ? AJMP main ;跳转至主程序* Q4 @. ?1 @: Z
ORG 0003H
7 S: S! ?- x& m! T5 i. R% c5 F. m LJMP f_0 ;转到外部中断0
: J! j8 Q. K' S& d0 z ORG 0013H
5 p2 L& j V( n LJMP f_1 ;转到外部中断1
$ t8 y2 |2 i( N; k" s4 l$ B5 d2 K ORG 0023H
; y+ R# U& S# n/ Q; U+ Z2 m LJMP serv ;串口中断1 @. e" T8 k4 b2 m* v
;-----------------------------------------------------------------------------------------------
3 e+ Y, p2 ~, K5 b/ U6 e;主程序
5 s/ `4 x% m; s;----------------------------------------------------------------------------------------------- 5 l4 B o7 v; c$ R3 T
ORG 0030H ;主程序开始地址
: K0 @3 o# P. Bmain: LCALL initRS232 ;串口初始化) ]% B3 z% s2 O- O5 f
LCALL init ;中断初始化3 r( r2 ?2 |! ~1 F% U3 ~
CLR send1 \! u( ~% E8 H e; M
SJMP $ ;等待操作
) S6 p* E; r7 R;-----------------------------------------------------------------------------------------------2 S3 I) e" S3 X2 o5 X' U9 { y
;外部中断0操作7 ~" }" \* }% y2 ?1 w
;-----------------------------------------------------------------------------------------------
& |2 _7 @" Q [8 R5 C5 D2 D2 n) Jf_0: PUSH PSW ;保护现场1 B$ B) d0 F& E3 l) o
PUSH ACC
8 O& n/ [2 \ C/ |4 z. A1 h; q NOP ;延时等待响应
4 g- h P# P& J# Q NOP ' t$ v0 A- I$ D, c) W* i9 Q w: ^
SETB wai_show ;关闭中断1操作指示灯
: v5 H0 Q. Z4 `) \ k0 `! n0 c NOP: v6 [ t8 ]2 I8 J
MOV A,#11H ;把55H送到累加器
, l& Q- I# k( T) e* C MOV SBUF,A ;送到缓冲区, S8 w K& q) `3 l
JNB TI,$ ;等待发送完成6 t. \1 o5 }# E4 S( s
CLR TI ;允许再发送
4 |% q* N) Y" a3 ? MOV A,#0AAH ;把AAH送到累加器4 w( j) b6 |0 ?& ~9 E
MOV SBUF,A ;送到缓冲区7 K5 p1 e) f* b$ p1 l$ i) \
JNB TI,$ ;等待发送完成
$ Z( M9 a9 Q, t d" G% M CLR TI ;允许再发送 O+ v9 Z7 t' V, M
NOP 6 r. {' D4 |+ L; v) P' X
NOP ' M, E+ F: b9 V8 S! g/ {
CLR nei_show ;点亮中断0操作指示灯
1 E8 \9 n; w8 A4 u SETB send ;发送操作已完成标示. R' S6 p7 \+ m- B
POP ACC
- B \5 a Z6 G; f5 ^( x POP PSW, q" C& M0 E; W% s1 ~
RETI ' A; I0 H* K/ u4 G
;-----------------------------------------------------------------------------------------------7 j! I' v* O4 v2 k
;外部中断1操作
; }+ ]$ U6 l: a: d, ^3 y;----------------------------------------------------------------------------------------------- * o: F2 B7 e# D! D' c
f_1: PUSH PSW ;保护现场
6 k- n( p3 Q0 w4 k7 q" f PUSH ACC( f2 f D ]: P# J& i
NOP ;延时等待响应3 d* H' J* X( Z$ L: Z
NOP
8 [7 g* f' Q5 X3 | SETB nei_show ;关闭中断0操作指示灯
) P- c0 S9 E3 @ NOP$ Y7 K( _8 k/ I6 K4 k. a, `5 }
MOV A,#11H ;把55H送到累加器( Z6 w) X+ n2 l0 g
MOV SBUF,A ;送到缓冲区
9 i) ~& h" r; ~, e( k6 J JNB TI,$ ;等待发送完成
% ]. H- P! z0 S; `: M4 ] CLR TI ;允许再发送
- n7 v# i1 ?1 U( h" t MOV A,#99H ;把99H送到累加器
5 _4 Q8 c7 F% _ MOV SBUF,A ;送到缓冲区
, E. c- r/ K4 }5 D- B4 } JNB TI,$ ;等待发送完成
0 ]" l% }5 u9 V) l8 h, j CLR TI ;允许再发送
$ u* f# K; ~- T" a* e2 Z NOP ( I% F5 [) s, u+ v5 W
NOP 6 g, w# o+ Y4 i( i
CLR wai_show ;点亮中断1操作指示灯
6 e2 Y( k$ e; n5 z3 ]7 l9 v7 ^6 C SETB send ;发送操作已完成标示
' l! R3 S; v) x! i$ u0 H POP ACC2 k# J6 a& Y! x9 [
POP PSW+ Q6 r- ]+ g# ?* H' A
RETI ! l+ J& j; _; s0 z& i2 e: V5 l
;-----------------------------------------------------------------------------------------------! b0 d8 L1 `* C: H
;串口中断子程序5 v( |8 t1 J/ N ?. c
;-----------------------------------------------------------------------------------------------
4 r' J1 ]% P% T$ I' dserv: PUSH PSW6 S, Y" [' p' `& f' T; d4 H3 ?6 M
PUSH ACC( u/ L- P. D6 v' Y8 v. u( V
NOP
" {: T, W, ?2 W6 a- D* D* F" F CLR RI
8 X4 T5 H5 K6 ] V" k/ X MOV A,SBUF
0 A3 T! ^8 Y" V9 L& U MOV R0,A
5 i. v$ E; x8 e9 p! N8 r- y CJNE A,#11H,NEXT16 K9 W3 k6 R9 ^3 c7 M2 J' y8 W0 a
MOV A,R0
* `0 r8 _+ [& M% Q4 V. yNEXT1: CJNE A,#0AAH,NEXT2) F3 u7 E) O9 C' q4 A
CLR nei_show: _6 y {" z& g6 F6 i, P; F5 ~0 i( I
NEXT2: CJNE A,#99H,NEXT3
7 n6 l8 ^# l) t4 ^" ]. b0 e CLR wai_show
8 g( K* F0 T. X; nNEXT3: POP ACC o: E2 p' o# f1 T5 W' A- B
POP PSW
4 J9 s5 l- T& Z/ C: y% r1 F RETI+ U3 D/ y0 q4 ~ {9 |
;-----------------------------------------------------------------------------------------------
% o+ @, `: }8 {2 U" W' |% k;延时10ms子程序
h. A" N+ }" B: P;-----------------------------------------------------------------------------------------------
6 n7 S7 j7 P7 q; s3 `" Qdel10: MOV R7,#40
& N. O: H2 C+ Z( t) P& ` m5 v. Fdel1: MOV R6,#123
4 }: _! x, @' f NOP
9 U1 a* J$ S, jdel2: DJNZ R6,del2/ g% E; v, U6 t
DJNZ R7,del1
7 i# x# |9 J. o1 z6 e' f4 Q3 d X# U" ^ RET
+ f0 @4 w. e( [% j;-----------------------------------------------------------------------------------------------
; t6 X; {9 u X0 e7 f a" C1 ^. S+ G;中断初始化子程序; b( r2 h# v4 i3 i/ i1 ^2 V
;----------------------------------------------------------------------------------------------- & i8 K- j7 i) ^) ?: r' c C& j
init: SETB EA ;MCU开放中断. E( t U1 R' s o N* q" ^
SETB EX0 ;允许INT0中断' G' }* Y+ M7 u1 M$ U! L8 k( t
SETB IT0 ;设置INT0为边缘触发形式4 J. C# g' T$ Y
SETB EX1 ;允许INT1中断: o b+ ~5 O7 X' s: R, ]4 e- S: O
SETB IT1 ;设置INT1为边缘触发形式
# }4 x3 C( ]6 d& m2 D SETB ES ;允许串口中断% U1 Y- E' m0 @( O6 {% c% W9 k
RET 6 f+ d( C4 m n7 v, I
;----------------------------------------------------------------------------------------------- , @* g @5 c$ Q
;串口初始化子程序
& E; c; t. P% ?7 u;----------------------------------------------------------------------------------------------- ! ~- v. e2 k4 X+ e
initRS232:MOV TMOD,#20H ;定时器工作在方式29 a. W$ ]2 C& W: ?8 ^
MOV TH1,#0D0H ;设置波特率0E8H-2400,0D0H-1200
2 {+ I' {: @" H3 d MOV TL1,#0D0H1 P0 r% h2 c. B! M4 J
MOV PCON,#80H CON-电源控制
/ B' J! b( a5 C/ k SETB TR1 ;启动定时器13 @/ @8 R8 Q4 h2 L8 D
MOV SCON,#0D0H ;SCON-串行口控制 MODE3 启动串行口接收数据
& \5 @) Y6 _% N1 A9 P9 a, q RET ;返回
* t) c+ |4 R, q) n4 H4 h3 x
' c K# e" @: N4 Z. f2 l- b& p END
& W1 d* o' d. o: m& h
- v# @ t" u% A1 k 现在调试中,灯也不亮(电路中,发光二极管正极接5V电,负极通过上拉电阻接单片机),串口传输也不成功....& E9 L/ H* d/ @+ x d5 U6 \8 J* q
另外,小弟个人还怀疑按键的解法有问题。电路中采取独立式键盘一段直接接到中断源上,一端接地。并没有采用电源+上来电阻的形式。我查了下书籍,有的说到,单片机里面有上拉电阻可以这样子接法,但小弟还是怀疑~~ |
|