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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

, q: T( h5 G6 D" f* D# d  b( ^' L6 ?   要到达的功能:  80C2051单片机的中断源外接两个按键——当按下键1时把11AA通过串口发送到另一个单片机上;当按下键2时把1199通过串口发送到另一个单片机上...无按键时候等待操作!!
  r! S8 O: V! J* e% k8 y& P   程序见下:- f4 M- `- B$ l: C5 p0 s) b! Q! d& o
          nei_in    EQU       P1 E/ r: D4 ]8 \! j4 `( `8 f
          wai_in    EQU       P6 C$ d1 K) g2 N* x
          nei_show  EQU       P1.34 f5 o& J3 s8 R8 A3 v
          wai_show  EQU       P1.4
" L1 t8 z. y, f$ f! h6 u- Y. k          send      EQU       P1.2) E. g8 T) t* p0 {
;-----------------------------------------------------------------------------------------------
, F  w6 k/ m7 U0 ]* |          ORG       0000H
/ l" I# n& ^& X. ~4 d2 @0 b          AJMP      main                ;跳转至主程序9 E3 g  t$ a+ \1 B* E
          ORG       0003H/ q- J. j* |2 s1 x+ v* v8 q
          LJMP      f_0                 ;转到外部中断0
; i1 P2 n$ c- s, k8 T; M9 [          ORG       0013H
& g0 \# O# t' ^8 d8 O          LJMP      f_1                 ;转到外部中断1; k5 c( I' g% O0 J6 b
          ORG                    0023H, I; ^% f& e( }" |" h  u
          LJMP            serv                ;串口中断
8 z+ S9 q* \! a" L8 u" o;-----------------------------------------------------------------------------------------------
' \, p1 M2 b; ~6 @;主程序* H' H2 M2 I) M- r9 W5 P
;-----------------------------------------------------------------------------------------------      
6 Y6 @7 e& J" L) W/ a          ORG       0030H               ;主程序开始地址# ], r9 P+ b4 R* C
main:     LCALL     initRS232           ;串口初始化
- ~8 h$ i1 a4 N' a          LCALL     init                ;中断初始化" M( z( O1 P( Z! c9 Z9 [1 J9 |" @
          CLR       send7 @( \" g; V3 {3 B) J# ~
          SJMP      $                   ;等待操作         
! ^3 ~! V2 x, R- t;-----------------------------------------------------------------------------------------------
& f1 z' x( I+ C* z0 [/ Q;外部中断0操作
' c6 E* Q9 Y( s& k* z;-----------------------------------------------------------------------------------------------            
) b2 n8 J  t" |! n+ z* v! Zf_0:      PUSH      PSW                 ;保护现场
& v! a9 y/ y) m5 k9 U          PUSH      ACC
4 K- w# A) H; h4 C0 m          NOP                           ;延时等待响应
2 _; F. R' l7 D* o. I+ V          NOP            
( ]5 G) C9 L% a9 ^          SETB      wai_show            ;关闭中断1操作指示灯
/ ~* E' u2 ^7 }% d8 X- y          NOP! m& j. v) A; T
          MOV             A,#11H              ;把55H送到累加器; P' T8 @  }3 F: m. A) @$ j1 Y, q
          MOV              SBUF,A              ;送到缓冲区
7 o3 z' w; D3 f* U          JNB       TI,$                ;等待发送完成- y, n# O  @% m" |2 E/ G, w
          CLR       TI                  ;允许再发送
7 T% M5 z! H1 p) p$ _          MOV              A,#0AAH             ;把AAH送到累加器
+ a% H  X/ j" ^' @5 j% w          MOV              SBUF,A              ;送到缓冲区
6 r, S+ E2 ~9 L4 m          JNB       TI,$                ;等待发送完成6 ?- n6 v  }% F4 x- N; H; z' f
          CLR       TI                  ;允许再发送: g' i1 k+ j; t$ `4 I  t
          NOP              
' O" R0 Q$ A  [8 W) i) l, G( @* t          NOP   
: w% n* H7 w, h, u0 e9 m4 n7 M          CLR       nei_show            ;点亮中断0操作指示灯            
# \& [, k$ J8 c  ^" O' \                SETB      send                ;发送操作已完成标示
. j# z! o4 _# K/ Z                POP       ACC- ?6 d. r# ^" ^& X8 S7 d
          POP       PSW
- Y1 }4 I8 ]2 c1 \# t          RETI                           
% E1 r8 Z8 h; D;-----------------------------------------------------------------------------------------------
8 L; s6 r- |  N* g;外部中断1操作6 W/ C" R7 M0 Z& P7 d
;-----------------------------------------------------------------------------------------------     $ t9 W8 y, I. c$ z4 O) T) _3 C1 y
f_1:      PUSH      PSW                 ;保护现场' t# a7 E7 H& p- k9 B- J% C
          PUSH      ACC
& F# y9 c+ ^( I  w' T0 L% b          NOP                           ;延时等待响应
, n" P+ p! x; [6 |6 ?          NOP 9 n. ]! _- b6 O( U! C& C) Y
          SETB      nei_show            ;关闭中断0操作指示灯
4 b0 s& e. j, v4 K  X; A2 ?! ?          NOP
* e$ b: X1 F) R& }          MOV             A,#11H              ;把55H送到累加器
: u) q/ G: ~3 B9 S          MOV              SBUF,A              ;送到缓冲区' i( _% N. S4 f5 P; k. x' m
          JNB       TI,$                ;等待发送完成
8 S  h0 ^: b! L: X          CLR       TI                  ;允许再发送
" t) w) h8 C# l; R& ?: }1 a" H          MOV              A,#99H              ;把99H送到累加器7 K1 K. j2 p9 o! G- b( {
          MOV              SBUF,A              ;送到缓冲区
, e4 ^5 p4 Z4 h          JNB       TI,$                ;等待发送完成
3 l8 X: A5 H8 Q3 r) {. k2 x          CLR       TI                  ;允许再发送
8 i8 X3 Z; U6 M$ j2 p; U          NOP
8 K; r" w9 [  u/ |# |% [( k          NOP                  ' p) H9 `. x% `; E3 G1 a  q  R: W) B
          CLR       wai_show            ;点亮中断1操作指示灯
& @3 O1 y& J7 p9 h: w" a  w                SETB      send                ;发送操作已完成标示
) z7 g5 ^' g  A% q* _. E                POP       ACC
+ J+ M5 c* I& q( }+ r- g& {          POP       PSW
$ r4 r! R8 D, M$ C9 M! M! N4 ~          RETI                    8 _; s) J  O' _( h+ h8 K. o! S
;-----------------------------------------------------------------------------------------------5 T- ?4 ~1 G; P% W3 }7 Z
;串口中断子程序
; n) X/ ?' u" A6 d  ?& R;-----------------------------------------------------------------------------------------------
- w& w/ @$ o* _0 gserv:     PUSH      PSW
8 R! |( q% b* _8 Y1 Z/ O; D          PUSH      ACC
% c8 z/ w4 G3 J2 S8 ^          NOP+ f# k0 P6 ]3 P+ ?& A8 _
          CLR       RI: t8 z+ t% \3 g: c
          MOV       A,SBUF
- ]# k. K8 e6 \& P+ ]$ K7 h: i          MOV       R0,A- [$ e# e: w" m6 [1 ?
          CJNE      A,#11H,NEXT18 Y$ g7 l& O" ^7 D2 M  Y+ \
          MOV       A,R0
. K% x/ v- ^: Z* INEXT1:    CJNE      A,#0AAH,NEXT2: v0 f% X8 `: Q  B) T6 m
          CLR       nei_show
! }7 m7 \  x* c& |7 e5 ?NEXT2:    CJNE      A,#99H,NEXT3, o" |+ J8 O! }, F( M
          CLR       wai_show7 @6 m! E: Z& R) D
NEXT3:    POP       ACC4 `' c/ @6 h  W% u4 x) u/ v
          POP       PSW2 s/ S( H% _, U6 o4 V
          RETI
5 J: E* O# _! }+ l;-----------------------------------------------------------------------------------------------
6 L4 q! D' G% g2 U8 I;延时10ms子程序
1 j5 H7 H2 ]% K;-----------------------------------------------------------------------------------------------
1 X; y. T+ h% M* l' wdel10:    MOV       R7,#404 s! _0 g0 R( {- C6 ~9 E
del1:     MOV       R6,#123
# k; B' s# F0 d7 z" i7 v          NOP                  
/ T) G% l; g8 A. g; a/ e6 Ydel2:     DJNZ      R6,del2
) @$ Y2 T: Y( \7 t  ~1 E          DJNZ      R7,del1
8 U! q  a2 `: ?4 q          RET
& y  U" }) h, r% s8 N/ y* t# N;----------------------------------------------------------------------------------------------- 0 ^: W" |1 z7 C* A( q# B
;中断初始化子程序
! I; T; Z* Z9 w* N+ E;----------------------------------------------------------------------------------------------- / z& N# a: R4 ]( E7 e# i: A; i
init:     SETB      EA                  ;mcu开放中断1 A: t: ?: I, ]6 J) _
          SETB      EX0                 ;允许INT0中断8 T6 C$ y# {! f! q
          SETB      IT0                 ;设置INT0为边缘触发形式9 C9 b8 w0 C2 v
          SETB      EX1                 ;允许INT1中断
+ m( V4 n. `# g6 y1 I          SETB      IT1                 ;设置INT1为边缘触发形式3 z. G1 a3 I( @- U
          SETB      ES                  ;允许串口中断- F6 w) A) V! c+ w
          RET % x0 z1 b7 R  Q! J
;-----------------------------------------------------------------------------------------------
9 P5 y6 f3 B& A5 {, };串口初始化子程序9 w6 ~- V8 o% J. J0 M
;----------------------------------------------------------------------------------------------- 8 E: s! ?$ u) }( _# n0 V
initRS232:MOV                    TMOD,#20H           ;定时器工作在方式2
: Q1 e0 U$ h$ F3 w          MOV              TH1,#0D0H           ;设置波特率0E8H-2400,0D0H-1200. `$ g2 `, u) F0 W( a3 c* Y
          MOV       TL1,#0D0H; a  l. f% i! p- w/ p# F
          MOV       PCON,#80H           CON-电源控制; ]4 b! @- ]2 T7 I5 @, l
          SETB      TR1                 ;启动定时器1
+ \9 k* Y' \0 y. ?          MOV       SCON,#0D0H          ;SCON-串行口控制  MODE3 启动串行口接收数据   
+ D, C- l; d$ [  U& m1 b# \: e          RET                           ;返回
: g# z3 _0 o, m8 ?          8 v- p/ ]+ i/ [& B
          END9 f( B9 ~& X* `& H

2 ^9 h3 ]) i. B+ o6 Y: i7 [' F 现在调试中,灯也不亮(电路中,发光二极管正极接5V电,负极通过上拉电阻接单片机),串口传输也不成功....  [0 @$ x5 G7 O7 C4 {0 I) v# W0 y
另外,小弟个人还怀疑按键的解法有问题。电路中采取独立式键盘一段直接接到中断源上,一端接地。并没有采用电源+上来电阻的形式。我查了下书籍,有的说到,单片机里面有上拉电阻可以这样子接法,但小弟还是怀疑~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-19 17:05 , Processed in 0.137696 second(s), 25 queries , Gzip On.

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

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

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