|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
小弟是做FPGA/cpld和一些简单硬件设计的,这两天逼于要写一个单片机程序(没办法,谁知道公司人少!)...可是,委实不会啊!!折腾了半天,参考了不少书籍,好不容易码出了一段~但是调试它愣是没反应!!时间又紧,小弟实在是没办法,只好上论坛来求救~~还望大侠们指点迷津~
9 N( C0 D! K. S" r7 d w) I* o0 z9 B5 w9 y, { X' n' h
要到达的功能: 80C2051单片机的中断源外接两个按键——当按下键1时把11AA通过串口发送到另一个单片机上;当按下键2时把1199通过串口发送到另一个单片机上...无按键时候等待操作!! M9 }+ g, h5 Q$ d4 y# Y
程序见下:
+ N* \" X! @ L! c, ?8 p nei_in EQU P- j4 x9 E U( C$ s
wai_in EQU P
3 U- \6 M) j6 X* T8 ]3 A nei_show EQU P1.3
3 n4 `1 C# s: Z) f" R { wai_show EQU P1.4' O1 J3 S% {" Y! K* X, E
send EQU P1.2
" S7 c$ S( @$ `. \7 W;-----------------------------------------------------------------------------------------------; D8 Z" n' S4 R
ORG 0000H$ ^& H$ H* v5 q, \
AJMP main ;跳转至主程序! N( D) D3 g, G* n) m
ORG 0003H8 M O9 {+ t# A2 a& M. s
LJMP f_0 ;转到外部中断0* a3 q! u5 t# c" l1 L: a
ORG 0013H: _. ~ B+ w+ U0 ?2 t
LJMP f_1 ;转到外部中断1
: j3 {& e3 W$ R& y; R* B) r8 { ORG 0023H
; U, ^) v" p4 I3 l, t7 `( C LJMP serv ;串口中断
1 ]+ Y8 d% u6 E2 `& p, s;-----------------------------------------------------------------------------------------------
6 u, `0 X+ q) A5 O# V;主程序" F" G q# w8 A, X
;-----------------------------------------------------------------------------------------------
9 K) E3 D2 q T, Z# u ORG 0030H ;主程序开始地址
1 G; F2 h4 Z2 V2 q' {main: LCALL initRS232 ;串口初始化
@) l ]: N/ ]) ~' n LCALL init ;中断初始化
+ w# \8 s- B' z B CLR send
1 I# s! L- D7 t% j$ h4 o5 i# \ SJMP $ ;等待操作
( u. k6 ~) D! B% j;-----------------------------------------------------------------------------------------------
: L, P6 v! j* H;外部中断0操作
/ `2 \% v+ f/ P/ j; p8 x;----------------------------------------------------------------------------------------------- / n+ K5 C3 _2 G5 G7 X* c$ J
f_0: PUSH PSW ;保护现场
$ \7 ], u( K9 B8 a, a2 P PUSH ACC
3 |" U/ D. i" A: U* C; n. X2 z NOP ;延时等待响应' h M1 q! V/ `% T) P A- Z5 L
NOP - _2 w! k" G6 @0 ?' j6 ?, q
SETB wai_show ;关闭中断1操作指示灯1 I( m9 x( G% ~8 t
NOP+ W0 i& d& r5 m. M. H, T9 d! A
MOV A,#11H ;把55H送到累加器
4 O: h3 N/ @1 U0 c! ~: R2 e MOV SBUF,A ;送到缓冲区
9 `, E$ n' B# E6 I1 D JNB TI,$ ;等待发送完成
* b4 g/ q: c. Y CLR TI ;允许再发送
! W/ {8 Q3 M+ g2 A MOV A,#0AAH ;把AAH送到累加器, H. [& n& E+ o
MOV SBUF,A ;送到缓冲区9 q! K; f$ M2 M* U, @: I
JNB TI,$ ;等待发送完成
4 P) F! L" r( e5 L0 t& D$ A7 e CLR TI ;允许再发送
/ Z$ _! e3 u- I6 u2 Q/ a NOP
4 I6 ]2 }, U# v, G4 N! D @ P4 u NOP ' _7 U* E5 I; _: s6 e
CLR nei_show ;点亮中断0操作指示灯
9 Z" |% m, O: F; L$ `7 w SETB send ;发送操作已完成标示4 S* w- U* q& j7 z! ]" x
POP ACC
$ t. N7 ^. ]3 }; X9 [! q- ^4 \2 F, e POP PSW1 r3 u2 t5 q1 A$ l& z7 K8 [, g
RETI " d# z7 t" ^9 g( Z& o
;-----------------------------------------------------------------------------------------------) ^4 [7 N b9 P
;外部中断1操作
4 H; n1 M. S( {0 ]) C5 J. w;----------------------------------------------------------------------------------------------- 5 u# Q) T! n* k" R/ u
f_1: PUSH PSW ;保护现场4 _9 p0 v o; c& I# f6 V* U
PUSH ACC
0 K( I6 A2 q) F" n$ A0 U% U( s NOP ;延时等待响应
+ |9 z7 G; ^- X: P NOP # O, ~+ B8 F# L
SETB nei_show ;关闭中断0操作指示灯- w) a; A% r: R. X; R; s7 H
NOP, i. q, m4 C% q- z7 A
MOV A,#11H ;把55H送到累加器, w1 H8 {5 e; C6 }) v
MOV SBUF,A ;送到缓冲区
7 s- T! V" H# G- E: X1 Q% ~: b( e JNB TI,$ ;等待发送完成
. y3 c5 A5 w/ b$ \3 P CLR TI ;允许再发送
. @( ?6 V3 |7 C3 t: t! F4 g MOV A,#99H ;把99H送到累加器; R) m2 p2 g, ? |$ U. y+ T; {9 l
MOV SBUF,A ;送到缓冲区% K6 n# r" Y1 @& `
JNB TI,$ ;等待发送完成
6 Q" n! }1 h+ o6 | CLR TI ;允许再发送
# Y! O& j* D$ ~ Y0 u4 H3 e/ @ NOP
0 C+ K7 f6 }: V2 U4 R1 b% N NOP
5 r1 Q* S* D$ |( w0 r) H6 @( U) s CLR wai_show ;点亮中断1操作指示灯
+ B0 q2 \ o" r/ X% J6 ^ SETB send ;发送操作已完成标示 A! j! H7 F9 L2 {0 ?" z& p
POP ACC
* [* e |* J3 E' H POP PSW
4 a9 ^( d9 ]) R! R2 q7 b RETI
( B. t6 X& c' J;-----------------------------------------------------------------------------------------------
, i) p4 ?& ^% C+ L# h;串口中断子程序# r y) C: Y$ E8 `
;-----------------------------------------------------------------------------------------------
9 {# e, \( d, W7 `4 y5 ^serv: PUSH PSW
3 G5 e5 k. O8 i7 U* |, z, ] PUSH ACC
5 e" j! m7 X% C* t7 \# z NOP( |0 V& p3 [6 N% p3 S* H! G2 m# [
CLR RI
Q y$ v* \& i3 z MOV A,SBUF! F( K# Z8 |* f: r" a G; Q
MOV R0,A5 O8 a5 R4 O( @ G4 p
CJNE A,#11H,NEXT1
! m. g$ o T0 B MOV A,R0; m; d5 ?& D Y' s; k# T
NEXT1: CJNE A,#0AAH,NEXT2
& X7 P3 S: e1 z6 R( [' q2 i; c CLR nei_show9 |& x( @ ^. m2 Q m" u6 L I
NEXT2: CJNE A,#99H,NEXT3
* M5 |! \+ ?: }- Y9 s8 G: U7 [+ ?4 s CLR wai_show8 B4 y" T1 m% ]: R5 f8 q
NEXT3: POP ACC
% s/ H3 H, E. x; d! k POP PSW5 R1 Y8 b' j6 x* l5 c
RETI2 T4 _6 v# Y. }- q
;-----------------------------------------------------------------------------------------------
; E2 x2 @ @' I; B4 C; R+ j( I/ P3 B;延时10ms子程序5 y" q e' C' K+ o1 ]
;-----------------------------------------------------------------------------------------------/ l- \( K/ A- b+ K& o8 u4 z
del10: MOV R7,#40
7 U3 j$ q T' g0 ?* xdel1: MOV R6,#123( o9 F: F" ~+ s0 j' T6 E
NOP
. i/ z. Q2 S( t1 g( q7 H" w. mdel2: DJNZ R6,del2
0 L; y, P# q5 A5 G: G" R. v DJNZ R7,del15 P4 c# R6 { Y9 W, l9 t
RET1 |4 P" C# d- y1 O5 T
;-----------------------------------------------------------------------------------------------
$ C0 f6 {/ A [% X y8 ];中断初始化子程序1 d) g$ x/ }4 o: R* ?
;----------------------------------------------------------------------------------------------- 5 l, f$ [- x! o
init: SETB EA ;mcu开放中断# s" ?4 f+ t% ]; {7 M2 e
SETB EX0 ;允许INT0中断3 {' @8 q0 p" H* g% c
SETB IT0 ;设置INT0为边缘触发形式# X" z! w i5 G2 q1 i7 j; C1 d( @
SETB EX1 ;允许INT1中断
, W& ~% V4 E4 n3 D+ Q% `1 P/ X SETB IT1 ;设置INT1为边缘触发形式- h6 ^8 S0 Q( C) H* Q6 ?
SETB ES ;允许串口中断
# W0 B- Q% I+ ?2 Y RET 5 @/ ]; ^" d+ t! }9 M
;----------------------------------------------------------------------------------------------- % ~2 J% s5 L/ x
;串口初始化子程序
) Z1 g6 g3 L" X0 n3 Y;-----------------------------------------------------------------------------------------------
1 e+ g+ ^ c( `' ZinitRS232:MOV TMOD,#20H ;定时器工作在方式2+ z8 S* z" X8 B0 X j% Q+ K3 ]! U
MOV TH1,#0D0H ;设置波特率0E8H-2400,0D0H-12002 [3 `# J& w# S |- m+ X
MOV TL1,#0D0H# n' t- O. p) B/ v
MOV PCON,#80H CON-电源控制
8 p- D; Z$ C. u1 {9 `) c SETB TR1 ;启动定时器1- J& U1 h( G8 }' h/ b" L; m
MOV SCON,#0D0H ;SCON-串行口控制 MODE3 启动串行口接收数据
1 O4 o5 R7 C4 h: E RET ;返回
" B7 ^# w( Z* ?! a- l$ B + r7 n0 t! V' Z# u! z6 E
END
2 s9 y! _6 ~- J; T2 E7 M& E `% K, M5 O9 g: M! w6 d! w7 O
现在调试中,灯也不亮(电路中,发光二极管正极接5V电,负极通过上拉电阻接单片机),串口传输也不成功....
+ a1 @1 o$ f. } Q 另外,小弟个人还怀疑按键的解法有问题。电路中采取独立式键盘一段直接接到中断源上,一端接地。并没有采用电源+上来电阻的形式。我查了下书籍,有的说到,单片机里面有上拉电阻可以这样子接法,但小弟还是怀疑~~ |
|