|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
小弟是做FPGA/cpld和一些简单硬件设计的,这两天逼于要写一个单片机程序(没办法,谁知道公司人少!)...可是,委实不会啊!!折腾了半天,参考了不少书籍,好不容易码出了一段~但是调试它愣是没反应!!时间又紧,小弟实在是没办法,只好上论坛来求救~~还望大侠们指点迷津~9 p4 g1 y6 l3 u6 d4 \
, q: T( h5 G6 D" f* D# d b( ^' L6 ? 要到达的功能: 80C2051单片机的中断源外接两个按键——当按下键1时把11AA通过串口发送到另一个单片机上;当按下键2时把1199通过串口发送到另一个单片机上...无按键时候等待操作!!
r! S8 O: V! J* e% k8 y& P 程序见下:- f4 M- `- B$ l: C5 p0 s) b! Q! d& o
nei_in EQU P1 E/ r: D4 ]8 \! j4 `( `8 f
wai_in EQU P6 C$ d1 K) g2 N* x
nei_show EQU P1.34 f5 o& J3 s8 R8 A3 v
wai_show EQU P1.4
" L1 t8 z. y, f$ f! h6 u- Y. k send EQU P1.2) E. g8 T) t* p0 {
;-----------------------------------------------------------------------------------------------
, F w6 k/ m7 U0 ]* | ORG 0000H
/ l" I# n& ^& X. ~4 d2 @0 b AJMP main ;跳转至主程序9 E3 g t$ a+ \1 B* E
ORG 0003H/ q- J. j* |2 s1 x+ v* v8 q
LJMP f_0 ;转到外部中断0
; i1 P2 n$ c- s, k8 T; M9 [ ORG 0013H
& g0 \# O# t' ^8 d8 O LJMP f_1 ;转到外部中断1; k5 c( I' g% O0 J6 b
ORG 0023H, I; ^% f& e( }" |" h u
LJMP serv ;串口中断
8 z+ S9 q* \! a" L8 u" o;-----------------------------------------------------------------------------------------------
' \, p1 M2 b; ~6 @;主程序* H' H2 M2 I) M- r9 W5 P
;-----------------------------------------------------------------------------------------------
6 Y6 @7 e& J" L) W/ a ORG 0030H ;主程序开始地址# ], r9 P+ b4 R* C
main: LCALL initRS232 ;串口初始化
- ~8 h$ i1 a4 N' a LCALL init ;中断初始化" M( z( O1 P( Z! c9 Z9 [1 J9 |" @
CLR send7 @( \" g; V3 {3 B) J# ~
SJMP $ ;等待操作
! ^3 ~! V2 x, R- t;-----------------------------------------------------------------------------------------------
& f1 z' x( I+ C* z0 [/ Q;外部中断0操作
' c6 E* Q9 Y( s& k* z;-----------------------------------------------------------------------------------------------
) b2 n8 J t" |! n+ z* v! Zf_0: PUSH PSW ;保护现场
& v! a9 y/ y) m5 k9 U PUSH ACC
4 K- w# A) H; h4 C0 m NOP ;延时等待响应
2 _; F. R' l7 D* o. I+ V NOP
( ]5 G) C9 L% a9 ^ SETB wai_show ;关闭中断1操作指示灯
/ ~* E' u2 ^7 }% d8 X- y NOP! m& j. v) A; T
MOV A,#11H ;把55H送到累加器; P' T8 @ }3 F: m. A) @$ j1 Y, q
MOV SBUF,A ;送到缓冲区
7 o3 z' w; D3 f* U JNB TI,$ ;等待发送完成- y, n# O @% m" |2 E/ G, w
CLR TI ;允许再发送
7 T% M5 z! H1 p) p$ _ MOV A,#0AAH ;把AAH送到累加器
+ a% H X/ j" ^' @5 j% w MOV SBUF,A ;送到缓冲区
6 r, S+ E2 ~9 L4 m JNB TI,$ ;等待发送完成6 ?- n6 v }% F4 x- N; H; z' f
CLR TI ;允许再发送: g' i1 k+ j; t$ `4 I t
NOP
' O" R0 Q$ A [8 W) i) l, G( @* t NOP
: w% n* H7 w, h, u0 e9 m4 n7 M CLR nei_show ;点亮中断0操作指示灯
# \& [, k$ J8 c ^" O' \ SETB send ;发送操作已完成标示
. j# z! o4 _# K/ Z POP ACC- ?6 d. r# ^" ^& X8 S7 d
POP PSW
- Y1 }4 I8 ]2 c1 \# t RETI
% E1 r8 Z8 h; D;-----------------------------------------------------------------------------------------------
8 L; s6 r- | N* g;外部中断1操作6 W/ C" R7 M0 Z& P7 d
;----------------------------------------------------------------------------------------------- $ t9 W8 y, I. c$ z4 O) T) _3 C1 y
f_1: PUSH PSW ;保护现场' t# a7 E7 H& p- k9 B- J% C
PUSH ACC
& F# y9 c+ ^( I w' T0 L% b NOP ;延时等待响应
, n" P+ p! x; [6 |6 ? NOP 9 n. ]! _- b6 O( U! C& C) Y
SETB nei_show ;关闭中断0操作指示灯
4 b0 s& e. j, v4 K X; A2 ?! ? NOP
* e$ b: X1 F) R& } MOV A,#11H ;把55H送到累加器
: u) q/ G: ~3 B9 S MOV SBUF,A ;送到缓冲区' i( _% N. S4 f5 P; k. x' m
JNB TI,$ ;等待发送完成
8 S h0 ^: b! L: X CLR TI ;允许再发送
" t) w) h8 C# l; R& ?: }1 a" H MOV A,#99H ;把99H送到累加器7 K1 K. j2 p9 o! G- b( {
MOV SBUF,A ;送到缓冲区
, e4 ^5 p4 Z4 h JNB TI,$ ;等待发送完成
3 l8 X: A5 H8 Q3 r) {. k2 x CLR TI ;允许再发送
8 i8 X3 Z; U6 M$ j2 p; U NOP
8 K; r" w9 [ u/ |# |% [( k NOP ' p) H9 `. x% `; E3 G1 a q R: W) B
CLR wai_show ;点亮中断1操作指示灯
& @3 O1 y& J7 p9 h: w" a w SETB send ;发送操作已完成标示
) z7 g5 ^' g A% q* _. E POP ACC
+ J+ M5 c* I& q( }+ r- g& { POP PSW
$ r4 r! R8 D, M$ C9 M! M! N4 ~ RETI 8 _; s) J O' _( h+ h8 K. o! S
;-----------------------------------------------------------------------------------------------5 T- ?4 ~1 G; P% W3 }7 Z
;串口中断子程序
; n) X/ ?' u" A6 d ?& R;-----------------------------------------------------------------------------------------------
- w& w/ @$ o* _0 gserv: PUSH PSW
8 R! |( q% b* _8 Y1 Z/ O; D PUSH ACC
% c8 z/ w4 G3 J2 S8 ^ NOP+ f# k0 P6 ]3 P+ ?& A8 _
CLR RI: t8 z+ t% \3 g: c
MOV A,SBUF
- ]# k. K8 e6 \& P+ ]$ K7 h: i MOV R0,A- [$ e# e: w" m6 [1 ?
CJNE A,#11H,NEXT18 Y$ g7 l& O" ^7 D2 M Y+ \
MOV A,R0
. K% x/ v- ^: Z* INEXT1: CJNE A,#0AAH,NEXT2: v0 f% X8 `: Q B) T6 m
CLR nei_show
! }7 m7 \ x* c& |7 e5 ?NEXT2: CJNE A,#99H,NEXT3, o" |+ J8 O! }, F( M
CLR wai_show7 @6 m! E: Z& R) D
NEXT3: POP ACC4 `' c/ @6 h W% u4 x) u/ v
POP PSW2 s/ S( H% _, U6 o4 V
RETI
5 J: E* O# _! }+ l;-----------------------------------------------------------------------------------------------
6 L4 q! D' G% g2 U8 I;延时10ms子程序
1 j5 H7 H2 ]% K;-----------------------------------------------------------------------------------------------
1 X; y. T+ h% M* l' wdel10: MOV R7,#404 s! _0 g0 R( {- C6 ~9 E
del1: MOV R6,#123
# k; B' s# F0 d7 z" i7 v NOP
/ T) G% l; g8 A. g; a/ e6 Ydel2: DJNZ R6,del2
) @$ Y2 T: Y( \7 t ~1 E DJNZ R7,del1
8 U! q a2 `: ?4 q RET
& y U" }) h, r% s8 N/ y* t# N;----------------------------------------------------------------------------------------------- 0 ^: W" |1 z7 C* A( q# B
;中断初始化子程序
! I; T; Z* Z9 w* N+ E;----------------------------------------------------------------------------------------------- / z& N# a: R4 ]( E7 e# i: A; i
init: SETB EA ;mcu开放中断1 A: t: ?: I, ]6 J) _
SETB EX0 ;允许INT0中断8 T6 C$ y# {! f! q
SETB IT0 ;设置INT0为边缘触发形式9 C9 b8 w0 C2 v
SETB EX1 ;允许INT1中断
+ m( V4 n. `# g6 y1 I SETB IT1 ;设置INT1为边缘触发形式3 z. G1 a3 I( @- U
SETB ES ;允许串口中断- F6 w) A) V! c+ w
RET % x0 z1 b7 R Q! J
;-----------------------------------------------------------------------------------------------
9 P5 y6 f3 B& A5 {, };串口初始化子程序9 w6 ~- V8 o% J. J0 M
;----------------------------------------------------------------------------------------------- 8 E: s! ?$ u) }( _# n0 V
initRS232:MOV TMOD,#20H ;定时器工作在方式2
: Q1 e0 U$ h$ F3 w MOV TH1,#0D0H ;设置波特率0E8H-2400,0D0H-1200. `$ g2 `, u) F0 W( a3 c* Y
MOV TL1,#0D0H; a l. f% i! p- w/ p# F
MOV PCON,#80H CON-电源控制; ]4 b! @- ]2 T7 I5 @, l
SETB TR1 ;启动定时器1
+ \9 k* Y' \0 y. ? MOV SCON,#0D0H ;SCON-串行口控制 MODE3 启动串行口接收数据
+ D, C- l; d$ [ U& m1 b# \: e RET ;返回
: g# z3 _0 o, m8 ? 8 v- p/ ]+ i/ [& B
END9 f( B9 ~& X* `& H
2 ^9 h3 ]) i. B+ o6 Y: i7 [' F 现在调试中,灯也不亮(电路中,发光二极管正极接5V电,负极通过上拉电阻接单片机),串口传输也不成功.... [0 @$ x5 G7 O7 C4 {0 I) v# W0 y
另外,小弟个人还怀疑按键的解法有问题。电路中采取独立式键盘一段直接接到中断源上,一端接地。并没有采用电源+上来电阻的形式。我查了下书籍,有的说到,单片机里面有上拉电阻可以这样子接法,但小弟还是怀疑~~ |
|