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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

; ?3 @! ^" |' w* o* @   要到达的功能:  80C2051单片机的中断源外接两个按键——当按下键1时把11AA通过串口发送到另一个单片机上;当按下键2时把1199通过串口发送到另一个单片机上...无按键时候等待操作!!
$ w# k& d4 f7 E, \, i- r' V7 i4 d   程序见下:' D6 C: U, ?  Q* J, U% e
          nei_in    EQU       P
/ W+ H* U0 u& B' i3 D5 s          wai_in    EQU       P
- r0 o8 W/ ^7 G5 O) B* s          nei_show  EQU       P1.3
0 a# d' F7 P- B          wai_show  EQU       P1.4: {0 k/ G& B; u. p! }/ H0 b
          send      EQU       P1.2* j8 M- S6 Q" m/ d7 @6 K$ ]
;-----------------------------------------------------------------------------------------------
0 h$ K1 t. l. m0 z5 L& V          ORG       0000H3 i: L- ?! \$ F4 ?! y
          AJMP      main                ;跳转至主程序
" @9 f$ `" \  G7 A3 m8 B8 I/ K          ORG       0003H
# N: M) Z. k- Q' N2 a2 j/ w          LJMP      f_0                 ;转到外部中断0% v! u, E) J& G& n
          ORG       0013H
0 V' V& T% E  J" E; @4 x          LJMP      f_1                 ;转到外部中断1
' a1 }% ]* O  o          ORG                    0023H+ F; f. b) x% b9 [
          LJMP            serv                ;串口中断
. ?# c9 c( i, B1 ^7 ^& X;-----------------------------------------------------------------------------------------------
. f1 D" J, B" c;主程序
; U; F! o5 ^7 K" J" y' r;-----------------------------------------------------------------------------------------------       : A. F" `  C/ g  T. f% S4 K
          ORG       0030H               ;主程序开始地址3 b! d/ y- r  L( ?. s
main:     LCALL     initRS232           ;串口初始化$ M9 P4 p! {' {
          LCALL     init                ;中断初始化
! y" g- W1 T( K) \+ Y          CLR       send( \8 `! L0 `3 d, J: F. s- h
          SJMP      $                   ;等待操作         
) ^3 [( q* @$ I;-----------------------------------------------------------------------------------------------9 T9 O- X$ X1 \% {6 I
;外部中断0操作
# k% l7 Z5 v& z9 l! w# @  @1 x- D& A;-----------------------------------------------------------------------------------------------            
3 \/ b8 Z0 a  Q) l4 J6 I4 Kf_0:      PUSH      PSW                 ;保护现场
, {3 x0 T& y; D2 |+ C+ E5 s          PUSH      ACC* o! I; D+ S, ]) o: c9 `
          NOP                           ;延时等待响应9 x" U6 @2 Y6 l6 d
          NOP            * }: ~* ~4 I: n" L1 ?3 r5 q
          SETB      wai_show            ;关闭中断1操作指示灯7 z3 K0 h5 ?" n  ~5 K% O9 C
          NOP5 n& R3 {. S# x; ?
          MOV             A,#11H              ;把55H送到累加器6 {; ]3 c) ~- L
          MOV              SBUF,A              ;送到缓冲区3 o3 Y* B4 y# ~5 e; `% L- Z& p  T
          JNB       TI,$                ;等待发送完成
+ K) L0 a5 B2 V6 i( J$ Z          CLR       TI                  ;允许再发送# b  Q, x# S+ @  J* x' g
          MOV              A,#0AAH             ;把AAH送到累加器
% p- L" z# }6 n8 x          MOV              SBUF,A              ;送到缓冲区
( G& Q9 X' }8 b/ A* {. @# h9 ?! {0 [          JNB       TI,$                ;等待发送完成
9 P) T- w1 K) g2 {          CLR       TI                  ;允许再发送0 K4 c" K; G8 M$ h5 P
          NOP              4 ^) p; g! }( A9 p+ X
          NOP    ' A2 W1 \7 T, Z( _
          CLR       nei_show            ;点亮中断0操作指示灯            , I2 d' ~* N9 M9 y9 i, {) o- {  c
                SETB      send                ;发送操作已完成标示
9 M# {3 @& I- Y( g1 C) P5 {                POP       ACC1 \3 ]2 r8 i" L
          POP       PSW
5 J8 t2 T! @6 e! T) r8 w: k* X          RETI                            - e5 @4 h+ [9 T2 j' B2 c& U
;-----------------------------------------------------------------------------------------------
, P6 c/ q( g# q$ h7 l& W;外部中断1操作2 R0 u& _5 V" k& v& m
;-----------------------------------------------------------------------------------------------     
& r: r0 ~6 D+ k3 {; v4 }  D# ^f_1:      PUSH      PSW                 ;保护现场
3 \5 V, V, A  v          PUSH      ACC
! q7 v: P' a( a# p) f2 x1 J$ W  f          NOP                           ;延时等待响应# {- N. p# C0 J- j; K1 W
          NOP
9 ~6 Z6 h8 ?% `: [; g          SETB      nei_show            ;关闭中断0操作指示灯
/ P9 @8 `. }9 G9 a  j+ v' q3 i- P          NOP
1 F5 S+ F* ]4 z          MOV             A,#11H              ;把55H送到累加器
% ]1 [2 [" h2 H) V" v. s8 ]          MOV              SBUF,A              ;送到缓冲区; L1 Q# m. m. [+ l: T1 }  b
          JNB       TI,$                ;等待发送完成
' x3 s. D2 P4 Q3 X& I% S          CLR       TI                  ;允许再发送3 O' n+ k5 ^* c
          MOV              A,#99H              ;把99H送到累加器3 R1 v: Z/ ^; \
          MOV              SBUF,A              ;送到缓冲区
3 U" r' J# i" I, |/ f3 f          JNB       TI,$                ;等待发送完成
7 q7 R; b! i& n          CLR       TI                  ;允许再发送% ^0 s$ v* E2 \& ]6 B) X% T! m/ X
          NOP
0 D' _8 m4 f% D0 j: t          NOP                 
" C7 i9 }7 Q3 K, U# J- b          CLR       wai_show            ;点亮中断1操作指示灯
- }/ p" h0 A9 k                SETB      send                ;发送操作已完成标示
3 n$ p. [' s5 q                POP       ACC" w9 R# Q* v4 L( @! _9 r
          POP       PSW' h2 Z8 X% @' Y
          RETI                    
4 G6 X) o5 z1 o;-----------------------------------------------------------------------------------------------
/ S& q* [7 b8 g3 ^6 I! H;串口中断子程序  ~- ^: S4 H7 U0 A- T
;-----------------------------------------------------------------------------------------------, v- s+ w( @; P+ i8 E2 i1 M
serv:     PUSH      PSW" S/ z# G- S( w' }
          PUSH      ACC
7 k7 h) v# f8 R0 S0 U) F3 b, K          NOP/ {# l% }! g8 M! C9 R
          CLR       RI1 i+ }* B' ~! S% R  O. i( z+ f
          MOV       A,SBUF
. {" |' |# @) K" ?0 g' l' Z          MOV       R0,A
$ M# h& g0 y& D5 C8 T$ C0 _( c          CJNE      A,#11H,NEXT11 z! z5 k7 M) L5 x$ j' x; x- L2 D
          MOV       A,R07 p5 t$ y. j; P
NEXT1:    CJNE      A,#0AAH,NEXT26 G  b% F1 R5 b0 Q0 l1 U% m6 t
          CLR       nei_show- _" g2 L* n% y  ~* e8 g
NEXT2:    CJNE      A,#99H,NEXT3: D5 m5 I* X! Q; c  ~
          CLR       wai_show6 F3 j: q' n+ v; [  C7 P  C% n) n/ u8 ]
NEXT3:    POP       ACC
* Z5 @/ ~7 B$ j6 [* c; Y          POP       PSW
5 X7 S) G- r) C& g9 L          RETI
% U' H7 ]% C, G, |/ g0 Z. G  P" b" a;-----------------------------------------------------------------------------------------------% ]$ O! }6 n9 V* l2 ^' D6 S
;延时10ms子程序! E4 V. @; w1 O# @
;-----------------------------------------------------------------------------------------------
3 h2 T' W. g1 @5 P+ Adel10:    MOV       R7,#40
5 Q7 t. J9 B  S' Mdel1:     MOV       R6,#1236 b8 e, e: |- I7 q6 Q) y, W0 f+ g0 D
          NOP                  
4 v& P: M+ Y$ R/ ydel2:     DJNZ      R6,del2
( ]+ E9 t; x( W          DJNZ      R7,del1. i5 I* h$ _9 J+ x2 H, c  t  E1 }7 P1 M
          RET
8 x  [1 N  r2 E* F6 d9 H$ G;----------------------------------------------------------------------------------------------- & j1 w8 W# T0 i
;中断初始化子程序7 s$ |8 x( n. c- n, i/ A: _
;-----------------------------------------------------------------------------------------------
7 `- N+ J9 s/ c' p+ K6 L. Einit:     SETB      EA                  ;mcu开放中断$ X, D' A- ~; K, ]6 F% h% ~
          SETB      EX0                 ;允许INT0中断5 d; m+ b' G+ _" ?
          SETB      IT0                 ;设置INT0为边缘触发形式3 x! ?0 j$ w% Z5 H
          SETB      EX1                 ;允许INT1中断
* Y  V1 ~8 F3 _) B, B) O6 [          SETB      IT1                 ;设置INT1为边缘触发形式
" D* h5 Q) k4 R; a          SETB      ES                  ;允许串口中断
  A7 s2 t( |7 l' G( o          RET
# j! h6 C5 f9 o3 A;-----------------------------------------------------------------------------------------------
9 F: |2 [% p/ \! R+ t; ]  a;串口初始化子程序: G- n1 M" ^/ L- k) h  U; |7 G6 d  Q
;----------------------------------------------------------------------------------------------- / U* w8 T: L- [1 H
initRS232:MOV                    TMOD,#20H           ;定时器工作在方式2
9 I- c8 A3 I& ^3 S! c# M- @: \          MOV              TH1,#0D0H           ;设置波特率0E8H-2400,0D0H-1200
3 t# p" T+ h$ x2 ^# ~0 d7 E' _$ |          MOV       TL1,#0D0H
+ a. D# ?+ ?, _6 o# ~          MOV       PCON,#80H           CON-电源控制: X# ?1 |5 T& @& O" E% w
          SETB      TR1                 ;启动定时器1
% m( K& z# x; R. I          MOV       SCON,#0D0H          ;SCON-串行口控制  MODE3 启动串行口接收数据   , M& L) l' o3 i+ {9 J
          RET                           ;返回  Q  S& r$ H$ H- x% D9 B1 a- D
          & l' |  p& |" O$ ?  x
          END
  y. i* g- \+ \; Q$ I
7 ?2 X- Q: ]% s; E 现在调试中,灯也不亮(电路中,发光二极管正极接5V电,负极通过上拉电阻接单片机),串口传输也不成功....
$ J) a- `( u0 v1 _" m 另外,小弟个人还怀疑按键的解法有问题。电路中采取独立式键盘一段直接接到中断源上,一端接地。并没有采用电源+上来电阻的形式。我查了下书籍,有的说到,单片机里面有上拉电阻可以这样子接法,但小弟还是怀疑~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-20 09:59 , Processed in 0.125000 second(s), 24 queries , Gzip On.

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

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

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