找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 1208|回复: 0
打印 上一主题 下一主题

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

[复制链接]

50

主题

340

帖子

3260

积分

五级会员(50)

Rank: 5

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

EDA365欢迎您!

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

x
小弟是做FPGA/CPLD和一些简单硬件设计的,这两天逼于要写一个单片机程序(没办法,谁知道公司人少!)...可是,委实不会啊!!折腾了半天,参考了不少书籍,好不容易码出了一段~但是调试它愣是没反应!!时间又紧,小弟实在是没办法,只好上论坛来求救~~还望大侠们指点迷津~% B4 C6 U& S2 m& z

: z& V; C# d4 p: g* I   要到达的功能:  80C2051单片机的中断源外接两个按键——当按下键1时把11AA通过串口发送到另一个单片机上;当按下键2时把1199通过串口发送到另一个单片机上...无按键时候等待操作!!2 C% b, P1 Z3 Y
   程序见下:5 i5 e! B$ k' g( }6 p3 y! }
          nei_in    EQU       P
  W. L' T. e8 E7 Q+ J          wai_in    EQU       P
% f, B; |$ K+ T0 V! o          nei_show  EQU       P1.3) l3 ~' \4 ~* a# H% g6 R
          wai_show  EQU       P1.4! Y* v. }1 e/ C
          send      EQU       P1.25 G/ }- w  c8 G) {# C% G$ ^; r- a
;-----------------------------------------------------------------------------------------------' L7 x; p7 P  D9 Z
          ORG       0000H
8 Z- M6 S& O, R* n0 G          AJMP      main                ;跳转至主程序
% ?0 x* G) ?( a6 Z8 A$ o. U- ^! Q          ORG       0003H
5 d; V; F) I" s4 A          LJMP      f_0                 ;转到外部中断01 b- X2 b2 N" h3 A
          ORG       0013H
8 Q8 U% a" `1 C, k' y          LJMP      f_1                 ;转到外部中断1
- _) A3 p6 d0 ]) o& y# {          ORG                    0023H5 j- I- C' U. N: B6 }; C$ u! K
          LJMP            serv                ;串口中断
, b  F- n9 f4 h+ v' `: N1 O) s;-----------------------------------------------------------------------------------------------, i  g. P- z8 R5 a6 _% n0 h5 i2 c
;主程序
. F( \( [; @& E% [2 J3 u;-----------------------------------------------------------------------------------------------      
+ k/ f$ k* K% m          ORG       0030H               ;主程序开始地址: S* z8 Q' a" U! O
main:     LCALL     initRS232           ;串口初始化. D/ M5 ?* b$ B- h% E0 Z/ a4 K
          LCALL     init                ;中断初始化
5 w  \2 D- j! k! c% W          CLR       send
* D; o3 M( W5 g' {; z          SJMP      $                   ;等待操作          - q( v6 E  ^8 X0 {$ v
;-----------------------------------------------------------------------------------------------
5 Z, p. @& }0 |4 f! f$ o7 `;外部中断0操作0 j8 u) ~& s) q( E- R8 w( p
;-----------------------------------------------------------------------------------------------            
7 c- B8 M- J8 a1 ?f_0:      PUSH      PSW                 ;保护现场
, n3 q' A8 r- b* }! v- N/ \, i! L          PUSH      ACC
  x3 [& h" k2 O% k* Q0 Z          NOP                           ;延时等待响应
, |8 V0 [: X' S4 R- ~          NOP            
. R) q5 o0 Q0 E( u. p3 J7 I          SETB      wai_show            ;关闭中断1操作指示灯. U  M' H( t0 w/ J& `% e4 k
          NOP, ~3 Z. y+ C/ k6 W9 j
          MOV             A,#11H              ;把55H送到累加器
0 q& l) @* j! O% X) J          MOV              SBUF,A              ;送到缓冲区3 P# }3 g. Z# H3 O9 n, i
          JNB       TI,$                ;等待发送完成1 C1 \* |, r+ @1 u3 g
          CLR       TI                  ;允许再发送
/ W' z# x5 Q. {% B          MOV              A,#0AAH             ;把AAH送到累加器- ]: S& k7 N9 }, q
          MOV              SBUF,A              ;送到缓冲区2 P% f& z0 t$ T/ Z! Y2 C! B. Q
          JNB       TI,$                ;等待发送完成$ e- o7 f( p  G" \
          CLR       TI                  ;允许再发送7 R3 v9 G1 R! W- U& ~$ i7 t1 w8 E
          NOP              + v3 T; l- N0 S2 }' y
          NOP    " Z7 T  {' d9 j0 a
          CLR       nei_show            ;点亮中断0操作指示灯            2 n: |1 T/ N( v9 z: l2 G9 ]
                SETB      send                ;发送操作已完成标示4 N9 t4 U& J2 ?( i: e1 U  A; U3 f
                POP       ACC
  i( |5 X0 E  k- |$ P6 |; F) g          POP       PSW
! d. H* [9 ]0 h( E2 k9 W$ [6 V6 q          RETI                            % y5 `* a% q4 p1 L7 h& j" X# p
;-----------------------------------------------------------------------------------------------2 @+ Z& J& j0 I
;外部中断1操作
; a4 c  Q3 R$ O8 Z; y5 B;-----------------------------------------------------------------------------------------------     
- H4 P$ u0 L5 C) Ef_1:      PUSH      PSW                 ;保护现场
4 n4 v3 u) U4 P! ~% P          PUSH      ACC3 r6 X" ]% |3 i8 ]" E9 l0 n
          NOP                           ;延时等待响应# F4 m1 E3 [! M. w3 E! H$ G
          NOP , m9 M$ c  w$ L/ a' E% `2 q
          SETB      nei_show            ;关闭中断0操作指示灯  ]+ @) x5 _4 X( I. E, Q  I6 }
          NOP
  z" J. M+ z, r0 a( z8 L          MOV             A,#11H              ;把55H送到累加器
3 r& Y5 S2 [4 G- Z          MOV              SBUF,A              ;送到缓冲区; E/ Y8 a6 ^) E0 R' o8 ~  W* T
          JNB       TI,$                ;等待发送完成
! l7 P- I8 h4 g3 g! Y4 m1 u4 q          CLR       TI                  ;允许再发送# O( W7 I- L0 r2 w3 R% C
          MOV              A,#99H              ;把99H送到累加器
  B' w$ K0 i, B          MOV              SBUF,A              ;送到缓冲区
1 r/ e$ d1 I8 E! K$ D1 J) s          JNB       TI,$                ;等待发送完成
  U: F1 \7 `1 O5 r4 O4 ?          CLR       TI                  ;允许再发送
5 p, c4 P& ~( {  Q6 r& r( p2 Q          NOP
; S4 x* \$ c/ \. Q5 G( k- \, ~          NOP                 
) T  K4 \2 e- R. }9 C. ~3 K/ Y          CLR       wai_show            ;点亮中断1操作指示灯
9 q' }7 `0 X8 G' P1 ^                SETB      send                ;发送操作已完成标示% \& @7 f6 q% g+ v
                POP       ACC
' y2 x8 \$ q/ ]4 [. V9 D          POP       PSW
3 N) i/ _2 m' p# z# c2 T          RETI                    
) y: }, L1 f8 Y: Z;-----------------------------------------------------------------------------------------------
. t5 v8 ]# C, P' d/ I;串口中断子程序( S6 I! B, l6 i6 d
;-----------------------------------------------------------------------------------------------
+ Z( O  _, ^) Q4 jserv:     PUSH      PSW6 W$ p7 s- z9 l( m) G, G
          PUSH      ACC. ]& V& L5 r" C
          NOP* C$ |7 a1 W9 H1 ^% V$ L
          CLR       RI$ f0 R4 P. F% R
          MOV       A,SBUF
" s0 [0 X% @- i6 M" ^. M: s- D; m          MOV       R0,A! q4 ]& o2 z% r# U) p0 D/ l
          CJNE      A,#11H,NEXT1
. \4 C$ I+ `3 J) B- v& T: {          MOV       A,R0
( ~0 u& N4 W4 gNEXT1:    CJNE      A,#0AAH,NEXT2, T( `0 E4 J) w6 A$ F* r* F
          CLR       nei_show# j- [8 }3 z  C' I$ i  G0 S4 r* e) a- _
NEXT2:    CJNE      A,#99H,NEXT3. _: ^8 k/ ~  u" Y, |
          CLR       wai_show5 j8 {7 Y. W) a- O( I
NEXT3:    POP       ACC
5 h, H7 K3 W% D' @' P          POP       PSW
7 D$ H5 e( m  @/ T& S6 P- Q          RETI6 P& D& y5 P# H0 i  a& j4 [
;-----------------------------------------------------------------------------------------------
9 |8 f, Z  k; j8 \6 M8 y" C$ G( |+ ~5 ^;延时10ms子程序9 T! ?9 Y0 m5 |( k8 P& V0 r, S# c; k
;-----------------------------------------------------------------------------------------------/ L6 D. X7 w& E" z# p. F
del10:    MOV       R7,#400 u9 Y8 @3 j, {* P( E* \; z: s
del1:     MOV       R6,#123
/ u/ [& G0 E; l3 Z6 n7 H. o' |          NOP                  
% q# N8 {3 K& m9 K' B% m2 E; i( Q: Ydel2:     DJNZ      R6,del2
  C: \. Q% S9 H1 G3 W4 [4 d          DJNZ      R7,del1
  J: j' p3 n9 Z) o          RET
% Q+ t4 K/ K1 |# S- Y9 K;-----------------------------------------------------------------------------------------------
8 m) S  r0 r- [;中断初始化子程序
$ g& ?) M# \6 {- s; s;----------------------------------------------------------------------------------------------- * I( t7 Q* F$ @5 m4 C
init:     SETB      EA                  ;MCU开放中断
1 v$ Y% Z- Q/ Y( X* ?( ?) j          SETB      EX0                 ;允许INT0中断4 Y! B5 G5 S: t: U7 _) S0 T
          SETB      IT0                 ;设置INT0为边缘触发形式2 y+ s! @) y# {6 V3 N+ R
          SETB      EX1                 ;允许INT1中断
* o2 D$ J1 [. h          SETB      IT1                 ;设置INT1为边缘触发形式. `+ n+ m7 j9 C: N
          SETB      ES                  ;允许串口中断
8 x% N7 ?6 _8 o$ N          RET
2 g5 x& d9 N3 ?  w! `;-----------------------------------------------------------------------------------------------
- [, F& l' i) h. u;串口初始化子程序# B) i2 ^' ^( V! P. A. z& t5 A8 A. g
;----------------------------------------------------------------------------------------------- ) g9 J% l# O" o8 T) ~
initRS232:MOV                    TMOD,#20H           ;定时器工作在方式2
8 p; n" m6 d8 _6 z: `( M          MOV              TH1,#0D0H           ;设置波特率0E8H-2400,0D0H-1200  W' e9 |" A$ u6 A* u
          MOV       TL1,#0D0H+ X4 z6 }7 W. e: p) W
          MOV       PCON,#80H           CON-电源控制8 m4 d7 _2 K% s: f* V: l7 f/ Y) z
          SETB      TR1                 ;启动定时器1
7 U' F0 Y+ S& E" J2 }; m/ z6 @; ]          MOV       SCON,#0D0H          ;SCON-串行口控制  MODE3 启动串行口接收数据   & @; ~- D- H  X
          RET                           ;返回" j8 y" d3 m1 W
          7 e0 K/ m5 d$ K7 i' z
          END0 a5 V  e: X' J. k( u/ h
+ |5 k+ J  p1 R3 w
现在调试中,灯也不亮(电路中,发光二极管正极接5V电,负极通过上拉电阻接单片机),串口传输也不成功....
; m1 s0 G4 I, ]: _ 另外,小弟个人还怀疑按键的解法有问题。电路中采取独立式键盘一段直接接到中断源上,一端接地。并没有采用电源+上来电阻的形式。我查了下书籍,有的说到,单片机里面有上拉电阻可以这样子接法,但小弟还是怀疑~~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2025-2-3 05:56 , Processed in 0.065851 second(s), 32 queries , Gzip On.

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

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

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