|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
小弟是做FPGA/cpld和一些简单硬件设计的,这两天逼于要写一个单片机程序(没办法,谁知道公司人少!)...可是,委实不会啊!!折腾了半天,参考了不少书籍,好不容易码出了一段~但是调试它愣是没反应!!时间又紧,小弟实在是没办法,只好上论坛来求救~~还望大侠们指点迷津~
+ ~: D \' N l P/ N1 t! i! Z
3 A3 C0 F2 q9 S5 o/ r) W& e 要到达的功能: 80C2051单片机的中断源外接两个按键——当按下键1时把11AA通过串口发送到另一个单片机上;当按下键2时把1199通过串口发送到另一个单片机上...无按键时候等待操作!!
5 O* h4 q6 q6 ~# g) n 程序见下:; `! v0 J a1 L0 G
nei_in EQU P
( Y: o e% G( X& ~, \$ v8 O wai_in EQU P, t0 \: E1 w' O
nei_show EQU P1.3
) A7 b6 f, {' O5 j) H* C6 R F; b- J1 M# @ wai_show EQU P1.4
0 @3 r6 a8 o- u5 |, H& ^9 o! J send EQU P1.2! d' L9 N0 f5 d' \/ M
;-----------------------------------------------------------------------------------------------
/ V5 p$ l. w! d* t0 M; M% D( W$ q- M ORG 0000H
3 S; @% O! D& A3 H1 {/ ~6 k# ~1 `% k7 D5 G AJMP main ;跳转至主程序" U+ L8 R$ L4 C, Y& K
ORG 0003H
) J* E) _. n. z! G* O) |# \ LJMP f_0 ;转到外部中断0
7 O7 p% a7 d/ C9 b. h ORG 0013H" ^) r+ J2 B# c/ c+ |
LJMP f_1 ;转到外部中断1) V) F& R! G) x
ORG 0023H
% ~. E7 L! i4 J$ G. o' ^2 @) \ LJMP serv ;串口中断
% h8 x7 p& ]% @, A) u l- {;-----------------------------------------------------------------------------------------------
6 X* @1 C2 k$ b) K' a;主程序4 ?) v7 _; T; |; T
;-----------------------------------------------------------------------------------------------
& J6 y, R4 s1 X2 K% H# D8 e ORG 0030H ;主程序开始地址) n9 O( c9 d; C- Z6 m# e5 j
main: LCALL initRS232 ;串口初始化
; \( X0 x3 {7 F6 v7 }* v( ?4 p/ O LCALL init ;中断初始化& R" m' |- g' I h& K
CLR send5 ~6 z% t7 ^& s" t
SJMP $ ;等待操作 8 ~5 E% J- R. r3 C" p5 j
;-----------------------------------------------------------------------------------------------( x% \7 Y" [$ {- ~/ }
;外部中断0操作
! f r& h1 E5 E5 @! k0 K+ c;----------------------------------------------------------------------------------------------- 7 U. J4 q- W- ]: k; F$ v
f_0: PUSH PSW ;保护现场% `2 m' O/ F1 m3 u& g% P* M4 z0 K: f
PUSH ACC/ a7 W+ [& N$ ]& C" F2 j( K
NOP ;延时等待响应
$ X+ t& u2 O4 M+ o& P NOP + e$ I1 f4 c" N, @- |4 z; |' j
SETB wai_show ;关闭中断1操作指示灯! L0 D) \! |/ H
NOP
7 d, c( i: B. G( T5 ], R* T MOV A,#11H ;把55H送到累加器! u9 ]' e5 z1 E) a, V& l3 V: V$ W
MOV SBUF,A ;送到缓冲区
, t7 Z" a4 ]0 s7 _5 b9 M JNB TI,$ ;等待发送完成
& x, W* X) L) P) q" p6 Y/ S CLR TI ;允许再发送
4 r9 o% s8 s, Q/ K9 A: J# s MOV A,#0AAH ;把AAH送到累加器
6 ]% n4 B/ n+ m- H: G7 p MOV SBUF,A ;送到缓冲区1 r$ B Q4 c& l2 E& v# F P
JNB TI,$ ;等待发送完成6 Y$ O# `' _9 X
CLR TI ;允许再发送& B4 i" |* H' [
NOP
* t7 A& s6 J* u% ~- { NOP " A' _4 \% h i* T C
CLR nei_show ;点亮中断0操作指示灯 & o1 n3 K/ u9 w. g! [+ j
SETB send ;发送操作已完成标示# m& f2 O, O& s
POP ACC p6 E U3 j- ~/ E: _5 e2 e6 J
POP PSW
& | Y8 y( |2 h6 a RETI * p! Z' M4 i: b0 p; s% G' a
;-----------------------------------------------------------------------------------------------6 K$ a$ E' t0 v% J4 j8 ^
;外部中断1操作
/ N2 j& M" y( r2 |7 n1 I- H;-----------------------------------------------------------------------------------------------
% q; k, q! [! T, A0 |f_1: PUSH PSW ;保护现场
" b3 e! d' t& I2 y; k7 b PUSH ACC' C5 F E$ W* S7 B
NOP ;延时等待响应
8 G: i# d9 R5 _# _ NOP
' O" ]! I. F! w# g9 p6 \7 G" s SETB nei_show ;关闭中断0操作指示灯
/ ]3 x0 |& c% t% z& d NOP" I" k! E Y9 i8 t' c+ b3 J/ O
MOV A,#11H ;把55H送到累加器
" h: w; c0 u5 \8 @, p MOV SBUF,A ;送到缓冲区9 o! B2 c" P$ I" Q
JNB TI,$ ;等待发送完成
6 z7 p7 L+ } U8 z CLR TI ;允许再发送
9 j. e6 Q1 N6 L8 i7 E# M7 L MOV A,#99H ;把99H送到累加器
8 C" J0 l+ {) V4 ] v MOV SBUF,A ;送到缓冲区+ B V& {4 L& k! w. E
JNB TI,$ ;等待发送完成
2 V# j, T2 s1 J5 x; ? CLR TI ;允许再发送
' g8 c0 I1 J- [+ P# l NOP ' D J8 U- L4 q
NOP
1 O$ K# U: ?2 u CLR wai_show ;点亮中断1操作指示灯
9 q3 `4 o; j5 i* h SETB send ;发送操作已完成标示5 a% P5 w$ z% v
POP ACC
: [ p) R* Z& A POP PSW- h+ B7 l8 L2 a* D
RETI
E: {1 g8 N& ^3 n) l;-----------------------------------------------------------------------------------------------
" T9 W8 D4 T; U( B& o6 T;串口中断子程序
" Q% T+ I% @, Y' ~% \7 P% G- z0 d;-----------------------------------------------------------------------------------------------
$ O1 m ^5 w+ G6 k# H) b, _' V# Cserv: PUSH PSW* F E+ q3 i& K( q# o; R. Q
PUSH ACC$ J1 o8 p% c+ {
NOP
0 Z; x; R: |" z* V CLR RI
4 K( j9 v( Q" M6 D MOV A,SBUF
) ]3 p0 {* h( u3 V, t, U9 C MOV R0,A0 ^& ?8 C% W' X K6 |
CJNE A,#11H,NEXT1& b5 C+ M1 j0 {% y8 I: ?# m8 R
MOV A,R04 l; ]: L5 D' a1 c- i& ~
NEXT1: CJNE A,#0AAH,NEXT20 H: f% |: t8 F" G; a+ G
CLR nei_show
; M( o9 f) o6 a9 e' H& y% ]NEXT2: CJNE A,#99H,NEXT3' M" T' X1 w8 k; `% k
CLR wai_show: p0 t3 p5 i+ Q; m @
NEXT3: POP ACC
* e0 }+ f9 f4 e( z0 y POP PSW
0 k( m A; I- r9 O) q2 o RETI
# i+ t. l) T3 g+ o8 F8 n;-----------------------------------------------------------------------------------------------& A( F+ {3 a" `0 o
;延时10ms子程序6 W# t' w' M0 B- ]
;-----------------------------------------------------------------------------------------------3 Y2 f$ S ~+ j, H# Z8 a
del10: MOV R7,#40 c0 S3 V) F5 t) z1 j/ ]# D7 J
del1: MOV R6,#123
! s7 ^1 A8 B: R) E NOP 5 c/ x9 \, x0 O$ c: g) d8 y
del2: DJNZ R6,del21 }1 J- G9 c7 f* Q G, L% G* \
DJNZ R7,del15 f, @0 e$ A1 q) I, G
RET7 s! g2 j, n2 L+ Y3 u! l
;-----------------------------------------------------------------------------------------------
1 F. W$ q3 B2 Q9 r: Q;中断初始化子程序8 n+ x$ ~ f$ e* \! z
;----------------------------------------------------------------------------------------------- " J4 r6 [3 ~5 ^- g" B: @8 d
init: SETB EA ;mcu开放中断* Y% G9 W/ N* y8 x; s& `
SETB EX0 ;允许INT0中断$ F/ E0 j- e6 V. N3 C. _& Y
SETB IT0 ;设置INT0为边缘触发形式7 T' H c" T m( n- a
SETB EX1 ;允许INT1中断1 N3 T7 g% p7 ~) c4 n
SETB IT1 ;设置INT1为边缘触发形式, R# N( |( Q3 X/ O/ n9 R G/ o
SETB ES ;允许串口中断) K% r( y% E1 L5 i! h
RET
; T1 Z) h1 C& `;----------------------------------------------------------------------------------------------- 2 y4 n7 U, x/ L
;串口初始化子程序
0 h" M0 p2 A! ? F( };-----------------------------------------------------------------------------------------------
8 f1 @) |1 ~! V8 e! j# v8 K8 |initRS232:MOV TMOD,#20H ;定时器工作在方式22 ~! a' G* ?" i# s( q( Z9 A
MOV TH1,#0D0H ;设置波特率0E8H-2400,0D0H-1200$ O! u4 T( O$ Q- k3 u4 T& g
MOV TL1,#0D0H
$ v X9 U3 L: t) N# w$ k MOV PCON,#80H CON-电源控制* v0 J/ j& |8 y, ^# j$ @
SETB TR1 ;启动定时器1( e. J% t) ^: u) ?, F: w
MOV SCON,#0D0H ;SCON-串行口控制 MODE3 启动串行口接收数据 , c! K3 z# J- J: k
RET ;返回
8 a3 b( J5 G/ x% ]7 C
/ ^' t) O9 |- }2 |* J- \1 R; n END$ J( l" Q! a' L
5 q% g. e* S# Y4 D( r' \: Z 现在调试中,灯也不亮(电路中,发光二极管正极接5V电,负极通过上拉电阻接单片机),串口传输也不成功....
" [, a; s+ k6 ?) z9 o; I 另外,小弟个人还怀疑按键的解法有问题。电路中采取独立式键盘一段直接接到中断源上,一端接地。并没有采用电源+上来电阻的形式。我查了下书籍,有的说到,单片机里面有上拉电阻可以这样子接法,但小弟还是怀疑~~ |
|