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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
小弟是做FPGA/cpld和一些简单硬件设计的,这两天逼于要写一个单片机程序(没办法,谁知道公司人少!)...可是,委实不会啊!!折腾了半天,参考了不少书籍,好不容易码出了一段~但是调试它愣是没反应!!时间又紧,小弟实在是没办法,只好上论坛来求救~~还望大侠们指点迷津~8 o" j% E3 ^* H/ y2 Z+ M. `( C
: X! V+ v) d1 T' P9 v* q8 c
   要到达的功能:  80C2051单片机的中断源外接两个按键——当按下键1时把11AA通过串口发送到另一个单片机上;当按下键2时把1199通过串口发送到另一个单片机上...无按键时候等待操作!!7 v0 `2 i4 e( u0 F" [/ B
   程序见下:( L1 @5 _& j! W! ~/ w6 N
          nei_in    EQU       P$ {5 x5 G6 E' s6 ], N6 W
          wai_in    EQU       P% ?6 L* R& G7 K3 E* q
          nei_show  EQU       P1.3% Y  \. s" L8 x, x1 `
          wai_show  EQU       P1.40 p5 L' ?6 R% j0 m& S8 t
          send      EQU       P1.2
6 V) p2 a9 k9 K4 V# C" B3 |;-----------------------------------------------------------------------------------------------$ L: t# {9 {* B% M- k0 |. m' @
          ORG       0000H
& g7 j; q* G! D. l- w6 `& i          AJMP      main                ;跳转至主程序+ b: W/ v2 c7 N( U" v- r
          ORG       0003H
  h/ F: @0 C8 V8 }! O: C          LJMP      f_0                 ;转到外部中断0
: A8 g3 q% |0 P2 y" [! |) F4 F          ORG       0013H$ j. P6 Q: o( |; M; h! g
          LJMP      f_1                 ;转到外部中断1
, S7 {" H. {9 q* K          ORG                    0023H
; H3 M& w! n8 P4 G  E& [+ n3 ^! b          LJMP            serv                ;串口中断
  F2 H* m7 a6 K) u;-----------------------------------------------------------------------------------------------
( O4 l) Y& _4 U, A;主程序2 q- [, z. v2 O  ]8 W+ |
;-----------------------------------------------------------------------------------------------      
& m& y# n# d6 e+ V          ORG       0030H               ;主程序开始地址. T+ B& o8 k. u. s3 c- m
main:     LCALL     initRS232           ;串口初始化2 J3 I! R( r: @7 X4 Q! F6 y
          LCALL     init                ;中断初始化
# D8 ?8 l" P+ s% s- `# i          CLR       send' z0 w* g# s9 |% x: |' D
          SJMP      $                   ;等待操作         
  Q- I. K* C4 h+ f;-----------------------------------------------------------------------------------------------: L: }! a, s$ P' v! O
;外部中断0操作
  l8 S! u* K3 W/ G& M8 l;-----------------------------------------------------------------------------------------------            ' m( I) c& J5 P( N6 A  }
f_0:      PUSH      PSW                 ;保护现场! i; x( h8 ~( X! _
          PUSH      ACC
4 J) i) x8 ~, @/ ?7 E          NOP                           ;延时等待响应
. ^* h& e6 y4 w( q( r) o, d* m. K          NOP            
' M- i$ E5 E: T9 L  T$ q1 A% }- X          SETB      wai_show            ;关闭中断1操作指示灯
8 O0 `" I) E; M- L: k8 {) v% O          NOP! l  h* J" ^/ p* |. l: Z) r8 ^/ r
          MOV             A,#11H              ;把55H送到累加器. t, B! m' X3 `9 f/ y$ F) Q1 n
          MOV              SBUF,A              ;送到缓冲区
' B, d% p; G7 o. Z          JNB       TI,$                ;等待发送完成) R9 F* F! w; D2 i* v* R
          CLR       TI                  ;允许再发送
/ L# d0 K# l$ E6 W9 U          MOV              A,#0AAH             ;把AAH送到累加器
+ G3 T7 h% b/ O) z6 m$ C          MOV              SBUF,A              ;送到缓冲区
$ h/ ?, _5 O' p( z          JNB       TI,$                ;等待发送完成
, _" b$ h4 M* t0 G8 T          CLR       TI                  ;允许再发送% n/ E" p3 }* Y/ `
          NOP              ( R3 P' A$ a& w
          NOP   
1 b2 ]0 d* C7 g- l; s          CLR       nei_show            ;点亮中断0操作指示灯            
" m6 b# W! O# `+ P& q* k) V6 d                SETB      send                ;发送操作已完成标示
7 l6 y& ~+ e  l# k7 G; T5 O" ^- D                POP       ACC3 i; b& S6 }: N+ h0 v
          POP       PSW: r5 x$ e) \9 n9 B1 e( I
          RETI                           
6 u! ~& a# Y3 ~  R, ~3 [1 Q2 |' Q;-----------------------------------------------------------------------------------------------$ P- _0 }# g& \6 ^
;外部中断1操作; U$ u: X" W( D
;-----------------------------------------------------------------------------------------------     
( C  {) z9 L2 I6 u7 O' j4 l7 v2 p& @f_1:      PUSH      PSW                 ;保护现场, ?$ ^7 ~. o1 N5 @
          PUSH      ACC
* b" Y+ j! L7 E          NOP                           ;延时等待响应+ i  o: t5 w# @% ]
          NOP - c8 _, K# k, h( Y4 T8 _
          SETB      nei_show            ;关闭中断0操作指示灯# K( K& `4 \0 H
          NOP/ a4 H* C; Y& b( I# ^
          MOV             A,#11H              ;把55H送到累加器4 D+ x. c9 N  e2 M
          MOV              SBUF,A              ;送到缓冲区1 C4 @) z* K+ P0 M% |  ^1 ?" \, l5 ^
          JNB       TI,$                ;等待发送完成5 J; J* j, O- O4 k7 ]
          CLR       TI                  ;允许再发送! k* ?: s# @) ?; n4 |( c
          MOV              A,#99H              ;把99H送到累加器
- \  l/ X9 e5 ~" `. B& d( r          MOV              SBUF,A              ;送到缓冲区
# H$ N6 y  @5 o4 J0 @$ n4 a7 Y          JNB       TI,$                ;等待发送完成
2 ~3 X* o7 Y6 d. n/ G          CLR       TI                  ;允许再发送
* t. k& {7 Q( w: Q- \          NOP ' V# U5 t$ k# ^% C9 [
          NOP                  + _' C) d9 m, ^, H, s
          CLR       wai_show            ;点亮中断1操作指示灯 $ ]" P4 M1 e' O8 W1 O
                SETB      send                ;发送操作已完成标示
+ t# x) z0 I# ]" ^                POP       ACC! C1 A, g$ l5 f% @" q, b& g) \4 V% ?
          POP       PSW
3 K! J! f3 m: k! h7 E          RETI                    6 m4 x/ u* Z. B( P
;-----------------------------------------------------------------------------------------------
' D7 R2 v1 j% X;串口中断子程序
& }1 r! y' D! Z;-----------------------------------------------------------------------------------------------' t$ x% e# q: o
serv:     PUSH      PSW
! a3 [( Z; c, C, N          PUSH      ACC
# t, n" b, u) g- V          NOP
/ p6 x% _, u0 c. _- M$ o          CLR       RI' K7 A0 n+ C5 J
          MOV       A,SBUF2 _6 k$ F" _9 i* m
          MOV       R0,A
5 B1 P/ q2 E. B5 I          CJNE      A,#11H,NEXT19 ]5 W/ N7 d6 k
          MOV       A,R0
: X3 Q/ R& s; Y# O; a8 d7 ^9 t2 H5 QNEXT1:    CJNE      A,#0AAH,NEXT2
1 M* i, c' ?) i- }          CLR       nei_show; z& W- e! v; L$ j+ b
NEXT2:    CJNE      A,#99H,NEXT3
% ]" S: U& _# d# i0 h" |          CLR       wai_show
; s  @. g  f8 E. l% w% x: HNEXT3:    POP       ACC
6 B7 t* H1 K+ p0 h( C0 [/ F! w3 o) p          POP       PSW; E! u% e6 }, G2 C
          RETI# J. t8 O6 |6 A4 A* a& }  e
;-----------------------------------------------------------------------------------------------
4 L5 a  v# }$ M;延时10ms子程序
, N: ?% o( |+ ?8 W;-----------------------------------------------------------------------------------------------! }) w/ X5 p; t' f4 `! ]  T8 o* K
del10:    MOV       R7,#406 x9 D% q6 |& N+ s' V. J
del1:     MOV       R6,#1236 Z1 W. t! T+ O& l( v+ t& x
          NOP                  
  \% \( P( W& E- c- R( c4 q! u# Adel2:     DJNZ      R6,del2
: ^& M( W, M6 c* I& H& n6 k          DJNZ      R7,del17 O% I* ?$ _2 g( z9 K& o: M
          RET8 d2 ^3 q5 V* }) ?- h
;-----------------------------------------------------------------------------------------------
8 S8 g/ z2 ?- o& A* l. [' u% a) z;中断初始化子程序9 j, p3 g! N4 {
;----------------------------------------------------------------------------------------------- + ^' G2 D& W) R9 C+ `
init:     SETB      EA                  ;mcu开放中断
, O5 v& y! f* R8 d- F0 \          SETB      EX0                 ;允许INT0中断9 o# d. B9 G3 f6 |" @+ z
          SETB      IT0                 ;设置INT0为边缘触发形式% w% v& g. p7 h) ]$ m( s( D; r, R
          SETB      EX1                 ;允许INT1中断. \# Q3 N8 \$ h: y
          SETB      IT1                 ;设置INT1为边缘触发形式4 K8 z' ^0 f. Y7 x
          SETB      ES                  ;允许串口中断6 E1 h! ?; z1 O# d+ t
          RET # n& J2 \% P% N
;-----------------------------------------------------------------------------------------------
- ]4 @3 T( X) A8 Q5 l;串口初始化子程序  ~* I/ |% G$ `: K, n" }8 S' C. F
;----------------------------------------------------------------------------------------------- 0 [& X$ l& W, X! l3 I# q% g' |7 o
initRS232:MOV                    TMOD,#20H           ;定时器工作在方式27 x' q6 B' r" E
          MOV              TH1,#0D0H           ;设置波特率0E8H-2400,0D0H-12004 N; i7 P- a; e3 Z% z# M
          MOV       TL1,#0D0H7 N3 D* ~+ U6 v. F0 J8 W  k0 t
          MOV       PCON,#80H           CON-电源控制
0 l8 E( u" G  T9 d4 J3 n          SETB      TR1                 ;启动定时器1
! K1 I1 D3 U4 G; e6 g, x          MOV       SCON,#0D0H          ;SCON-串行口控制  MODE3 启动串行口接收数据   
# a$ k' E$ T! A5 F& B          RET                           ;返回  j/ t3 r+ v7 d6 S( f3 O/ }( Q/ ]  T1 e
         
* y/ A8 _  K* e1 f6 H: P          END
5 g" b5 j, |! `% D
" Y0 X" g! U& k; W# O  K' v 现在调试中,灯也不亮(电路中,发光二极管正极接5V电,负极通过上拉电阻接单片机),串口传输也不成功....
) L* m: j9 L$ T 另外,小弟个人还怀疑按键的解法有问题。电路中采取独立式键盘一段直接接到中断源上,一端接地。并没有采用电源+上来电阻的形式。我查了下书籍,有的说到,单片机里面有上拉电阻可以这样子接法,但小弟还是怀疑~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-28 04:45 , Processed in 0.109375 second(s), 24 queries , Gzip On.

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

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

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