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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
小弟是做FPGA/cpld和一些简单硬件设计的,这两天逼于要写一个单片机程序(没办法,谁知道公司人少!)...可是,委实不会啊!!折腾了半天,参考了不少书籍,好不容易码出了一段~但是调试它愣是没反应!!时间又紧,小弟实在是没办法,只好上论坛来求救~~还望大侠们指点迷津~
: v6 k& F! B" v! o
1 j  x* i+ V. q, q* ~! [   要到达的功能:  80C2051单片机的中断源外接两个按键——当按下键1时把11AA通过串口发送到另一个单片机上;当按下键2时把1199通过串口发送到另一个单片机上...无按键时候等待操作!!
' L. O# Y0 o% w6 M   程序见下:
7 A% ?0 n' r, f2 }          nei_in    EQU       P
% ~- Y5 F/ N) y; }) O8 L          wai_in    EQU       P( t5 q0 m/ G) x5 W* {; `4 R
          nei_show  EQU       P1.3  g/ L+ u& X: K4 ^2 `
          wai_show  EQU       P1.4. q9 Q; b+ e) G- j5 D" i+ U
          send      EQU       P1.26 J# J- D1 a4 d0 t- [1 r6 A
;-----------------------------------------------------------------------------------------------
  l2 N$ c5 d2 W& \% L7 a          ORG       0000H& c: ]4 o, [! i& L7 c1 Q) L. r
          AJMP      main                ;跳转至主程序7 o8 J. W: L4 v, m" m# m
          ORG       0003H
' l+ Z& `7 `( L0 Y7 o5 _. O, B          LJMP      f_0                 ;转到外部中断0  u/ [6 |" z, ]& \. t
          ORG       0013H2 `+ J% h/ R% m: k# z0 o
          LJMP      f_1                 ;转到外部中断1  x/ ]- b& W1 e7 @- e: M
          ORG                    0023H% t* r" X  W. a- K  f" r7 t
          LJMP            serv                ;串口中断
, J0 R4 |8 J1 a, M;-----------------------------------------------------------------------------------------------2 ]2 a, l* I' u" t, p
;主程序' U1 s2 k9 ]  U: P" _- k
;-----------------------------------------------------------------------------------------------       / y) L+ P* H" t
          ORG       0030H               ;主程序开始地址
0 e9 @. H: x2 g* ^main:     LCALL     initRS232           ;串口初始化
9 s1 ~- J) P" _# R4 A; @          LCALL     init                ;中断初始化  O, p) P$ b2 h# z& {2 R
          CLR       send1 C! i: j3 d% K1 c( Q8 i! L1 i
          SJMP      $                   ;等待操作          3 a8 }2 h- G+ \( a
;-----------------------------------------------------------------------------------------------
/ F$ F" D7 k' P& i" s;外部中断0操作+ ^' n/ L, m& L! \" b$ G
;-----------------------------------------------------------------------------------------------            
" J( ^! P) l2 `" x3 Tf_0:      PUSH      PSW                 ;保护现场& |4 K) I" e% P+ [" A
          PUSH      ACC
) n3 K& \$ F$ p" ]0 r7 l8 l          NOP                           ;延时等待响应* E) y7 g# f* V. R5 v8 k9 J$ b
          NOP            
2 b' e+ k2 j( @! D2 Z          SETB      wai_show            ;关闭中断1操作指示灯
* U4 F( n4 g; |" H% t3 S7 m          NOP
" N. j, e* [4 c9 A" Z7 }2 V          MOV             A,#11H              ;把55H送到累加器% M. T& V, r( Y$ G4 w4 T5 ^
          MOV              SBUF,A              ;送到缓冲区. \3 z6 v" V: L0 ?
          JNB       TI,$                ;等待发送完成/ g( }9 v: o6 l, Q2 s; @$ G) N/ a
          CLR       TI                  ;允许再发送
. w. q- j$ }+ \6 ~' O/ K          MOV              A,#0AAH             ;把AAH送到累加器
2 d/ t* K9 b& a1 n/ P          MOV              SBUF,A              ;送到缓冲区9 p' E, h+ ^6 d$ |: K  \
          JNB       TI,$                ;等待发送完成
$ g0 L; \2 X. W' j3 ]2 \, C" a          CLR       TI                  ;允许再发送/ t" `6 {2 B- [* ~
          NOP              
5 L: L! `- i; @6 F' F& g( ]1 g          NOP   
! j2 R: P$ s. E; s) d8 k- Q( K0 h          CLR       nei_show            ;点亮中断0操作指示灯            
% A! R; H7 Q' {2 I4 C8 c! h                SETB      send                ;发送操作已完成标示3 ]. B# |, P, R  W9 h9 [
                POP       ACC
2 q% }+ u0 m: ], w1 L. l& N          POP       PSW
( G! ~! P+ z, S( t5 N( }3 S          RETI                            ' s- q  J' c( ~. d% i" k9 o% z# \
;-----------------------------------------------------------------------------------------------
) D7 e& ]  E2 u( I$ K% R;外部中断1操作
0 H1 r. j2 T4 `+ N9 [+ u8 S;-----------------------------------------------------------------------------------------------     
, c% I: T% h3 a* |f_1:      PUSH      PSW                 ;保护现场2 z3 u6 e6 J" ?9 ^2 u" V# O+ U+ {
          PUSH      ACC  l+ T2 z: u  ~! n  T; Y0 `
          NOP                           ;延时等待响应4 _! E! r7 J! L% H- J
          NOP
- @* l. |0 y! X0 E/ }          SETB      nei_show            ;关闭中断0操作指示灯  b/ ^! O) i: W+ L
          NOP5 _, r" G. e* s( `% l7 `6 v
          MOV             A,#11H              ;把55H送到累加器
, I# R" `2 b* W# u. V9 i' J) K          MOV              SBUF,A              ;送到缓冲区1 B2 B7 I$ _4 ]5 {* I
          JNB       TI,$                ;等待发送完成
8 b4 n" n* S, |3 G          CLR       TI                  ;允许再发送5 E5 Q3 S# N4 f8 v6 l* M8 c
          MOV              A,#99H              ;把99H送到累加器
# |5 P) b) Y/ E, `' ~) ~          MOV              SBUF,A              ;送到缓冲区! y  o# Z9 c  c
          JNB       TI,$                ;等待发送完成
6 n2 F3 c9 c7 O9 t/ l5 ]' K) O, D          CLR       TI                  ;允许再发送
0 e- F( J5 y) n, |& R          NOP 0 M8 W; b3 o: Q- l. S/ R1 Q
          NOP                 
* D' V  i, K  }          CLR       wai_show            ;点亮中断1操作指示灯
+ f0 ^" J$ Z9 ]8 {: t                SETB      send                ;发送操作已完成标示/ Z2 E+ q- e  w, C
                POP       ACC
$ n! V) H( R- I% ^: ?* y          POP       PSW0 i8 A+ {$ A1 W$ J* l
          RETI                    
% v/ W4 {' T& [8 G;-----------------------------------------------------------------------------------------------
+ t4 t4 R! n' y! x;串口中断子程序
$ W& S, i- a  U, l+ \;-----------------------------------------------------------------------------------------------
7 @$ r8 X* W! p- \serv:     PUSH      PSW* [5 ~1 E# Z. y$ S
          PUSH      ACC3 D! [; Q" J# S3 J" c" o* y* ^8 N
          NOP" {5 s$ C3 s+ G; m4 L0 [& C) o
          CLR       RI
9 n' i: x: S8 C  x          MOV       A,SBUF
% F5 ^3 \1 M& T" j( i          MOV       R0,A4 i* @9 T6 M& P4 H5 y9 l
          CJNE      A,#11H,NEXT1
! v& C# u" s" U8 s# s          MOV       A,R0
' k' o& W2 F% v) k0 u" O$ O2 P9 QNEXT1:    CJNE      A,#0AAH,NEXT2+ c( x) r1 Q$ w, ^1 l
          CLR       nei_show
" ]# ?- [2 z0 J3 w7 \. jNEXT2:    CJNE      A,#99H,NEXT3% M, t. _9 a0 T. V9 R' J
          CLR       wai_show" g1 ~3 D- i' m' T- ^! R" U
NEXT3:    POP       ACC
) U3 g9 s1 j/ J3 v7 j# E+ r: R          POP       PSW
' Y* @" w& p0 z8 W- V2 @: G) O  N          RETI0 |% t* J: O" l% |1 W
;-----------------------------------------------------------------------------------------------
3 i, y- F7 I: ~& a4 Y;延时10ms子程序
' [$ `( m! }) d/ z;-----------------------------------------------------------------------------------------------4 w! g9 v( V/ K* V
del10:    MOV       R7,#40- p8 ]' J# g( N  ]: G
del1:     MOV       R6,#123
! Z7 y& m* Y( p0 ^+ I- x; O- R- J          NOP                  
$ N* X( F# F4 P0 Z5 odel2:     DJNZ      R6,del22 d0 u3 B6 |# T3 y' `
          DJNZ      R7,del1
, x% R! I. H) s          RET
" e: W6 {: g! K% Q. b  J. w;-----------------------------------------------------------------------------------------------
1 ^9 k0 e( o, Y- ^: _;中断初始化子程序. b/ `+ ]2 a: b! O2 m; N
;----------------------------------------------------------------------------------------------- ( Q0 n% n" w: }& _
init:     SETB      EA                  ;mcu开放中断% ?* S6 W8 r, V8 P6 ^" K2 u3 w& q
          SETB      EX0                 ;允许INT0中断
- F8 M7 a9 u5 w, U          SETB      IT0                 ;设置INT0为边缘触发形式
" |/ [2 x) r" N# x6 }          SETB      EX1                 ;允许INT1中断
" I* @5 L. ^4 m, o          SETB      IT1                 ;设置INT1为边缘触发形式
4 f5 D* g& @# ]% d( U          SETB      ES                  ;允许串口中断
& p4 {8 ?; [' U4 @2 U! P' S          RET , B( N, t- L+ F: R
;-----------------------------------------------------------------------------------------------
; b/ K; m# d( V% o& k;串口初始化子程序
9 K  M2 N& D: E. B6 X& M;-----------------------------------------------------------------------------------------------
1 @+ E- @" S8 o* minitRS232:MOV                    TMOD,#20H           ;定时器工作在方式2* [, D5 e9 l9 k  Q2 g
          MOV              TH1,#0D0H           ;设置波特率0E8H-2400,0D0H-1200
7 x; M/ {  q- B' V          MOV       TL1,#0D0H
+ B3 T' t* p# {3 |          MOV       PCON,#80H           CON-电源控制" Y  C0 p1 B! v8 L
          SETB      TR1                 ;启动定时器1# \$ z9 }7 K5 [- n. J. J) K
          MOV       SCON,#0D0H          ;SCON-串行口控制  MODE3 启动串行口接收数据   : W6 Q" F! M) D
          RET                           ;返回
( R- K4 j/ a' p5 b! j& C7 n1 x  k         
$ q& m: I% p6 V1 @          END
( R( \2 [( K+ f; q3 }! b. E  Q, {$ s8 B' k. o% Y- O% s. m3 H" w
现在调试中,灯也不亮(电路中,发光二极管正极接5V电,负极通过上拉电阻接单片机),串口传输也不成功....
; v( L4 Z% v7 y# G; H( w2 H 另外,小弟个人还怀疑按键的解法有问题。电路中采取独立式键盘一段直接接到中断源上,一端接地。并没有采用电源+上来电阻的形式。我查了下书籍,有的说到,单片机里面有上拉电阻可以这样子接法,但小弟还是怀疑~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-9-10 17:45 , Processed in 0.125000 second(s), 24 queries , Gzip On.

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

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

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