找回密码
 注册
查看: 1897|回复: 0
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
小弟是做FPGA/cpld和一些简单硬件设计的,这两天逼于要写一个单片机程序(没办法,谁知道公司人少!)...可是,委实不会啊!!折腾了半天,参考了不少书籍,好不容易码出了一段~但是调试它愣是没反应!!时间又紧,小弟实在是没办法,只好上论坛来求救~~还望大侠们指点迷津~+ K% D- }7 v$ R3 E8 g7 u9 b
8 V( q2 M( y1 b  Z7 {- L/ }
   要到达的功能:  80C2051单片机的中断源外接两个按键——当按下键1时把11AA通过串口发送到另一个单片机上;当按下键2时把1199通过串口发送到另一个单片机上...无按键时候等待操作!!
( Y# _9 i" v1 Q/ |* B: v3 H   程序见下:  f" T+ u; N3 }8 W7 ^% E
          nei_in    EQU       P3 v, d2 T7 Y5 w
          wai_in    EQU       P
+ J5 F1 \! }# O4 b/ i1 P  i          nei_show  EQU       P1.3
) _; M- Z1 h: F4 Q9 u3 e( V          wai_show  EQU       P1.4
$ [3 L5 F0 @) D          send      EQU       P1.2
% G$ ^- p! ?; B( v9 m: w2 j+ w+ W;-----------------------------------------------------------------------------------------------
2 s  g/ y' \9 v3 ^  @          ORG       0000H
" d5 E) D, P, |/ j  ?$ |$ `          AJMP      main                ;跳转至主程序
/ ]( h) w; B$ H0 l3 `          ORG       0003H, J3 t9 n6 j+ A! |9 q
          LJMP      f_0                 ;转到外部中断0
+ _7 C9 L8 T# ]          ORG       0013H
! f! v1 K, p# i0 P  E0 {4 v  e. ~( z          LJMP      f_1                 ;转到外部中断10 m/ d  m' F1 `. j& ^7 |
          ORG                    0023H
- O- h7 I) L. _: h' D! f  L' y          LJMP            serv                ;串口中断
# M5 c$ I2 i1 M; d2 J( B;-----------------------------------------------------------------------------------------------
! R9 v# }# r  G+ J2 I( ];主程序
2 s. f5 }/ d) H6 b+ ^, v;-----------------------------------------------------------------------------------------------       & v9 Q4 N, w5 j; q! L
          ORG       0030H               ;主程序开始地址
4 D$ X+ a  I; e* Pmain:     LCALL     initRS232           ;串口初始化
- l4 w2 Z5 o' u8 O, e$ D1 f3 g) m          LCALL     init                ;中断初始化) e( d2 l1 u/ T- P& L$ x
          CLR       send8 z) ]& z9 R# T5 n! @: }
          SJMP      $                   ;等待操作          & H) s' q4 m1 o" @
;-----------------------------------------------------------------------------------------------
- j# ]! B- r6 f2 F$ M7 ~;外部中断0操作/ y! v1 Y  q% B6 }( g/ J8 r" ?
;-----------------------------------------------------------------------------------------------            0 F7 Q8 H- r7 H% ^1 ^
f_0:      PUSH      PSW                 ;保护现场- k# b$ |% O. }; g$ V7 P. Z
          PUSH      ACC
5 C/ p  z7 U; }& ~+ D- K          NOP                           ;延时等待响应
; c4 }8 p' I$ _3 L2 P          NOP            8 ?# M; z* v+ M# c- k- z- x* X0 |
          SETB      wai_show            ;关闭中断1操作指示灯
+ [8 _' {: z" Y- t          NOP
; M  j7 z  a- f& t" P  o8 {          MOV             A,#11H              ;把55H送到累加器% h& o8 V' V7 m& [% X. v6 ]3 O
          MOV              SBUF,A              ;送到缓冲区
. C/ q' b# x# _" {  O2 q# f- p- O          JNB       TI,$                ;等待发送完成
. ]3 U/ p% q( P  \          CLR       TI                  ;允许再发送: x, @! h. _5 e' h
          MOV              A,#0AAH             ;把AAH送到累加器5 i* H* Q1 d- d: W* s
          MOV              SBUF,A              ;送到缓冲区
0 G0 g7 z! K* s" s          JNB       TI,$                ;等待发送完成
  Q( r7 C& L' F& U; [3 |* E          CLR       TI                  ;允许再发送5 @2 H. @" d2 F) o( X3 M$ S
          NOP              
5 L' J0 n5 Y( t+ ^; W' `          NOP   
; ?- Z8 c% C3 M4 D1 u( l% p          CLR       nei_show            ;点亮中断0操作指示灯            ( a$ `" m4 M# u9 L, U) V' q
                SETB      send                ;发送操作已完成标示
% q9 _6 q, N  f' b- O7 R                POP       ACC
6 N9 o* Z0 t! B9 p          POP       PSW; y  x% [' I# X& a1 I2 k2 o4 Q
          RETI                            . X2 s6 `4 E5 ~6 A5 R
;-----------------------------------------------------------------------------------------------1 P+ h' y# s4 R+ v, A) `! B
;外部中断1操作% L2 u7 h8 o- r: }0 k* j. ]( X
;-----------------------------------------------------------------------------------------------     5 N+ i: u: B" U6 J
f_1:      PUSH      PSW                 ;保护现场" B5 G# {- p2 h3 I' U8 E7 z1 b$ H
          PUSH      ACC* z2 L$ ?& V/ |6 S6 Q" z' n
          NOP                           ;延时等待响应
% c) B# B" Z$ P: H  E; e# {+ K          NOP
2 B+ \/ @$ F; P+ |& o6 `          SETB      nei_show            ;关闭中断0操作指示灯. C+ t  I/ R- Z. Z5 p7 J
          NOP/ b5 P2 L7 C$ B  l
          MOV             A,#11H              ;把55H送到累加器
. c; m+ `( ^( \  y8 x          MOV              SBUF,A              ;送到缓冲区
6 ]2 Q5 x9 u% E# P" S9 z; j  {% n          JNB       TI,$                ;等待发送完成
+ `3 C' g& R. a: \          CLR       TI                  ;允许再发送
2 \" O& f& m/ D. o: c          MOV              A,#99H              ;把99H送到累加器% Z. X  |# `8 T
          MOV              SBUF,A              ;送到缓冲区
( x  @+ Q6 P% z8 N# D- V: l' \          JNB       TI,$                ;等待发送完成+ x5 O" P' q5 A
          CLR       TI                  ;允许再发送) N) p& n3 H8 v% ~+ u+ {
          NOP
" z2 t$ @; w9 k          NOP                  ; N& d  C. {7 }4 b
          CLR       wai_show            ;点亮中断1操作指示灯
% h0 ]8 |& q4 T" o1 t+ \                SETB      send                ;发送操作已完成标示3 R0 B% I$ V4 K! r
                POP       ACC
; `' H8 G+ P  t+ F7 q          POP       PSW
1 h- _2 N# h. B" i          RETI                    
" ~" m! |7 l5 `& u- G;-----------------------------------------------------------------------------------------------
' C# |7 K8 D' [& L8 I" ~  X;串口中断子程序
! @. n/ O- Z. N" W  W3 B;-----------------------------------------------------------------------------------------------$ o* i5 w# h2 f, n
serv:     PUSH      PSW
! N' y' t4 e8 J; |2 }          PUSH      ACC5 w+ h3 v/ i2 s1 A
          NOP, _& c: `  p& |  q' D5 A6 M; m! W0 b
          CLR       RI
3 _! |4 Y* h0 v2 ~2 X. z          MOV       A,SBUF/ Y" z# p! _1 B5 p# J& _' Z! H
          MOV       R0,A, n- n& C9 ^0 ]+ q# _' v. }
          CJNE      A,#11H,NEXT1
: K% ]* C3 M2 A( A7 g% B( w          MOV       A,R0
4 X6 u7 M7 t# W' X5 b" M6 zNEXT1:    CJNE      A,#0AAH,NEXT2
) [5 s  A$ J$ Q5 d7 V& M9 i* S          CLR       nei_show
9 _- c' B1 o' v; x  C, i: uNEXT2:    CJNE      A,#99H,NEXT3
, i& h( n$ ~0 J          CLR       wai_show
+ g5 j: O; Z5 e! ENEXT3:    POP       ACC
( B  \& d: o- p" D          POP       PSW
) Z$ P2 V# u3 H2 R# |# G          RETI0 A7 q  c6 S" y. _* m
;-----------------------------------------------------------------------------------------------
4 V' x. W4 E) ?5 ?7 Y;延时10ms子程序- q! w8 p! j& d1 F9 m- p/ F+ R/ q
;-----------------------------------------------------------------------------------------------
) P4 I7 d! o5 V; ^; \# zdel10:    MOV       R7,#40
3 r- ]$ w( A$ {7 Z! @5 K% gdel1:     MOV       R6,#123+ H  c3 e) [6 I* R5 E
          NOP                  
1 @% Q' f) @) |4 V9 [3 Ydel2:     DJNZ      R6,del2
' t+ Y0 o' _: S$ t: A          DJNZ      R7,del1  z. B1 C$ l; m; F7 k' R. n
          RET$ r0 Y) b' L4 m
;----------------------------------------------------------------------------------------------- 2 r$ q# O: F" J+ o: g' b9 d/ y
;中断初始化子程序
1 b9 p- B4 R; c" n  p$ h;-----------------------------------------------------------------------------------------------
. F& U2 o9 c2 l6 |8 xinit:     SETB      EA                  ;mcu开放中断9 k* v/ k6 `% @
          SETB      EX0                 ;允许INT0中断
6 P3 C' M# Z6 ]0 e6 H! w          SETB      IT0                 ;设置INT0为边缘触发形式
: Y. Y$ e5 A  C1 \+ z* R          SETB      EX1                 ;允许INT1中断! L0 m1 [6 h' L& {: K# }: j5 q
          SETB      IT1                 ;设置INT1为边缘触发形式' ^; V9 M0 s2 K% G
          SETB      ES                  ;允许串口中断
+ \  z( W( C/ P4 L+ X  n0 p          RET - ]6 O. C2 r1 L( |9 ^6 s# m
;----------------------------------------------------------------------------------------------- 6 e7 z4 n2 _$ U
;串口初始化子程序5 j9 e0 |. Y" {2 q$ g  k& u
;-----------------------------------------------------------------------------------------------
$ h6 _% f# J! c, F) H* F3 C7 tinitRS232:MOV                    TMOD,#20H           ;定时器工作在方式2
! @* ]( n9 C  ]/ W( l5 F, d3 i/ I0 {          MOV              TH1,#0D0H           ;设置波特率0E8H-2400,0D0H-1200
& u" ?6 c) ?# P& c6 {          MOV       TL1,#0D0H
' q4 m2 N0 V, B# v9 f1 ]          MOV       PCON,#80H           CON-电源控制
( _3 t" u1 _% {; U          SETB      TR1                 ;启动定时器1
3 @3 f5 s5 G. u          MOV       SCON,#0D0H          ;SCON-串行口控制  MODE3 启动串行口接收数据   
% J$ p3 r' ]5 ^          RET                           ;返回8 k5 D* ]0 C# j0 X# U
         
+ R4 Y0 x" f# W0 c* g          END' z: u9 g7 F( v
9 N( O% `7 k& F0 [1 f; }8 [2 Z/ v( U
现在调试中,灯也不亮(电路中,发光二极管正极接5V电,负极通过上拉电阻接单片机),串口传输也不成功....6 J" ]6 J) B* p9 c" v% j  ~( t
另外,小弟个人还怀疑按键的解法有问题。电路中采取独立式键盘一段直接接到中断源上,一端接地。并没有采用电源+上来电阻的形式。我查了下书籍,有的说到,单片机里面有上拉电阻可以这样子接法,但小弟还是怀疑~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-5-31 11:22 , Processed in 0.093750 second(s), 24 queries , Gzip On.

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

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

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