|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
小弟是做FPGA/cpld和一些简单硬件设计的,这两天逼于要写一个单片机程序(没办法,谁知道公司人少!)...可是,委实不会啊!!折腾了半天,参考了不少书籍,好不容易码出了一段~但是调试它愣是没反应!!时间又紧,小弟实在是没办法,只好上论坛来求救~~还望大侠们指点迷津~# {5 [+ H( m0 g/ Z9 [5 M3 e
, l7 q. b, E3 F* ?6 |9 d( y 要到达的功能: 80C2051单片机的中断源外接两个按键——当按下键1时把11AA通过串口发送到另一个单片机上;当按下键2时把1199通过串口发送到另一个单片机上...无按键时候等待操作!!
- i9 O- R4 @ ~# U! H" g: N0 W& ` 程序见下:
3 [+ e& y# }' s" D" e( o nei_in EQU P6 j& G$ }$ M. X6 f4 B9 S
wai_in EQU P
2 F2 R p" E6 A& C, k$ u nei_show EQU P1.36 B. y& N1 L+ G0 v# {1 @0 O: y- L
wai_show EQU P1.4
: x* r# f2 n* a+ g( S' c send EQU P1.2 U' p {, Y' z0 A3 i
;-----------------------------------------------------------------------------------------------
( |1 N. Q. d- ~/ \. k7 A ORG 0000H' \% F8 Q9 w. f1 r7 x! C
AJMP main ;跳转至主程序
; a9 f: i" ~5 E& Y% Q+ _ ORG 0003H
2 p; f0 P/ r3 }7 E9 k/ S LJMP f_0 ;转到外部中断0
+ |5 x+ N1 P, Z; Q+ ^ ORG 0013H
% b" v4 l) o9 I LJMP f_1 ;转到外部中断1: p% {1 f2 H1 C: t( O; O: b
ORG 0023H
! p$ A5 S2 q4 O, E; M7 {3 k- x LJMP serv ;串口中断
7 }1 q( e, s- [;-----------------------------------------------------------------------------------------------! c+ ?0 P# Q, ^: K- z! S0 G& s
;主程序
4 N: x/ K% b' G+ y6 h/ @! R;-----------------------------------------------------------------------------------------------
7 N2 y% p( |/ d- G ORG 0030H ;主程序开始地址" }! Q8 T* G- p0 r
main: LCALL initRS232 ;串口初始化4 y; z8 P; d, h* D3 R
LCALL init ;中断初始化
; O5 ~4 e, A& {1 c7 t CLR send
' T) ~/ I y3 o3 s' T: ~ SJMP $ ;等待操作 , R7 y8 r' J! V" \' n" l3 O" B
;-----------------------------------------------------------------------------------------------2 E6 e$ p9 [; ~" V3 C" ^
;外部中断0操作
1 d( H, e' ^2 {7 e;-----------------------------------------------------------------------------------------------
' z3 {/ c% ~ d# {, a G7 [f_0: PUSH PSW ;保护现场
. p6 d2 e0 x- }' _& B PUSH ACC0 @6 ]/ Z7 h5 a# u
NOP ;延时等待响应: f4 @; ]0 o8 y) V( q' U
NOP
* V3 s4 ` W6 e P4 A" c; } SETB wai_show ;关闭中断1操作指示灯& h1 j1 ]6 J U) T
NOP3 J9 l/ |) } W6 Z( Z5 k0 J; k; N3 V
MOV A,#11H ;把55H送到累加器, d0 S% Y, w% j3 V6 r& F) H
MOV SBUF,A ;送到缓冲区4 B2 \! s! K: B$ f) O
JNB TI,$ ;等待发送完成
7 G* i" L) F3 f; N: k. d CLR TI ;允许再发送
9 j) v. G# ^4 L( ^% R' O5 H MOV A,#0AAH ;把AAH送到累加器; l# K0 u% _" C( g8 @6 _ E; ^0 b% M0 [
MOV SBUF,A ;送到缓冲区
2 { t; j F3 [3 v6 m" J JNB TI,$ ;等待发送完成' W+ F m0 h5 e% C3 {1 t- L
CLR TI ;允许再发送
' R- H: B" G4 @3 }$ {; W NOP
+ R- `% |- V: i3 P; E NOP
4 q1 B8 [; [" B CLR nei_show ;点亮中断0操作指示灯
$ j; i! T8 \4 ^$ y SETB send ;发送操作已完成标示
( m# _$ D' A8 k4 z! x9 k5 O& `! K4 Q POP ACC6 {% E% `9 X P" Z, V
POP PSW4 m/ ^7 [* @) j) Y! Z7 t, w# k7 o9 I
RETI ) G/ I) k0 D- r/ b+ m
;-----------------------------------------------------------------------------------------------
/ H+ Q/ b, X% U- @;外部中断1操作+ t# ]) B# {$ }- }' f
;----------------------------------------------------------------------------------------------- 8 b- P$ {: e4 |+ o0 `( r
f_1: PUSH PSW ;保护现场
2 }( B; a- h# p, [2 a PUSH ACC
2 h) @) U9 ?* v NOP ;延时等待响应+ O% n( n( g6 F3 |% a- N; k
NOP ! Q4 w. T( ?! b6 [- Z1 A
SETB nei_show ;关闭中断0操作指示灯9 R' E, E7 B. B' I5 _
NOP A9 K# h8 o4 t. \1 L) X' u
MOV A,#11H ;把55H送到累加器- \' a1 I: C, D2 Q8 A- j
MOV SBUF,A ;送到缓冲区
: g$ X. i7 p; J9 I$ Q- }. y JNB TI,$ ;等待发送完成
3 i. D( G; A' O2 h" y l) T CLR TI ;允许再发送' w9 s) W, I) p( c6 l6 M+ m
MOV A,#99H ;把99H送到累加器
6 ~( w: h2 Q" ~8 y! ?, Z MOV SBUF,A ;送到缓冲区
) g$ Q, h* p7 k JNB TI,$ ;等待发送完成
0 j+ O C( P" |, a CLR TI ;允许再发送9 m8 d- ^" q8 |5 S6 f: t6 o
NOP
. ~5 t/ `2 X% Z8 ~ NOP
& ^6 h" B* [# T/ b CLR wai_show ;点亮中断1操作指示灯 1 y/ P0 x) K" C5 U
SETB send ;发送操作已完成标示' G z& K& }' D) _
POP ACC7 v( L; |* _8 f8 L$ X: Z( b
POP PSW
/ T3 V+ N: g0 Y' w: i4 y RETI
+ n' p' w) g, b) y;------------------------------------------------------------------------------------------------ t& I) s' |: c9 ]8 p i
;串口中断子程序
. U% o: _% W/ u' ]" _;-----------------------------------------------------------------------------------------------
" Y. F0 V( v' ^( z* jserv: PUSH PSW
# f+ _% z3 o; U- N. i8 M PUSH ACC" y% |* _$ @+ I; b- J7 x
NOP8 t; R8 `) a' O ^, ~
CLR RI+ d/ Q- Y! T `( E; k+ n
MOV A,SBUF' l+ q7 r4 s$ t# p$ o9 M2 H
MOV R0,A
' O& F8 \& n) q) B CJNE A,#11H,NEXT1
! o. V3 \* i. x" a! }1 G MOV A,R0
9 [2 [9 P z- j1 MNEXT1: CJNE A,#0AAH,NEXT2* }( f" ]& }& q
CLR nei_show9 Y; t1 a8 I. @& L
NEXT2: CJNE A,#99H,NEXT3
8 W4 b- ^/ `/ k* _/ }. y! p CLR wai_show+ S; M; g! }0 B1 i# J# @, g6 q
NEXT3: POP ACC$ s! x0 b+ r* Z, y- }
POP PSW
) \2 @! ]. E, H K1 p9 C+ t RETI
6 W) k2 B! k, c# A3 m+ j4 @;-----------------------------------------------------------------------------------------------
! c# h5 Q7 u2 u( d;延时10ms子程序6 b2 a4 v# R3 y: ?
;-----------------------------------------------------------------------------------------------7 v J; O5 D2 R1 T, b+ N
del10: MOV R7,#40
. [; \# P1 k1 S- b4 |4 B: ldel1: MOV R6,#123" q9 x0 q5 h& q7 Z; u" {) I
NOP
1 U( `1 q/ v, q& l' \del2: DJNZ R6,del24 z. q- D" _3 Z/ B
DJNZ R7,del1
/ W: s* G4 x" @ Z; C& p! Z2 r RET; F7 ?6 `+ H/ w
;-----------------------------------------------------------------------------------------------
2 M/ ~: g* `! j# o;中断初始化子程序
$ ^( J( Q. d+ A# z/ w1 t, r2 A$ Q;-----------------------------------------------------------------------------------------------
* V) R; W. q7 m/ L! Z# h! Binit: SETB EA ;mcu开放中断
! C1 ?, m3 S. N6 O, w6 ~ SETB EX0 ;允许INT0中断+ Q8 N& r+ k- o4 U1 o
SETB IT0 ;设置INT0为边缘触发形式( T) g: M$ U# n: k- A/ U. y
SETB EX1 ;允许INT1中断
) H- o0 T. v N2 J) ^5 z; Y) x" \5 s SETB IT1 ;设置INT1为边缘触发形式( v# k4 q& D' x! m/ K" s
SETB ES ;允许串口中断6 F/ ?4 g5 W+ _4 V7 e
RET
1 ~9 I4 ?) }0 [) {/ E6 W w% t5 H;----------------------------------------------------------------------------------------------- * r% @# p( N5 o+ c/ R" ^! u, Q/ K
;串口初始化子程序
" N$ e. O# A3 Z. U;-----------------------------------------------------------------------------------------------
! {% C, i" f! l( S$ k T6 ginitRS232:MOV TMOD,#20H ;定时器工作在方式2
6 x7 I* X% h& z+ e( [3 l* N: i MOV TH1,#0D0H ;设置波特率0E8H-2400,0D0H-12006 c l G7 q+ i+ J! X( r
MOV TL1,#0D0H, Q/ z; l, g9 ]
MOV PCON,#80H CON-电源控制
% q1 h3 ]+ d& ]9 {3 [ SETB TR1 ;启动定时器1) f/ `1 g } ^0 ]& a q
MOV SCON,#0D0H ;SCON-串行口控制 MODE3 启动串行口接收数据
0 @- w) X2 K" w% B# k* }! b RET ;返回- ], K0 W H( s/ _+ r# {# |* M" l. N" h
' _7 f) ?. G: ?& Y1 i$ O/ ` END2 f' C- k# s7 q6 }0 Q
9 Q6 _9 s# L. w) A$ e 现在调试中,灯也不亮(电路中,发光二极管正极接5V电,负极通过上拉电阻接单片机),串口传输也不成功...." E) _% G5 V: x( |9 {9 `6 C- V
另外,小弟个人还怀疑按键的解法有问题。电路中采取独立式键盘一段直接接到中断源上,一端接地。并没有采用电源+上来电阻的形式。我查了下书籍,有的说到,单片机里面有上拉电阻可以这样子接法,但小弟还是怀疑~~ |
|