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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
小弟是做FPGA/cpld和一些简单硬件设计的,这两天逼于要写一个单片机程序(没办法,谁知道公司人少!)...可是,委实不会啊!!折腾了半天,参考了不少书籍,好不容易码出了一段~但是调试它愣是没反应!!时间又紧,小弟实在是没办法,只好上论坛来求救~~还望大侠们指点迷津~
+ B7 L! o3 v7 S- {0 U* h5 V
, s  _9 }* {6 \' P1 h) X& B   要到达的功能:  80C2051单片机的中断源外接两个按键——当按下键1时把11AA通过串口发送到另一个单片机上;当按下键2时把1199通过串口发送到另一个单片机上...无按键时候等待操作!!( [# y, P% |2 B8 g
   程序见下:
5 }$ \2 k4 V; D' H* p          nei_in    EQU       P# {+ p' k- j- ]+ k6 ]4 F
          wai_in    EQU       P/ B8 y) @5 V0 n7 m. N
          nei_show  EQU       P1.3
- m9 I- D9 m8 B  K7 x7 a7 x          wai_show  EQU       P1.4" i! |) T% |( }5 K' j
          send      EQU       P1.2: m' Y. Z# g3 Q1 o
;-----------------------------------------------------------------------------------------------
- O+ [3 w3 e& }* e. a          ORG       0000H; u- C: K6 h  F- J; ?# k; X+ m
          AJMP      main                ;跳转至主程序
1 ^$ I! l# l. e. ~8 y+ G  M+ A7 B6 M          ORG       0003H; C$ @- H9 u+ @
          LJMP      f_0                 ;转到外部中断08 Q/ \' _/ k4 [1 s. o3 ^
          ORG       0013H# j, P' L* J( ?. A5 L
          LJMP      f_1                 ;转到外部中断1
- B/ w0 x, }. ?( Z6 e          ORG                    0023H) W3 G+ L$ B  J" k
          LJMP            serv                ;串口中断
5 {: W4 |6 `" A( p# z) o7 j7 j;-----------------------------------------------------------------------------------------------( {  X, L, N9 Y) e& X) I. j
;主程序
8 w2 h/ |* [4 u& j) Z0 s- N% c;-----------------------------------------------------------------------------------------------      
2 j/ w  s  Q: M& O          ORG       0030H               ;主程序开始地址9 C1 F) b# I) f( |/ {
main:     LCALL     initRS232           ;串口初始化0 e( |: A$ f& V3 o
          LCALL     init                ;中断初始化. C- k" o3 B; d! g0 e9 F
          CLR       send* C. _9 i- U$ Z- A& ~+ Q( P; _: @
          SJMP      $                   ;等待操作          ( G/ X6 `6 H' J
;-----------------------------------------------------------------------------------------------( E/ j6 B7 w% H2 f
;外部中断0操作& v7 y6 `7 `: T* C
;-----------------------------------------------------------------------------------------------            2 C% g6 d6 x' n" _% q, a9 j
f_0:      PUSH      PSW                 ;保护现场4 T! w) Y0 n* D
          PUSH      ACC
+ J9 x* M! L% ?          NOP                           ;延时等待响应
% ~* F( s! r) u2 d, Z6 c          NOP            
% I" Y/ f2 o& \; x" G( y' E* l          SETB      wai_show            ;关闭中断1操作指示灯
* [) w7 C% O3 t6 x( \. s          NOP
3 Y; g5 ~4 ]9 o" B! T* ^          MOV             A,#11H              ;把55H送到累加器
; ]# T# K- K8 q/ J. O          MOV              SBUF,A              ;送到缓冲区/ z; ~, K3 M7 A( m' S4 `
          JNB       TI,$                ;等待发送完成
6 K3 A$ N2 F' Y6 h          CLR       TI                  ;允许再发送
- f4 e) w9 \: h( J' f          MOV              A,#0AAH             ;把AAH送到累加器! s; X. Z' t# J6 B8 q
          MOV              SBUF,A              ;送到缓冲区
: B4 E9 M+ X/ K; z; y( o( P( `          JNB       TI,$                ;等待发送完成# L- W9 o$ ]" I
          CLR       TI                  ;允许再发送' F( G9 L, l' w4 D$ z
          NOP              
- ~/ h. z  [5 Y1 E7 ]          NOP    3 X5 B2 L" o3 R2 S" Z" w" L
          CLR       nei_show            ;点亮中断0操作指示灯            
$ [% S. m/ Y9 W+ d" X0 C                SETB      send                ;发送操作已完成标示" p. y+ L  }' f8 _! a, f4 X: q
                POP       ACC
( N/ Z# M  q& U          POP       PSW) x$ C! I' j- H' O% G: l: w
          RETI                           
* y  ]" [5 e( r! Z" ~! |;-----------------------------------------------------------------------------------------------$ S2 f; i* F! D- s1 r2 @3 Q4 R- {
;外部中断1操作, B5 F, _+ _- T  a* o
;-----------------------------------------------------------------------------------------------     
, n% `. g- v( d9 T! c' jf_1:      PUSH      PSW                 ;保护现场5 z7 |. C, F. s9 R
          PUSH      ACC5 J( U0 B" ^* ^: \7 u0 d4 `: O
          NOP                           ;延时等待响应- e0 D% Y& b2 B9 l
          NOP / s* \0 P( l( e+ h# F) Z
          SETB      nei_show            ;关闭中断0操作指示灯6 X: `; o8 u- e( d! P
          NOP6 |3 D7 A$ s( @. N0 S5 m7 z; m( Q$ ~4 o
          MOV             A,#11H              ;把55H送到累加器* b; x; |8 C4 D& H1 f6 _
          MOV              SBUF,A              ;送到缓冲区
1 _+ X* ~4 O2 c4 \; U6 m6 R+ w1 u          JNB       TI,$                ;等待发送完成% @/ d0 A9 _: Y- J" a" X) S
          CLR       TI                  ;允许再发送
; u, a9 ?" q4 S0 I$ o' Y, Z( Q+ Z0 a          MOV              A,#99H              ;把99H送到累加器: v, r; \9 R1 A* _: N
          MOV              SBUF,A              ;送到缓冲区/ w; j0 P' `4 |! o
          JNB       TI,$                ;等待发送完成$ y- k$ }1 h! _4 b$ U/ W3 W# a
          CLR       TI                  ;允许再发送( I/ I2 Y2 s3 v7 \! ^) ]
          NOP 6 @1 Z- u: j$ X/ q
          NOP                  - d( _3 w% n' v, J: E1 }4 O3 ?
          CLR       wai_show            ;点亮中断1操作指示灯
, t& w  o9 G0 q2 L8 v4 n: h$ p4 {4 K                SETB      send                ;发送操作已完成标示9 _; |5 Q9 z2 u& I$ E% g9 J7 ~
                POP       ACC4 B  Q; Y! \7 ?6 H
          POP       PSW5 p8 ?: X, [6 D: Y: f
          RETI                    " i. I: G  N) k1 F
;-----------------------------------------------------------------------------------------------7 `1 J8 t( c3 ^
;串口中断子程序
+ Q9 ]. x- V7 ?. n5 e- X;-----------------------------------------------------------------------------------------------
8 \" l7 a. ?3 Z. Z5 O5 w3 ?serv:     PUSH      PSW: F% t$ q8 w: U5 j# E6 d
          PUSH      ACC2 f4 M- p5 S( Y: u
          NOP
4 L( J7 |9 N- g8 z# a% `' i          CLR       RI. Q: d9 p9 F5 z  \0 C7 x8 [, E. X
          MOV       A,SBUF
6 K: X7 ~* R9 e0 {. F: a          MOV       R0,A
; ?6 t8 n7 J/ Q* C) r          CJNE      A,#11H,NEXT1& u, F  p- n2 n' h
          MOV       A,R0( s/ h: u/ W2 r! y1 S# ?
NEXT1:    CJNE      A,#0AAH,NEXT2. Q6 H: V/ {8 K
          CLR       nei_show
% x/ c' u! U' ^$ |/ f9 `2 e/ U1 `NEXT2:    CJNE      A,#99H,NEXT3
8 i7 ?5 t! q$ d+ V) S          CLR       wai_show
  N# j. Y% r5 G6 YNEXT3:    POP       ACC
. P' U0 r9 n2 i( {) b9 P1 G# v          POP       PSW, D& ~' {1 \% q: @/ g
          RETI+ k+ Z" k+ m5 X, _( N1 u
;-----------------------------------------------------------------------------------------------
7 T- r) M4 h( Q* C, @( o;延时10ms子程序8 ]) a/ Z  X9 N$ Y4 t4 J
;-----------------------------------------------------------------------------------------------
  Y7 A+ M8 i" }" ~' [7 }del10:    MOV       R7,#40
3 o1 I  j: \9 Y/ Hdel1:     MOV       R6,#1239 p& ^9 ~: u; ]4 W' k/ T0 \9 Y
          NOP                  / v+ ~& W1 q/ \  r
del2:     DJNZ      R6,del2
, l0 K: a* A6 p          DJNZ      R7,del1
+ m. D# T, b. J( U1 j" M          RET
$ U9 Q" o/ |7 c! [& }: P( t;-----------------------------------------------------------------------------------------------
" V, r4 e9 X! k;中断初始化子程序, x6 T2 X( X$ S# J) E" G
;-----------------------------------------------------------------------------------------------
) H" w" b2 N2 O$ @: binit:     SETB      EA                  ;mcu开放中断
' c# c: x% J! z; c9 k' M          SETB      EX0                 ;允许INT0中断7 R: P2 X8 D( B' u7 u* F
          SETB      IT0                 ;设置INT0为边缘触发形式
: Q# T2 \% P" c; J9 Q" C          SETB      EX1                 ;允许INT1中断9 q3 V% J# h) s' {% c* b
          SETB      IT1                 ;设置INT1为边缘触发形式0 i. J* x6 r5 m3 R% y5 @0 t
          SETB      ES                  ;允许串口中断4 V' v7 h2 D; Q) u3 }
          RET 0 O: u* H& D& Q( A' J9 s
;----------------------------------------------------------------------------------------------- ( [) K* ^7 O8 a! @
;串口初始化子程序
- P0 Z& b+ X- C6 W% v9 @. D: D$ h;-----------------------------------------------------------------------------------------------
* ?% S8 Y+ z. R' c+ y$ \initRS232:MOV                    TMOD,#20H           ;定时器工作在方式2" c& w3 s9 ~( B( K
          MOV              TH1,#0D0H           ;设置波特率0E8H-2400,0D0H-12008 Q/ W9 @0 X4 ^' w: P* \
          MOV       TL1,#0D0H& c& Y2 u; `( e5 A* g9 i  A. |
          MOV       PCON,#80H           CON-电源控制% j0 a) J4 o$ s6 L* r4 ^
          SETB      TR1                 ;启动定时器17 j: K7 X) p: {) N
          MOV       SCON,#0D0H          ;SCON-串行口控制  MODE3 启动串行口接收数据   ' q$ a+ ?- g3 }  {% i$ ~
          RET                           ;返回; h2 t8 p* w# [. I( |
         
% I* x! x% R  t0 S0 O. p0 |2 M          END* `* t+ M" F; ?$ f3 E
4 Q0 t2 y  ^. f$ F$ R; s8 e
现在调试中,灯也不亮(电路中,发光二极管正极接5V电,负极通过上拉电阻接单片机),串口传输也不成功....
/ S+ W% M$ q5 n0 D 另外,小弟个人还怀疑按键的解法有问题。电路中采取独立式键盘一段直接接到中断源上,一端接地。并没有采用电源+上来电阻的形式。我查了下书籍,有的说到,单片机里面有上拉电阻可以这样子接法,但小弟还是怀疑~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-27 06:08 , Processed in 0.078125 second(s), 24 queries , Gzip On.

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

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

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