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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
小弟是做FPGA/cpld和一些简单硬件设计的,这两天逼于要写一个单片机程序(没办法,谁知道公司人少!)...可是,委实不会啊!!折腾了半天,参考了不少书籍,好不容易码出了一段~但是调试它愣是没反应!!时间又紧,小弟实在是没办法,只好上论坛来求救~~还望大侠们指点迷津~
9 N( C0 D! K. S" r7 d  w) I* o0 z9 B5 w9 y, {  X' n' h
   要到达的功能:  80C2051单片机的中断源外接两个按键——当按下键1时把11AA通过串口发送到另一个单片机上;当按下键2时把1199通过串口发送到另一个单片机上...无按键时候等待操作!!  M9 }+ g, h5 Q$ d4 y# Y
   程序见下:
+ N* \" X! @  L! c, ?8 p          nei_in    EQU       P- j4 x9 E  U( C$ s
          wai_in    EQU       P
3 U- \6 M) j6 X* T8 ]3 A          nei_show  EQU       P1.3
3 n4 `1 C# s: Z) f" R  {          wai_show  EQU       P1.4' O1 J3 S% {" Y! K* X, E
          send      EQU       P1.2
" S7 c$ S( @$ `. \7 W;-----------------------------------------------------------------------------------------------; D8 Z" n' S4 R
          ORG       0000H$ ^& H$ H* v5 q, \
          AJMP      main                ;跳转至主程序! N( D) D3 g, G* n) m
          ORG       0003H8 M  O9 {+ t# A2 a& M. s
          LJMP      f_0                 ;转到外部中断0* a3 q! u5 t# c" l1 L: a
          ORG       0013H: _. ~  B+ w+ U0 ?2 t
          LJMP      f_1                 ;转到外部中断1
: j3 {& e3 W$ R& y; R* B) r8 {          ORG                    0023H
; U, ^) v" p4 I3 l, t7 `( C          LJMP            serv                ;串口中断
1 ]+ Y8 d% u6 E2 `& p, s;-----------------------------------------------------------------------------------------------
6 u, `0 X+ q) A5 O# V;主程序" F" G  q# w8 A, X
;-----------------------------------------------------------------------------------------------      
9 K) E3 D2 q  T, Z# u          ORG       0030H               ;主程序开始地址
1 G; F2 h4 Z2 V2 q' {main:     LCALL     initRS232           ;串口初始化
  @) l  ]: N/ ]) ~' n          LCALL     init                ;中断初始化
+ w# \8 s- B' z  B          CLR       send
1 I# s! L- D7 t% j$ h4 o5 i# \          SJMP      $                   ;等待操作         
( u. k6 ~) D! B% j;-----------------------------------------------------------------------------------------------
: L, P6 v! j* H;外部中断0操作
/ `2 \% v+ f/ P/ j; p8 x;-----------------------------------------------------------------------------------------------            / n+ K5 C3 _2 G5 G7 X* c$ J
f_0:      PUSH      PSW                 ;保护现场
$ \7 ], u( K9 B8 a, a2 P          PUSH      ACC
3 |" U/ D. i" A: U* C; n. X2 z          NOP                           ;延时等待响应' h  M1 q! V/ `% T) P  A- Z5 L
          NOP            - _2 w! k" G6 @0 ?' j6 ?, q
          SETB      wai_show            ;关闭中断1操作指示灯1 I( m9 x( G% ~8 t
          NOP+ W0 i& d& r5 m. M. H, T9 d! A
          MOV             A,#11H              ;把55H送到累加器
4 O: h3 N/ @1 U0 c! ~: R2 e          MOV              SBUF,A              ;送到缓冲区
9 `, E$ n' B# E6 I1 D          JNB       TI,$                ;等待发送完成
* b4 g/ q: c. Y          CLR       TI                  ;允许再发送
! W/ {8 Q3 M+ g2 A          MOV              A,#0AAH             ;把AAH送到累加器, H. [& n& E+ o
          MOV              SBUF,A              ;送到缓冲区9 q! K; f$ M2 M* U, @: I
          JNB       TI,$                ;等待发送完成
4 P) F! L" r( e5 L0 t& D$ A7 e          CLR       TI                  ;允许再发送
/ Z$ _! e3 u- I6 u2 Q/ a          NOP              
4 I6 ]2 }, U# v, G4 N! D  @  P4 u          NOP    ' _7 U* E5 I; _: s6 e
          CLR       nei_show            ;点亮中断0操作指示灯            
9 Z" |% m, O: F; L$ `7 w                SETB      send                ;发送操作已完成标示4 S* w- U* q& j7 z! ]" x
                POP       ACC
$ t. N7 ^. ]3 }; X9 [! q- ^4 \2 F, e          POP       PSW1 r3 u2 t5 q1 A$ l& z7 K8 [, g
          RETI                            " d# z7 t" ^9 g( Z& o
;-----------------------------------------------------------------------------------------------) ^4 [7 N  b9 P
;外部中断1操作
4 H; n1 M. S( {0 ]) C5 J. w;-----------------------------------------------------------------------------------------------     5 u# Q) T! n* k" R/ u
f_1:      PUSH      PSW                 ;保护现场4 _9 p0 v  o; c& I# f6 V* U
          PUSH      ACC
0 K( I6 A2 q) F" n$ A0 U% U( s          NOP                           ;延时等待响应
+ |9 z7 G; ^- X: P          NOP # O, ~+ B8 F# L
          SETB      nei_show            ;关闭中断0操作指示灯- w) a; A% r: R. X; R; s7 H
          NOP, i. q, m4 C% q- z7 A
          MOV             A,#11H              ;把55H送到累加器, w1 H8 {5 e; C6 }) v
          MOV              SBUF,A              ;送到缓冲区
7 s- T! V" H# G- E: X1 Q% ~: b( e          JNB       TI,$                ;等待发送完成
. y3 c5 A5 w/ b$ \3 P          CLR       TI                  ;允许再发送
. @( ?6 V3 |7 C3 t: t! F4 g          MOV              A,#99H              ;把99H送到累加器; R) m2 p2 g, ?  |$ U. y+ T; {9 l
          MOV              SBUF,A              ;送到缓冲区% K6 n# r" Y1 @& `
          JNB       TI,$                ;等待发送完成
6 Q" n! }1 h+ o6 |          CLR       TI                  ;允许再发送
# Y! O& j* D$ ~  Y0 u4 H3 e/ @          NOP
0 C+ K7 f6 }: V2 U4 R1 b% N          NOP                 
5 r1 Q* S* D$ |( w0 r) H6 @( U) s          CLR       wai_show            ;点亮中断1操作指示灯
+ B0 q2 \  o" r/ X% J6 ^                SETB      send                ;发送操作已完成标示  A! j! H7 F9 L2 {0 ?" z& p
                POP       ACC
* [* e  |* J3 E' H          POP       PSW
4 a9 ^( d9 ]) R! R2 q7 b          RETI                    
( B. t6 X& c' J;-----------------------------------------------------------------------------------------------
, i) p4 ?& ^% C+ L# h;串口中断子程序# r  y) C: Y$ E8 `
;-----------------------------------------------------------------------------------------------
9 {# e, \( d, W7 `4 y5 ^serv:     PUSH      PSW
3 G5 e5 k. O8 i7 U* |, z, ]          PUSH      ACC
5 e" j! m7 X% C* t7 \# z          NOP( |0 V& p3 [6 N% p3 S* H! G2 m# [
          CLR       RI
  Q  y$ v* \& i3 z          MOV       A,SBUF! F( K# Z8 |* f: r" a  G; Q
          MOV       R0,A5 O8 a5 R4 O( @  G4 p
          CJNE      A,#11H,NEXT1
! m. g$ o  T0 B          MOV       A,R0; m; d5 ?& D  Y' s; k# T
NEXT1:    CJNE      A,#0AAH,NEXT2
& X7 P3 S: e1 z6 R( [' q2 i; c          CLR       nei_show9 |& x( @  ^. m2 Q  m" u6 L  I
NEXT2:    CJNE      A,#99H,NEXT3
* M5 |! \+ ?: }- Y9 s8 G: U7 [+ ?4 s          CLR       wai_show8 B4 y" T1 m% ]: R5 f8 q
NEXT3:    POP       ACC
% s/ H3 H, E. x; d! k          POP       PSW5 R1 Y8 b' j6 x* l5 c
          RETI2 T4 _6 v# Y. }- q
;-----------------------------------------------------------------------------------------------
; E2 x2 @  @' I; B4 C; R+ j( I/ P3 B;延时10ms子程序5 y" q  e' C' K+ o1 ]
;-----------------------------------------------------------------------------------------------/ l- \( K/ A- b+ K& o8 u4 z
del10:    MOV       R7,#40
7 U3 j$ q  T' g0 ?* xdel1:     MOV       R6,#123( o9 F: F" ~+ s0 j' T6 E
          NOP                  
. i/ z. Q2 S( t1 g( q7 H" w. mdel2:     DJNZ      R6,del2
0 L; y, P# q5 A5 G: G" R. v          DJNZ      R7,del15 P4 c# R6 {  Y9 W, l9 t
          RET1 |4 P" C# d- y1 O5 T
;-----------------------------------------------------------------------------------------------
$ C0 f6 {/ A  [% X  y8 ];中断初始化子程序1 d) g$ x/ }4 o: R* ?
;----------------------------------------------------------------------------------------------- 5 l, f$ [- x! o
init:     SETB      EA                  ;mcu开放中断# s" ?4 f+ t% ]; {7 M2 e
          SETB      EX0                 ;允许INT0中断3 {' @8 q0 p" H* g% c
          SETB      IT0                 ;设置INT0为边缘触发形式# X" z! w  i5 G2 q1 i7 j; C1 d( @
          SETB      EX1                 ;允许INT1中断
, W& ~% V4 E4 n3 D+ Q% `1 P/ X          SETB      IT1                 ;设置INT1为边缘触发形式- h6 ^8 S0 Q( C) H* Q6 ?
          SETB      ES                  ;允许串口中断
# W0 B- Q% I+ ?2 Y          RET 5 @/ ]; ^" d+ t! }9 M
;----------------------------------------------------------------------------------------------- % ~2 J% s5 L/ x
;串口初始化子程序
) Z1 g6 g3 L" X0 n3 Y;-----------------------------------------------------------------------------------------------
1 e+ g+ ^  c( `' ZinitRS232:MOV                    TMOD,#20H           ;定时器工作在方式2+ z8 S* z" X8 B0 X  j% Q+ K3 ]! U
          MOV              TH1,#0D0H           ;设置波特率0E8H-2400,0D0H-12002 [3 `# J& w# S  |- m+ X
          MOV       TL1,#0D0H# n' t- O. p) B/ v
          MOV       PCON,#80H           CON-电源控制
8 p- D; Z$ C. u1 {9 `) c          SETB      TR1                 ;启动定时器1- J& U1 h( G8 }' h/ b" L; m
          MOV       SCON,#0D0H          ;SCON-串行口控制  MODE3 启动串行口接收数据   
1 O4 o5 R7 C4 h: E          RET                           ;返回
" B7 ^# w( Z* ?! a- l$ B          + r7 n0 t! V' Z# u! z6 E
          END
2 s9 y! _6 ~- J; T2 E7 M& E  `% K, M5 O9 g: M! w6 d! w7 O
现在调试中,灯也不亮(电路中,发光二极管正极接5V电,负极通过上拉电阻接单片机),串口传输也不成功....
+ a1 @1 o$ f. }  Q 另外,小弟个人还怀疑按键的解法有问题。电路中采取独立式键盘一段直接接到中断源上,一端接地。并没有采用电源+上来电阻的形式。我查了下书籍,有的说到,单片机里面有上拉电阻可以这样子接法,但小弟还是怀疑~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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