找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 1202|回复: 0
打印 上一主题 下一主题

求助单片机在外部中断单方向进行串口传输

[复制链接]

50

主题

340

帖子

3260

积分

五级会员(50)

Rank: 5

积分
3260
跳转到指定楼层
1#
发表于 2009-6-2 22:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您!

您需要 登录 才可以下载或查看,没有帐号?注册

x
小弟是做FPGA/CPLD和一些简单硬件设计的,这两天逼于要写一个单片机程序(没办法,谁知道公司人少!)...可是,委实不会啊!!折腾了半天,参考了不少书籍,好不容易码出了一段~但是调试它愣是没反应!!时间又紧,小弟实在是没办法,只好上论坛来求救~~还望大侠们指点迷津~6 \  A0 Z4 n( p& H3 r5 j

& N0 S0 c4 v) F) ?/ L) Q   要到达的功能:  80C2051单片机的中断源外接两个按键——当按下键1时把11AA通过串口发送到另一个单片机上;当按下键2时把1199通过串口发送到另一个单片机上...无按键时候等待操作!!# C3 ]: M2 U4 w3 g. e
   程序见下:
6 `) ]9 j/ [% A          nei_in    EQU       P  p! t% Q, f3 v5 m$ \4 _
          wai_in    EQU       P1 {) h6 O( k4 C, ^& T
          nei_show  EQU       P1.3
0 N$ S0 g0 k9 O  J% U+ N          wai_show  EQU       P1.4
) Z2 W9 J, n. _  G/ {/ n          send      EQU       P1.2
$ M# }( X2 w% E' n& y  @6 c;-----------------------------------------------------------------------------------------------' ?1 G6 Y0 l5 E4 c* m
          ORG       0000H
$ t5 Q* f; ~* k7 _' ?          AJMP      main                ;跳转至主程序* Q4 @. ?1 @: Z
          ORG       0003H
7 S: S! ?- x& m! T5 i. R% c5 F. m          LJMP      f_0                 ;转到外部中断0
: J! j8 Q. K' S& d0 z          ORG       0013H
5 p2 L& j  V( n          LJMP      f_1                 ;转到外部中断1
$ t8 y2 |2 i( N; k" s4 l$ B5 d2 K          ORG                    0023H
; y+ R# U& S# n/ Q; U+ Z2 m          LJMP            serv                ;串口中断1 @. e" T8 k4 b2 m* v
;-----------------------------------------------------------------------------------------------
3 e+ Y, p2 ~, K5 b/ U6 e;主程序
5 s/ `4 x% m; s;-----------------------------------------------------------------------------------------------       5 l4 B  o7 v; c$ R3 T
          ORG       0030H               ;主程序开始地址
: K0 @3 o# P. Bmain:     LCALL     initRS232           ;串口初始化) ]% B3 z% s2 O- O5 f
          LCALL     init                ;中断初始化3 r( r2 ?2 |! ~1 F% U3 ~
          CLR       send1 \! u( ~% E8 H  e; M
          SJMP      $                   ;等待操作         
) S6 p* E; r7 R;-----------------------------------------------------------------------------------------------2 S3 I) e" S3 X2 o5 X' U9 {  y
;外部中断0操作7 ~" }" \* }% y2 ?1 w
;-----------------------------------------------------------------------------------------------            
& |2 _7 @" Q  [8 R5 C5 D2 D2 n) Jf_0:      PUSH      PSW                 ;保护现场1 B$ B) d0 F& E3 l) o
          PUSH      ACC
8 O& n/ [2 \  C/ |4 z. A1 h; q          NOP                           ;延时等待响应
4 g- h  P# P& J# Q          NOP            ' t$ v0 A- I$ D, c) W* i9 Q  w: ^
          SETB      wai_show            ;关闭中断1操作指示灯
: v5 H0 Q. Z4 `) \  k0 `! n0 c          NOP: v6 [  t8 ]2 I8 J
          MOV             A,#11H              ;把55H送到累加器
, l& Q- I# k( T) e* C          MOV              SBUF,A              ;送到缓冲区, S8 w  K& q) `3 l
          JNB       TI,$                ;等待发送完成6 t. \1 o5 }# E4 S( s
          CLR       TI                  ;允许再发送
4 |% q* N) Y" a3 ?          MOV              A,#0AAH             ;把AAH送到累加器4 w( j) b6 |0 ?& ~9 E
          MOV              SBUF,A              ;送到缓冲区7 K5 p1 e) f* b$ p1 l$ i) \
          JNB       TI,$                ;等待发送完成
$ Z( M9 a9 Q, t  d" G% M          CLR       TI                  ;允许再发送  O+ v9 Z7 t' V, M
          NOP              6 r. {' D4 |+ L; v) P' X
          NOP    ' M, E+ F: b9 V8 S! g/ {
          CLR       nei_show            ;点亮中断0操作指示灯            
1 E8 \9 n; w8 A4 u                SETB      send                ;发送操作已完成标示. R' S6 p7 \+ m- B
                POP       ACC
- B  \5 a  Z6 G; f5 ^( x          POP       PSW, q" C& M0 E; W% s1 ~
          RETI                            ' A; I0 H* K/ u4 G
;-----------------------------------------------------------------------------------------------7 j! I' v* O4 v2 k
;外部中断1操作
; }+ ]$ U6 l: a: d, ^3 y;-----------------------------------------------------------------------------------------------     * o: F2 B7 e# D! D' c
f_1:      PUSH      PSW                 ;保护现场
6 k- n( p3 Q0 w4 k7 q" f          PUSH      ACC( f2 f  D  ]: P# J& i
          NOP                           ;延时等待响应3 d* H' J* X( Z$ L: Z
          NOP
8 [7 g* f' Q5 X3 |          SETB      nei_show            ;关闭中断0操作指示灯
) P- c0 S9 E3 @          NOP$ Y7 K( _8 k/ I6 K4 k. a, `5 }
          MOV             A,#11H              ;把55H送到累加器( Z6 w) X+ n2 l0 g
          MOV              SBUF,A              ;送到缓冲区
9 i) ~& h" r; ~, e( k6 J          JNB       TI,$                ;等待发送完成
% ]. H- P! z0 S; `: M4 ]          CLR       TI                  ;允许再发送
- n7 v# i1 ?1 U( h" t          MOV              A,#99H              ;把99H送到累加器
5 _4 Q8 c7 F% _          MOV              SBUF,A              ;送到缓冲区
, E. c- r/ K4 }5 D- B4 }          JNB       TI,$                ;等待发送完成
0 ]" l% }5 u9 V) l8 h, j          CLR       TI                  ;允许再发送
$ u* f# K; ~- T" a* e2 Z          NOP ( I% F5 [) s, u+ v5 W
          NOP                  6 g, w# o+ Y4 i( i
          CLR       wai_show            ;点亮中断1操作指示灯
6 e2 Y( k$ e; n5 z3 ]7 l9 v7 ^6 C                SETB      send                ;发送操作已完成标示
' l! R3 S; v) x! i$ u0 H                POP       ACC2 k# J6 a& Y! x9 [
          POP       PSW+ Q6 r- ]+ g# ?* H' A
          RETI                    ! l+ J& j; _; s0 z& i2 e: V5 l
;-----------------------------------------------------------------------------------------------! b0 d8 L1 `* C: H
;串口中断子程序5 v( |8 t1 J/ N  ?. c
;-----------------------------------------------------------------------------------------------
4 r' J1 ]% P% T$ I' dserv:     PUSH      PSW6 S, Y" [' p' `& f' T; d4 H3 ?6 M
          PUSH      ACC( u/ L- P. D6 v' Y8 v. u( V
          NOP
" {: T, W, ?2 W6 a- D* D* F" F          CLR       RI
8 X4 T5 H5 K6 ]  V" k/ X          MOV       A,SBUF
0 A3 T! ^8 Y" V9 L& U          MOV       R0,A
5 i. v$ E; x8 e9 p! N8 r- y          CJNE      A,#11H,NEXT16 K9 W3 k6 R9 ^3 c7 M2 J' y8 W0 a
          MOV       A,R0
* `0 r8 _+ [& M% Q4 V. yNEXT1:    CJNE      A,#0AAH,NEXT2) F3 u7 E) O9 C' q4 A
          CLR       nei_show: _6 y  {" z& g6 F6 i, P; F5 ~0 i( I
NEXT2:    CJNE      A,#99H,NEXT3
7 n6 l8 ^# l) t4 ^" ]. b0 e          CLR       wai_show
8 g( K* F0 T. X; nNEXT3:    POP       ACC  o: E2 p' o# f1 T5 W' A- B
          POP       PSW
4 J9 s5 l- T& Z/ C: y% r1 F          RETI+ U3 D/ y0 q4 ~  {9 |
;-----------------------------------------------------------------------------------------------
% o+ @, `: }8 {2 U" W' |% k;延时10ms子程序
  h. A" N+ }" B: P;-----------------------------------------------------------------------------------------------
6 n7 S7 j7 P7 q; s3 `" Qdel10:    MOV       R7,#40
& N. O: H2 C+ Z( t) P& `  m5 v. Fdel1:     MOV       R6,#123
4 }: _! x, @' f          NOP                  
9 U1 a* J$ S, jdel2:     DJNZ      R6,del2/ g% E; v, U6 t
          DJNZ      R7,del1
7 i# x# |9 J. o1 z6 e' f4 Q3 d  X# U" ^          RET
+ f0 @4 w. e( [% j;-----------------------------------------------------------------------------------------------
; t6 X; {9 u  X0 e7 f  a" C1 ^. S+ G;中断初始化子程序; b( r2 h# v4 i3 i/ i1 ^2 V
;----------------------------------------------------------------------------------------------- & i8 K- j7 i) ^) ?: r' c  C& j
init:     SETB      EA                  ;MCU开放中断. E( t  U1 R' s  o  N* q" ^
          SETB      EX0                 ;允许INT0中断' G' }* Y+ M7 u1 M$ U! L8 k( t
          SETB      IT0                 ;设置INT0为边缘触发形式4 J. C# g' T$ Y
          SETB      EX1                 ;允许INT1中断: o  b+ ~5 O7 X' s: R, ]4 e- S: O
          SETB      IT1                 ;设置INT1为边缘触发形式
# }4 x3 C( ]6 d& m2 D          SETB      ES                  ;允许串口中断% U1 Y- E' m0 @( O6 {% c% W9 k
          RET 6 f+ d( C4 m  n7 v, I
;----------------------------------------------------------------------------------------------- , @* g  @5 c$ Q
;串口初始化子程序
& E; c; t. P% ?7 u;----------------------------------------------------------------------------------------------- ! ~- v. e2 k4 X+ e
initRS232:MOV                    TMOD,#20H           ;定时器工作在方式29 a. W$ ]2 C& W: ?8 ^
          MOV              TH1,#0D0H           ;设置波特率0E8H-2400,0D0H-1200
2 {+ I' {: @" H3 d          MOV       TL1,#0D0H1 P0 r% h2 c. B! M4 J
          MOV       PCON,#80H           CON-电源控制
/ B' J! b( a5 C/ k          SETB      TR1                 ;启动定时器13 @/ @8 R8 Q4 h2 L8 D
          MOV       SCON,#0D0H          ;SCON-串行口控制  MODE3 启动串行口接收数据   
& \5 @) Y6 _% N1 A9 P9 a, q          RET                           ;返回
* t) c+ |4 R, q) n4 H4 h3 x         
' c  K# e" @: N4 Z. f2 l- b& p          END
& W1 d* o' d. o: m& h
- v# @  t" u% A1 k 现在调试中,灯也不亮(电路中,发光二极管正极接5V电,负极通过上拉电阻接单片机),串口传输也不成功....& E9 L/ H* d/ @+ x  d5 U6 \8 J* q
另外,小弟个人还怀疑按键的解法有问题。电路中采取独立式键盘一段直接接到中断源上,一端接地。并没有采用电源+上来电阻的形式。我查了下书籍,有的说到,单片机里面有上拉电阻可以这样子接法,但小弟还是怀疑~~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2024-9-17 04:35 , Processed in 0.064348 second(s), 32 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表