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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
小弟是做FPGA/cpld和一些简单硬件设计的,这两天逼于要写一个单片机程序(没办法,谁知道公司人少!)...可是,委实不会啊!!折腾了半天,参考了不少书籍,好不容易码出了一段~但是调试它愣是没反应!!时间又紧,小弟实在是没办法,只好上论坛来求救~~还望大侠们指点迷津~
: p* _6 W) h- n6 O; Z) M8 V6 o2 U' f' }. N. F
   要到达的功能:  80C2051单片机的中断源外接两个按键——当按下键1时把11AA通过串口发送到另一个单片机上;当按下键2时把1199通过串口发送到另一个单片机上...无按键时候等待操作!!
6 q* B+ C3 ~+ _. [9 i' C9 c   程序见下:
( [4 [5 a; m- [0 j+ e' ~; \/ y          nei_in    EQU       P! h5 X9 b6 r# m1 C2 B3 v
          wai_in    EQU       P9 i$ z. }/ G' x
          nei_show  EQU       P1.3
) i2 c" ~" i0 r" d9 l          wai_show  EQU       P1.4
' i( E) |6 X" b4 f& M! O          send      EQU       P1.20 r+ \$ s1 n. C# T' w
;-----------------------------------------------------------------------------------------------) \7 J- @4 x3 k% Q
          ORG       0000H3 ]2 Q; @# `& D
          AJMP      main                ;跳转至主程序
( ]' E1 i9 z1 Q0 [          ORG       0003H
3 W% s) f4 o. {+ V/ w& u          LJMP      f_0                 ;转到外部中断0) d0 ], ^' s) ^; U
          ORG       0013H
9 x( u& R+ l* t4 f& ]/ @% Z5 j- A          LJMP      f_1                 ;转到外部中断1
5 \! I2 n# G. T- P# f          ORG                    0023H
$ d& Q0 Y  z$ _, W6 Y. P$ G          LJMP            serv                ;串口中断; G% D& a8 m6 r  y. u
;-----------------------------------------------------------------------------------------------1 X' N: H7 d5 R0 }
;主程序3 R3 ?, {4 R* _
;-----------------------------------------------------------------------------------------------       ; J. A9 n% ~; e$ _
          ORG       0030H               ;主程序开始地址- K) r. ^% T- W* e% O0 g- u
main:     LCALL     initRS232           ;串口初始化
) r: x/ \* v. S$ {; z2 R* c2 w          LCALL     init                ;中断初始化$ T; ^8 W+ U2 s3 R- A
          CLR       send1 I) l6 M4 K( X. A% r. U
          SJMP      $                   ;等待操作          3 Z) |+ O8 ~7 K! c, F# w
;-----------------------------------------------------------------------------------------------
, M* _( b; A2 n  N$ `;外部中断0操作
. f0 u: N- ], E% w, J/ N4 t" J;-----------------------------------------------------------------------------------------------            
1 F1 m  ^' O+ P. @- y3 H3 of_0:      PUSH      PSW                 ;保护现场* ?6 A% c8 U" U9 q' ^& }
          PUSH      ACC
+ e3 H$ g" m* T. [2 ^6 n          NOP                           ;延时等待响应
+ g- n0 M! u6 X. ^- e$ p2 z  H1 ~          NOP            8 Y/ I  t) }" X- Y  S
          SETB      wai_show            ;关闭中断1操作指示灯. T; b/ C0 L1 E$ E
          NOP
, \4 I: k. y$ k/ c8 Y9 w          MOV             A,#11H              ;把55H送到累加器
2 I. y8 E5 X. F3 K( Z          MOV              SBUF,A              ;送到缓冲区
5 {* X) Y  I) I  s2 V, h) l          JNB       TI,$                ;等待发送完成
8 V- L( u% @( k2 y+ f          CLR       TI                  ;允许再发送
( m( G  W- A( d          MOV              A,#0AAH             ;把AAH送到累加器
- S' P5 L2 W" o9 ~6 T          MOV              SBUF,A              ;送到缓冲区
3 x  b4 w! u# k! g6 F          JNB       TI,$                ;等待发送完成6 w2 v$ j4 z* u( _
          CLR       TI                  ;允许再发送" ^2 _/ [: E3 Z  @- ?; y
          NOP              
3 I7 a$ u1 J1 D1 W7 K          NOP   
) f* X9 T8 H' W4 r1 y4 ~! e          CLR       nei_show            ;点亮中断0操作指示灯            ( |* L9 r* R% i. r! i0 T" l5 W
                SETB      send                ;发送操作已完成标示9 L$ |" a& S9 w, e" f) j' L
                POP       ACC
/ ~" @. z2 P2 @9 J- a          POP       PSW$ s' R) y. h2 [) L- d
          RETI                            # g4 w" U: l+ b' P8 O! W
;-----------------------------------------------------------------------------------------------
( B' \2 V$ d- R# n1 c% G;外部中断1操作
9 w# d% [- ~( ~( F$ ?( c' M% h;-----------------------------------------------------------------------------------------------     : ^0 g1 {& o) H/ d$ f
f_1:      PUSH      PSW                 ;保护现场& B" V/ x& l! V$ t7 c+ z
          PUSH      ACC
2 Z" U) o: l. T  W9 _- P% W9 H+ h          NOP                           ;延时等待响应$ x/ ^. o8 [" o. |/ I) B
          NOP
) p$ h4 B, K. @7 ]* W8 T          SETB      nei_show            ;关闭中断0操作指示灯
* z' l0 Y8 p" b# [) J          NOP7 G9 v$ p5 \( K5 F2 ?7 p- x
          MOV             A,#11H              ;把55H送到累加器
4 t, c' n" Z: P: M, H          MOV              SBUF,A              ;送到缓冲区: ?- A: U+ r$ _' g
          JNB       TI,$                ;等待发送完成( M  D% h0 v9 O0 v6 e! W
          CLR       TI                  ;允许再发送
; s! N8 c) S, V4 O          MOV              A,#99H              ;把99H送到累加器
/ P! t$ b; U/ V6 h& Q4 ~          MOV              SBUF,A              ;送到缓冲区
* ^* u! r9 p* V' |; X          JNB       TI,$                ;等待发送完成
1 W( j/ [9 ~; G2 m9 ?' E4 e          CLR       TI                  ;允许再发送/ P8 q/ V# |8 U+ r, i1 I
          NOP
! m2 q6 j' l4 M          NOP                 
" y  p! r8 L  W4 B2 E  l          CLR       wai_show            ;点亮中断1操作指示灯 4 v2 v7 Z6 t  `3 X7 C
                SETB      send                ;发送操作已完成标示
  J  k# D# f1 ?. Q% c( D! O                POP       ACC
6 g& F1 z- N6 _3 G4 k, l5 }          POP       PSW8 z5 u2 ^% }) ~" ?/ y' v
          RETI                    
- y  X% c. B& C$ F1 Z;-----------------------------------------------------------------------------------------------
2 K: {2 U: l" `) ^9 Y;串口中断子程序" S0 C' u( @+ k4 J, a# n) M
;-----------------------------------------------------------------------------------------------
( T. _- \( w& @- w! t" ]serv:     PUSH      PSW! h, D. f  v2 F6 E9 [
          PUSH      ACC
4 y, v  t# _. v9 a* w          NOP
$ L! V) h) B4 f+ M* [! I" |          CLR       RI# c9 g7 V4 O( ?2 G$ d
          MOV       A,SBUF
- l$ H* L! m- k2 V  [          MOV       R0,A
3 O  d- ~& b- v  K6 R          CJNE      A,#11H,NEXT1  v  U9 b( G( k
          MOV       A,R0
3 |3 ^. g& r4 V# G) ]- BNEXT1:    CJNE      A,#0AAH,NEXT27 e) a* {' T& B& N  q0 r9 F
          CLR       nei_show$ w' e  p, j7 Q
NEXT2:    CJNE      A,#99H,NEXT38 }$ t( p' c4 ^# K: P  \4 r
          CLR       wai_show
! \, T: L' t/ D( k2 ]' ^! \NEXT3:    POP       ACC  f+ r* g1 N. l4 X& l* c
          POP       PSW
" r5 @# C- @( m          RETI: {0 B; e- g/ s/ \& Z
;-----------------------------------------------------------------------------------------------
4 d0 X8 S, @' O, ^4 G  l" ];延时10ms子程序: ]5 G6 G6 {9 g2 r% f: @3 S% e
;-----------------------------------------------------------------------------------------------# ]# @) q5 X  T1 b5 Z* m* j0 M
del10:    MOV       R7,#405 B$ N% y5 Y% _9 `- I! \4 l: @/ \) x
del1:     MOV       R6,#123* L1 L! p5 f1 Q, j" F1 O, \! l
          NOP                  
* s0 h) N& x+ S" z; P6 P; B1 H  ]1 Ddel2:     DJNZ      R6,del2
/ G( p1 B( c2 M          DJNZ      R7,del13 f- _& X# X$ V+ c+ ]) R" b" G* j
          RET
8 W, s5 E$ i7 n2 ^# A% b) G# r; i;----------------------------------------------------------------------------------------------- # L% [  w8 b# v+ A7 w
;中断初始化子程序
+ s: n7 Q% x0 |0 w- u" N. g;-----------------------------------------------------------------------------------------------
" ~6 g$ |- s7 C* x: [* Einit:     SETB      EA                  ;mcu开放中断6 g- H, `% [' _9 p0 _; |! _
          SETB      EX0                 ;允许INT0中断
% l' J/ o2 r* j+ E3 W          SETB      IT0                 ;设置INT0为边缘触发形式
1 j3 Q- c) P5 i7 L6 Q          SETB      EX1                 ;允许INT1中断1 C/ w! y6 a$ g# U" x, e
          SETB      IT1                 ;设置INT1为边缘触发形式% R' l# M  a* w4 Y* j3 c
          SETB      ES                  ;允许串口中断
' b% }9 v+ d" f0 h          RET
6 z3 W. h* W' g  Z;----------------------------------------------------------------------------------------------- 4 ]. j+ `% W# b+ _1 ~9 r; c: g
;串口初始化子程序1 ~$ Z* i" N, \8 w2 o
;----------------------------------------------------------------------------------------------- / U) t/ m* K9 W
initRS232:MOV                    TMOD,#20H           ;定时器工作在方式2; @2 S7 c% o1 a: X
          MOV              TH1,#0D0H           ;设置波特率0E8H-2400,0D0H-12002 V' t$ e9 x" z
          MOV       TL1,#0D0H) E1 T5 k; E' a5 Z5 ^' ?0 X
          MOV       PCON,#80H           CON-电源控制
: ]( S4 O. X# F          SETB      TR1                 ;启动定时器1
: n% v! |0 m, }) |  l" l" `          MOV       SCON,#0D0H          ;SCON-串行口控制  MODE3 启动串行口接收数据   
2 Q' E& b6 o* R# F! K. p" ~" V          RET                           ;返回- i$ v: U9 C8 O5 w* U' e- E$ ^
          8 c# \- ?8 ?8 [3 P6 V0 j7 A
          END& b8 J# M9 s& _' a

( B9 g! r" ~: A( F1 ^6 ]% \ 现在调试中,灯也不亮(电路中,发光二极管正极接5V电,负极通过上拉电阻接单片机),串口传输也不成功....
' p1 D1 C' A  U3 _* I 另外,小弟个人还怀疑按键的解法有问题。电路中采取独立式键盘一段直接接到中断源上,一端接地。并没有采用电源+上来电阻的形式。我查了下书籍,有的说到,单片机里面有上拉电阻可以这样子接法,但小弟还是怀疑~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-15 01:45 , Processed in 0.093750 second(s), 24 queries , Gzip On.

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

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

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