|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
小弟是做FPGA/cpld和一些简单硬件设计的,这两天逼于要写一个单片机程序(没办法,谁知道公司人少!)...可是,委实不会啊!!折腾了半天,参考了不少书籍,好不容易码出了一段~但是调试它愣是没反应!!时间又紧,小弟实在是没办法,只好上论坛来求救~~还望大侠们指点迷津~
) g: D$ u$ l, G: |
( W" v* y8 Z* v& w {* l& Y2 S 要到达的功能: 80C2051单片机的中断源外接两个按键——当按下键1时把11AA通过串口发送到另一个单片机上;当按下键2时把1199通过串口发送到另一个单片机上...无按键时候等待操作!!
U# R9 P' I, P; e9 i 程序见下:, I I# G7 a" |4 G
nei_in EQU P5 H2 R9 B# v% x" e
wai_in EQU P. \9 Y1 {) e) D% J; P
nei_show EQU P1.3" Q" W% s6 r0 Z& m7 N. q, i4 C8 I
wai_show EQU P1.4
% p" y+ p4 W6 s: x1 j" }( b+ C send EQU P1.2* F% g7 x5 E% s/ }8 _/ ?+ ?
;-----------------------------------------------------------------------------------------------
F1 j& |5 c$ b( J$ d$ ? ORG 0000H* |" D' N# l( i# o; A; z* K
AJMP main ;跳转至主程序
F f9 i1 q! |2 H2 } ORG 0003H
! o( O3 ^9 Q/ N; h* T. D LJMP f_0 ;转到外部中断0
( e8 N+ o& L: O0 U- g2 `& T1 _ ORG 0013H' p) r( A# _4 o$ |4 d& x- D
LJMP f_1 ;转到外部中断1! W( v: r6 X# L% x# B8 M3 p
ORG 0023H
# M) b3 ?' N- N) {0 i ^8 N LJMP serv ;串口中断2 l$ S% r7 p( t/ z0 U+ W
;-----------------------------------------------------------------------------------------------
8 g+ v, m+ h5 J$ l" b M;主程序; |) r5 C! b. {0 L+ W4 x
;----------------------------------------------------------------------------------------------- & l( i5 ^- I1 g, o. s, Z/ ?
ORG 0030H ;主程序开始地址$ y+ G0 ^ t+ M
main: LCALL initRS232 ;串口初始化5 S8 U1 q3 [, A6 u; K6 a
LCALL init ;中断初始化
8 F& e2 {) R& |- S9 ]4 i CLR send# c! O- e# Q |
SJMP $ ;等待操作
8 Y n. ~5 p; t7 u' e;-----------------------------------------------------------------------------------------------+ r0 o9 [( ]4 {8 k3 ^! g
;外部中断0操作; v; q8 N' k6 U" ~- J. x5 H
;----------------------------------------------------------------------------------------------- * H2 O( f* V+ @' t
f_0: PUSH PSW ;保护现场' L; l7 U" I' e3 O! P$ D# D
PUSH ACC
/ u; L& J; k7 ]" T NOP ;延时等待响应
; B4 \) M! v1 I0 J+ O NOP
" b$ N8 E8 x- t7 N1 x8 ^( {7 _$ | SETB wai_show ;关闭中断1操作指示灯
1 t. l- x: n0 {6 ]6 H2 R NOP4 r* Z" ]8 P/ e* t) g9 u7 E
MOV A,#11H ;把55H送到累加器& e* S) C- v" R
MOV SBUF,A ;送到缓冲区
& j- W8 D! _$ f1 o0 s( T JNB TI,$ ;等待发送完成
* x& y* L; h4 R" x! n3 X* v$ M CLR TI ;允许再发送
1 l' }2 O6 A" p( U. s MOV A,#0AAH ;把AAH送到累加器
9 j& c) @. ~7 m5 Z MOV SBUF,A ;送到缓冲区( s. D, B: c/ z# U ]+ x! p
JNB TI,$ ;等待发送完成
8 k- ?3 X b% W E0 q, H# H CLR TI ;允许再发送
o; n) S: l2 \9 H. c" S+ I4 s NOP
& k3 e! v! R( y9 H NOP % P+ J; y4 E+ X% U# {. x$ w
CLR nei_show ;点亮中断0操作指示灯 / U1 j- h E% n8 F) f
SETB send ;发送操作已完成标示
3 l1 o/ M3 R1 y! L POP ACC
; P1 r4 P9 c, q' b& w- X POP PSW4 I& ?2 G' _1 N8 Z6 W! F% V
RETI
# m# a0 P; f: Y, \8 W; F;-----------------------------------------------------------------------------------------------
7 ~4 }6 Q: N; p4 h' [* v;外部中断1操作9 M. j f1 s* I! V7 g3 n8 X; M
;----------------------------------------------------------------------------------------------- / j, ]# q9 c3 e0 r1 g9 h8 |' T
f_1: PUSH PSW ;保护现场; t8 z+ S0 h$ Z" J4 j4 T
PUSH ACC
" j$ U9 E" s2 G' d" b NOP ;延时等待响应
& G* d8 X- d7 K9 w3 } B+ u+ A7 Q NOP : f! s2 c. Q; {: V6 P4 ]! _/ \
SETB nei_show ;关闭中断0操作指示灯# C4 j$ ]: F& B7 `" l9 a" E# a
NOP5 g% F7 D( Y' ]) ?7 O3 l3 w+ W
MOV A,#11H ;把55H送到累加器% r" g! M7 B4 D/ q* q/ r
MOV SBUF,A ;送到缓冲区* g5 N7 E& F- V5 Y* C! D
JNB TI,$ ;等待发送完成& b& I: f: o4 e; y& S
CLR TI ;允许再发送2 H2 V+ P6 d- ~0 V
MOV A,#99H ;把99H送到累加器
/ |+ g& e6 E; i* a9 S! Y$ B3 x MOV SBUF,A ;送到缓冲区5 u" R" Y* N2 X; v! W
JNB TI,$ ;等待发送完成
. W, O: K+ f& z& ` CLR TI ;允许再发送
% E B9 N" j& g NOP + N: Q0 _1 Z. `( ]( {1 A4 A
NOP
' G- f/ P/ K- a3 s CLR wai_show ;点亮中断1操作指示灯
% c. _: D0 Y' W: q; `1 \( h SETB send ;发送操作已完成标示6 p2 X6 x$ j4 l% C0 T3 J
POP ACC
9 d7 M/ Z, T" _* ]& \1 ~ POP PSW
7 ]; M6 R) \' s RETI 2 G) S& O5 D! y* T, ~6 V' c* N
;-----------------------------------------------------------------------------------------------
5 ]9 X6 m3 J: z;串口中断子程序
/ `' c y9 R5 N, l( F, d8 F8 k: q;-----------------------------------------------------------------------------------------------7 }3 ?/ D% C4 J, V
serv: PUSH PSW
3 k1 ^" L- i7 ~; h1 s2 H/ P PUSH ACC% s8 X1 r$ r# H: c
NOP# Z, K/ q' ?: a% ~/ B" i
CLR RI
7 E4 k% Q1 u; p: o MOV A,SBUF
# m8 _: V8 `9 r' F- o" F MOV R0,A0 {& f! h' b9 Q
CJNE A,#11H,NEXT1
3 S( f7 _ E0 K) ?( G% H MOV A,R0; l! d4 w6 A. O/ `2 j
NEXT1: CJNE A,#0AAH,NEXT22 B* @: g; u. h6 g
CLR nei_show+ {* R' P$ M$ x; x& T; I
NEXT2: CJNE A,#99H,NEXT3- Z" l- {4 V7 i: ~
CLR wai_show
% W n6 t f+ U) v/ }NEXT3: POP ACC9 M! i. O% @: j0 y4 v/ R
POP PSW$ B3 A3 h6 ]" A2 J+ j6 b
RETI
0 B# P; A, `" D0 Q) |;-----------------------------------------------------------------------------------------------
' v6 _# K8 t5 f;延时10ms子程序 _2 g% M' T( l) E
;-----------------------------------------------------------------------------------------------: d5 Y% t8 @) ~; x4 h" L
del10: MOV R7,#40
& E; b) ]1 M0 B5 B# V/ B( adel1: MOV R6,#123& A/ t0 O; C& j# [! V4 W, @) V2 y0 q L
NOP
; I8 i' K( A8 D0 D! [. t4 T( m4 |. rdel2: DJNZ R6,del2- c- D: g; E' f) q' Q# Q
DJNZ R7,del1 N5 K O: ^: }
RET4 C- E9 u# g0 [- e8 F& ]
;----------------------------------------------------------------------------------------------- " N* ~) E1 v3 b" ?9 v
;中断初始化子程序4 m( s8 N$ k1 G( [* k
;-----------------------------------------------------------------------------------------------
2 B1 W: S8 v0 i- G9 a0 w$ h- minit: SETB EA ;mcu开放中断
, |6 K' T' O8 }6 _2 E6 Z( q SETB EX0 ;允许INT0中断$ W' b$ k% h9 l. s1 L) h
SETB IT0 ;设置INT0为边缘触发形式
4 a2 u/ J' J6 o6 C! Q+ ~. | SETB EX1 ;允许INT1中断
7 l3 ]' u3 U& Y- p, m0 @* J# s SETB IT1 ;设置INT1为边缘触发形式
9 Q# Q7 }; ~+ F/ U% m2 ]; f SETB ES ;允许串口中断: C, U' ~& N8 I3 a% u) w: U0 [+ d: @
RET
7 I* y) l0 I; j" z2 S8 j8 e;-----------------------------------------------------------------------------------------------
1 H! e. R+ @# A% a, E;串口初始化子程序
: \3 O8 x/ g, G3 E3 |6 U% E;-----------------------------------------------------------------------------------------------
& S5 N1 V, u' F' B$ minitRS232:MOV TMOD,#20H ;定时器工作在方式2
3 u, C Z) k" U# M MOV TH1,#0D0H ;设置波特率0E8H-2400,0D0H-12001 g, c4 a. }+ i5 [9 H+ z
MOV TL1,#0D0H; c) b+ P. g' q% X3 y; l, ?
MOV PCON,#80H CON-电源控制
7 `: o4 |( ^+ @3 H( `4 v% j- v( j9 J SETB TR1 ;启动定时器1
" l# H# |% @9 g6 `- u# h, G f MOV SCON,#0D0H ;SCON-串行口控制 MODE3 启动串行口接收数据
- J k. T2 e D# U! B RET ;返回$ }* y3 a( {$ Y3 p* ^- ~
0 O* z' G0 x* R# Z [ END7 G# b! E* e' u& q
* i9 ^9 S/ c, @1 v- q: q
现在调试中,灯也不亮(电路中,发光二极管正极接5V电,负极通过上拉电阻接单片机),串口传输也不成功....1 n) a( j" n/ g! [2 v4 j
另外,小弟个人还怀疑按键的解法有问题。电路中采取独立式键盘一段直接接到中断源上,一端接地。并没有采用电源+上来电阻的形式。我查了下书籍,有的说到,单片机里面有上拉电阻可以这样子接法,但小弟还是怀疑~~ |
|