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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
小弟是做FPGA/cpld和一些简单硬件设计的,这两天逼于要写一个单片机程序(没办法,谁知道公司人少!)...可是,委实不会啊!!折腾了半天,参考了不少书籍,好不容易码出了一段~但是调试它愣是没反应!!时间又紧,小弟实在是没办法,只好上论坛来求救~~还望大侠们指点迷津~
; i% w+ ^  F, B/ S/ k
$ q! x* n  G1 d/ ?   要到达的功能:  80C2051单片机的中断源外接两个按键——当按下键1时把11AA通过串口发送到另一个单片机上;当按下键2时把1199通过串口发送到另一个单片机上...无按键时候等待操作!!
) `3 M9 O4 ~- x; {, A   程序见下:
2 X5 P3 }2 k6 n, A5 k6 ?          nei_in    EQU       P/ H8 Q5 q% L4 M3 m  X( X
          wai_in    EQU       P& }4 s% u& g% }1 r6 b0 u* {
          nei_show  EQU       P1.3* J: E# X( j- ]; J" }
          wai_show  EQU       P1.4
9 t9 F- Z7 M( k' [: a, P          send      EQU       P1.2
7 I6 _+ H$ c+ z0 |4 u. r;-----------------------------------------------------------------------------------------------
/ t' ?3 [; i% I3 {          ORG       0000H
% Z8 l* z8 M+ t3 d- Y9 m- z          AJMP      main                ;跳转至主程序* t5 P3 j: Z3 ]5 ?4 e
          ORG       0003H
- j/ @& D, i9 }- D1 O          LJMP      f_0                 ;转到外部中断0
1 @* H* F& f1 j% c; s4 s& L0 a          ORG       0013H3 t+ I. O. M: q0 w
          LJMP      f_1                 ;转到外部中断1& T! r" l9 g7 e/ l
          ORG                    0023H
' ]" B2 v# J! P  s8 Y. C) ~          LJMP            serv                ;串口中断* [( p# h) I4 z- L& I
;-----------------------------------------------------------------------------------------------
$ q& S) w" c5 ]# A) Y1 y3 M;主程序
' E/ G6 c( t( i- a, [;-----------------------------------------------------------------------------------------------      
/ T) V8 l: m' D& L          ORG       0030H               ;主程序开始地址
# d3 O- f9 A9 U/ k/ amain:     LCALL     initRS232           ;串口初始化; K' T: |+ w. r+ S/ l
          LCALL     init                ;中断初始化# H. G- e% _. }7 K) `6 a; H" L- w
          CLR       send
$ J7 }2 A2 G1 Q          SJMP      $                   ;等待操作          + Y. _' V7 c4 B
;-----------------------------------------------------------------------------------------------! K4 }; [" g' d
;外部中断0操作' N- I9 d- H& F: Z) }; n% k
;-----------------------------------------------------------------------------------------------            
+ G, T* h4 j, `% p% n" lf_0:      PUSH      PSW                 ;保护现场
1 R/ U/ a" c5 I* q, e) F+ y          PUSH      ACC
% l# b  a: l' w% ^% x7 X" y          NOP                           ;延时等待响应
1 X: g: z2 E8 G* Y" _          NOP            
- U/ V* u$ p6 C; K+ G3 M          SETB      wai_show            ;关闭中断1操作指示灯# Y# O& Z1 _1 S8 I7 t  |
          NOP, K6 O9 d9 Q6 F9 l2 T' [
          MOV             A,#11H              ;把55H送到累加器$ `& C/ G- g" [( P) G
          MOV              SBUF,A              ;送到缓冲区
2 \- q7 K: O9 {' X' Z* I$ K          JNB       TI,$                ;等待发送完成
- @7 s& K7 O. o! B1 I& R          CLR       TI                  ;允许再发送4 i- [0 P6 f3 T
          MOV              A,#0AAH             ;把AAH送到累加器5 O5 C+ @& {: C
          MOV              SBUF,A              ;送到缓冲区
/ `5 k! N$ x$ J% i          JNB       TI,$                ;等待发送完成
2 e/ d: T0 Y- M0 q9 m" ~3 b4 n5 V          CLR       TI                  ;允许再发送
0 ^: U) W* Q" i; I# I; Q) M* p          NOP              & U2 W3 y  Z3 D, b  f
          NOP      `- d% A7 t' d( o' [9 K5 `
          CLR       nei_show            ;点亮中断0操作指示灯            
; Z0 J0 M; Y; d& W                SETB      send                ;发送操作已完成标示
: H! q, A6 i; Y4 U                POP       ACC
1 l# o3 }* I" u( i/ ?& P          POP       PSW
1 g9 T% W# ~* s% V) z. E% z9 M; ^& D          RETI                           
) q4 Q: t! z, m- K9 `5 ^# o;-----------------------------------------------------------------------------------------------
% K+ S- K' t; N, j+ X8 t;外部中断1操作
. B  X" }5 L; [;-----------------------------------------------------------------------------------------------     : l" c' `; h0 m
f_1:      PUSH      PSW                 ;保护现场
! J. U  e# R. Y1 M% B) n          PUSH      ACC4 D) {  c. p8 Z! C
          NOP                           ;延时等待响应- X+ {% K2 M) P5 d0 }+ N% `
          NOP % X5 l: \7 t# @& y% @
          SETB      nei_show            ;关闭中断0操作指示灯
4 b  z7 r* M/ v' R  z          NOP- H- l; s% K# W$ j, \2 ]5 p: z6 s
          MOV             A,#11H              ;把55H送到累加器  p* W8 e; r- Q' M# o6 c0 p
          MOV              SBUF,A              ;送到缓冲区; c- ^$ q- |3 n* S* [# s
          JNB       TI,$                ;等待发送完成- ]& Z7 g( V* o$ o3 Y/ o# Q
          CLR       TI                  ;允许再发送
! a; l+ z  i, o, i          MOV              A,#99H              ;把99H送到累加器
- C3 T% {, ^- s' j. B5 a8 J          MOV              SBUF,A              ;送到缓冲区, Z$ R( p7 k+ O# ^' q  {
          JNB       TI,$                ;等待发送完成% R: e* l# @- b) O; e& S4 W/ F
          CLR       TI                  ;允许再发送
7 b9 c0 P7 |0 d) o8 H+ a          NOP # u- y4 i, ]! ~2 ~& s% A- U* _
          NOP                  ; U' O+ @4 i3 f4 ?9 i
          CLR       wai_show            ;点亮中断1操作指示灯
+ ?  C+ S$ h& O                SETB      send                ;发送操作已完成标示3 J# ?# \0 G- w8 O2 l
                POP       ACC. U0 I1 `$ k* `* M2 j
          POP       PSW
& o; Q2 A3 U8 M0 ]          RETI                    + x/ b8 S& Y6 L  n
;-----------------------------------------------------------------------------------------------
% B+ a9 D. H) ]# e4 f4 [0 D" d;串口中断子程序
8 e* t* [( M) s' ^: s2 K% ?;-----------------------------------------------------------------------------------------------; O4 C$ C4 U- g9 P
serv:     PUSH      PSW8 y* @) x7 r# |/ }5 D
          PUSH      ACC; }$ n, r: g9 W% l
          NOP. b) j, R6 H3 {* w2 ]' M
          CLR       RI
0 S& U! Q6 w' L5 b. @          MOV       A,SBUF
6 V" h4 w* P; j2 e: s& y          MOV       R0,A# `0 n' T2 I& e
          CJNE      A,#11H,NEXT1
2 |$ g. H! e$ o5 X7 ~" u' B          MOV       A,R0) S8 x5 T( p% ?+ z7 v; R
NEXT1:    CJNE      A,#0AAH,NEXT2
6 w3 t; \3 H8 {9 V5 V) g          CLR       nei_show  D: c. q: k; Q
NEXT2:    CJNE      A,#99H,NEXT3
% |7 a* t2 g( H) w0 y          CLR       wai_show; w8 ~/ S$ |5 o) F/ B
NEXT3:    POP       ACC! f' @$ `5 h2 a3 x7 F; [& H+ o9 g
          POP       PSW
6 X6 z5 G+ H- ^+ u' `/ L$ Q          RETI
0 C; z. s0 e- e  A$ v4 D;-----------------------------------------------------------------------------------------------2 c! Z" ^% q" F- e$ A( U6 p; X+ D
;延时10ms子程序
/ ~0 M9 B* D/ f) ^5 Z: `;-----------------------------------------------------------------------------------------------. Y/ {7 _2 v3 w2 r5 R& v
del10:    MOV       R7,#40& S  O0 V7 @* v
del1:     MOV       R6,#123
" F$ U: s! x) D( G          NOP                  
4 u6 Y7 Y* B2 C( M1 Wdel2:     DJNZ      R6,del2) u3 E; B; k: q, Y; L& Z% `
          DJNZ      R7,del1
9 |1 R; L* [) C; i+ J+ C- {/ f          RET
, |  Q* K+ k1 D0 G8 G;-----------------------------------------------------------------------------------------------
. D7 L/ g2 n+ s3 d! U2 K1 ^;中断初始化子程序
: g- A/ B3 v4 B" z4 k;-----------------------------------------------------------------------------------------------
3 O& I/ n. N8 S3 s9 k/ u% G' finit:     SETB      EA                  ;mcu开放中断$ O6 p8 O2 q5 g  A8 z: [! W1 |
          SETB      EX0                 ;允许INT0中断5 h% X; R$ m* R3 C1 ?$ h  ^
          SETB      IT0                 ;设置INT0为边缘触发形式
/ M/ I) O- X0 m- T+ w2 q6 _2 h          SETB      EX1                 ;允许INT1中断) g: B: i0 b5 n+ K2 v4 U
          SETB      IT1                 ;设置INT1为边缘触发形式" M8 |% q/ g* X: q3 n* B9 f
          SETB      ES                  ;允许串口中断/ _# ?2 [# l4 n* @& e# ?
          RET * b+ w5 S: E4 E) ~3 l0 x
;-----------------------------------------------------------------------------------------------
/ \$ ^# T% c* d! h* L;串口初始化子程序
+ u9 \' V/ O. `2 M;----------------------------------------------------------------------------------------------- ) S, G, A7 c, f# `
initRS232:MOV                    TMOD,#20H           ;定时器工作在方式2
0 i2 f* @$ z- T1 M3 c0 ?          MOV              TH1,#0D0H           ;设置波特率0E8H-2400,0D0H-1200& E0 x; D9 b" ?; V: `9 W- p8 `- s
          MOV       TL1,#0D0H
0 R/ q' ^  S6 y- ^5 t6 v: g          MOV       PCON,#80H           CON-电源控制" ^% W$ W+ c$ F0 `' i
          SETB      TR1                 ;启动定时器1
4 X! G. X" l& m. o          MOV       SCON,#0D0H          ;SCON-串行口控制  MODE3 启动串行口接收数据   
) E1 m7 g2 e/ ?5 m* b. C) b: h, _          RET                           ;返回
) r& _2 Z9 F0 Q  i3 C5 E         
* q# [; k9 c, ^$ Q          END, b( ?( B- w5 u1 U& S' N6 S- K' b, e
+ O( t8 ~- B8 k# x: c. {. ~
现在调试中,灯也不亮(电路中,发光二极管正极接5V电,负极通过上拉电阻接单片机),串口传输也不成功....
0 [: K5 y& H. w8 u) K 另外,小弟个人还怀疑按键的解法有问题。电路中采取独立式键盘一段直接接到中断源上,一端接地。并没有采用电源+上来电阻的形式。我查了下书籍,有的说到,单片机里面有上拉电阻可以这样子接法,但小弟还是怀疑~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-23 14:57 , Processed in 0.156250 second(s), 25 queries , Gzip On.

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

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

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