|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
小弟是做FPGA/CPLD和一些简单硬件设计的,这两天逼于要写一个单片机程序(没办法,谁知道公司人少!)...可是,委实不会啊!!折腾了半天,参考了不少书籍,好不容易码出了一段~但是调试它愣是没反应!!时间又紧,小弟实在是没办法,只好上论坛来求救~~还望大侠们指点迷津~% B4 C6 U& S2 m& z
: z& V; C# d4 p: g* I 要到达的功能: 80C2051单片机的中断源外接两个按键——当按下键1时把11AA通过串口发送到另一个单片机上;当按下键2时把1199通过串口发送到另一个单片机上...无按键时候等待操作!!2 C% b, P1 Z3 Y
程序见下:5 i5 e! B$ k' g( }6 p3 y! }
nei_in EQU P
W. L' T. e8 E7 Q+ J wai_in EQU P
% f, B; |$ K+ T0 V! o nei_show EQU P1.3) l3 ~' \4 ~* a# H% g6 R
wai_show EQU P1.4! Y* v. }1 e/ C
send EQU P1.25 G/ }- w c8 G) {# C% G$ ^; r- a
;-----------------------------------------------------------------------------------------------' L7 x; p7 P D9 Z
ORG 0000H
8 Z- M6 S& O, R* n0 G AJMP main ;跳转至主程序
% ?0 x* G) ?( a6 Z8 A$ o. U- ^! Q ORG 0003H
5 d; V; F) I" s4 A LJMP f_0 ;转到外部中断01 b- X2 b2 N" h3 A
ORG 0013H
8 Q8 U% a" `1 C, k' y LJMP f_1 ;转到外部中断1
- _) A3 p6 d0 ]) o& y# { ORG 0023H5 j- I- C' U. N: B6 }; C$ u! K
LJMP serv ;串口中断
, b F- n9 f4 h+ v' `: N1 O) s;-----------------------------------------------------------------------------------------------, i g. P- z8 R5 a6 _% n0 h5 i2 c
;主程序
. F( \( [; @& E% [2 J3 u;-----------------------------------------------------------------------------------------------
+ k/ f$ k* K% m ORG 0030H ;主程序开始地址: S* z8 Q' a" U! O
main: LCALL initRS232 ;串口初始化. D/ M5 ?* b$ B- h% E0 Z/ a4 K
LCALL init ;中断初始化
5 w \2 D- j! k! c% W CLR send
* D; o3 M( W5 g' {; z SJMP $ ;等待操作 - q( v6 E ^8 X0 {$ v
;-----------------------------------------------------------------------------------------------
5 Z, p. @& }0 |4 f! f$ o7 `;外部中断0操作0 j8 u) ~& s) q( E- R8 w( p
;-----------------------------------------------------------------------------------------------
7 c- B8 M- J8 a1 ?f_0: PUSH PSW ;保护现场
, n3 q' A8 r- b* }! v- N/ \, i! L PUSH ACC
x3 [& h" k2 O% k* Q0 Z NOP ;延时等待响应
, |8 V0 [: X' S4 R- ~ NOP
. R) q5 o0 Q0 E( u. p3 J7 I SETB wai_show ;关闭中断1操作指示灯. U M' H( t0 w/ J& `% e4 k
NOP, ~3 Z. y+ C/ k6 W9 j
MOV A,#11H ;把55H送到累加器
0 q& l) @* j! O% X) J MOV SBUF,A ;送到缓冲区3 P# }3 g. Z# H3 O9 n, i
JNB TI,$ ;等待发送完成1 C1 \* |, r+ @1 u3 g
CLR TI ;允许再发送
/ W' z# x5 Q. {% B MOV A,#0AAH ;把AAH送到累加器- ]: S& k7 N9 }, q
MOV SBUF,A ;送到缓冲区2 P% f& z0 t$ T/ Z! Y2 C! B. Q
JNB TI,$ ;等待发送完成$ e- o7 f( p G" \
CLR TI ;允许再发送7 R3 v9 G1 R! W- U& ~$ i7 t1 w8 E
NOP + v3 T; l- N0 S2 }' y
NOP " Z7 T {' d9 j0 a
CLR nei_show ;点亮中断0操作指示灯 2 n: |1 T/ N( v9 z: l2 G9 ]
SETB send ;发送操作已完成标示4 N9 t4 U& J2 ?( i: e1 U A; U3 f
POP ACC
i( |5 X0 E k- |$ P6 |; F) g POP PSW
! d. H* [9 ]0 h( E2 k9 W$ [6 V6 q RETI % y5 `* a% q4 p1 L7 h& j" X# p
;-----------------------------------------------------------------------------------------------2 @+ Z& J& j0 I
;外部中断1操作
; a4 c Q3 R$ O8 Z; y5 B;-----------------------------------------------------------------------------------------------
- H4 P$ u0 L5 C) Ef_1: PUSH PSW ;保护现场
4 n4 v3 u) U4 P! ~% P PUSH ACC3 r6 X" ]% |3 i8 ]" E9 l0 n
NOP ;延时等待响应# F4 m1 E3 [! M. w3 E! H$ G
NOP , m9 M$ c w$ L/ a' E% `2 q
SETB nei_show ;关闭中断0操作指示灯 ]+ @) x5 _4 X( I. E, Q I6 }
NOP
z" J. M+ z, r0 a( z8 L MOV A,#11H ;把55H送到累加器
3 r& Y5 S2 [4 G- Z MOV SBUF,A ;送到缓冲区; E/ Y8 a6 ^) E0 R' o8 ~ W* T
JNB TI,$ ;等待发送完成
! l7 P- I8 h4 g3 g! Y4 m1 u4 q CLR TI ;允许再发送# O( W7 I- L0 r2 w3 R% C
MOV A,#99H ;把99H送到累加器
B' w$ K0 i, B MOV SBUF,A ;送到缓冲区
1 r/ e$ d1 I8 E! K$ D1 J) s JNB TI,$ ;等待发送完成
U: F1 \7 `1 O5 r4 O4 ? CLR TI ;允许再发送
5 p, c4 P& ~( { Q6 r& r( p2 Q NOP
; S4 x* \$ c/ \. Q5 G( k- \, ~ NOP
) T K4 \2 e- R. }9 C. ~3 K/ Y CLR wai_show ;点亮中断1操作指示灯
9 q' }7 `0 X8 G' P1 ^ SETB send ;发送操作已完成标示% \& @7 f6 q% g+ v
POP ACC
' y2 x8 \$ q/ ]4 [. V9 D POP PSW
3 N) i/ _2 m' p# z# c2 T RETI
) y: }, L1 f8 Y: Z;-----------------------------------------------------------------------------------------------
. t5 v8 ]# C, P' d/ I;串口中断子程序( S6 I! B, l6 i6 d
;-----------------------------------------------------------------------------------------------
+ Z( O _, ^) Q4 jserv: PUSH PSW6 W$ p7 s- z9 l( m) G, G
PUSH ACC. ]& V& L5 r" C
NOP* C$ |7 a1 W9 H1 ^% V$ L
CLR RI$ f0 R4 P. F% R
MOV A,SBUF
" s0 [0 X% @- i6 M" ^. M: s- D; m MOV R0,A! q4 ]& o2 z% r# U) p0 D/ l
CJNE A,#11H,NEXT1
. \4 C$ I+ `3 J) B- v& T: { MOV A,R0
( ~0 u& N4 W4 gNEXT1: CJNE A,#0AAH,NEXT2, T( `0 E4 J) w6 A$ F* r* F
CLR nei_show# j- [8 }3 z C' I$ i G0 S4 r* e) a- _
NEXT2: CJNE A,#99H,NEXT3. _: ^8 k/ ~ u" Y, |
CLR wai_show5 j8 {7 Y. W) a- O( I
NEXT3: POP ACC
5 h, H7 K3 W% D' @' P POP PSW
7 D$ H5 e( m @/ T& S6 P- Q RETI6 P& D& y5 P# H0 i a& j4 [
;-----------------------------------------------------------------------------------------------
9 |8 f, Z k; j8 \6 M8 y" C$ G( |+ ~5 ^;延时10ms子程序9 T! ?9 Y0 m5 |( k8 P& V0 r, S# c; k
;-----------------------------------------------------------------------------------------------/ L6 D. X7 w& E" z# p. F
del10: MOV R7,#400 u9 Y8 @3 j, {* P( E* \; z: s
del1: MOV R6,#123
/ u/ [& G0 E; l3 Z6 n7 H. o' | NOP
% q# N8 {3 K& m9 K' B% m2 E; i( Q: Ydel2: DJNZ R6,del2
C: \. Q% S9 H1 G3 W4 [4 d DJNZ R7,del1
J: j' p3 n9 Z) o RET
% Q+ t4 K/ K1 |# S- Y9 K;-----------------------------------------------------------------------------------------------
8 m) S r0 r- [;中断初始化子程序
$ g& ?) M# \6 {- s; s;----------------------------------------------------------------------------------------------- * I( t7 Q* F$ @5 m4 C
init: SETB EA ;MCU开放中断
1 v$ Y% Z- Q/ Y( X* ?( ?) j SETB EX0 ;允许INT0中断4 Y! B5 G5 S: t: U7 _) S0 T
SETB IT0 ;设置INT0为边缘触发形式2 y+ s! @) y# {6 V3 N+ R
SETB EX1 ;允许INT1中断
* o2 D$ J1 [. h SETB IT1 ;设置INT1为边缘触发形式. `+ n+ m7 j9 C: N
SETB ES ;允许串口中断
8 x% N7 ?6 _8 o$ N RET
2 g5 x& d9 N3 ? w! `;-----------------------------------------------------------------------------------------------
- [, F& l' i) h. u;串口初始化子程序# B) i2 ^' ^( V! P. A. z& t5 A8 A. g
;----------------------------------------------------------------------------------------------- ) g9 J% l# O" o8 T) ~
initRS232:MOV TMOD,#20H ;定时器工作在方式2
8 p; n" m6 d8 _6 z: `( M MOV TH1,#0D0H ;设置波特率0E8H-2400,0D0H-1200 W' e9 |" A$ u6 A* u
MOV TL1,#0D0H+ X4 z6 }7 W. e: p) W
MOV PCON,#80H CON-电源控制8 m4 d7 _2 K% s: f* V: l7 f/ Y) z
SETB TR1 ;启动定时器1
7 U' F0 Y+ S& E" J2 }; m/ z6 @; ] MOV SCON,#0D0H ;SCON-串行口控制 MODE3 启动串行口接收数据 & @; ~- D- H X
RET ;返回" j8 y" d3 m1 W
7 e0 K/ m5 d$ K7 i' z
END0 a5 V e: X' J. k( u/ h
+ |5 k+ J p1 R3 w
现在调试中,灯也不亮(电路中,发光二极管正极接5V电,负极通过上拉电阻接单片机),串口传输也不成功....
; m1 s0 G4 I, ]: _ 另外,小弟个人还怀疑按键的解法有问题。电路中采取独立式键盘一段直接接到中断源上,一端接地。并没有采用电源+上来电阻的形式。我查了下书籍,有的说到,单片机里面有上拉电阻可以这样子接法,但小弟还是怀疑~~ |
|