|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
小弟是做FPGA/cpld和一些简单硬件设计的,这两天逼于要写一个单片机程序(没办法,谁知道公司人少!)...可是,委实不会啊!!折腾了半天,参考了不少书籍,好不容易码出了一段~但是调试它愣是没反应!!时间又紧,小弟实在是没办法,只好上论坛来求救~~还望大侠们指点迷津~
2 l$ l" p E/ ~9 E1 n8 F/ b, r0 _
% I$ W4 c, g* h, ?( X/ [ 要到达的功能: 80C2051单片机的中断源外接两个按键——当按下键1时把11AA通过串口发送到另一个单片机上;当按下键2时把1199通过串口发送到另一个单片机上...无按键时候等待操作!!/ k+ Y, T, |$ U3 j
程序见下:! x o" f/ B# f. r
nei_in EQU P8 E# N. w! T: R3 _0 q
wai_in EQU P" o P p: ?4 p1 Y% @# L
nei_show EQU P1.3) t9 ]. j/ w+ p" \: J( O
wai_show EQU P1.42 U2 w- S. P7 P- h7 ~; |
send EQU P1.26 b | k8 Y) |, S" {: p/ S# G* e
;-----------------------------------------------------------------------------------------------
4 w4 a: C# g& y& A' g8 \2 U ORG 0000H2 w1 T7 ?3 `/ `) D
AJMP main ;跳转至主程序
! p+ j9 U; M. K ORG 0003H
4 }) q! O3 l* F6 y1 U LJMP f_0 ;转到外部中断0
1 K. m$ G$ x. A ORG 0013H V3 i% t9 l) Y! m/ S, r. [+ L
LJMP f_1 ;转到外部中断1
- S# H' U% ~& I3 |4 T ORG 0023H) ^8 d {! D$ g, B+ }- H9 o
LJMP serv ;串口中断/ L7 X1 w' v5 {
;-----------------------------------------------------------------------------------------------8 s6 ?& h2 G; T7 J# Q, R
;主程序
3 J: H5 T. H5 I;-----------------------------------------------------------------------------------------------
, r2 G4 L8 ~2 a, c ORG 0030H ;主程序开始地址* i4 v7 K7 L5 @5 Z; |
main: LCALL initRS232 ;串口初始化) C/ k7 O! j' e Z( S. P, N8 d
LCALL init ;中断初始化
, i: c) z, X/ V CLR send& K4 E& [9 N" W3 ~6 [) b/ ]% X. b
SJMP $ ;等待操作 ' P9 ?! ^4 k! w: S' ?$ z3 z6 ]' ?4 N
;-----------------------------------------------------------------------------------------------
U& ]2 G, s' ?;外部中断0操作 o$ _. x# W$ M' N2 J
;-----------------------------------------------------------------------------------------------
: I0 y; r7 q4 Z1 ~: Y2 I7 f- `f_0: PUSH PSW ;保护现场
! h+ b! Z7 ~$ s PUSH ACC
0 ^; E) u' x4 x8 ?9 E' r NOP ;延时等待响应% @" w7 m7 Y/ i( u$ P
NOP
( ^0 ~) f" U$ x# I* G- [2 R SETB wai_show ;关闭中断1操作指示灯
0 _+ e$ V* v, O NOP
# j' h5 K) }; d' m' R" J: p MOV A,#11H ;把55H送到累加器
2 M9 f+ a0 k" b MOV SBUF,A ;送到缓冲区
/ W5 f* V) T; ] JNB TI,$ ;等待发送完成
0 ~" y: H8 c2 e& q CLR TI ;允许再发送4 h) E! M1 k7 Y4 L$ x
MOV A,#0AAH ;把AAH送到累加器
* N" [8 m S* D# t& r- F MOV SBUF,A ;送到缓冲区3 D7 r4 a8 z% t }" e0 R7 d
JNB TI,$ ;等待发送完成7 ?' \# H n0 I. e U3 H* x
CLR TI ;允许再发送
. L0 E/ [% j+ w( j+ P- e NOP # F% z/ I& X! U8 p# M0 _/ ~
NOP : C- ~5 R7 _% G* C4 d3 G
CLR nei_show ;点亮中断0操作指示灯 4 Q' E' x M! H% k
SETB send ;发送操作已完成标示& B w: b+ A9 q. H2 ]6 h1 X
POP ACC9 _ m( S6 n4 A! D8 a
POP PSW. o# d: v; o; r1 t2 i
RETI ' J" Z% O7 E8 F" G" o0 B
;-----------------------------------------------------------------------------------------------
2 q- i7 x8 G# }# G! h6 E! d9 a;外部中断1操作
8 R, B8 C# D8 ?; ~3 q9 ?! p( ?3 o;----------------------------------------------------------------------------------------------- $ F5 ]9 P% F% H
f_1: PUSH PSW ;保护现场
6 f) Q, d* [& j% {' ?5 o; O! o PUSH ACC) j2 T( l8 w9 |
NOP ;延时等待响应
. ^" \+ I0 {" g3 a/ n NOP
- B, V9 n' d3 I& R/ S8 g1 y SETB nei_show ;关闭中断0操作指示灯& e7 z- x! N6 b! n
NOP9 C7 }9 t2 r3 F/ e4 ^9 U* \
MOV A,#11H ;把55H送到累加器1 b4 D! g \& o, H) q
MOV SBUF,A ;送到缓冲区
9 }& C, I% s1 R% ^ JNB TI,$ ;等待发送完成, g5 p$ |) @ y S: z! f: P
CLR TI ;允许再发送' X( m, T) W: G- F, K4 y- R
MOV A,#99H ;把99H送到累加器
' t& _0 i& k; G9 W MOV SBUF,A ;送到缓冲区8 }& E! h. {2 G( l2 F# {8 [
JNB TI,$ ;等待发送完成$ M& j& S% v; W1 _% y
CLR TI ;允许再发送
7 }8 z& \# e/ w& W& m$ ]3 w NOP 3 I& ]7 m* z6 K5 A
NOP 7 ?( d/ R W% S1 n( a* T8 w
CLR wai_show ;点亮中断1操作指示灯 7 |& E4 ~+ u+ E2 f- U
SETB send ;发送操作已完成标示
& _! T! y. m( z, T0 J' l POP ACC
o5 Y' V2 x/ F POP PSW
* p6 {, \ u4 T+ ^9 \) f RETI / c- P3 t5 O8 C5 n! Z) a
;-----------------------------------------------------------------------------------------------
6 ^% _( e d1 A/ X4 t* L# c;串口中断子程序
, {. v" u+ P+ d0 B;-----------------------------------------------------------------------------------------------
4 W( e2 c( P6 J$ }% H( Zserv: PUSH PSW
: B3 r/ k' t# B1 t6 d PUSH ACC
! P- L) s+ y8 j% l0 J# M5 I5 i NOP
. W, h: \% B" T, Y+ v CLR RI, f, d, J2 A; ~) K" g
MOV A,SBUF# X" b. P) I8 A
MOV R0,A
* X& @+ H% V0 y) Y7 p+ G( T CJNE A,#11H,NEXT19 F) |' C; p1 J/ t0 E
MOV A,R0
g/ v+ Y& J6 @: N% W- t: S! b: lNEXT1: CJNE A,#0AAH,NEXT2
3 N5 }& w E, [1 g8 n F" f CLR nei_show) ?6 G7 a1 }5 \* O, r0 d
NEXT2: CJNE A,#99H,NEXT3
) L/ ^$ r& B3 O2 F CLR wai_show
6 f" f( y+ T1 k% j% {- g) ^NEXT3: POP ACC/ Z$ J1 @; N3 `: }) D3 F% T5 S
POP PSW1 f* W; X, M" P
RETI
& v4 ]: u! U7 C( C, b# w;-----------------------------------------------------------------------------------------------
) J4 e& h! K' q( T; E;延时10ms子程序
" `# [; X& |' U& @6 q;-----------------------------------------------------------------------------------------------/ g0 D+ t5 A; L3 c4 m5 [* @
del10: MOV R7,#40
0 i6 J* Y# A9 B) t" _, m2 V% `9 odel1: MOV R6,#1230 F( F( ~% W8 n% r A
NOP
- L0 F! z- o1 {del2: DJNZ R6,del2) z6 U/ z1 l& o) B. A6 r* j
DJNZ R7,del1
0 C) P, ]( {" }$ B* S) r# Y RET* z1 K7 {( R, X. ~. A- g# U
;----------------------------------------------------------------------------------------------- : j2 Y, f2 u0 }) [3 C c7 H1 J" \& M
;中断初始化子程序5 k0 w. `+ p3 h" z
;----------------------------------------------------------------------------------------------- 7 R. Z9 ^ v# N; ^, R3 T* z
init: SETB EA ;mcu开放中断; n: D g W) g
SETB EX0 ;允许INT0中断
3 x* Q4 [& H" A/ w" o9 O3 z7 { SETB IT0 ;设置INT0为边缘触发形式
6 Q" {/ G' Y+ p+ F8 [ SETB EX1 ;允许INT1中断( I& ^7 \* {. R: T2 C
SETB IT1 ;设置INT1为边缘触发形式0 I5 Q9 I1 A2 D& W/ j/ Z `
SETB ES ;允许串口中断
' m* p0 J# b4 ]! S9 f W j& W RET * I; |( V3 Q* Q" C( \
;-----------------------------------------------------------------------------------------------
7 R0 Z8 d! c& ?2 V/ n;串口初始化子程序8 m" [( L* k$ r
;-----------------------------------------------------------------------------------------------
. \- [0 h# E& h; F+ w0 YinitRS232:MOV TMOD,#20H ;定时器工作在方式2
: b: c+ b5 D9 K8 r0 r. V MOV TH1,#0D0H ;设置波特率0E8H-2400,0D0H-1200- i1 [ I( X+ n
MOV TL1,#0D0H+ b L& w( \; Q0 d
MOV PCON,#80H CON-电源控制
0 {! C5 B4 `, d$ `# x SETB TR1 ;启动定时器1
, r8 v% R6 B0 r MOV SCON,#0D0H ;SCON-串行口控制 MODE3 启动串行口接收数据
/ O8 |$ d% |1 b1 i4 }' y' ] RET ;返回2 C4 w$ `% |! |0 X
( ]0 C1 e! H) H9 v8 b END
9 i2 [. x8 [% W* }* g9 }- b' H6 V. O% R8 D+ H; `
现在调试中,灯也不亮(电路中,发光二极管正极接5V电,负极通过上拉电阻接单片机),串口传输也不成功....7 ^7 U; ^; X. Y. T/ \9 K
另外,小弟个人还怀疑按键的解法有问题。电路中采取独立式键盘一段直接接到中断源上,一端接地。并没有采用电源+上来电阻的形式。我查了下书籍,有的说到,单片机里面有上拉电阻可以这样子接法,但小弟还是怀疑~~ |
|