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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

, l7 q. b, E3 F* ?6 |9 d( y   要到达的功能:  80C2051单片机的中断源外接两个按键——当按下键1时把11AA通过串口发送到另一个单片机上;当按下键2时把1199通过串口发送到另一个单片机上...无按键时候等待操作!!
- i9 O- R4 @  ~# U! H" g: N0 W& `   程序见下:
3 [+ e& y# }' s" D" e( o          nei_in    EQU       P6 j& G$ }$ M. X6 f4 B9 S
          wai_in    EQU       P
2 F2 R  p" E6 A& C, k$ u          nei_show  EQU       P1.36 B. y& N1 L+ G0 v# {1 @0 O: y- L
          wai_show  EQU       P1.4
: x* r# f2 n* a+ g( S' c          send      EQU       P1.2  U' p  {, Y' z0 A3 i
;-----------------------------------------------------------------------------------------------
( |1 N. Q. d- ~/ \. k7 A          ORG       0000H' \% F8 Q9 w. f1 r7 x! C
          AJMP      main                ;跳转至主程序
; a9 f: i" ~5 E& Y% Q+ _          ORG       0003H
2 p; f0 P/ r3 }7 E9 k/ S          LJMP      f_0                 ;转到外部中断0
+ |5 x+ N1 P, Z; Q+ ^          ORG       0013H
% b" v4 l) o9 I          LJMP      f_1                 ;转到外部中断1: p% {1 f2 H1 C: t( O; O: b
          ORG                    0023H
! p$ A5 S2 q4 O, E; M7 {3 k- x          LJMP            serv                ;串口中断
7 }1 q( e, s- [;-----------------------------------------------------------------------------------------------! c+ ?0 P# Q, ^: K- z! S0 G& s
;主程序
4 N: x/ K% b' G+ y6 h/ @! R;-----------------------------------------------------------------------------------------------      
7 N2 y% p( |/ d- G          ORG       0030H               ;主程序开始地址" }! Q8 T* G- p0 r
main:     LCALL     initRS232           ;串口初始化4 y; z8 P; d, h* D3 R
          LCALL     init                ;中断初始化
; O5 ~4 e, A& {1 c7 t          CLR       send
' T) ~/ I  y3 o3 s' T: ~          SJMP      $                   ;等待操作          , R7 y8 r' J! V" \' n" l3 O" B
;-----------------------------------------------------------------------------------------------2 E6 e$ p9 [; ~" V3 C" ^
;外部中断0操作
1 d( H, e' ^2 {7 e;-----------------------------------------------------------------------------------------------            
' z3 {/ c% ~  d# {, a  G7 [f_0:      PUSH      PSW                 ;保护现场
. p6 d2 e0 x- }' _& B          PUSH      ACC0 @6 ]/ Z7 h5 a# u
          NOP                           ;延时等待响应: f4 @; ]0 o8 y) V( q' U
          NOP            
* V3 s4 `  W6 e  P4 A" c; }          SETB      wai_show            ;关闭中断1操作指示灯& h1 j1 ]6 J  U) T
          NOP3 J9 l/ |) }  W6 Z( Z5 k0 J; k; N3 V
          MOV             A,#11H              ;把55H送到累加器, d0 S% Y, w% j3 V6 r& F) H
          MOV              SBUF,A              ;送到缓冲区4 B2 \! s! K: B$ f) O
          JNB       TI,$                ;等待发送完成
7 G* i" L) F3 f; N: k. d          CLR       TI                  ;允许再发送
9 j) v. G# ^4 L( ^% R' O5 H          MOV              A,#0AAH             ;把AAH送到累加器; l# K0 u% _" C( g8 @6 _  E; ^0 b% M0 [
          MOV              SBUF,A              ;送到缓冲区
2 {  t; j  F3 [3 v6 m" J          JNB       TI,$                ;等待发送完成' W+ F  m0 h5 e% C3 {1 t- L
          CLR       TI                  ;允许再发送
' R- H: B" G4 @3 }$ {; W          NOP              
+ R- `% |- V: i3 P; E          NOP   
4 q1 B8 [; [" B          CLR       nei_show            ;点亮中断0操作指示灯            
$ j; i! T8 \4 ^$ y                SETB      send                ;发送操作已完成标示
( m# _$ D' A8 k4 z! x9 k5 O& `! K4 Q                POP       ACC6 {% E% `9 X  P" Z, V
          POP       PSW4 m/ ^7 [* @) j) Y! Z7 t, w# k7 o9 I
          RETI                            ) G/ I) k0 D- r/ b+ m
;-----------------------------------------------------------------------------------------------
/ H+ Q/ b, X% U- @;外部中断1操作+ t# ]) B# {$ }- }' f
;-----------------------------------------------------------------------------------------------     8 b- P$ {: e4 |+ o0 `( r
f_1:      PUSH      PSW                 ;保护现场
2 }( B; a- h# p, [2 a          PUSH      ACC
2 h) @) U9 ?* v          NOP                           ;延时等待响应+ O% n( n( g6 F3 |% a- N; k
          NOP ! Q4 w. T( ?! b6 [- Z1 A
          SETB      nei_show            ;关闭中断0操作指示灯9 R' E, E7 B. B' I5 _
          NOP  A9 K# h8 o4 t. \1 L) X' u
          MOV             A,#11H              ;把55H送到累加器- \' a1 I: C, D2 Q8 A- j
          MOV              SBUF,A              ;送到缓冲区
: g$ X. i7 p; J9 I$ Q- }. y          JNB       TI,$                ;等待发送完成
3 i. D( G; A' O2 h" y  l) T          CLR       TI                  ;允许再发送' w9 s) W, I) p( c6 l6 M+ m
          MOV              A,#99H              ;把99H送到累加器
6 ~( w: h2 Q" ~8 y! ?, Z          MOV              SBUF,A              ;送到缓冲区
) g$ Q, h* p7 k          JNB       TI,$                ;等待发送完成
0 j+ O  C( P" |, a          CLR       TI                  ;允许再发送9 m8 d- ^" q8 |5 S6 f: t6 o
          NOP
. ~5 t/ `2 X% Z8 ~          NOP                 
& ^6 h" B* [# T/ b          CLR       wai_show            ;点亮中断1操作指示灯 1 y/ P0 x) K" C5 U
                SETB      send                ;发送操作已完成标示' G  z& K& }' D) _
                POP       ACC7 v( L; |* _8 f8 L$ X: Z( b
          POP       PSW
/ T3 V+ N: g0 Y' w: i4 y          RETI                    
+ n' p' w) g, b) y;------------------------------------------------------------------------------------------------ t& I) s' |: c9 ]8 p  i
;串口中断子程序
. U% o: _% W/ u' ]" _;-----------------------------------------------------------------------------------------------
" Y. F0 V( v' ^( z* jserv:     PUSH      PSW
# f+ _% z3 o; U- N. i8 M          PUSH      ACC" y% |* _$ @+ I; b- J7 x
          NOP8 t; R8 `) a' O  ^, ~
          CLR       RI+ d/ Q- Y! T  `( E; k+ n
          MOV       A,SBUF' l+ q7 r4 s$ t# p$ o9 M2 H
          MOV       R0,A
' O& F8 \& n) q) B          CJNE      A,#11H,NEXT1
! o. V3 \* i. x" a! }1 G          MOV       A,R0
9 [2 [9 P  z- j1 MNEXT1:    CJNE      A,#0AAH,NEXT2* }( f" ]& }& q
          CLR       nei_show9 Y; t1 a8 I. @& L
NEXT2:    CJNE      A,#99H,NEXT3
8 W4 b- ^/ `/ k* _/ }. y! p          CLR       wai_show+ S; M; g! }0 B1 i# J# @, g6 q
NEXT3:    POP       ACC$ s! x0 b+ r* Z, y- }
          POP       PSW
) \2 @! ]. E, H  K1 p9 C+ t          RETI
6 W) k2 B! k, c# A3 m+ j4 @;-----------------------------------------------------------------------------------------------
! c# h5 Q7 u2 u( d;延时10ms子程序6 b2 a4 v# R3 y: ?
;-----------------------------------------------------------------------------------------------7 v  J; O5 D2 R1 T, b+ N
del10:    MOV       R7,#40
. [; \# P1 k1 S- b4 |4 B: ldel1:     MOV       R6,#123" q9 x0 q5 h& q7 Z; u" {) I
          NOP                  
1 U( `1 q/ v, q& l' \del2:     DJNZ      R6,del24 z. q- D" _3 Z/ B
          DJNZ      R7,del1
/ W: s* G4 x" @  Z; C& p! Z2 r          RET; F7 ?6 `+ H/ w
;-----------------------------------------------------------------------------------------------
2 M/ ~: g* `! j# o;中断初始化子程序
$ ^( J( Q. d+ A# z/ w1 t, r2 A$ Q;-----------------------------------------------------------------------------------------------
* V) R; W. q7 m/ L! Z# h! Binit:     SETB      EA                  ;mcu开放中断
! C1 ?, m3 S. N6 O, w6 ~          SETB      EX0                 ;允许INT0中断+ Q8 N& r+ k- o4 U1 o
          SETB      IT0                 ;设置INT0为边缘触发形式( T) g: M$ U# n: k- A/ U. y
          SETB      EX1                 ;允许INT1中断
) H- o0 T. v  N2 J) ^5 z; Y) x" \5 s          SETB      IT1                 ;设置INT1为边缘触发形式( v# k4 q& D' x! m/ K" s
          SETB      ES                  ;允许串口中断6 F/ ?4 g5 W+ _4 V7 e
          RET
1 ~9 I4 ?) }0 [) {/ E6 W  w% t5 H;----------------------------------------------------------------------------------------------- * r% @# p( N5 o+ c/ R" ^! u, Q/ K
;串口初始化子程序
" N$ e. O# A3 Z. U;-----------------------------------------------------------------------------------------------
! {% C, i" f! l( S$ k  T6 ginitRS232:MOV                    TMOD,#20H           ;定时器工作在方式2
6 x7 I* X% h& z+ e( [3 l* N: i          MOV              TH1,#0D0H           ;设置波特率0E8H-2400,0D0H-12006 c  l  G7 q+ i+ J! X( r
          MOV       TL1,#0D0H, Q/ z; l, g9 ]
          MOV       PCON,#80H           CON-电源控制
% q1 h3 ]+ d& ]9 {3 [          SETB      TR1                 ;启动定时器1) f/ `1 g  }  ^0 ]& a  q
          MOV       SCON,#0D0H          ;SCON-串行口控制  MODE3 启动串行口接收数据   
0 @- w) X2 K" w% B# k* }! b          RET                           ;返回- ], K0 W  H( s/ _+ r# {# |* M" l. N" h
         
' _7 f) ?. G: ?& Y1 i$ O/ `          END2 f' C- k# s7 q6 }0 Q

9 Q6 _9 s# L. w) A$ e 现在调试中,灯也不亮(电路中,发光二极管正极接5V电,负极通过上拉电阻接单片机),串口传输也不成功...." E) _% G5 V: x( |9 {9 `6 C- V
另外,小弟个人还怀疑按键的解法有问题。电路中采取独立式键盘一段直接接到中断源上,一端接地。并没有采用电源+上来电阻的形式。我查了下书籍,有的说到,单片机里面有上拉电阻可以这样子接法,但小弟还是怀疑~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-9 18:56 , Processed in 0.156250 second(s), 24 queries , Gzip On.

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

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

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