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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
小弟是做FPGA/cpld和一些简单硬件设计的,这两天逼于要写一个单片机程序(没办法,谁知道公司人少!)...可是,委实不会啊!!折腾了半天,参考了不少书籍,好不容易码出了一段~但是调试它愣是没反应!!时间又紧,小弟实在是没办法,只好上论坛来求救~~还望大侠们指点迷津~
# A9 d' L. p/ V8 ?+ W) o
2 _2 F5 A+ T$ V; A& t8 _   要到达的功能:  80C2051单片机的中断源外接两个按键——当按下键1时把11AA通过串口发送到另一个单片机上;当按下键2时把1199通过串口发送到另一个单片机上...无按键时候等待操作!!2 J0 `& h9 m3 Y( z, V
   程序见下:
+ _  Q/ e" m9 {& e          nei_in    EQU       P
$ M4 t4 X  g- J6 c- e, M5 f/ q          wai_in    EQU       P+ M% D( j& m! N0 x% J6 p
          nei_show  EQU       P1.3. |* Q2 ~$ e% \! C6 [% |$ @
          wai_show  EQU       P1.4
, u9 q% W- o2 \" c& }! r) X          send      EQU       P1.2
% F' h! P4 G7 Y- l8 f- X2 g$ X' G;-----------------------------------------------------------------------------------------------, n4 D$ S3 Z; @& v. F. R
          ORG       0000H& ^" W( h' r9 U3 z6 |0 j
          AJMP      main                ;跳转至主程序
( ]% I8 z6 f' q, w, G9 ], {# q0 a3 O          ORG       0003H% w( h4 S; Y; R9 G1 G$ _
          LJMP      f_0                 ;转到外部中断0
  q$ ^) A5 q# o# p          ORG       0013H
6 A2 D: t) n( v+ C" ?( E          LJMP      f_1                 ;转到外部中断11 ?+ Y  w$ ~5 `' [8 n; _5 f  a0 ~0 B
          ORG                    0023H
0 i" t5 Y5 A4 I" K          LJMP            serv                ;串口中断5 H5 ?3 O/ }) [# f1 \0 ^7 W
;-----------------------------------------------------------------------------------------------
' T% @8 o) l( j% V. q0 Y;主程序0 F" M; r. e8 @
;-----------------------------------------------------------------------------------------------      
. q6 ~2 d( ?7 G: j- I' }. c( x          ORG       0030H               ;主程序开始地址
1 \4 g6 D% T( jmain:     LCALL     initRS232           ;串口初始化) t- s" h) G# Z; H( _, D
          LCALL     init                ;中断初始化
8 {' I9 a6 Q! f/ B          CLR       send
3 m7 d) f& k- r          SJMP      $                   ;等待操作          : B: `( a2 e5 S* R5 y  b0 T
;-----------------------------------------------------------------------------------------------
* S$ \6 C( q; u& {; Q;外部中断0操作- u; L4 S7 X. K4 Y& z" S
;-----------------------------------------------------------------------------------------------            
5 q5 M% m6 C- Q5 O# `" kf_0:      PUSH      PSW                 ;保护现场
! M! j% Z5 C0 G3 F          PUSH      ACC
, j0 c3 |$ ?5 {3 {; b( d( L6 t9 O          NOP                           ;延时等待响应3 N& l: C( T0 L" A: I8 f' |* B
          NOP            4 d, u. O4 p4 a# _; _9 J3 S7 ?
          SETB      wai_show            ;关闭中断1操作指示灯
' V7 b. H) a) i" i9 x  O/ W          NOP- E  P1 v# i& G9 q% i6 {2 s
          MOV             A,#11H              ;把55H送到累加器
3 i; Z2 j; e1 J+ ^/ T          MOV              SBUF,A              ;送到缓冲区
  {) x) @3 G3 O% v7 t; F3 h          JNB       TI,$                ;等待发送完成& m) T. s6 S% p7 F* ?% V
          CLR       TI                  ;允许再发送% l1 R4 i4 {" c
          MOV              A,#0AAH             ;把AAH送到累加器
$ [* ]% s+ i, \" k" H; K          MOV              SBUF,A              ;送到缓冲区
. T( O+ O* x/ K! J# s          JNB       TI,$                ;等待发送完成8 Z+ E% Z8 W; \* p
          CLR       TI                  ;允许再发送) D. z( [" U; d2 n3 b
          NOP              
9 P' ?9 X7 Y  z2 u( L. l0 z  X3 O          NOP   
" Q9 h) @9 O5 G! R  U  G: i          CLR       nei_show            ;点亮中断0操作指示灯            : W' U- X2 X: ~, u: E' O" S1 n% o
                SETB      send                ;发送操作已完成标示: @& \2 M2 f# E
                POP       ACC& Y( A' i, f) ^& v
          POP       PSW
* n1 w( s1 a8 C( s6 h          RETI                           
+ y1 [( ]: R* j9 L/ }6 j& i% a;-----------------------------------------------------------------------------------------------& v+ e. Q6 l6 u5 [! y$ s% X
;外部中断1操作
2 p, L; [& y, r! P& a- m) x;-----------------------------------------------------------------------------------------------     
# E6 Y( o( V* k% Df_1:      PUSH      PSW                 ;保护现场
( Z2 N$ ^) t; a+ P+ j4 T: o/ r5 N          PUSH      ACC
; V1 m4 U9 w7 A* s+ ^& G! K& ?          NOP                           ;延时等待响应
5 o6 M; A# v0 j; ^; A, n" {' f          NOP % a( I1 T8 ^" A; X- k, }
          SETB      nei_show            ;关闭中断0操作指示灯
+ ^: ?+ y6 G: @3 l/ u) ?          NOP
7 u( d7 F: w: g' y$ ~9 {( V( P          MOV             A,#11H              ;把55H送到累加器
' a! A8 l6 F9 c+ k          MOV              SBUF,A              ;送到缓冲区+ B5 r& l( @" H$ Y4 O. x7 H% y
          JNB       TI,$                ;等待发送完成
; e1 \4 k% k  y- `7 U+ Y6 M% ?3 w          CLR       TI                  ;允许再发送
5 X# S1 S  K& U* ^% Z2 M          MOV              A,#99H              ;把99H送到累加器' J# H  \' ?! f7 {, }
          MOV              SBUF,A              ;送到缓冲区$ x: q# q8 h/ A8 \( x
          JNB       TI,$                ;等待发送完成
, s# ^  O( T* N: d; {7 K1 h: a/ F( s          CLR       TI                  ;允许再发送- J* x: S/ U6 K$ t8 T4 T  |, v
          NOP 6 y# n/ }. K- |( [( `
          NOP                  - c9 n  X- L9 `; g) f
          CLR       wai_show            ;点亮中断1操作指示灯
2 L3 w2 I7 Q: e8 J. A/ B                SETB      send                ;发送操作已完成标示
  _/ s% K9 l# O" P2 \                POP       ACC
# K* z! l& H* N* d          POP       PSW
8 X# L1 N6 j. e1 p5 l0 K7 A  t          RETI                    
- ]: N4 v( t: G3 `+ L;-----------------------------------------------------------------------------------------------3 I  S' G3 M* L
;串口中断子程序7 ^2 d# O- B3 g( O+ P4 q
;-----------------------------------------------------------------------------------------------
+ U/ x5 I- w8 Kserv:     PUSH      PSW
) s3 n+ r3 ^4 i& W+ p0 V          PUSH      ACC
7 @8 ^9 [1 h4 w1 Z          NOP
* K2 {8 @) H7 D: X" u          CLR       RI$ i8 T6 M1 S& |3 [
          MOV       A,SBUF
* ~. l) c& g( u0 F" \  S          MOV       R0,A
# [: s- x1 @( N7 G8 s          CJNE      A,#11H,NEXT1
7 v: b6 W4 A1 j/ x; w1 T          MOV       A,R0
% t4 `0 L5 ], b/ _NEXT1:    CJNE      A,#0AAH,NEXT2
9 U8 j& f, v$ [) J3 |          CLR       nei_show1 H* }' H- m, ]. O( g
NEXT2:    CJNE      A,#99H,NEXT3
8 ]: U9 n  F# \% s* n$ w9 d$ w          CLR       wai_show5 a; }( W8 C# I, T* ^$ k* S
NEXT3:    POP       ACC
/ m% G! X. q  A5 p          POP       PSW
2 y6 z# V3 _2 q* Q' _7 _1 g9 D( W4 B9 {          RETI
8 P7 V& W' m0 |; h. k6 v/ F;-----------------------------------------------------------------------------------------------% ~; `+ A+ ]  b& Z1 X; j3 U
;延时10ms子程序; U& \: n" d, G3 G; I
;-----------------------------------------------------------------------------------------------
0 H. O' x/ s4 S; o8 `del10:    MOV       R7,#40
5 F/ B& n7 u% u7 ~del1:     MOV       R6,#123# M1 E: l/ T1 |# ~0 ?
          NOP                  
' }5 R6 L: ~  f7 ?del2:     DJNZ      R6,del2
! `: Z$ j: f! B          DJNZ      R7,del1( I3 H( i- O' B* O  X5 a
          RET
* b- {) H3 `3 S# k6 U; p;-----------------------------------------------------------------------------------------------
2 X6 X- }% {/ }* F3 m" _;中断初始化子程序9 w+ s; N9 ^* A( b" X% w" o1 {! ?
;----------------------------------------------------------------------------------------------- * o9 L6 j3 G( [! l
init:     SETB      EA                  ;mcu开放中断
, w" R) X% p; w! h( K" {+ ~          SETB      EX0                 ;允许INT0中断
) ^# O/ z# C: o5 N, {( O7 Z$ n          SETB      IT0                 ;设置INT0为边缘触发形式
) ]# ?1 Q. G* }3 U& G          SETB      EX1                 ;允许INT1中断  W/ f+ M# }) K- w
          SETB      IT1                 ;设置INT1为边缘触发形式
7 O8 U( Y1 d# F7 u7 {# U          SETB      ES                  ;允许串口中断
& a8 j* h" D* u          RET & p! W; }. D+ _. b% i- k3 `3 J/ y
;----------------------------------------------------------------------------------------------- $ N! w( Q: H! m$ m5 C' {0 h
;串口初始化子程序6 i  _, e) K8 B
;-----------------------------------------------------------------------------------------------
* R8 h9 t; k; X# cinitRS232:MOV                    TMOD,#20H           ;定时器工作在方式2
% Y* B1 H% k9 c0 H, ~% @$ r          MOV              TH1,#0D0H           ;设置波特率0E8H-2400,0D0H-1200# d3 W3 W2 K+ N# E2 H: R1 A# g
          MOV       TL1,#0D0H8 ?* J- J; \9 a" h
          MOV       PCON,#80H           CON-电源控制
7 L; u6 T/ h) ]! S; |/ ]1 |          SETB      TR1                 ;启动定时器1
4 Z/ F6 G  R0 n2 U* F+ q* Q' f& _3 J          MOV       SCON,#0D0H          ;SCON-串行口控制  MODE3 启动串行口接收数据   
3 A+ T% y/ l9 I; ]4 b, L6 `          RET                           ;返回
, d% ~& F% T1 y+ P( J" ^         
6 q" ]5 p1 m7 T& z7 ~2 q          END
7 Q( ]( ~. x# y% b+ i6 Y1 {2 l  v+ q
现在调试中,灯也不亮(电路中,发光二极管正极接5V电,负极通过上拉电阻接单片机),串口传输也不成功....
1 k. ?; m8 W0 P( i6 u; K* B 另外,小弟个人还怀疑按键的解法有问题。电路中采取独立式键盘一段直接接到中断源上,一端接地。并没有采用电源+上来电阻的形式。我查了下书籍,有的说到,单片机里面有上拉电阻可以这样子接法,但小弟还是怀疑~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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