|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
小弟是做FPGA/cpld和一些简单硬件设计的,这两天逼于要写一个单片机程序(没办法,谁知道公司人少!)...可是,委实不会啊!!折腾了半天,参考了不少书籍,好不容易码出了一段~但是调试它愣是没反应!!时间又紧,小弟实在是没办法,只好上论坛来求救~~还望大侠们指点迷津~
; i% w+ ^ F, B/ S/ k
$ q! x* n G1 d/ ? 要到达的功能: 80C2051单片机的中断源外接两个按键——当按下键1时把11AA通过串口发送到另一个单片机上;当按下键2时把1199通过串口发送到另一个单片机上...无按键时候等待操作!!
) `3 M9 O4 ~- x; {, A 程序见下:
2 X5 P3 }2 k6 n, A5 k6 ? nei_in EQU P/ H8 Q5 q% L4 M3 m X( X
wai_in EQU P& }4 s% u& g% }1 r6 b0 u* {
nei_show EQU P1.3* J: E# X( j- ]; J" }
wai_show EQU P1.4
9 t9 F- Z7 M( k' [: a, P send EQU P1.2
7 I6 _+ H$ c+ z0 |4 u. r;-----------------------------------------------------------------------------------------------
/ t' ?3 [; i% I3 { ORG 0000H
% Z8 l* z8 M+ t3 d- Y9 m- z AJMP main ;跳转至主程序* t5 P3 j: Z3 ]5 ?4 e
ORG 0003H
- j/ @& D, i9 }- D1 O LJMP f_0 ;转到外部中断0
1 @* H* F& f1 j% c; s4 s& L0 a ORG 0013H3 t+ I. O. M: q0 w
LJMP f_1 ;转到外部中断1& T! r" l9 g7 e/ l
ORG 0023H
' ]" B2 v# J! P s8 Y. C) ~ LJMP serv ;串口中断* [( p# h) I4 z- L& I
;-----------------------------------------------------------------------------------------------
$ q& S) w" c5 ]# A) Y1 y3 M;主程序
' E/ G6 c( t( i- a, [;-----------------------------------------------------------------------------------------------
/ T) V8 l: m' D& L ORG 0030H ;主程序开始地址
# d3 O- f9 A9 U/ k/ amain: LCALL initRS232 ;串口初始化; K' T: |+ w. r+ S/ l
LCALL init ;中断初始化# H. G- e% _. }7 K) `6 a; H" L- w
CLR send
$ J7 }2 A2 G1 Q SJMP $ ;等待操作 + Y. _' V7 c4 B
;-----------------------------------------------------------------------------------------------! K4 }; [" g' d
;外部中断0操作' N- I9 d- H& F: Z) }; n% k
;-----------------------------------------------------------------------------------------------
+ G, T* h4 j, `% p% n" lf_0: PUSH PSW ;保护现场
1 R/ U/ a" c5 I* q, e) F+ y PUSH ACC
% l# b a: l' w% ^% x7 X" y NOP ;延时等待响应
1 X: g: z2 E8 G* Y" _ NOP
- U/ V* u$ p6 C; K+ G3 M SETB wai_show ;关闭中断1操作指示灯# Y# O& Z1 _1 S8 I7 t |
NOP, K6 O9 d9 Q6 F9 l2 T' [
MOV A,#11H ;把55H送到累加器$ `& C/ G- g" [( P) G
MOV SBUF,A ;送到缓冲区
2 \- q7 K: O9 {' X' Z* I$ K JNB TI,$ ;等待发送完成
- @7 s& K7 O. o! B1 I& R CLR TI ;允许再发送4 i- [0 P6 f3 T
MOV A,#0AAH ;把AAH送到累加器5 O5 C+ @& {: C
MOV SBUF,A ;送到缓冲区
/ `5 k! N$ x$ J% i JNB TI,$ ;等待发送完成
2 e/ d: T0 Y- M0 q9 m" ~3 b4 n5 V CLR TI ;允许再发送
0 ^: U) W* Q" i; I# I; Q) M* p NOP & U2 W3 y Z3 D, b f
NOP `- d% A7 t' d( o' [9 K5 `
CLR nei_show ;点亮中断0操作指示灯
; Z0 J0 M; Y; d& W SETB send ;发送操作已完成标示
: H! q, A6 i; Y4 U POP ACC
1 l# o3 }* I" u( i/ ?& P POP PSW
1 g9 T% W# ~* s% V) z. E% z9 M; ^& D RETI
) q4 Q: t! z, m- K9 `5 ^# o;-----------------------------------------------------------------------------------------------
% K+ S- K' t; N, j+ X8 t;外部中断1操作
. B X" }5 L; [;----------------------------------------------------------------------------------------------- : l" c' `; h0 m
f_1: PUSH PSW ;保护现场
! J. U e# R. Y1 M% B) n PUSH ACC4 D) { c. p8 Z! C
NOP ;延时等待响应- X+ {% K2 M) P5 d0 }+ N% `
NOP % X5 l: \7 t# @& y% @
SETB nei_show ;关闭中断0操作指示灯
4 b z7 r* M/ v' R z NOP- H- l; s% K# W$ j, \2 ]5 p: z6 s
MOV A,#11H ;把55H送到累加器 p* W8 e; r- Q' M# o6 c0 p
MOV SBUF,A ;送到缓冲区; c- ^$ q- |3 n* S* [# s
JNB TI,$ ;等待发送完成- ]& Z7 g( V* o$ o3 Y/ o# Q
CLR TI ;允许再发送
! a; l+ z i, o, i MOV A,#99H ;把99H送到累加器
- C3 T% {, ^- s' j. B5 a8 J MOV SBUF,A ;送到缓冲区, Z$ R( p7 k+ O# ^' q {
JNB TI,$ ;等待发送完成% R: e* l# @- b) O; e& S4 W/ F
CLR TI ;允许再发送
7 b9 c0 P7 |0 d) o8 H+ a NOP # u- y4 i, ]! ~2 ~& s% A- U* _
NOP ; U' O+ @4 i3 f4 ?9 i
CLR wai_show ;点亮中断1操作指示灯
+ ? C+ S$ h& O SETB send ;发送操作已完成标示3 J# ?# \0 G- w8 O2 l
POP ACC. U0 I1 `$ k* `* M2 j
POP PSW
& o; Q2 A3 U8 M0 ] RETI + x/ b8 S& Y6 L n
;-----------------------------------------------------------------------------------------------
% B+ a9 D. H) ]# e4 f4 [0 D" d;串口中断子程序
8 e* t* [( M) s' ^: s2 K% ?;-----------------------------------------------------------------------------------------------; O4 C$ C4 U- g9 P
serv: PUSH PSW8 y* @) x7 r# |/ }5 D
PUSH ACC; }$ n, r: g9 W% l
NOP. b) j, R6 H3 {* w2 ]' M
CLR RI
0 S& U! Q6 w' L5 b. @ MOV A,SBUF
6 V" h4 w* P; j2 e: s& y MOV R0,A# `0 n' T2 I& e
CJNE A,#11H,NEXT1
2 |$ g. H! e$ o5 X7 ~" u' B MOV A,R0) S8 x5 T( p% ?+ z7 v; R
NEXT1: CJNE A,#0AAH,NEXT2
6 w3 t; \3 H8 {9 V5 V) g CLR nei_show D: c. q: k; Q
NEXT2: CJNE A,#99H,NEXT3
% |7 a* t2 g( H) w0 y CLR wai_show; w8 ~/ S$ |5 o) F/ B
NEXT3: POP ACC! f' @$ `5 h2 a3 x7 F; [& H+ o9 g
POP PSW
6 X6 z5 G+ H- ^+ u' `/ L$ Q RETI
0 C; z. s0 e- e A$ v4 D;-----------------------------------------------------------------------------------------------2 c! Z" ^% q" F- e$ A( U6 p; X+ D
;延时10ms子程序
/ ~0 M9 B* D/ f) ^5 Z: `;-----------------------------------------------------------------------------------------------. Y/ {7 _2 v3 w2 r5 R& v
del10: MOV R7,#40& S O0 V7 @* v
del1: MOV R6,#123
" F$ U: s! x) D( G NOP
4 u6 Y7 Y* B2 C( M1 Wdel2: DJNZ R6,del2) u3 E; B; k: q, Y; L& Z% `
DJNZ R7,del1
9 |1 R; L* [) C; i+ J+ C- {/ f RET
, | Q* K+ k1 D0 G8 G;-----------------------------------------------------------------------------------------------
. D7 L/ g2 n+ s3 d! U2 K1 ^;中断初始化子程序
: g- A/ B3 v4 B" z4 k;-----------------------------------------------------------------------------------------------
3 O& I/ n. N8 S3 s9 k/ u% G' finit: SETB EA ;mcu开放中断$ O6 p8 O2 q5 g A8 z: [! W1 |
SETB EX0 ;允许INT0中断5 h% X; R$ m* R3 C1 ?$ h ^
SETB IT0 ;设置INT0为边缘触发形式
/ M/ I) O- X0 m- T+ w2 q6 _2 h SETB EX1 ;允许INT1中断) g: B: i0 b5 n+ K2 v4 U
SETB IT1 ;设置INT1为边缘触发形式" M8 |% q/ g* X: q3 n* B9 f
SETB ES ;允许串口中断/ _# ?2 [# l4 n* @& e# ?
RET * b+ w5 S: E4 E) ~3 l0 x
;-----------------------------------------------------------------------------------------------
/ \$ ^# T% c* d! h* L;串口初始化子程序
+ u9 \' V/ O. `2 M;----------------------------------------------------------------------------------------------- ) S, G, A7 c, f# `
initRS232:MOV TMOD,#20H ;定时器工作在方式2
0 i2 f* @$ z- T1 M3 c0 ? MOV TH1,#0D0H ;设置波特率0E8H-2400,0D0H-1200& E0 x; D9 b" ?; V: `9 W- p8 `- s
MOV TL1,#0D0H
0 R/ q' ^ S6 y- ^5 t6 v: g MOV PCON,#80H CON-电源控制" ^% W$ W+ c$ F0 `' i
SETB TR1 ;启动定时器1
4 X! G. X" l& m. o MOV SCON,#0D0H ;SCON-串行口控制 MODE3 启动串行口接收数据
) E1 m7 g2 e/ ?5 m* b. C) b: h, _ RET ;返回
) r& _2 Z9 F0 Q i3 C5 E
* q# [; k9 c, ^$ Q END, b( ?( B- w5 u1 U& S' N6 S- K' b, e
+ O( t8 ~- B8 k# x: c. {. ~
现在调试中,灯也不亮(电路中,发光二极管正极接5V电,负极通过上拉电阻接单片机),串口传输也不成功....
0 [: K5 y& H. w8 u) K 另外,小弟个人还怀疑按键的解法有问题。电路中采取独立式键盘一段直接接到中断源上,一端接地。并没有采用电源+上来电阻的形式。我查了下书籍,有的说到,单片机里面有上拉电阻可以这样子接法,但小弟还是怀疑~~ |
|