|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
小弟是做FPGA/cpld和一些简单硬件设计的,这两天逼于要写一个单片机程序(没办法,谁知道公司人少!)...可是,委实不会啊!!折腾了半天,参考了不少书籍,好不容易码出了一段~但是调试它愣是没反应!!时间又紧,小弟实在是没办法,只好上论坛来求救~~还望大侠们指点迷津~
# A9 d' L. p/ V8 ?+ W) o
2 _2 F5 A+ T$ V; A& t8 _ 要到达的功能: 80C2051单片机的中断源外接两个按键——当按下键1时把11AA通过串口发送到另一个单片机上;当按下键2时把1199通过串口发送到另一个单片机上...无按键时候等待操作!!2 J0 `& h9 m3 Y( z, V
程序见下:
+ _ Q/ e" m9 {& e nei_in EQU P
$ M4 t4 X g- J6 c- e, M5 f/ q wai_in EQU P+ M% D( j& m! N0 x% J6 p
nei_show EQU P1.3. |* Q2 ~$ e% \! C6 [% |$ @
wai_show EQU P1.4
, u9 q% W- o2 \" c& }! r) X send EQU P1.2
% F' h! P4 G7 Y- l8 f- X2 g$ X' G;-----------------------------------------------------------------------------------------------, n4 D$ S3 Z; @& v. F. R
ORG 0000H& ^" W( h' r9 U3 z6 |0 j
AJMP main ;跳转至主程序
( ]% I8 z6 f' q, w, G9 ], {# q0 a3 O ORG 0003H% w( h4 S; Y; R9 G1 G$ _
LJMP f_0 ;转到外部中断0
q$ ^) A5 q# o# p ORG 0013H
6 A2 D: t) n( v+ C" ?( E LJMP f_1 ;转到外部中断11 ?+ Y w$ ~5 `' [8 n; _5 f a0 ~0 B
ORG 0023H
0 i" t5 Y5 A4 I" K LJMP serv ;串口中断5 H5 ?3 O/ }) [# f1 \0 ^7 W
;-----------------------------------------------------------------------------------------------
' T% @8 o) l( j% V. q0 Y;主程序0 F" M; r. e8 @
;-----------------------------------------------------------------------------------------------
. q6 ~2 d( ?7 G: j- I' }. c( x ORG 0030H ;主程序开始地址
1 \4 g6 D% T( jmain: LCALL initRS232 ;串口初始化) t- s" h) G# Z; H( _, D
LCALL init ;中断初始化
8 {' I9 a6 Q! f/ B CLR send
3 m7 d) f& k- r SJMP $ ;等待操作 : B: `( a2 e5 S* R5 y b0 T
;-----------------------------------------------------------------------------------------------
* S$ \6 C( q; u& {; Q;外部中断0操作- u; L4 S7 X. K4 Y& z" S
;-----------------------------------------------------------------------------------------------
5 q5 M% m6 C- Q5 O# `" kf_0: PUSH PSW ;保护现场
! M! j% Z5 C0 G3 F PUSH ACC
, j0 c3 |$ ?5 {3 {; b( d( L6 t9 O NOP ;延时等待响应3 N& l: C( T0 L" A: I8 f' |* B
NOP 4 d, u. O4 p4 a# _; _9 J3 S7 ?
SETB wai_show ;关闭中断1操作指示灯
' V7 b. H) a) i" i9 x O/ W NOP- E P1 v# i& G9 q% i6 {2 s
MOV A,#11H ;把55H送到累加器
3 i; Z2 j; e1 J+ ^/ T MOV SBUF,A ;送到缓冲区
{) x) @3 G3 O% v7 t; F3 h JNB TI,$ ;等待发送完成& m) T. s6 S% p7 F* ?% V
CLR TI ;允许再发送% l1 R4 i4 {" c
MOV A,#0AAH ;把AAH送到累加器
$ [* ]% s+ i, \" k" H; K MOV SBUF,A ;送到缓冲区
. T( O+ O* x/ K! J# s JNB TI,$ ;等待发送完成8 Z+ E% Z8 W; \* p
CLR TI ;允许再发送) D. z( [" U; d2 n3 b
NOP
9 P' ?9 X7 Y z2 u( L. l0 z X3 O NOP
" Q9 h) @9 O5 G! R U G: i CLR nei_show ;点亮中断0操作指示灯 : W' U- X2 X: ~, u: E' O" S1 n% o
SETB send ;发送操作已完成标示: @& \2 M2 f# E
POP ACC& Y( A' i, f) ^& v
POP PSW
* n1 w( s1 a8 C( s6 h RETI
+ y1 [( ]: R* j9 L/ }6 j& i% a;-----------------------------------------------------------------------------------------------& v+ e. Q6 l6 u5 [! y$ s% X
;外部中断1操作
2 p, L; [& y, r! P& a- m) x;-----------------------------------------------------------------------------------------------
# E6 Y( o( V* k% Df_1: PUSH PSW ;保护现场
( Z2 N$ ^) t; a+ P+ j4 T: o/ r5 N PUSH ACC
; V1 m4 U9 w7 A* s+ ^& G! K& ? NOP ;延时等待响应
5 o6 M; A# v0 j; ^; A, n" {' f NOP % a( I1 T8 ^" A; X- k, }
SETB nei_show ;关闭中断0操作指示灯
+ ^: ?+ y6 G: @3 l/ u) ? NOP
7 u( d7 F: w: g' y$ ~9 {( V( P MOV A,#11H ;把55H送到累加器
' a! A8 l6 F9 c+ k MOV SBUF,A ;送到缓冲区+ B5 r& l( @" H$ Y4 O. x7 H% y
JNB TI,$ ;等待发送完成
; e1 \4 k% k y- `7 U+ Y6 M% ?3 w CLR TI ;允许再发送
5 X# S1 S K& U* ^% Z2 M MOV A,#99H ;把99H送到累加器' J# H \' ?! f7 {, }
MOV SBUF,A ;送到缓冲区$ x: q# q8 h/ A8 \( x
JNB TI,$ ;等待发送完成
, s# ^ O( T* N: d; {7 K1 h: a/ F( s CLR TI ;允许再发送- J* x: S/ U6 K$ t8 T4 T |, v
NOP 6 y# n/ }. K- |( [( `
NOP - c9 n X- L9 `; g) f
CLR wai_show ;点亮中断1操作指示灯
2 L3 w2 I7 Q: e8 J. A/ B SETB send ;发送操作已完成标示
_/ s% K9 l# O" P2 \ POP ACC
# K* z! l& H* N* d POP PSW
8 X# L1 N6 j. e1 p5 l0 K7 A t RETI
- ]: N4 v( t: G3 `+ L;-----------------------------------------------------------------------------------------------3 I S' G3 M* L
;串口中断子程序7 ^2 d# O- B3 g( O+ P4 q
;-----------------------------------------------------------------------------------------------
+ U/ x5 I- w8 Kserv: PUSH PSW
) s3 n+ r3 ^4 i& W+ p0 V PUSH ACC
7 @8 ^9 [1 h4 w1 Z NOP
* K2 {8 @) H7 D: X" u CLR RI$ i8 T6 M1 S& |3 [
MOV A,SBUF
* ~. l) c& g( u0 F" \ S MOV R0,A
# [: s- x1 @( N7 G8 s CJNE A,#11H,NEXT1
7 v: b6 W4 A1 j/ x; w1 T MOV A,R0
% t4 `0 L5 ], b/ _NEXT1: CJNE A,#0AAH,NEXT2
9 U8 j& f, v$ [) J3 | CLR nei_show1 H* }' H- m, ]. O( g
NEXT2: CJNE A,#99H,NEXT3
8 ]: U9 n F# \% s* n$ w9 d$ w CLR wai_show5 a; }( W8 C# I, T* ^$ k* S
NEXT3: POP ACC
/ m% G! X. q A5 p POP PSW
2 y6 z# V3 _2 q* Q' _7 _1 g9 D( W4 B9 { RETI
8 P7 V& W' m0 |; h. k6 v/ F;-----------------------------------------------------------------------------------------------% ~; `+ A+ ] b& Z1 X; j3 U
;延时10ms子程序; U& \: n" d, G3 G; I
;-----------------------------------------------------------------------------------------------
0 H. O' x/ s4 S; o8 `del10: MOV R7,#40
5 F/ B& n7 u% u7 ~del1: MOV R6,#123# M1 E: l/ T1 |# ~0 ?
NOP
' }5 R6 L: ~ f7 ?del2: DJNZ R6,del2
! `: Z$ j: f! B DJNZ R7,del1( I3 H( i- O' B* O X5 a
RET
* b- {) H3 `3 S# k6 U; p;-----------------------------------------------------------------------------------------------
2 X6 X- }% {/ }* F3 m" _;中断初始化子程序9 w+ s; N9 ^* A( b" X% w" o1 {! ?
;----------------------------------------------------------------------------------------------- * o9 L6 j3 G( [! l
init: SETB EA ;mcu开放中断
, w" R) X% p; w! h( K" {+ ~ SETB EX0 ;允许INT0中断
) ^# O/ z# C: o5 N, {( O7 Z$ n SETB IT0 ;设置INT0为边缘触发形式
) ]# ?1 Q. G* }3 U& G SETB EX1 ;允许INT1中断 W/ f+ M# }) K- w
SETB IT1 ;设置INT1为边缘触发形式
7 O8 U( Y1 d# F7 u7 {# U SETB ES ;允许串口中断
& a8 j* h" D* u RET & p! W; }. D+ _. b% i- k3 `3 J/ y
;----------------------------------------------------------------------------------------------- $ N! w( Q: H! m$ m5 C' {0 h
;串口初始化子程序6 i _, e) K8 B
;-----------------------------------------------------------------------------------------------
* R8 h9 t; k; X# cinitRS232:MOV TMOD,#20H ;定时器工作在方式2
% Y* B1 H% k9 c0 H, ~% @$ r MOV TH1,#0D0H ;设置波特率0E8H-2400,0D0H-1200# d3 W3 W2 K+ N# E2 H: R1 A# g
MOV TL1,#0D0H8 ?* J- J; \9 a" h
MOV PCON,#80H CON-电源控制
7 L; u6 T/ h) ]! S; |/ ]1 | SETB TR1 ;启动定时器1
4 Z/ F6 G R0 n2 U* F+ q* Q' f& _3 J MOV SCON,#0D0H ;SCON-串行口控制 MODE3 启动串行口接收数据
3 A+ T% y/ l9 I; ]4 b, L6 ` RET ;返回
, d% ~& F% T1 y+ P( J" ^
6 q" ]5 p1 m7 T& z7 ~2 q END
7 Q( ]( ~. x# y% b+ i6 Y1 {2 l v+ q
现在调试中,灯也不亮(电路中,发光二极管正极接5V电,负极通过上拉电阻接单片机),串口传输也不成功....
1 k. ?; m8 W0 P( i6 u; K* B 另外,小弟个人还怀疑按键的解法有问题。电路中采取独立式键盘一段直接接到中断源上,一端接地。并没有采用电源+上来电阻的形式。我查了下书籍,有的说到,单片机里面有上拉电阻可以这样子接法,但小弟还是怀疑~~ |
|