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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
小弟是做FPGA/cpld和一些简单硬件设计的,这两天逼于要写一个单片机程序(没办法,谁知道公司人少!)...可是,委实不会啊!!折腾了半天,参考了不少书籍,好不容易码出了一段~但是调试它愣是没反应!!时间又紧,小弟实在是没办法,只好上论坛来求救~~还望大侠们指点迷津~1 e1 Q& V2 b& `1 f9 J5 n# y
. E; x" I/ X% `7 ~
   要到达的功能:  80C2051单片机的中断源外接两个按键——当按下键1时把11AA通过串口发送到另一个单片机上;当按下键2时把1199通过串口发送到另一个单片机上...无按键时候等待操作!!
8 _  g- ]. Y, P: n2 a- y: B+ x   程序见下:% g9 X' T2 `% b0 ?$ @4 z! M
          nei_in    EQU       P
% I6 M+ X' G; W/ x8 N          wai_in    EQU       P: r4 v( a/ c+ e. {* l; v
          nei_show  EQU       P1.3
. F; R' j' ]9 |2 m# e' I* Q          wai_show  EQU       P1.4' e7 @: M2 j4 T- N* N  o
          send      EQU       P1.2
3 b3 K9 k: Q5 x, m. H' j: I;-----------------------------------------------------------------------------------------------
) V9 D- B- C5 l          ORG       0000H
) ~) B7 Q2 y  \4 h2 l5 `          AJMP      main                ;跳转至主程序
3 f+ b; J8 @! x) M) E7 E- Y          ORG       0003H
% b% q4 b+ d& w: V- _+ ^          LJMP      f_0                 ;转到外部中断0
$ M! V& n. N( T& F$ I9 e4 E$ x          ORG       0013H
% U" u. c: J4 G3 t5 k          LJMP      f_1                 ;转到外部中断1/ O' ?) v; P6 i" q; u" v
          ORG                    0023H
7 D6 z, d# k" M+ j7 U; y$ D6 a/ R! o  \          LJMP            serv                ;串口中断
  G7 ^. v5 s; K7 ~;-----------------------------------------------------------------------------------------------
; i/ e. w9 Z# r8 U$ g;主程序
( G/ ~+ r' V9 l0 \3 |;-----------------------------------------------------------------------------------------------      
0 W/ I2 R+ _5 q+ z% B5 Q          ORG       0030H               ;主程序开始地址: v- B& o' L* U4 J
main:     LCALL     initRS232           ;串口初始化
* n2 {5 T# t/ b) D) u$ t          LCALL     init                ;中断初始化, J5 X$ M# N: S1 `% J
          CLR       send- I4 h% R3 V) P' Q
          SJMP      $                   ;等待操作         
0 A5 [% K" E! @$ U: `  G- c;-----------------------------------------------------------------------------------------------6 z" M0 }  q1 U: w8 t9 U
;外部中断0操作
% w( c3 k( z8 T  I2 x% X9 n;-----------------------------------------------------------------------------------------------            
7 o, {7 X5 J$ c3 y: {- pf_0:      PUSH      PSW                 ;保护现场% k4 F: X  z$ y% m( }
          PUSH      ACC2 |" p. T5 H* r# S
          NOP                           ;延时等待响应
5 I' Z! Z6 ?; p* a5 I& D5 v          NOP            
% O: E# }1 X4 ?7 g6 l& k# f          SETB      wai_show            ;关闭中断1操作指示灯* y! t( z7 X: ^" }* L4 z
          NOP
6 G, g! ?6 w* F, b& W: d* J          MOV             A,#11H              ;把55H送到累加器
) l1 b3 y/ `9 C. J% a% r. C          MOV              SBUF,A              ;送到缓冲区
8 e5 t# l- B3 c* G: K          JNB       TI,$                ;等待发送完成
' A+ Z5 c1 b' f$ Z) D          CLR       TI                  ;允许再发送& F$ t/ |8 _* ~# _
          MOV              A,#0AAH             ;把AAH送到累加器5 ~4 R& J& |' |; P* r" v9 D: U3 T
          MOV              SBUF,A              ;送到缓冲区8 r, S+ j  G  G2 R% m- \
          JNB       TI,$                ;等待发送完成
. b7 }" v6 q2 G4 K/ [- g" E          CLR       TI                  ;允许再发送
" J1 Z. k% a2 m- q; r1 Z          NOP              & m& V! C, K1 N: b' t/ B; E8 b
          NOP    * ~: B. b$ I* T' |1 w# C$ Z
          CLR       nei_show            ;点亮中断0操作指示灯            ' L% M( H5 U! c5 }
                SETB      send                ;发送操作已完成标示+ z$ K3 r6 L/ p; W# o) ~  L
                POP       ACC" u" j% h) L& ~
          POP       PSW1 [8 L8 _5 {& c3 q  G6 X7 ^" |
          RETI                           
+ Q! ]7 W1 n9 h! Q3 z;-----------------------------------------------------------------------------------------------2 A& J/ Y' _& U9 T
;外部中断1操作
1 W9 T3 F3 O4 H' `2 M; G;-----------------------------------------------------------------------------------------------     - _# B6 y. }8 D
f_1:      PUSH      PSW                 ;保护现场/ H9 R% ?5 @: l4 C/ h* }. ]" y
          PUSH      ACC9 T" D0 ]! V! T: z: i9 d2 h
          NOP                           ;延时等待响应
0 E% l5 y$ o, x. B          NOP
, z; s& a$ ]4 u9 w5 T          SETB      nei_show            ;关闭中断0操作指示灯% X+ R3 W3 N: {" T  T
          NOP
7 n4 |* J9 A1 F! M* \          MOV             A,#11H              ;把55H送到累加器
2 V* N5 u7 j% x  `/ V8 q. e1 U          MOV              SBUF,A              ;送到缓冲区. \  x2 d" _7 t1 n  t" I
          JNB       TI,$                ;等待发送完成  Y6 ]/ U9 I7 g
          CLR       TI                  ;允许再发送" k! Q* _2 k! `( c, R
          MOV              A,#99H              ;把99H送到累加器
5 E5 T. r- \' a8 V3 t9 D) \) l          MOV              SBUF,A              ;送到缓冲区' M% ~  ^; I9 B" K
          JNB       TI,$                ;等待发送完成% z  x2 y% J' K; z) ~* d3 G; d
          CLR       TI                  ;允许再发送
, t+ E  Y" P8 P1 x          NOP & [  L# O- M# C7 a6 }6 D# ?; M5 N
          NOP                  1 D5 L4 t7 R& Y! T. j. e
          CLR       wai_show            ;点亮中断1操作指示灯 4 c. j; w  G1 ]3 K' O/ f0 q
                SETB      send                ;发送操作已完成标示
+ T8 V! A' v  `                POP       ACC2 [9 G+ Z3 Z+ d$ @% S: [0 ]. {
          POP       PSW* w* }9 k- B4 `
          RETI                    - m% P/ X# i  b, i
;-----------------------------------------------------------------------------------------------
: ]1 ]' q3 v, Z, m! z;串口中断子程序$ T: b$ c. }+ _. R9 v2 c$ I
;-----------------------------------------------------------------------------------------------
6 A; ?' D4 m% Z, [1 Kserv:     PUSH      PSW
4 z, s4 C" L8 P8 ]: t- Y( U  ?          PUSH      ACC6 u3 A0 A' o9 p9 w
          NOP1 ?7 \& y# a# s8 G$ g
          CLR       RI
: w- n) u) b, J+ r5 F: ^$ A          MOV       A,SBUF7 P7 u" l$ r4 K& M7 T: a
          MOV       R0,A/ x" C! K$ v5 t6 v8 b3 U$ |2 C
          CJNE      A,#11H,NEXT1- k5 k3 J% s& C
          MOV       A,R0
# K, n) P1 N# l. e, BNEXT1:    CJNE      A,#0AAH,NEXT24 R! @3 `% \" |$ y; i
          CLR       nei_show
+ Z; f# j% c+ a6 sNEXT2:    CJNE      A,#99H,NEXT3
3 {3 {! ]- O* q  q/ F: d4 f          CLR       wai_show+ v! t( m- ^, J/ ]! C! X: Z
NEXT3:    POP       ACC- b: ^6 l& A2 ^( o2 d* X8 r
          POP       PSW
  S7 U  T) g! z! B+ ]$ R          RETI' A# c9 H: _6 {1 w6 ^4 B; I. U4 p
;-----------------------------------------------------------------------------------------------
- s6 }% @7 [8 e;延时10ms子程序
8 @& x9 N' k6 Z% J0 Y;-----------------------------------------------------------------------------------------------
" k  ?( I. d, Z% h; idel10:    MOV       R7,#40: C% z; f" ?- q7 b+ i6 y1 f2 H
del1:     MOV       R6,#123+ `& `/ s: d/ m+ K
          NOP                  % P) P* Q' h9 g3 u( U6 ]
del2:     DJNZ      R6,del2
" L+ M7 F+ a% d: h- n          DJNZ      R7,del1
5 s, n) j* u; m, M  c7 k- r          RET
, g7 M& x3 p6 j! D/ h  W;----------------------------------------------------------------------------------------------- 2 ?/ o* I$ ~& h( [2 c6 G: G
;中断初始化子程序+ i4 y1 E0 r* @& I
;----------------------------------------------------------------------------------------------- & l5 L: e" }, b2 g9 p* O. b: D
init:     SETB      EA                  ;mcu开放中断
/ x2 E7 b" @- O% y( s          SETB      EX0                 ;允许INT0中断% s5 \* j4 H6 W# b, ~4 d+ s
          SETB      IT0                 ;设置INT0为边缘触发形式
1 n; M2 G3 T; I1 }  o          SETB      EX1                 ;允许INT1中断, y7 E, s0 Q& e4 O6 Q
          SETB      IT1                 ;设置INT1为边缘触发形式
% A5 x& v* L* F  A( ~          SETB      ES                  ;允许串口中断* ~# g! D. h* O! s- c
          RET
* z# t7 y; y# x# I: P: C;-----------------------------------------------------------------------------------------------
8 e4 r( S7 h2 u( q2 h. Y/ ];串口初始化子程序( ~3 A1 _* r* `) K
;-----------------------------------------------------------------------------------------------
: Y" c3 H, F; d$ E7 y" sinitRS232:MOV                    TMOD,#20H           ;定时器工作在方式27 b) O3 n& ]0 C; ]4 H0 Y( {3 C. K
          MOV              TH1,#0D0H           ;设置波特率0E8H-2400,0D0H-1200
; {/ \& W7 H3 o  [3 L$ c          MOV       TL1,#0D0H
3 O" t8 _7 o6 i/ S# e6 M          MOV       PCON,#80H           CON-电源控制
6 M1 ?0 W/ H4 g7 U6 {8 _, g5 h8 V' f8 L          SETB      TR1                 ;启动定时器1. y6 M4 I  Q2 Y! C6 Q. t  G4 L
          MOV       SCON,#0D0H          ;SCON-串行口控制  MODE3 启动串行口接收数据   6 V6 W1 o8 Z/ K' U9 g
          RET                           ;返回
( s" W( e1 I5 N         
! {- _/ |0 U: E. |5 n          END
/ }+ E$ g, F$ d  K5 d, _. g+ m. J6 [& Y0 y
现在调试中,灯也不亮(电路中,发光二极管正极接5V电,负极通过上拉电阻接单片机),串口传输也不成功....
0 d2 ?( L5 E0 |9 ^ 另外,小弟个人还怀疑按键的解法有问题。电路中采取独立式键盘一段直接接到中断源上,一端接地。并没有采用电源+上来电阻的形式。我查了下书籍,有的说到,单片机里面有上拉电阻可以这样子接法,但小弟还是怀疑~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-19 14:49 , Processed in 0.140625 second(s), 24 queries , Gzip On.

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

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

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