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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
小弟是做FPGA/cpld和一些简单硬件设计的,这两天逼于要写一个单片机程序(没办法,谁知道公司人少!)...可是,委实不会啊!!折腾了半天,参考了不少书籍,好不容易码出了一段~但是调试它愣是没反应!!时间又紧,小弟实在是没办法,只好上论坛来求救~~还望大侠们指点迷津~
2 l$ l" p  E/ ~9 E1 n8 F/ b, r0 _
% I$ W4 c, g* h, ?( X/ [   要到达的功能:  80C2051单片机的中断源外接两个按键——当按下键1时把11AA通过串口发送到另一个单片机上;当按下键2时把1199通过串口发送到另一个单片机上...无按键时候等待操作!!/ k+ Y, T, |$ U3 j
   程序见下:! x  o" f/ B# f. r
          nei_in    EQU       P8 E# N. w! T: R3 _0 q
          wai_in    EQU       P" o  P  p: ?4 p1 Y% @# L
          nei_show  EQU       P1.3) t9 ]. j/ w+ p" \: J( O
          wai_show  EQU       P1.42 U2 w- S. P7 P- h7 ~; |
          send      EQU       P1.26 b  |  k8 Y) |, S" {: p/ S# G* e
;-----------------------------------------------------------------------------------------------
4 w4 a: C# g& y& A' g8 \2 U          ORG       0000H2 w1 T7 ?3 `/ `) D
          AJMP      main                ;跳转至主程序
! p+ j9 U; M. K          ORG       0003H
4 }) q! O3 l* F6 y1 U          LJMP      f_0                 ;转到外部中断0
1 K. m$ G$ x. A          ORG       0013H  V3 i% t9 l) Y! m/ S, r. [+ L
          LJMP      f_1                 ;转到外部中断1
- S# H' U% ~& I3 |4 T          ORG                    0023H) ^8 d  {! D$ g, B+ }- H9 o
          LJMP            serv                ;串口中断/ L7 X1 w' v5 {
;-----------------------------------------------------------------------------------------------8 s6 ?& h2 G; T7 J# Q, R
;主程序
3 J: H5 T. H5 I;-----------------------------------------------------------------------------------------------      
, r2 G4 L8 ~2 a, c          ORG       0030H               ;主程序开始地址* i4 v7 K7 L5 @5 Z; |
main:     LCALL     initRS232           ;串口初始化) C/ k7 O! j' e  Z( S. P, N8 d
          LCALL     init                ;中断初始化
, i: c) z, X/ V          CLR       send& K4 E& [9 N" W3 ~6 [) b/ ]% X. b
          SJMP      $                   ;等待操作          ' P9 ?! ^4 k! w: S' ?$ z3 z6 ]' ?4 N
;-----------------------------------------------------------------------------------------------
  U& ]2 G, s' ?;外部中断0操作  o$ _. x# W$ M' N2 J
;-----------------------------------------------------------------------------------------------            
: I0 y; r7 q4 Z1 ~: Y2 I7 f- `f_0:      PUSH      PSW                 ;保护现场
! h+ b! Z7 ~$ s          PUSH      ACC
0 ^; E) u' x4 x8 ?9 E' r          NOP                           ;延时等待响应% @" w7 m7 Y/ i( u$ P
          NOP            
( ^0 ~) f" U$ x# I* G- [2 R          SETB      wai_show            ;关闭中断1操作指示灯
0 _+ e$ V* v, O          NOP
# j' h5 K) }; d' m' R" J: p          MOV             A,#11H              ;把55H送到累加器
2 M9 f+ a0 k" b          MOV              SBUF,A              ;送到缓冲区
/ W5 f* V) T; ]          JNB       TI,$                ;等待发送完成
0 ~" y: H8 c2 e& q          CLR       TI                  ;允许再发送4 h) E! M1 k7 Y4 L$ x
          MOV              A,#0AAH             ;把AAH送到累加器
* N" [8 m  S* D# t& r- F          MOV              SBUF,A              ;送到缓冲区3 D7 r4 a8 z% t  }" e0 R7 d
          JNB       TI,$                ;等待发送完成7 ?' \# H  n0 I. e  U3 H* x
          CLR       TI                  ;允许再发送
. L0 E/ [% j+ w( j+ P- e          NOP              # F% z/ I& X! U8 p# M0 _/ ~
          NOP    : C- ~5 R7 _% G* C4 d3 G
          CLR       nei_show            ;点亮中断0操作指示灯            4 Q' E' x  M! H% k
                SETB      send                ;发送操作已完成标示& B  w: b+ A9 q. H2 ]6 h1 X
                POP       ACC9 _  m( S6 n4 A! D8 a
          POP       PSW. o# d: v; o; r1 t2 i
          RETI                            ' J" Z% O7 E8 F" G" o0 B
;-----------------------------------------------------------------------------------------------
2 q- i7 x8 G# }# G! h6 E! d9 a;外部中断1操作
8 R, B8 C# D8 ?; ~3 q9 ?! p( ?3 o;-----------------------------------------------------------------------------------------------     $ F5 ]9 P% F% H
f_1:      PUSH      PSW                 ;保护现场
6 f) Q, d* [& j% {' ?5 o; O! o          PUSH      ACC) j2 T( l8 w9 |
          NOP                           ;延时等待响应
. ^" \+ I0 {" g3 a/ n          NOP
- B, V9 n' d3 I& R/ S8 g1 y          SETB      nei_show            ;关闭中断0操作指示灯& e7 z- x! N6 b! n
          NOP9 C7 }9 t2 r3 F/ e4 ^9 U* \
          MOV             A,#11H              ;把55H送到累加器1 b4 D! g  \& o, H) q
          MOV              SBUF,A              ;送到缓冲区
9 }& C, I% s1 R% ^          JNB       TI,$                ;等待发送完成, g5 p$ |) @  y  S: z! f: P
          CLR       TI                  ;允许再发送' X( m, T) W: G- F, K4 y- R
          MOV              A,#99H              ;把99H送到累加器
' t& _0 i& k; G9 W          MOV              SBUF,A              ;送到缓冲区8 }& E! h. {2 G( l2 F# {8 [
          JNB       TI,$                ;等待发送完成$ M& j& S% v; W1 _% y
          CLR       TI                  ;允许再发送
7 }8 z& \# e/ w& W& m$ ]3 w          NOP 3 I& ]7 m* z6 K5 A
          NOP                  7 ?( d/ R  W% S1 n( a* T8 w
          CLR       wai_show            ;点亮中断1操作指示灯 7 |& E4 ~+ u+ E2 f- U
                SETB      send                ;发送操作已完成标示
& _! T! y. m( z, T0 J' l                POP       ACC
  o5 Y' V2 x/ F          POP       PSW
* p6 {, \  u4 T+ ^9 \) f          RETI                    / c- P3 t5 O8 C5 n! Z) a
;-----------------------------------------------------------------------------------------------
6 ^% _( e  d1 A/ X4 t* L# c;串口中断子程序
, {. v" u+ P+ d0 B;-----------------------------------------------------------------------------------------------
4 W( e2 c( P6 J$ }% H( Zserv:     PUSH      PSW
: B3 r/ k' t# B1 t6 d          PUSH      ACC
! P- L) s+ y8 j% l0 J# M5 I5 i          NOP
. W, h: \% B" T, Y+ v          CLR       RI, f, d, J2 A; ~) K" g
          MOV       A,SBUF# X" b. P) I8 A
          MOV       R0,A
* X& @+ H% V0 y) Y7 p+ G( T          CJNE      A,#11H,NEXT19 F) |' C; p1 J/ t0 E
          MOV       A,R0
  g/ v+ Y& J6 @: N% W- t: S! b: lNEXT1:    CJNE      A,#0AAH,NEXT2
3 N5 }& w  E, [1 g8 n  F" f          CLR       nei_show) ?6 G7 a1 }5 \* O, r0 d
NEXT2:    CJNE      A,#99H,NEXT3
) L/ ^$ r& B3 O2 F          CLR       wai_show
6 f" f( y+ T1 k% j% {- g) ^NEXT3:    POP       ACC/ Z$ J1 @; N3 `: }) D3 F% T5 S
          POP       PSW1 f* W; X, M" P
          RETI
& v4 ]: u! U7 C( C, b# w;-----------------------------------------------------------------------------------------------
) J4 e& h! K' q( T; E;延时10ms子程序
" `# [; X& |' U& @6 q;-----------------------------------------------------------------------------------------------/ g0 D+ t5 A; L3 c4 m5 [* @
del10:    MOV       R7,#40
0 i6 J* Y# A9 B) t" _, m2 V% `9 odel1:     MOV       R6,#1230 F( F( ~% W8 n% r  A
          NOP                  
- L0 F! z- o1 {del2:     DJNZ      R6,del2) z6 U/ z1 l& o) B. A6 r* j
          DJNZ      R7,del1
0 C) P, ]( {" }$ B* S) r# Y          RET* z1 K7 {( R, X. ~. A- g# U
;----------------------------------------------------------------------------------------------- : j2 Y, f2 u0 }) [3 C  c7 H1 J" \& M
;中断初始化子程序5 k0 w. `+ p3 h" z
;----------------------------------------------------------------------------------------------- 7 R. Z9 ^  v# N; ^, R3 T* z
init:     SETB      EA                  ;mcu开放中断; n: D  g  W) g
          SETB      EX0                 ;允许INT0中断
3 x* Q4 [& H" A/ w" o9 O3 z7 {          SETB      IT0                 ;设置INT0为边缘触发形式
6 Q" {/ G' Y+ p+ F8 [          SETB      EX1                 ;允许INT1中断( I& ^7 \* {. R: T2 C
          SETB      IT1                 ;设置INT1为边缘触发形式0 I5 Q9 I1 A2 D& W/ j/ Z  `
          SETB      ES                  ;允许串口中断
' m* p0 J# b4 ]! S9 f  W  j& W          RET * I; |( V3 Q* Q" C( \
;-----------------------------------------------------------------------------------------------
7 R0 Z8 d! c& ?2 V/ n;串口初始化子程序8 m" [( L* k$ r
;-----------------------------------------------------------------------------------------------
. \- [0 h# E& h; F+ w0 YinitRS232:MOV                    TMOD,#20H           ;定时器工作在方式2
: b: c+ b5 D9 K8 r0 r. V          MOV              TH1,#0D0H           ;设置波特率0E8H-2400,0D0H-1200- i1 [  I( X+ n
          MOV       TL1,#0D0H+ b  L& w( \; Q0 d
          MOV       PCON,#80H           CON-电源控制
0 {! C5 B4 `, d$ `# x          SETB      TR1                 ;启动定时器1
, r8 v% R6 B0 r          MOV       SCON,#0D0H          ;SCON-串行口控制  MODE3 启动串行口接收数据   
/ O8 |$ d% |1 b1 i4 }' y' ]          RET                           ;返回2 C4 w$ `% |! |0 X
         
( ]0 C1 e! H) H9 v8 b          END
9 i2 [. x8 [% W* }* g9 }- b' H6 V. O% R8 D+ H; `
现在调试中,灯也不亮(电路中,发光二极管正极接5V电,负极通过上拉电阻接单片机),串口传输也不成功....7 ^7 U; ^; X. Y. T/ \9 K
另外,小弟个人还怀疑按键的解法有问题。电路中采取独立式键盘一段直接接到中断源上,一端接地。并没有采用电源+上来电阻的形式。我查了下书籍,有的说到,单片机里面有上拉电阻可以这样子接法,但小弟还是怀疑~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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