|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
小弟是做FPGA/cpld和一些简单硬件设计的,这两天逼于要写一个单片机程序(没办法,谁知道公司人少!)...可是,委实不会啊!!折腾了半天,参考了不少书籍,好不容易码出了一段~但是调试它愣是没反应!!时间又紧,小弟实在是没办法,只好上论坛来求救~~还望大侠们指点迷津~+ K% D- }7 v$ R3 E8 g7 u9 b
8 V( q2 M( y1 b Z7 {- L/ }
要到达的功能: 80C2051单片机的中断源外接两个按键——当按下键1时把11AA通过串口发送到另一个单片机上;当按下键2时把1199通过串口发送到另一个单片机上...无按键时候等待操作!!
( Y# _9 i" v1 Q/ |* B: v3 H 程序见下: f" T+ u; N3 }8 W7 ^% E
nei_in EQU P3 v, d2 T7 Y5 w
wai_in EQU P
+ J5 F1 \! }# O4 b/ i1 P i nei_show EQU P1.3
) _; M- Z1 h: F4 Q9 u3 e( V wai_show EQU P1.4
$ [3 L5 F0 @) D send EQU P1.2
% G$ ^- p! ?; B( v9 m: w2 j+ w+ W;-----------------------------------------------------------------------------------------------
2 s g/ y' \9 v3 ^ @ ORG 0000H
" d5 E) D, P, |/ j ?$ |$ ` AJMP main ;跳转至主程序
/ ]( h) w; B$ H0 l3 ` ORG 0003H, J3 t9 n6 j+ A! |9 q
LJMP f_0 ;转到外部中断0
+ _7 C9 L8 T# ] ORG 0013H
! f! v1 K, p# i0 P E0 {4 v e. ~( z LJMP f_1 ;转到外部中断10 m/ d m' F1 `. j& ^7 |
ORG 0023H
- O- h7 I) L. _: h' D! f L' y LJMP serv ;串口中断
# M5 c$ I2 i1 M; d2 J( B;-----------------------------------------------------------------------------------------------
! R9 v# }# r G+ J2 I( ];主程序
2 s. f5 }/ d) H6 b+ ^, v;----------------------------------------------------------------------------------------------- & v9 Q4 N, w5 j; q! L
ORG 0030H ;主程序开始地址
4 D$ X+ a I; e* Pmain: LCALL initRS232 ;串口初始化
- l4 w2 Z5 o' u8 O, e$ D1 f3 g) m LCALL init ;中断初始化) e( d2 l1 u/ T- P& L$ x
CLR send8 z) ]& z9 R# T5 n! @: }
SJMP $ ;等待操作 & H) s' q4 m1 o" @
;-----------------------------------------------------------------------------------------------
- j# ]! B- r6 f2 F$ M7 ~;外部中断0操作/ y! v1 Y q% B6 }( g/ J8 r" ?
;----------------------------------------------------------------------------------------------- 0 F7 Q8 H- r7 H% ^1 ^
f_0: PUSH PSW ;保护现场- k# b$ |% O. }; g$ V7 P. Z
PUSH ACC
5 C/ p z7 U; }& ~+ D- K NOP ;延时等待响应
; c4 }8 p' I$ _3 L2 P NOP 8 ?# M; z* v+ M# c- k- z- x* X0 |
SETB wai_show ;关闭中断1操作指示灯
+ [8 _' {: z" Y- t NOP
; M j7 z a- f& t" P o8 { MOV A,#11H ;把55H送到累加器% h& o8 V' V7 m& [% X. v6 ]3 O
MOV SBUF,A ;送到缓冲区
. C/ q' b# x# _" { O2 q# f- p- O JNB TI,$ ;等待发送完成
. ]3 U/ p% q( P \ CLR TI ;允许再发送: x, @! h. _5 e' h
MOV A,#0AAH ;把AAH送到累加器5 i* H* Q1 d- d: W* s
MOV SBUF,A ;送到缓冲区
0 G0 g7 z! K* s" s JNB TI,$ ;等待发送完成
Q( r7 C& L' F& U; [3 |* E CLR TI ;允许再发送5 @2 H. @" d2 F) o( X3 M$ S
NOP
5 L' J0 n5 Y( t+ ^; W' ` NOP
; ?- Z8 c% C3 M4 D1 u( l% p CLR nei_show ;点亮中断0操作指示灯 ( a$ `" m4 M# u9 L, U) V' q
SETB send ;发送操作已完成标示
% q9 _6 q, N f' b- O7 R POP ACC
6 N9 o* Z0 t! B9 p POP PSW; y x% [' I# X& a1 I2 k2 o4 Q
RETI . X2 s6 `4 E5 ~6 A5 R
;-----------------------------------------------------------------------------------------------1 P+ h' y# s4 R+ v, A) `! B
;外部中断1操作% L2 u7 h8 o- r: }0 k* j. ]( X
;----------------------------------------------------------------------------------------------- 5 N+ i: u: B" U6 J
f_1: PUSH PSW ;保护现场" B5 G# {- p2 h3 I' U8 E7 z1 b$ H
PUSH ACC* z2 L$ ?& V/ |6 S6 Q" z' n
NOP ;延时等待响应
% c) B# B" Z$ P: H E; e# {+ K NOP
2 B+ \/ @$ F; P+ |& o6 ` SETB nei_show ;关闭中断0操作指示灯. C+ t I/ R- Z. Z5 p7 J
NOP/ b5 P2 L7 C$ B l
MOV A,#11H ;把55H送到累加器
. c; m+ `( ^( \ y8 x MOV SBUF,A ;送到缓冲区
6 ]2 Q5 x9 u% E# P" S9 z; j {% n JNB TI,$ ;等待发送完成
+ `3 C' g& R. a: \ CLR TI ;允许再发送
2 \" O& f& m/ D. o: c MOV A,#99H ;把99H送到累加器% Z. X |# `8 T
MOV SBUF,A ;送到缓冲区
( x @+ Q6 P% z8 N# D- V: l' \ JNB TI,$ ;等待发送完成+ x5 O" P' q5 A
CLR TI ;允许再发送) N) p& n3 H8 v% ~+ u+ {
NOP
" z2 t$ @; w9 k NOP ; N& d C. {7 }4 b
CLR wai_show ;点亮中断1操作指示灯
% h0 ]8 |& q4 T" o1 t+ \ SETB send ;发送操作已完成标示3 R0 B% I$ V4 K! r
POP ACC
; `' H8 G+ P t+ F7 q POP PSW
1 h- _2 N# h. B" i RETI
" ~" m! |7 l5 `& u- G;-----------------------------------------------------------------------------------------------
' C# |7 K8 D' [& L8 I" ~ X;串口中断子程序
! @. n/ O- Z. N" W W3 B;-----------------------------------------------------------------------------------------------$ o* i5 w# h2 f, n
serv: PUSH PSW
! N' y' t4 e8 J; |2 } PUSH ACC5 w+ h3 v/ i2 s1 A
NOP, _& c: ` p& | q' D5 A6 M; m! W0 b
CLR RI
3 _! |4 Y* h0 v2 ~2 X. z MOV A,SBUF/ Y" z# p! _1 B5 p# J& _' Z! H
MOV R0,A, n- n& C9 ^0 ]+ q# _' v. }
CJNE A,#11H,NEXT1
: K% ]* C3 M2 A( A7 g% B( w MOV A,R0
4 X6 u7 M7 t# W' X5 b" M6 zNEXT1: CJNE A,#0AAH,NEXT2
) [5 s A$ J$ Q5 d7 V& M9 i* S CLR nei_show
9 _- c' B1 o' v; x C, i: uNEXT2: CJNE A,#99H,NEXT3
, i& h( n$ ~0 J CLR wai_show
+ g5 j: O; Z5 e! ENEXT3: POP ACC
( B \& d: o- p" D POP PSW
) Z$ P2 V# u3 H2 R# |# G RETI0 A7 q c6 S" y. _* m
;-----------------------------------------------------------------------------------------------
4 V' x. W4 E) ?5 ?7 Y;延时10ms子程序- q! w8 p! j& d1 F9 m- p/ F+ R/ q
;-----------------------------------------------------------------------------------------------
) P4 I7 d! o5 V; ^; \# zdel10: MOV R7,#40
3 r- ]$ w( A$ {7 Z! @5 K% gdel1: MOV R6,#123+ H c3 e) [6 I* R5 E
NOP
1 @% Q' f) @) |4 V9 [3 Ydel2: DJNZ R6,del2
' t+ Y0 o' _: S$ t: A DJNZ R7,del1 z. B1 C$ l; m; F7 k' R. n
RET$ r0 Y) b' L4 m
;----------------------------------------------------------------------------------------------- 2 r$ q# O: F" J+ o: g' b9 d/ y
;中断初始化子程序
1 b9 p- B4 R; c" n p$ h;-----------------------------------------------------------------------------------------------
. F& U2 o9 c2 l6 |8 xinit: SETB EA ;mcu开放中断9 k* v/ k6 `% @
SETB EX0 ;允许INT0中断
6 P3 C' M# Z6 ]0 e6 H! w SETB IT0 ;设置INT0为边缘触发形式
: Y. Y$ e5 A C1 \+ z* R SETB EX1 ;允许INT1中断! L0 m1 [6 h' L& {: K# }: j5 q
SETB IT1 ;设置INT1为边缘触发形式' ^; V9 M0 s2 K% G
SETB ES ;允许串口中断
+ \ z( W( C/ P4 L+ X n0 p RET - ]6 O. C2 r1 L( |9 ^6 s# m
;----------------------------------------------------------------------------------------------- 6 e7 z4 n2 _$ U
;串口初始化子程序5 j9 e0 |. Y" {2 q$ g k& u
;-----------------------------------------------------------------------------------------------
$ h6 _% f# J! c, F) H* F3 C7 tinitRS232:MOV TMOD,#20H ;定时器工作在方式2
! @* ]( n9 C ]/ W( l5 F, d3 i/ I0 { MOV TH1,#0D0H ;设置波特率0E8H-2400,0D0H-1200
& u" ?6 c) ?# P& c6 { MOV TL1,#0D0H
' q4 m2 N0 V, B# v9 f1 ] MOV PCON,#80H CON-电源控制
( _3 t" u1 _% {; U SETB TR1 ;启动定时器1
3 @3 f5 s5 G. u MOV SCON,#0D0H ;SCON-串行口控制 MODE3 启动串行口接收数据
% J$ p3 r' ]5 ^ RET ;返回8 k5 D* ]0 C# j0 X# U
+ R4 Y0 x" f# W0 c* g END' z: u9 g7 F( v
9 N( O% `7 k& F0 [1 f; }8 [2 Z/ v( U
现在调试中,灯也不亮(电路中,发光二极管正极接5V电,负极通过上拉电阻接单片机),串口传输也不成功....6 J" ]6 J) B* p9 c" v% j ~( t
另外,小弟个人还怀疑按键的解法有问题。电路中采取独立式键盘一段直接接到中断源上,一端接地。并没有采用电源+上来电阻的形式。我查了下书籍,有的说到,单片机里面有上拉电阻可以这样子接法,但小弟还是怀疑~~ |
|