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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
小弟是做FPGA/cpld和一些简单硬件设计的,这两天逼于要写一个单片机程序(没办法,谁知道公司人少!)...可是,委实不会啊!!折腾了半天,参考了不少书籍,好不容易码出了一段~但是调试它愣是没反应!!时间又紧,小弟实在是没办法,只好上论坛来求救~~还望大侠们指点迷津~
( c7 g" A& Z5 f  f, O3 M  j
/ N# |7 _; W2 E2 z5 y   要到达的功能:  80C2051单片机的中断源外接两个按键——当按下键1时把11AA通过串口发送到另一个单片机上;当按下键2时把1199通过串口发送到另一个单片机上...无按键时候等待操作!!
" }: |4 s0 ], ]5 ]/ R" [   程序见下:0 ?' K, ^! V( J, L
          nei_in    EQU       P
9 J4 I1 B# z' S& d9 |! s. O6 W          wai_in    EQU       P
: E/ S0 u% Z, i# W: i4 _& v7 c          nei_show  EQU       P1.3
6 E& [. ^" _" T3 c          wai_show  EQU       P1.47 I/ X" V6 K- o3 o7 B! D
          send      EQU       P1.2" s( u5 I4 G- O5 L( r- E
;-----------------------------------------------------------------------------------------------
1 [) u1 `1 C7 ~+ Z          ORG       0000H
2 q9 V' F# M7 @) Z          AJMP      main                ;跳转至主程序/ R( q1 j  ~% y
          ORG       0003H
, t: a7 f9 w5 x/ f, B          LJMP      f_0                 ;转到外部中断0
* s6 }& a$ P4 G/ c          ORG       0013H
# o# p, u1 V  z- N2 I          LJMP      f_1                 ;转到外部中断13 L4 D3 B( V0 |
          ORG                    0023H
/ ~! }/ r  E: m0 K( S6 F! _5 V          LJMP            serv                ;串口中断! l* D; C0 `7 u- `) H0 M  @- [
;-----------------------------------------------------------------------------------------------( p' H  d; w9 d7 h' T$ H+ m1 P
;主程序9 G6 r4 x( A4 k# c: G! s9 h) t. n
;-----------------------------------------------------------------------------------------------       * \9 R. m5 b+ @1 {; ?
          ORG       0030H               ;主程序开始地址$ ]6 t/ z# A1 g8 m, [
main:     LCALL     initRS232           ;串口初始化
" U* s# y4 {4 {% a7 Y; A          LCALL     init                ;中断初始化" ?# C" L: s) r0 ^
          CLR       send
: B! ?$ Z9 Z8 O* P+ D+ \          SJMP      $                   ;等待操作         
2 f* \& A  U  |2 T' f0 t;-----------------------------------------------------------------------------------------------2 j% K2 s! M2 U: \4 T2 O
;外部中断0操作$ E& C/ u3 Y  W( G# N0 v
;-----------------------------------------------------------------------------------------------            
9 l3 n( ]2 e% f4 Gf_0:      PUSH      PSW                 ;保护现场
! e7 X. \/ }- X, P4 d8 b          PUSH      ACC
- Q" C! E* O; R4 y9 F: v7 Q" X3 [          NOP                           ;延时等待响应% C. k9 I5 W" u' O8 ?
          NOP            ! }+ |5 O  m8 Y# Y6 N7 H
          SETB      wai_show            ;关闭中断1操作指示灯
, \0 W2 _+ \/ ?1 z+ O. Y/ E) o( B          NOP
! j$ v7 G$ f$ t" C          MOV             A,#11H              ;把55H送到累加器
- F* V& M5 Z/ g4 O9 T0 Q# ^+ h9 l$ y          MOV              SBUF,A              ;送到缓冲区
& O( y# J5 g& |: u$ s          JNB       TI,$                ;等待发送完成
: P: x: x9 L( a% j/ o          CLR       TI                  ;允许再发送4 w4 N# |  p6 {' E* m( P: |9 y
          MOV              A,#0AAH             ;把AAH送到累加器/ |+ `5 I; F8 w9 E
          MOV              SBUF,A              ;送到缓冲区9 N/ r; D8 i$ V2 y# |
          JNB       TI,$                ;等待发送完成" D" P$ O! K/ T
          CLR       TI                  ;允许再发送
% r, H% S& Y# h7 E+ I3 q          NOP              * F/ T# I7 s2 G- X" H
          NOP    0 R, j( X& s2 `: E  A
          CLR       nei_show            ;点亮中断0操作指示灯            
0 j  o# s4 i  w+ I! f. i4 Y) W                SETB      send                ;发送操作已完成标示
: W  F+ |, e* h6 P2 U                POP       ACC
8 ^! U3 i6 r# `& ?- O          POP       PSW
+ p# v" l$ t" l3 R1 Q          RETI                            & ?* B2 ?7 i" @' C) H% |
;-----------------------------------------------------------------------------------------------
8 f1 `1 i9 ^- ~7 A0 ^' p;外部中断1操作
; w- }" Q- `2 u, o, m: E, {* L;-----------------------------------------------------------------------------------------------     
6 t1 o# d" n3 B7 D0 Hf_1:      PUSH      PSW                 ;保护现场
- ?: C  _1 U& r          PUSH      ACC
: [2 f3 ^3 w, n4 r7 U" s( V7 k' M          NOP                           ;延时等待响应5 h+ q8 G( y4 t" h, j3 w, |) t
          NOP
+ e, @# L, S. R5 F! P          SETB      nei_show            ;关闭中断0操作指示灯
2 u, a5 ]5 J3 f8 [  u, p' V( D          NOP% C& G4 X1 p7 P: p1 R
          MOV             A,#11H              ;把55H送到累加器. d" H: h! |7 l1 f( Q9 G
          MOV              SBUF,A              ;送到缓冲区
. K. h" g9 s6 i& T" w6 V4 [  L, ^          JNB       TI,$                ;等待发送完成
: e+ ~. Y; A; B. F' F          CLR       TI                  ;允许再发送( [9 ?/ Q  W: H( L* t5 Y' O' ^  {3 A$ \
          MOV              A,#99H              ;把99H送到累加器4 a3 F# A: h) n# M) t4 s* c
          MOV              SBUF,A              ;送到缓冲区
1 X" T! ?4 B, y1 h3 @. W" ~          JNB       TI,$                ;等待发送完成; t; L5 f# I8 u/ L$ I- f
          CLR       TI                  ;允许再发送
6 s+ I$ }: n% x1 E2 A  Y          NOP
% t4 s9 Y% c) \8 {          NOP                 
8 `4 Y: J# g5 e) s+ |0 @; N          CLR       wai_show            ;点亮中断1操作指示灯 % a; \+ W% C7 a
                SETB      send                ;发送操作已完成标示
: p; c7 E( D  @" b                POP       ACC2 X+ a. p; P. b; E2 h. i9 B3 s
          POP       PSW+ B% U& O5 d1 y  U; e
          RETI                    0 G4 {: ~3 i* P' ?( L
;-----------------------------------------------------------------------------------------------2 N* V* S1 ~+ O
;串口中断子程序
, ?# h: |' q' q3 L9 `( Z2 E0 x+ y;-----------------------------------------------------------------------------------------------; F3 [1 |1 E/ |$ D) A' f
serv:     PUSH      PSW
5 i/ E. M2 q4 `' s0 Y3 M4 s& q          PUSH      ACC
! c2 v9 d: m7 k- `          NOP) L$ a3 v6 b1 g
          CLR       RI
( R( |2 }, R% S7 S3 D          MOV       A,SBUF% ?4 M* Q+ {9 X3 i* |( E) u
          MOV       R0,A7 ?$ I; i& C! v
          CJNE      A,#11H,NEXT1
, j( b8 K" F5 i7 L          MOV       A,R0
9 P& r! ?, @4 ]NEXT1:    CJNE      A,#0AAH,NEXT2
" ?# g/ k5 ?+ f/ [3 j& M          CLR       nei_show1 ]3 t0 i5 H5 C9 e: z! T9 e. H/ ]
NEXT2:    CJNE      A,#99H,NEXT3
# ]: Z! R6 I! {          CLR       wai_show
9 T& s* l, i3 s* SNEXT3:    POP       ACC1 c% G9 G* L( F* W+ k; H
          POP       PSW: O- X5 }" ?% ^
          RETI
! J* Q- i/ d  N' T9 D4 }4 u1 `;-----------------------------------------------------------------------------------------------0 `, ]- P/ u+ s9 m. S& K
;延时10ms子程序
! l# `7 Z1 k' Z" t& Q$ m;-----------------------------------------------------------------------------------------------
: Q4 c& w- K- @# Ddel10:    MOV       R7,#40. n- U0 D; q) L/ _. q; {8 P
del1:     MOV       R6,#123! e  h9 ?8 X+ X+ O2 m
          NOP                  - D0 Z" A: r% T7 T* w
del2:     DJNZ      R6,del2' x5 W4 b* F+ X! s  z- r+ o, i. ^2 I
          DJNZ      R7,del1
- ]( J6 T* p" v7 T) L9 K          RET
/ X' \* R' e; K2 m" Z;----------------------------------------------------------------------------------------------- 5 I- \1 J0 u, ]9 [% P# v8 l7 i2 Z7 C
;中断初始化子程序% ?) P, V5 ~$ {) U9 U( c8 l
;-----------------------------------------------------------------------------------------------
% V- h5 w+ u" ^( X' R. zinit:     SETB      EA                  ;mcu开放中断0 U( S! X; ?! z
          SETB      EX0                 ;允许INT0中断( u$ c3 D: Q' X! {& H
          SETB      IT0                 ;设置INT0为边缘触发形式
( Z* X3 U/ d1 g0 ^2 D* U          SETB      EX1                 ;允许INT1中断
, P! f$ Z$ z! n. w3 a6 n+ ?# h          SETB      IT1                 ;设置INT1为边缘触发形式8 {: N7 J0 v& X* V! S7 Y6 R4 i- t
          SETB      ES                  ;允许串口中断
& x2 x: d4 D9 W" j& L          RET
! }  c3 u0 j) l+ E! N;----------------------------------------------------------------------------------------------- 5 Z; G, _  `( l: p) O) D
;串口初始化子程序( K' i) U, a4 B2 M9 m/ V1 C- N3 |
;-----------------------------------------------------------------------------------------------
9 `! D8 O! M9 z% V! D, _8 ainitRS232:MOV                    TMOD,#20H           ;定时器工作在方式2
% i0 K4 X$ K8 y3 m3 E$ B2 F- q          MOV              TH1,#0D0H           ;设置波特率0E8H-2400,0D0H-1200
( k4 k9 W0 n4 P          MOV       TL1,#0D0H0 q! g* `! m( l3 S
          MOV       PCON,#80H           CON-电源控制
2 z; C9 N$ x  g; ]7 K          SETB      TR1                 ;启动定时器1
# `$ V0 K7 _; `0 E+ h% ^( z          MOV       SCON,#0D0H          ;SCON-串行口控制  MODE3 启动串行口接收数据   
7 N& L* @: }+ Q, P6 ]          RET                           ;返回7 r3 P" r3 c3 P# G
          ) a/ r9 w( P9 Y1 o) v3 i: L
          END$ E& q+ E* b/ U, A
: s) D# L, Z$ T3 C* U7 ?
现在调试中,灯也不亮(电路中,发光二极管正极接5V电,负极通过上拉电阻接单片机),串口传输也不成功....4 x' l5 b4 S. Y3 p3 d5 W
另外,小弟个人还怀疑按键的解法有问题。电路中采取独立式键盘一段直接接到中断源上,一端接地。并没有采用电源+上来电阻的形式。我查了下书籍,有的说到,单片机里面有上拉电阻可以这样子接法,但小弟还是怀疑~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-23 17:53 , Processed in 0.171875 second(s), 24 queries , Gzip On.

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

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

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