|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
小弟是做FPGA/cpld和一些简单硬件设计的,这两天逼于要写一个单片机程序(没办法,谁知道公司人少!)...可是,委实不会啊!!折腾了半天,参考了不少书籍,好不容易码出了一段~但是调试它愣是没反应!!时间又紧,小弟实在是没办法,只好上论坛来求救~~还望大侠们指点迷津~
: v6 k& F! B" v! o
1 j x* i+ V. q, q* ~! [ 要到达的功能: 80C2051单片机的中断源外接两个按键——当按下键1时把11AA通过串口发送到另一个单片机上;当按下键2时把1199通过串口发送到另一个单片机上...无按键时候等待操作!!
' L. O# Y0 o% w6 M 程序见下:
7 A% ?0 n' r, f2 } nei_in EQU P
% ~- Y5 F/ N) y; }) O8 L wai_in EQU P( t5 q0 m/ G) x5 W* {; `4 R
nei_show EQU P1.3 g/ L+ u& X: K4 ^2 `
wai_show EQU P1.4. q9 Q; b+ e) G- j5 D" i+ U
send EQU P1.26 J# J- D1 a4 d0 t- [1 r6 A
;-----------------------------------------------------------------------------------------------
l2 N$ c5 d2 W& \% L7 a ORG 0000H& c: ]4 o, [! i& L7 c1 Q) L. r
AJMP main ;跳转至主程序7 o8 J. W: L4 v, m" m# m
ORG 0003H
' l+ Z& `7 `( L0 Y7 o5 _. O, B LJMP f_0 ;转到外部中断0 u/ [6 |" z, ]& \. t
ORG 0013H2 `+ J% h/ R% m: k# z0 o
LJMP f_1 ;转到外部中断1 x/ ]- b& W1 e7 @- e: M
ORG 0023H% t* r" X W. a- K f" r7 t
LJMP serv ;串口中断
, J0 R4 |8 J1 a, M;-----------------------------------------------------------------------------------------------2 ]2 a, l* I' u" t, p
;主程序' U1 s2 k9 ] U: P" _- k
;----------------------------------------------------------------------------------------------- / y) L+ P* H" t
ORG 0030H ;主程序开始地址
0 e9 @. H: x2 g* ^main: LCALL initRS232 ;串口初始化
9 s1 ~- J) P" _# R4 A; @ LCALL init ;中断初始化 O, p) P$ b2 h# z& {2 R
CLR send1 C! i: j3 d% K1 c( Q8 i! L1 i
SJMP $ ;等待操作 3 a8 }2 h- G+ \( a
;-----------------------------------------------------------------------------------------------
/ F$ F" D7 k' P& i" s;外部中断0操作+ ^' n/ L, m& L! \" b$ G
;-----------------------------------------------------------------------------------------------
" J( ^! P) l2 `" x3 Tf_0: PUSH PSW ;保护现场& |4 K) I" e% P+ [" A
PUSH ACC
) n3 K& \$ F$ p" ]0 r7 l8 l NOP ;延时等待响应* E) y7 g# f* V. R5 v8 k9 J$ b
NOP
2 b' e+ k2 j( @! D2 Z SETB wai_show ;关闭中断1操作指示灯
* U4 F( n4 g; |" H% t3 S7 m NOP
" N. j, e* [4 c9 A" Z7 }2 V MOV A,#11H ;把55H送到累加器% M. T& V, r( Y$ G4 w4 T5 ^
MOV SBUF,A ;送到缓冲区. \3 z6 v" V: L0 ?
JNB TI,$ ;等待发送完成/ g( }9 v: o6 l, Q2 s; @$ G) N/ a
CLR TI ;允许再发送
. w. q- j$ }+ \6 ~' O/ K MOV A,#0AAH ;把AAH送到累加器
2 d/ t* K9 b& a1 n/ P MOV SBUF,A ;送到缓冲区9 p' E, h+ ^6 d$ |: K \
JNB TI,$ ;等待发送完成
$ g0 L; \2 X. W' j3 ]2 \, C" a CLR TI ;允许再发送/ t" `6 {2 B- [* ~
NOP
5 L: L! `- i; @6 F' F& g( ]1 g NOP
! j2 R: P$ s. E; s) d8 k- Q( K0 h CLR nei_show ;点亮中断0操作指示灯
% A! R; H7 Q' {2 I4 C8 c! h SETB send ;发送操作已完成标示3 ]. B# |, P, R W9 h9 [
POP ACC
2 q% }+ u0 m: ], w1 L. l& N POP PSW
( G! ~! P+ z, S( t5 N( }3 S RETI ' s- q J' c( ~. d% i" k9 o% z# \
;-----------------------------------------------------------------------------------------------
) D7 e& ] E2 u( I$ K% R;外部中断1操作
0 H1 r. j2 T4 `+ N9 [+ u8 S;-----------------------------------------------------------------------------------------------
, c% I: T% h3 a* |f_1: PUSH PSW ;保护现场2 z3 u6 e6 J" ?9 ^2 u" V# O+ U+ {
PUSH ACC l+ T2 z: u ~! n T; Y0 `
NOP ;延时等待响应4 _! E! r7 J! L% H- J
NOP
- @* l. |0 y! X0 E/ } SETB nei_show ;关闭中断0操作指示灯 b/ ^! O) i: W+ L
NOP5 _, r" G. e* s( `% l7 `6 v
MOV A,#11H ;把55H送到累加器
, I# R" `2 b* W# u. V9 i' J) K MOV SBUF,A ;送到缓冲区1 B2 B7 I$ _4 ]5 {* I
JNB TI,$ ;等待发送完成
8 b4 n" n* S, |3 G CLR TI ;允许再发送5 E5 Q3 S# N4 f8 v6 l* M8 c
MOV A,#99H ;把99H送到累加器
# |5 P) b) Y/ E, `' ~) ~ MOV SBUF,A ;送到缓冲区! y o# Z9 c c
JNB TI,$ ;等待发送完成
6 n2 F3 c9 c7 O9 t/ l5 ]' K) O, D CLR TI ;允许再发送
0 e- F( J5 y) n, |& R NOP 0 M8 W; b3 o: Q- l. S/ R1 Q
NOP
* D' V i, K } CLR wai_show ;点亮中断1操作指示灯
+ f0 ^" J$ Z9 ]8 {: t SETB send ;发送操作已完成标示/ Z2 E+ q- e w, C
POP ACC
$ n! V) H( R- I% ^: ?* y POP PSW0 i8 A+ {$ A1 W$ J* l
RETI
% v/ W4 {' T& [8 G;-----------------------------------------------------------------------------------------------
+ t4 t4 R! n' y! x;串口中断子程序
$ W& S, i- a U, l+ \;-----------------------------------------------------------------------------------------------
7 @$ r8 X* W! p- \serv: PUSH PSW* [5 ~1 E# Z. y$ S
PUSH ACC3 D! [; Q" J# S3 J" c" o* y* ^8 N
NOP" {5 s$ C3 s+ G; m4 L0 [& C) o
CLR RI
9 n' i: x: S8 C x MOV A,SBUF
% F5 ^3 \1 M& T" j( i MOV R0,A4 i* @9 T6 M& P4 H5 y9 l
CJNE A,#11H,NEXT1
! v& C# u" s" U8 s# s MOV A,R0
' k' o& W2 F% v) k0 u" O$ O2 P9 QNEXT1: CJNE A,#0AAH,NEXT2+ c( x) r1 Q$ w, ^1 l
CLR nei_show
" ]# ?- [2 z0 J3 w7 \. jNEXT2: CJNE A,#99H,NEXT3% M, t. _9 a0 T. V9 R' J
CLR wai_show" g1 ~3 D- i' m' T- ^! R" U
NEXT3: POP ACC
) U3 g9 s1 j/ J3 v7 j# E+ r: R POP PSW
' Y* @" w& p0 z8 W- V2 @: G) O N RETI0 |% t* J: O" l% |1 W
;-----------------------------------------------------------------------------------------------
3 i, y- F7 I: ~& a4 Y;延时10ms子程序
' [$ `( m! }) d/ z;-----------------------------------------------------------------------------------------------4 w! g9 v( V/ K* V
del10: MOV R7,#40- p8 ]' J# g( N ]: G
del1: MOV R6,#123
! Z7 y& m* Y( p0 ^+ I- x; O- R- J NOP
$ N* X( F# F4 P0 Z5 odel2: DJNZ R6,del22 d0 u3 B6 |# T3 y' `
DJNZ R7,del1
, x% R! I. H) s RET
" e: W6 {: g! K% Q. b J. w;-----------------------------------------------------------------------------------------------
1 ^9 k0 e( o, Y- ^: _;中断初始化子程序. b/ `+ ]2 a: b! O2 m; N
;----------------------------------------------------------------------------------------------- ( Q0 n% n" w: }& _
init: SETB EA ;mcu开放中断% ?* S6 W8 r, V8 P6 ^" K2 u3 w& q
SETB EX0 ;允许INT0中断
- F8 M7 a9 u5 w, U SETB IT0 ;设置INT0为边缘触发形式
" |/ [2 x) r" N# x6 } SETB EX1 ;允许INT1中断
" I* @5 L. ^4 m, o SETB IT1 ;设置INT1为边缘触发形式
4 f5 D* g& @# ]% d( U SETB ES ;允许串口中断
& p4 {8 ?; [' U4 @2 U! P' S RET , B( N, t- L+ F: R
;-----------------------------------------------------------------------------------------------
; b/ K; m# d( V% o& k;串口初始化子程序
9 K M2 N& D: E. B6 X& M;-----------------------------------------------------------------------------------------------
1 @+ E- @" S8 o* minitRS232:MOV TMOD,#20H ;定时器工作在方式2* [, D5 e9 l9 k Q2 g
MOV TH1,#0D0H ;设置波特率0E8H-2400,0D0H-1200
7 x; M/ { q- B' V MOV TL1,#0D0H
+ B3 T' t* p# {3 | MOV PCON,#80H CON-电源控制" Y C0 p1 B! v8 L
SETB TR1 ;启动定时器1# \$ z9 }7 K5 [- n. J. J) K
MOV SCON,#0D0H ;SCON-串行口控制 MODE3 启动串行口接收数据 : W6 Q" F! M) D
RET ;返回
( R- K4 j/ a' p5 b! j& C7 n1 x k
$ q& m: I% p6 V1 @ END
( R( \2 [( K+ f; q3 }! b. E Q, {$ s8 B' k. o% Y- O% s. m3 H" w
现在调试中,灯也不亮(电路中,发光二极管正极接5V电,负极通过上拉电阻接单片机),串口传输也不成功....
; v( L4 Z% v7 y# G; H( w2 H 另外,小弟个人还怀疑按键的解法有问题。电路中采取独立式键盘一段直接接到中断源上,一端接地。并没有采用电源+上来电阻的形式。我查了下书籍,有的说到,单片机里面有上拉电阻可以这样子接法,但小弟还是怀疑~~ |
|