|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
小弟是做FPGA/CPLD和一些简单硬件设计的,这两天逼于要写一个单片机程序(没办法,谁知道公司人少!)...可是,委实不会啊!!折腾了半天,参考了不少书籍,好不容易码出了一段~但是调试它愣是没反应!!时间又紧,小弟实在是没办法,只好上论坛来求救~~还望大侠们指点迷津~$ I- b7 s$ Q; P# ^' m; ^! f
. Y6 X6 }' q1 T1 m" J f) z& n; n+ t
要到达的功能: 80C2051单片机的中断源外接两个按键——当按下键1时把11AA通过串口发送到另一个单片机上;当按下键2时把1199通过串口发送到另一个单片机上...无按键时候等待操作!!
0 `' {+ R( R: V# v% p$ `+ w- C. u 程序见下:; x7 C* k3 i: d4 N
nei_in EQU P
' q6 U; |! I& [9 W5 m' S \" J wai_in EQU P
7 k' P$ o/ c, }4 I8 W5 \! G l: y nei_show EQU P1.30 H1 E# b# @. {( X! ~. Q
wai_show EQU P1.4
d# J5 W# L' w- `3 o: U. r send EQU P1.2, A+ f; Q5 i7 }9 u# N# `5 I( [9 ?7 j; j
;-----------------------------------------------------------------------------------------------! ~; d, w8 Q1 e% y2 H
ORG 0000H, @8 z: a! `3 L6 t
AJMP main ;跳转至主程序
0 r5 W9 ^! W$ I" m3 z+ c5 R% m5 B ORG 0003H, w, E* h+ N$ F% ~, `1 o; ~
LJMP f_0 ;转到外部中断0: l1 p: U- K8 q* n/ Y
ORG 0013H# \; T* _: d g3 f6 l* f4 c) F
LJMP f_1 ;转到外部中断1
- A( b5 s8 f1 D. e+ O$ @ ORG 0023H
2 q. |; r$ r9 w# l" O7 V3 C LJMP serv ;串口中断
" k8 f4 ]7 c. p4 H( A' L- g;-----------------------------------------------------------------------------------------------! [' W. g1 p5 c t. w0 H7 [9 p
;主程序
' j; D' r6 B6 F" J5 {; E/ [6 Z3 v;-----------------------------------------------------------------------------------------------
+ o( N- V& M/ p: x! B7 h ORG 0030H ;主程序开始地址6 c' y8 u" R E% k; a1 w. Q
main: LCALL initRS232 ;串口初始化! Z% n/ v5 d' [. R( f" D+ v$ T
LCALL init ;中断初始化
1 ~! v) T0 C/ A+ {, P+ K CLR send
* G2 r. f7 ~1 a U SJMP $ ;等待操作 9 M0 w2 c3 ~# ~1 M1 r
;-----------------------------------------------------------------------------------------------
6 U# I- A& K8 S0 G;外部中断0操作. u9 p7 ~. f4 s- U+ S. V
;----------------------------------------------------------------------------------------------- 6 ]; s4 f( Q8 O9 e
f_0: PUSH PSW ;保护现场
* I/ q) S: {8 B: [) l PUSH ACC$ ~9 Z/ e2 g- j# Q
NOP ;延时等待响应
. n/ t6 A7 i9 o& l! Q NOP
; x& K2 n& p9 }5 N5 S SETB wai_show ;关闭中断1操作指示灯* L' F" w) ?) M, e2 I
NOP6 D& d8 a( Y" M8 Y
MOV A,#11H ;把55H送到累加器4 q8 n) R' k9 k: h* D. _
MOV SBUF,A ;送到缓冲区% n4 l# Y) j5 _9 a. c& F4 c; L
JNB TI,$ ;等待发送完成
/ ^0 O& e2 Z6 l9 G1 o6 C CLR TI ;允许再发送# \) D/ w1 h9 e- M
MOV A,#0AAH ;把AAH送到累加器, E, Y8 \* s k( F: s. w! q9 [
MOV SBUF,A ;送到缓冲区
0 F8 @% [# [' U# X) Z- G: U. `* W JNB TI,$ ;等待发送完成" k0 e2 v$ L: ^
CLR TI ;允许再发送, D5 q2 d- i4 o6 |
NOP
A3 F! J7 Q3 W! H' x- z7 h NOP 8 \% H6 a" u" V! s( U+ ^' U
CLR nei_show ;点亮中断0操作指示灯 # v! X: [, y: ?$ l T3 I
SETB send ;发送操作已完成标示; ~& X7 W" P7 a& X& z
POP ACC) T2 P7 v! U) P) C
POP PSW" h. v! Y; C7 l4 E
RETI * N3 |& m8 M! ] ^5 E
;-----------------------------------------------------------------------------------------------
2 p0 b6 ]5 \0 C;外部中断1操作
' X! Q' g4 z. P' j- @;-----------------------------------------------------------------------------------------------
& W0 Y$ A m+ S2 ^f_1: PUSH PSW ;保护现场
3 l- V O( q$ B, g PUSH ACC& K9 X3 n; H- Q6 [! [* p
NOP ;延时等待响应# A' Z0 i9 n; ^ _
NOP
8 }: \8 _5 z0 u. D SETB nei_show ;关闭中断0操作指示灯
& r5 |" }8 y. D* E NOP' a; H% S7 a y* ^/ C
MOV A,#11H ;把55H送到累加器
2 r, S& i Q% o2 }/ [ MOV SBUF,A ;送到缓冲区( H# [; ]# r6 F) V9 m4 _7 F; q5 |: V
JNB TI,$ ;等待发送完成9 ]. M/ B2 |$ a" d- x1 ~! F3 F
CLR TI ;允许再发送+ f# I3 L6 n9 @ g
MOV A,#99H ;把99H送到累加器
0 Q" y6 Q( Z4 B& R2 _ MOV SBUF,A ;送到缓冲区
# d& s% }( ~0 i JNB TI,$ ;等待发送完成
8 {+ C8 `: l% x7 F) p# U CLR TI ;允许再发送2 w. {) W- B9 f
NOP
3 z8 }" F1 @+ `* R1 M6 S( L NOP + P: \6 W* k" u$ h" j" Y* e. w w
CLR wai_show ;点亮中断1操作指示灯
0 w" Z" F# l$ Q9 ^. R SETB send ;发送操作已完成标示
/ p. z" A% j4 c: Z. j POP ACC, H! P- k0 q: O/ |' ~
POP PSW
+ i. F4 e) c" S* _& h. d RETI , Q+ R4 e& k) K. ]# @
;-----------------------------------------------------------------------------------------------
8 X5 T2 [, @$ J( n;串口中断子程序) r& D5 e( v0 p6 s% k
;-----------------------------------------------------------------------------------------------4 P: s5 \8 J# W6 t5 Y# o0 c, G3 A. P
serv: PUSH PSW
6 j# \& z% W% v1 ~; M# a PUSH ACC* P6 V/ R+ @' O+ B" Q
NOP
! e, ?9 Q& W4 [7 j1 T7 L( Q CLR RI
* o4 `7 t2 c) s8 G MOV A,SBUF8 n! T: x* F- P6 \+ A) ?
MOV R0,A
7 O' b8 v; v" U. J. t" I; Z2 } CJNE A,#11H,NEXT1
1 Q" ^. ?: H7 ` MOV A,R00 @( W3 n) e1 A! `/ Z/ c8 X
NEXT1: CJNE A,#0AAH,NEXT2
% |, E& |( P+ U5 `- ? CLR nei_show
/ R8 D. M @- O$ O% B2 ZNEXT2: CJNE A,#99H,NEXT3" d9 e" y4 h6 [1 b. j! l
CLR wai_show' s1 {% f. p2 E* Z( f! }
NEXT3: POP ACC# J/ C! b% ]& \% ?1 x
POP PSW
# V2 u( C, _: K, c) H$ e RETI
/ u) ^ D2 v) o; Q+ o;-----------------------------------------------------------------------------------------------( M9 a' t' T, k6 U/ y4 e& W
;延时10ms子程序9 V. Z9 d7 J8 G& @( S& A
;-----------------------------------------------------------------------------------------------1 O& L0 u6 i) |# z" u- P- I
del10: MOV R7,#403 M$ h. T, m9 B- B' [
del1: MOV R6,#123
) ^( p z. S$ ^# _9 w4 Z. v NOP + [, V, B$ b$ q5 ^$ }8 J
del2: DJNZ R6,del20 N8 {+ Y$ z: m( f5 h9 f& j
DJNZ R7,del1
- i9 ]) s- F% M( N& ]7 w# a RET \5 o3 ^: E! p- w' j
;----------------------------------------------------------------------------------------------- 9 z6 K8 I9 j' s' q3 \
;中断初始化子程序
$ x$ i8 X% u" |+ C;----------------------------------------------------------------------------------------------- ! p) H; Y* i& U& J( k9 t
init: SETB EA ;MCU开放中断
+ G& t! B! p6 }% U SETB EX0 ;允许INT0中断0 K7 |7 Z& S- Y3 O: v6 E( a9 x1 }
SETB IT0 ;设置INT0为边缘触发形式
+ \( q# }3 F* V3 { SETB EX1 ;允许INT1中断' n8 U, N7 N4 I+ R% @+ T7 P
SETB IT1 ;设置INT1为边缘触发形式
0 v( c* X* H" C% }0 {. f SETB ES ;允许串口中断
7 T3 u% n6 h' m; n" {# ` RET ) L' B$ U( ]7 Q/ R8 X( B' G
;-----------------------------------------------------------------------------------------------
8 ?6 r, V* P6 g, P7 U/ S5 W) J5 r# m;串口初始化子程序6 n8 Z( n& ?2 u! G) v j
;----------------------------------------------------------------------------------------------- 8 c. ^' C$ f- g; l1 k8 F
initRS232:MOV TMOD,#20H ;定时器工作在方式2
) }9 \( b) i# y6 l4 M MOV TH1,#0D0H ;设置波特率0E8H-2400,0D0H-1200
6 l- I% E# L- @7 a MOV TL1,#0D0H0 x% g# U. B, G1 E J) e! G) _
MOV PCON,#80H CON-电源控制! i* c+ z: Y2 }; s1 y- C
SETB TR1 ;启动定时器1
+ Y& X: s, \7 x5 j MOV SCON,#0D0H ;SCON-串行口控制 MODE3 启动串行口接收数据 5 E( c+ ~3 r# d# S+ G7 S
RET ;返回
& ^) L# U- F3 Y& k" r " e) ^8 G5 W% ?* A% z
END
: b ^, s% }. ?+ j
; g& k# C& z: k H5 ^ 现在调试中,灯也不亮(电路中,发光二极管正极接5V电,负极通过上拉电阻接单片机),串口传输也不成功....
+ ~; c/ E. p! C1 e& a 另外,小弟个人还怀疑按键的解法有问题。电路中采取独立式键盘一段直接接到中断源上,一端接地。并没有采用电源+上来电阻的形式。我查了下书籍,有的说到,单片机里面有上拉电阻可以这样子接法,但小弟还是怀疑~~ |
|