|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
小弟是做FPGA/cpld和一些简单硬件设计的,这两天逼于要写一个单片机程序(没办法,谁知道公司人少!)...可是,委实不会啊!!折腾了半天,参考了不少书籍,好不容易码出了一段~但是调试它愣是没反应!!时间又紧,小弟实在是没办法,只好上论坛来求救~~还望大侠们指点迷津~4 `6 J% a8 [# n; ]6 Y
; ?3 @! ^" |' w* o* @ 要到达的功能: 80C2051单片机的中断源外接两个按键——当按下键1时把11AA通过串口发送到另一个单片机上;当按下键2时把1199通过串口发送到另一个单片机上...无按键时候等待操作!!
$ w# k& d4 f7 E, \, i- r' V7 i4 d 程序见下:' D6 C: U, ? Q* J, U% e
nei_in EQU P
/ W+ H* U0 u& B' i3 D5 s wai_in EQU P
- r0 o8 W/ ^7 G5 O) B* s nei_show EQU P1.3
0 a# d' F7 P- B wai_show EQU P1.4: {0 k/ G& B; u. p! }/ H0 b
send EQU P1.2* j8 M- S6 Q" m/ d7 @6 K$ ]
;-----------------------------------------------------------------------------------------------
0 h$ K1 t. l. m0 z5 L& V ORG 0000H3 i: L- ?! \$ F4 ?! y
AJMP main ;跳转至主程序
" @9 f$ `" \ G7 A3 m8 B8 I/ K ORG 0003H
# N: M) Z. k- Q' N2 a2 j/ w LJMP f_0 ;转到外部中断0% v! u, E) J& G& n
ORG 0013H
0 V' V& T% E J" E; @4 x LJMP f_1 ;转到外部中断1
' a1 }% ]* O o ORG 0023H+ F; f. b) x% b9 [
LJMP serv ;串口中断
. ?# c9 c( i, B1 ^7 ^& X;-----------------------------------------------------------------------------------------------
. f1 D" J, B" c;主程序
; U; F! o5 ^7 K" J" y' r;----------------------------------------------------------------------------------------------- : A. F" ` C/ g T. f% S4 K
ORG 0030H ;主程序开始地址3 b! d/ y- r L( ?. s
main: LCALL initRS232 ;串口初始化$ M9 P4 p! {' {
LCALL init ;中断初始化
! y" g- W1 T( K) \+ Y CLR send( \8 `! L0 `3 d, J: F. s- h
SJMP $ ;等待操作
) ^3 [( q* @$ I;-----------------------------------------------------------------------------------------------9 T9 O- X$ X1 \% {6 I
;外部中断0操作
# k% l7 Z5 v& z9 l! w# @ @1 x- D& A;-----------------------------------------------------------------------------------------------
3 \/ b8 Z0 a Q) l4 J6 I4 Kf_0: PUSH PSW ;保护现场
, {3 x0 T& y; D2 |+ C+ E5 s PUSH ACC* o! I; D+ S, ]) o: c9 `
NOP ;延时等待响应9 x" U6 @2 Y6 l6 d
NOP * }: ~* ~4 I: n" L1 ?3 r5 q
SETB wai_show ;关闭中断1操作指示灯7 z3 K0 h5 ?" n ~5 K% O9 C
NOP5 n& R3 {. S# x; ?
MOV A,#11H ;把55H送到累加器6 {; ]3 c) ~- L
MOV SBUF,A ;送到缓冲区3 o3 Y* B4 y# ~5 e; `% L- Z& p T
JNB TI,$ ;等待发送完成
+ K) L0 a5 B2 V6 i( J$ Z CLR TI ;允许再发送# b Q, x# S+ @ J* x' g
MOV A,#0AAH ;把AAH送到累加器
% p- L" z# }6 n8 x MOV SBUF,A ;送到缓冲区
( G& Q9 X' }8 b/ A* {. @# h9 ?! {0 [ JNB TI,$ ;等待发送完成
9 P) T- w1 K) g2 { CLR TI ;允许再发送0 K4 c" K; G8 M$ h5 P
NOP 4 ^) p; g! }( A9 p+ X
NOP ' A2 W1 \7 T, Z( _
CLR nei_show ;点亮中断0操作指示灯 , I2 d' ~* N9 M9 y9 i, {) o- { c
SETB send ;发送操作已完成标示
9 M# {3 @& I- Y( g1 C) P5 { POP ACC1 \3 ]2 r8 i" L
POP PSW
5 J8 t2 T! @6 e! T) r8 w: k* X RETI - e5 @4 h+ [9 T2 j' B2 c& U
;-----------------------------------------------------------------------------------------------
, P6 c/ q( g# q$ h7 l& W;外部中断1操作2 R0 u& _5 V" k& v& m
;-----------------------------------------------------------------------------------------------
& r: r0 ~6 D+ k3 {; v4 } D# ^f_1: PUSH PSW ;保护现场
3 \5 V, V, A v PUSH ACC
! q7 v: P' a( a# p) f2 x1 J$ W f NOP ;延时等待响应# {- N. p# C0 J- j; K1 W
NOP
9 ~6 Z6 h8 ?% `: [; g SETB nei_show ;关闭中断0操作指示灯
/ P9 @8 `. }9 G9 a j+ v' q3 i- P NOP
1 F5 S+ F* ]4 z MOV A,#11H ;把55H送到累加器
% ]1 [2 [" h2 H) V" v. s8 ] MOV SBUF,A ;送到缓冲区; L1 Q# m. m. [+ l: T1 } b
JNB TI,$ ;等待发送完成
' x3 s. D2 P4 Q3 X& I% S CLR TI ;允许再发送3 O' n+ k5 ^* c
MOV A,#99H ;把99H送到累加器3 R1 v: Z/ ^; \
MOV SBUF,A ;送到缓冲区
3 U" r' J# i" I, |/ f3 f JNB TI,$ ;等待发送完成
7 q7 R; b! i& n CLR TI ;允许再发送% ^0 s$ v* E2 \& ]6 B) X% T! m/ X
NOP
0 D' _8 m4 f% D0 j: t NOP
" C7 i9 }7 Q3 K, U# J- b CLR wai_show ;点亮中断1操作指示灯
- }/ p" h0 A9 k SETB send ;发送操作已完成标示
3 n$ p. [' s5 q POP ACC" w9 R# Q* v4 L( @! _9 r
POP PSW' h2 Z8 X% @' Y
RETI
4 G6 X) o5 z1 o;-----------------------------------------------------------------------------------------------
/ S& q* [7 b8 g3 ^6 I! H;串口中断子程序 ~- ^: S4 H7 U0 A- T
;-----------------------------------------------------------------------------------------------, v- s+ w( @; P+ i8 E2 i1 M
serv: PUSH PSW" S/ z# G- S( w' }
PUSH ACC
7 k7 h) v# f8 R0 S0 U) F3 b, K NOP/ {# l% }! g8 M! C9 R
CLR RI1 i+ }* B' ~! S% R O. i( z+ f
MOV A,SBUF
. {" |' |# @) K" ?0 g' l' Z MOV R0,A
$ M# h& g0 y& D5 C8 T$ C0 _( c CJNE A,#11H,NEXT11 z! z5 k7 M) L5 x$ j' x; x- L2 D
MOV A,R07 p5 t$ y. j; P
NEXT1: CJNE A,#0AAH,NEXT26 G b% F1 R5 b0 Q0 l1 U% m6 t
CLR nei_show- _" g2 L* n% y ~* e8 g
NEXT2: CJNE A,#99H,NEXT3: D5 m5 I* X! Q; c ~
CLR wai_show6 F3 j: q' n+ v; [ C7 P C% n) n/ u8 ]
NEXT3: POP ACC
* Z5 @/ ~7 B$ j6 [* c; Y POP PSW
5 X7 S) G- r) C& g9 L RETI
% U' H7 ]% C, G, |/ g0 Z. G P" b" a;-----------------------------------------------------------------------------------------------% ]$ O! }6 n9 V* l2 ^' D6 S
;延时10ms子程序! E4 V. @; w1 O# @
;-----------------------------------------------------------------------------------------------
3 h2 T' W. g1 @5 P+ Adel10: MOV R7,#40
5 Q7 t. J9 B S' Mdel1: MOV R6,#1236 b8 e, e: |- I7 q6 Q) y, W0 f+ g0 D
NOP
4 v& P: M+ Y$ R/ ydel2: DJNZ R6,del2
( ]+ E9 t; x( W DJNZ R7,del1. i5 I* h$ _9 J+ x2 H, c t E1 }7 P1 M
RET
8 x [1 N r2 E* F6 d9 H$ G;----------------------------------------------------------------------------------------------- & j1 w8 W# T0 i
;中断初始化子程序7 s$ |8 x( n. c- n, i/ A: _
;-----------------------------------------------------------------------------------------------
7 `- N+ J9 s/ c' p+ K6 L. Einit: SETB EA ;mcu开放中断$ X, D' A- ~; K, ]6 F% h% ~
SETB EX0 ;允许INT0中断5 d; m+ b' G+ _" ?
SETB IT0 ;设置INT0为边缘触发形式3 x! ?0 j$ w% Z5 H
SETB EX1 ;允许INT1中断
* Y V1 ~8 F3 _) B, B) O6 [ SETB IT1 ;设置INT1为边缘触发形式
" D* h5 Q) k4 R; a SETB ES ;允许串口中断
A7 s2 t( |7 l' G( o RET
# j! h6 C5 f9 o3 A;-----------------------------------------------------------------------------------------------
9 F: |2 [% p/ \! R+ t; ] a;串口初始化子程序: G- n1 M" ^/ L- k) h U; |7 G6 d Q
;----------------------------------------------------------------------------------------------- / U* w8 T: L- [1 H
initRS232:MOV TMOD,#20H ;定时器工作在方式2
9 I- c8 A3 I& ^3 S! c# M- @: \ MOV TH1,#0D0H ;设置波特率0E8H-2400,0D0H-1200
3 t# p" T+ h$ x2 ^# ~0 d7 E' _$ | MOV TL1,#0D0H
+ a. D# ?+ ?, _6 o# ~ MOV PCON,#80H CON-电源控制: X# ?1 |5 T& @& O" E% w
SETB TR1 ;启动定时器1
% m( K& z# x; R. I MOV SCON,#0D0H ;SCON-串行口控制 MODE3 启动串行口接收数据 , M& L) l' o3 i+ {9 J
RET ;返回 Q S& r$ H$ H- x% D9 B1 a- D
& l' | p& |" O$ ? x
END
y. i* g- \+ \; Q$ I
7 ?2 X- Q: ]% s; E 现在调试中,灯也不亮(电路中,发光二极管正极接5V电,负极通过上拉电阻接单片机),串口传输也不成功....
$ J) a- `( u0 v1 _" m 另外,小弟个人还怀疑按键的解法有问题。电路中采取独立式键盘一段直接接到中断源上,一端接地。并没有采用电源+上来电阻的形式。我查了下书籍,有的说到,单片机里面有上拉电阻可以这样子接法,但小弟还是怀疑~~ |
|