|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
小弟是做FPGA/cpld和一些简单硬件设计的,这两天逼于要写一个单片机程序(没办法,谁知道公司人少!)...可是,委实不会啊!!折腾了半天,参考了不少书籍,好不容易码出了一段~但是调试它愣是没反应!!时间又紧,小弟实在是没办法,只好上论坛来求救~~还望大侠们指点迷津~
+ B7 L! o3 v7 S- {0 U* h5 V
, s _9 }* {6 \' P1 h) X& B 要到达的功能: 80C2051单片机的中断源外接两个按键——当按下键1时把11AA通过串口发送到另一个单片机上;当按下键2时把1199通过串口发送到另一个单片机上...无按键时候等待操作!!( [# y, P% |2 B8 g
程序见下:
5 }$ \2 k4 V; D' H* p nei_in EQU P# {+ p' k- j- ]+ k6 ]4 F
wai_in EQU P/ B8 y) @5 V0 n7 m. N
nei_show EQU P1.3
- m9 I- D9 m8 B K7 x7 a7 x wai_show EQU P1.4" i! |) T% |( }5 K' j
send EQU P1.2: m' Y. Z# g3 Q1 o
;-----------------------------------------------------------------------------------------------
- O+ [3 w3 e& }* e. a ORG 0000H; u- C: K6 h F- J; ?# k; X+ m
AJMP main ;跳转至主程序
1 ^$ I! l# l. e. ~8 y+ G M+ A7 B6 M ORG 0003H; C$ @- H9 u+ @
LJMP f_0 ;转到外部中断08 Q/ \' _/ k4 [1 s. o3 ^
ORG 0013H# j, P' L* J( ?. A5 L
LJMP f_1 ;转到外部中断1
- B/ w0 x, }. ?( Z6 e ORG 0023H) W3 G+ L$ B J" k
LJMP serv ;串口中断
5 {: W4 |6 `" A( p# z) o7 j7 j;-----------------------------------------------------------------------------------------------( { X, L, N9 Y) e& X) I. j
;主程序
8 w2 h/ |* [4 u& j) Z0 s- N% c;-----------------------------------------------------------------------------------------------
2 j/ w s Q: M& O ORG 0030H ;主程序开始地址9 C1 F) b# I) f( |/ {
main: LCALL initRS232 ;串口初始化0 e( |: A$ f& V3 o
LCALL init ;中断初始化. C- k" o3 B; d! g0 e9 F
CLR send* C. _9 i- U$ Z- A& ~+ Q( P; _: @
SJMP $ ;等待操作 ( G/ X6 `6 H' J
;-----------------------------------------------------------------------------------------------( E/ j6 B7 w% H2 f
;外部中断0操作& v7 y6 `7 `: T* C
;----------------------------------------------------------------------------------------------- 2 C% g6 d6 x' n" _% q, a9 j
f_0: PUSH PSW ;保护现场4 T! w) Y0 n* D
PUSH ACC
+ J9 x* M! L% ? NOP ;延时等待响应
% ~* F( s! r) u2 d, Z6 c NOP
% I" Y/ f2 o& \; x" G( y' E* l SETB wai_show ;关闭中断1操作指示灯
* [) w7 C% O3 t6 x( \. s NOP
3 Y; g5 ~4 ]9 o" B! T* ^ MOV A,#11H ;把55H送到累加器
; ]# T# K- K8 q/ J. O MOV SBUF,A ;送到缓冲区/ z; ~, K3 M7 A( m' S4 `
JNB TI,$ ;等待发送完成
6 K3 A$ N2 F' Y6 h CLR TI ;允许再发送
- f4 e) w9 \: h( J' f MOV A,#0AAH ;把AAH送到累加器! s; X. Z' t# J6 B8 q
MOV SBUF,A ;送到缓冲区
: B4 E9 M+ X/ K; z; y( o( P( ` JNB TI,$ ;等待发送完成# L- W9 o$ ]" I
CLR TI ;允许再发送' F( G9 L, l' w4 D$ z
NOP
- ~/ h. z [5 Y1 E7 ] NOP 3 X5 B2 L" o3 R2 S" Z" w" L
CLR nei_show ;点亮中断0操作指示灯
$ [% S. m/ Y9 W+ d" X0 C SETB send ;发送操作已完成标示" p. y+ L }' f8 _! a, f4 X: q
POP ACC
( N/ Z# M q& U POP PSW) x$ C! I' j- H' O% G: l: w
RETI
* y ]" [5 e( r! Z" ~! |;-----------------------------------------------------------------------------------------------$ S2 f; i* F! D- s1 r2 @3 Q4 R- {
;外部中断1操作, B5 F, _+ _- T a* o
;-----------------------------------------------------------------------------------------------
, n% `. g- v( d9 T! c' jf_1: PUSH PSW ;保护现场5 z7 |. C, F. s9 R
PUSH ACC5 J( U0 B" ^* ^: \7 u0 d4 `: O
NOP ;延时等待响应- e0 D% Y& b2 B9 l
NOP / s* \0 P( l( e+ h# F) Z
SETB nei_show ;关闭中断0操作指示灯6 X: `; o8 u- e( d! P
NOP6 |3 D7 A$ s( @. N0 S5 m7 z; m( Q$ ~4 o
MOV A,#11H ;把55H送到累加器* b; x; |8 C4 D& H1 f6 _
MOV SBUF,A ;送到缓冲区
1 _+ X* ~4 O2 c4 \; U6 m6 R+ w1 u JNB TI,$ ;等待发送完成% @/ d0 A9 _: Y- J" a" X) S
CLR TI ;允许再发送
; u, a9 ?" q4 S0 I$ o' Y, Z( Q+ Z0 a MOV A,#99H ;把99H送到累加器: v, r; \9 R1 A* _: N
MOV SBUF,A ;送到缓冲区/ w; j0 P' `4 |! o
JNB TI,$ ;等待发送完成$ y- k$ }1 h! _4 b$ U/ W3 W# a
CLR TI ;允许再发送( I/ I2 Y2 s3 v7 \! ^) ]
NOP 6 @1 Z- u: j$ X/ q
NOP - d( _3 w% n' v, J: E1 }4 O3 ?
CLR wai_show ;点亮中断1操作指示灯
, t& w o9 G0 q2 L8 v4 n: h$ p4 {4 K SETB send ;发送操作已完成标示9 _; |5 Q9 z2 u& I$ E% g9 J7 ~
POP ACC4 B Q; Y! \7 ?6 H
POP PSW5 p8 ?: X, [6 D: Y: f
RETI " i. I: G N) k1 F
;-----------------------------------------------------------------------------------------------7 `1 J8 t( c3 ^
;串口中断子程序
+ Q9 ]. x- V7 ?. n5 e- X;-----------------------------------------------------------------------------------------------
8 \" l7 a. ?3 Z. Z5 O5 w3 ?serv: PUSH PSW: F% t$ q8 w: U5 j# E6 d
PUSH ACC2 f4 M- p5 S( Y: u
NOP
4 L( J7 |9 N- g8 z# a% `' i CLR RI. Q: d9 p9 F5 z \0 C7 x8 [, E. X
MOV A,SBUF
6 K: X7 ~* R9 e0 {. F: a MOV R0,A
; ?6 t8 n7 J/ Q* C) r CJNE A,#11H,NEXT1& u, F p- n2 n' h
MOV A,R0( s/ h: u/ W2 r! y1 S# ?
NEXT1: CJNE A,#0AAH,NEXT2. Q6 H: V/ {8 K
CLR nei_show
% x/ c' u! U' ^$ |/ f9 `2 e/ U1 `NEXT2: CJNE A,#99H,NEXT3
8 i7 ?5 t! q$ d+ V) S CLR wai_show
N# j. Y% r5 G6 YNEXT3: POP ACC
. P' U0 r9 n2 i( {) b9 P1 G# v POP PSW, D& ~' {1 \% q: @/ g
RETI+ k+ Z" k+ m5 X, _( N1 u
;-----------------------------------------------------------------------------------------------
7 T- r) M4 h( Q* C, @( o;延时10ms子程序8 ]) a/ Z X9 N$ Y4 t4 J
;-----------------------------------------------------------------------------------------------
Y7 A+ M8 i" }" ~' [7 }del10: MOV R7,#40
3 o1 I j: \9 Y/ Hdel1: MOV R6,#1239 p& ^9 ~: u; ]4 W' k/ T0 \9 Y
NOP / v+ ~& W1 q/ \ r
del2: DJNZ R6,del2
, l0 K: a* A6 p DJNZ R7,del1
+ m. D# T, b. J( U1 j" M RET
$ U9 Q" o/ |7 c! [& }: P( t;-----------------------------------------------------------------------------------------------
" V, r4 e9 X! k;中断初始化子程序, x6 T2 X( X$ S# J) E" G
;-----------------------------------------------------------------------------------------------
) H" w" b2 N2 O$ @: binit: SETB EA ;mcu开放中断
' c# c: x% J! z; c9 k' M SETB EX0 ;允许INT0中断7 R: P2 X8 D( B' u7 u* F
SETB IT0 ;设置INT0为边缘触发形式
: Q# T2 \% P" c; J9 Q" C SETB EX1 ;允许INT1中断9 q3 V% J# h) s' {% c* b
SETB IT1 ;设置INT1为边缘触发形式0 i. J* x6 r5 m3 R% y5 @0 t
SETB ES ;允许串口中断4 V' v7 h2 D; Q) u3 }
RET 0 O: u* H& D& Q( A' J9 s
;----------------------------------------------------------------------------------------------- ( [) K* ^7 O8 a! @
;串口初始化子程序
- P0 Z& b+ X- C6 W% v9 @. D: D$ h;-----------------------------------------------------------------------------------------------
* ?% S8 Y+ z. R' c+ y$ \initRS232:MOV TMOD,#20H ;定时器工作在方式2" c& w3 s9 ~( B( K
MOV TH1,#0D0H ;设置波特率0E8H-2400,0D0H-12008 Q/ W9 @0 X4 ^' w: P* \
MOV TL1,#0D0H& c& Y2 u; `( e5 A* g9 i A. |
MOV PCON,#80H CON-电源控制% j0 a) J4 o$ s6 L* r4 ^
SETB TR1 ;启动定时器17 j: K7 X) p: {) N
MOV SCON,#0D0H ;SCON-串行口控制 MODE3 启动串行口接收数据 ' q$ a+ ?- g3 } {% i$ ~
RET ;返回; h2 t8 p* w# [. I( |
% I* x! x% R t0 S0 O. p0 |2 M END* `* t+ M" F; ?$ f3 E
4 Q0 t2 y ^. f$ F$ R; s8 e
现在调试中,灯也不亮(电路中,发光二极管正极接5V电,负极通过上拉电阻接单片机),串口传输也不成功....
/ S+ W% M$ q5 n0 D 另外,小弟个人还怀疑按键的解法有问题。电路中采取独立式键盘一段直接接到中断源上,一端接地。并没有采用电源+上来电阻的形式。我查了下书籍,有的说到,单片机里面有上拉电阻可以这样子接法,但小弟还是怀疑~~ |
|