找回密码
 注册
关于网站域名变更的通知
查看: 2008|回复: 0
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
小弟是做FPGA/cpld和一些简单硬件设计的,这两天逼于要写一个单片机程序(没办法,谁知道公司人少!)...可是,委实不会啊!!折腾了半天,参考了不少书籍,好不容易码出了一段~但是调试它愣是没反应!!时间又紧,小弟实在是没办法,只好上论坛来求救~~还望大侠们指点迷津~
) g: D$ u$ l, G: |
( W" v* y8 Z* v& w  {* l& Y2 S   要到达的功能:  80C2051单片机的中断源外接两个按键——当按下键1时把11AA通过串口发送到另一个单片机上;当按下键2时把1199通过串口发送到另一个单片机上...无按键时候等待操作!!
  U# R9 P' I, P; e9 i   程序见下:, I  I# G7 a" |4 G
          nei_in    EQU       P5 H2 R9 B# v% x" e
          wai_in    EQU       P. \9 Y1 {) e) D% J; P
          nei_show  EQU       P1.3" Q" W% s6 r0 Z& m7 N. q, i4 C8 I
          wai_show  EQU       P1.4
% p" y+ p4 W6 s: x1 j" }( b+ C          send      EQU       P1.2* F% g7 x5 E% s/ }8 _/ ?+ ?
;-----------------------------------------------------------------------------------------------
  F1 j& |5 c$ b( J$ d$ ?          ORG       0000H* |" D' N# l( i# o; A; z* K
          AJMP      main                ;跳转至主程序
  F  f9 i1 q! |2 H2 }          ORG       0003H
! o( O3 ^9 Q/ N; h* T. D          LJMP      f_0                 ;转到外部中断0
( e8 N+ o& L: O0 U- g2 `& T1 _          ORG       0013H' p) r( A# _4 o$ |4 d& x- D
          LJMP      f_1                 ;转到外部中断1! W( v: r6 X# L% x# B8 M3 p
          ORG                    0023H
# M) b3 ?' N- N) {0 i  ^8 N          LJMP            serv                ;串口中断2 l$ S% r7 p( t/ z0 U+ W
;-----------------------------------------------------------------------------------------------
8 g+ v, m+ h5 J$ l" b  M;主程序; |) r5 C! b. {0 L+ W4 x
;-----------------------------------------------------------------------------------------------       & l( i5 ^- I1 g, o. s, Z/ ?
          ORG       0030H               ;主程序开始地址$ y+ G0 ^  t+ M
main:     LCALL     initRS232           ;串口初始化5 S8 U1 q3 [, A6 u; K6 a
          LCALL     init                ;中断初始化
8 F& e2 {) R& |- S9 ]4 i          CLR       send# c! O- e# Q  |
          SJMP      $                   ;等待操作         
8 Y  n. ~5 p; t7 u' e;-----------------------------------------------------------------------------------------------+ r0 o9 [( ]4 {8 k3 ^! g
;外部中断0操作; v; q8 N' k6 U" ~- J. x5 H
;-----------------------------------------------------------------------------------------------            * H2 O( f* V+ @' t
f_0:      PUSH      PSW                 ;保护现场' L; l7 U" I' e3 O! P$ D# D
          PUSH      ACC
/ u; L& J; k7 ]" T          NOP                           ;延时等待响应
; B4 \) M! v1 I0 J+ O          NOP            
" b$ N8 E8 x- t7 N1 x8 ^( {7 _$ |          SETB      wai_show            ;关闭中断1操作指示灯
1 t. l- x: n0 {6 ]6 H2 R          NOP4 r* Z" ]8 P/ e* t) g9 u7 E
          MOV             A,#11H              ;把55H送到累加器& e* S) C- v" R
          MOV              SBUF,A              ;送到缓冲区
& j- W8 D! _$ f1 o0 s( T          JNB       TI,$                ;等待发送完成
* x& y* L; h4 R" x! n3 X* v$ M          CLR       TI                  ;允许再发送
1 l' }2 O6 A" p( U. s          MOV              A,#0AAH             ;把AAH送到累加器
9 j& c) @. ~7 m5 Z          MOV              SBUF,A              ;送到缓冲区( s. D, B: c/ z# U  ]+ x! p
          JNB       TI,$                ;等待发送完成
8 k- ?3 X  b% W  E0 q, H# H          CLR       TI                  ;允许再发送
  o; n) S: l2 \9 H. c" S+ I4 s          NOP              
& k3 e! v! R( y9 H          NOP    % P+ J; y4 E+ X% U# {. x$ w
          CLR       nei_show            ;点亮中断0操作指示灯            / U1 j- h  E% n8 F) f
                SETB      send                ;发送操作已完成标示
3 l1 o/ M3 R1 y! L                POP       ACC
; P1 r4 P9 c, q' b& w- X          POP       PSW4 I& ?2 G' _1 N8 Z6 W! F% V
          RETI                           
# m# a0 P; f: Y, \8 W; F;-----------------------------------------------------------------------------------------------
7 ~4 }6 Q: N; p4 h' [* v;外部中断1操作9 M. j  f1 s* I! V7 g3 n8 X; M
;-----------------------------------------------------------------------------------------------     / j, ]# q9 c3 e0 r1 g9 h8 |' T
f_1:      PUSH      PSW                 ;保护现场; t8 z+ S0 h$ Z" J4 j4 T
          PUSH      ACC
" j$ U9 E" s2 G' d" b          NOP                           ;延时等待响应
& G* d8 X- d7 K9 w3 }  B+ u+ A7 Q          NOP : f! s2 c. Q; {: V6 P4 ]! _/ \
          SETB      nei_show            ;关闭中断0操作指示灯# C4 j$ ]: F& B7 `" l9 a" E# a
          NOP5 g% F7 D( Y' ]) ?7 O3 l3 w+ W
          MOV             A,#11H              ;把55H送到累加器% r" g! M7 B4 D/ q* q/ r
          MOV              SBUF,A              ;送到缓冲区* g5 N7 E& F- V5 Y* C! D
          JNB       TI,$                ;等待发送完成& b& I: f: o4 e; y& S
          CLR       TI                  ;允许再发送2 H2 V+ P6 d- ~0 V
          MOV              A,#99H              ;把99H送到累加器
/ |+ g& e6 E; i* a9 S! Y$ B3 x          MOV              SBUF,A              ;送到缓冲区5 u" R" Y* N2 X; v! W
          JNB       TI,$                ;等待发送完成
. W, O: K+ f& z& `          CLR       TI                  ;允许再发送
% E  B9 N" j& g          NOP + N: Q0 _1 Z. `( ]( {1 A4 A
          NOP                 
' G- f/ P/ K- a3 s          CLR       wai_show            ;点亮中断1操作指示灯
% c. _: D0 Y' W: q; `1 \( h                SETB      send                ;发送操作已完成标示6 p2 X6 x$ j4 l% C0 T3 J
                POP       ACC
9 d7 M/ Z, T" _* ]& \1 ~          POP       PSW
7 ]; M6 R) \' s          RETI                    2 G) S& O5 D! y* T, ~6 V' c* N
;-----------------------------------------------------------------------------------------------
5 ]9 X6 m3 J: z;串口中断子程序
/ `' c  y9 R5 N, l( F, d8 F8 k: q;-----------------------------------------------------------------------------------------------7 }3 ?/ D% C4 J, V
serv:     PUSH      PSW
3 k1 ^" L- i7 ~; h1 s2 H/ P          PUSH      ACC% s8 X1 r$ r# H: c
          NOP# Z, K/ q' ?: a% ~/ B" i
          CLR       RI
7 E4 k% Q1 u; p: o          MOV       A,SBUF
# m8 _: V8 `9 r' F- o" F          MOV       R0,A0 {& f! h' b9 Q
          CJNE      A,#11H,NEXT1
3 S( f7 _  E0 K) ?( G% H          MOV       A,R0; l! d4 w6 A. O/ `2 j
NEXT1:    CJNE      A,#0AAH,NEXT22 B* @: g; u. h6 g
          CLR       nei_show+ {* R' P$ M$ x; x& T; I
NEXT2:    CJNE      A,#99H,NEXT3- Z" l- {4 V7 i: ~
          CLR       wai_show
% W  n6 t  f+ U) v/ }NEXT3:    POP       ACC9 M! i. O% @: j0 y4 v/ R
          POP       PSW$ B3 A3 h6 ]" A2 J+ j6 b
          RETI
0 B# P; A, `" D0 Q) |;-----------------------------------------------------------------------------------------------
' v6 _# K8 t5 f;延时10ms子程序  _2 g% M' T( l) E
;-----------------------------------------------------------------------------------------------: d5 Y% t8 @) ~; x4 h" L
del10:    MOV       R7,#40
& E; b) ]1 M0 B5 B# V/ B( adel1:     MOV       R6,#123& A/ t0 O; C& j# [! V4 W, @) V2 y0 q  L
          NOP                  
; I8 i' K( A8 D0 D! [. t4 T( m4 |. rdel2:     DJNZ      R6,del2- c- D: g; E' f) q' Q# Q
          DJNZ      R7,del1  N5 K  O: ^: }
          RET4 C- E9 u# g0 [- e8 F& ]
;----------------------------------------------------------------------------------------------- " N* ~) E1 v3 b" ?9 v
;中断初始化子程序4 m( s8 N$ k1 G( [* k
;-----------------------------------------------------------------------------------------------
2 B1 W: S8 v0 i- G9 a0 w$ h- minit:     SETB      EA                  ;mcu开放中断
, |6 K' T' O8 }6 _2 E6 Z( q          SETB      EX0                 ;允许INT0中断$ W' b$ k% h9 l. s1 L) h
          SETB      IT0                 ;设置INT0为边缘触发形式
4 a2 u/ J' J6 o6 C! Q+ ~. |          SETB      EX1                 ;允许INT1中断
7 l3 ]' u3 U& Y- p, m0 @* J# s          SETB      IT1                 ;设置INT1为边缘触发形式
9 Q# Q7 }; ~+ F/ U% m2 ]; f          SETB      ES                  ;允许串口中断: C, U' ~& N8 I3 a% u) w: U0 [+ d: @
          RET
7 I* y) l0 I; j" z2 S8 j8 e;-----------------------------------------------------------------------------------------------
1 H! e. R+ @# A% a, E;串口初始化子程序
: \3 O8 x/ g, G3 E3 |6 U% E;-----------------------------------------------------------------------------------------------
& S5 N1 V, u' F' B$ minitRS232:MOV                    TMOD,#20H           ;定时器工作在方式2
3 u, C  Z) k" U# M          MOV              TH1,#0D0H           ;设置波特率0E8H-2400,0D0H-12001 g, c4 a. }+ i5 [9 H+ z
          MOV       TL1,#0D0H; c) b+ P. g' q% X3 y; l, ?
          MOV       PCON,#80H           CON-电源控制
7 `: o4 |( ^+ @3 H( `4 v% j- v( j9 J          SETB      TR1                 ;启动定时器1
" l# H# |% @9 g6 `- u# h, G  f          MOV       SCON,#0D0H          ;SCON-串行口控制  MODE3 启动串行口接收数据   
- J  k. T2 e  D# U! B          RET                           ;返回$ }* y3 a( {$ Y3 p* ^- ~
         
0 O* z' G0 x* R# Z  [          END7 G# b! E* e' u& q
* i9 ^9 S/ c, @1 v- q: q
现在调试中,灯也不亮(电路中,发光二极管正极接5V电,负极通过上拉电阻接单片机),串口传输也不成功....1 n) a( j" n/ g! [2 v4 j
另外,小弟个人还怀疑按键的解法有问题。电路中采取独立式键盘一段直接接到中断源上,一端接地。并没有采用电源+上来电阻的形式。我查了下书籍,有的说到,单片机里面有上拉电阻可以这样子接法,但小弟还是怀疑~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-23 13:33 , Processed in 0.156250 second(s), 24 queries , Gzip On.

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

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

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