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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
小弟是做FPGA/cpld和一些简单硬件设计的,这两天逼于要写一个单片机程序(没办法,谁知道公司人少!)...可是,委实不会啊!!折腾了半天,参考了不少书籍,好不容易码出了一段~但是调试它愣是没反应!!时间又紧,小弟实在是没办法,只好上论坛来求救~~还望大侠们指点迷津~
+ ~: D  \' N  l  P/ N1 t! i! Z
3 A3 C0 F2 q9 S5 o/ r) W& e   要到达的功能:  80C2051单片机的中断源外接两个按键——当按下键1时把11AA通过串口发送到另一个单片机上;当按下键2时把1199通过串口发送到另一个单片机上...无按键时候等待操作!!
5 O* h4 q6 q6 ~# g) n   程序见下:; `! v0 J  a1 L0 G
          nei_in    EQU       P
( Y: o  e% G( X& ~, \$ v8 O          wai_in    EQU       P, t0 \: E1 w' O
          nei_show  EQU       P1.3
) A7 b6 f, {' O5 j) H* C6 R  F; b- J1 M# @          wai_show  EQU       P1.4
0 @3 r6 a8 o- u5 |, H& ^9 o! J          send      EQU       P1.2! d' L9 N0 f5 d' \/ M
;-----------------------------------------------------------------------------------------------
/ V5 p$ l. w! d* t0 M; M% D( W$ q- M          ORG       0000H
3 S; @% O! D& A3 H1 {/ ~6 k# ~1 `% k7 D5 G          AJMP      main                ;跳转至主程序" U+ L8 R$ L4 C, Y& K
          ORG       0003H
) J* E) _. n. z! G* O) |# \          LJMP      f_0                 ;转到外部中断0
7 O7 p% a7 d/ C9 b. h          ORG       0013H" ^) r+ J2 B# c/ c+ |
          LJMP      f_1                 ;转到外部中断1) V) F& R! G) x
          ORG                    0023H
% ~. E7 L! i4 J$ G. o' ^2 @) \          LJMP            serv                ;串口中断
% h8 x7 p& ]% @, A) u  l- {;-----------------------------------------------------------------------------------------------
6 X* @1 C2 k$ b) K' a;主程序4 ?) v7 _; T; |; T
;-----------------------------------------------------------------------------------------------      
& J6 y, R4 s1 X2 K% H# D8 e          ORG       0030H               ;主程序开始地址) n9 O( c9 d; C- Z6 m# e5 j
main:     LCALL     initRS232           ;串口初始化
; \( X0 x3 {7 F6 v7 }* v( ?4 p/ O          LCALL     init                ;中断初始化& R" m' |- g' I  h& K
          CLR       send5 ~6 z% t7 ^& s" t
          SJMP      $                   ;等待操作          8 ~5 E% J- R. r3 C" p5 j
;-----------------------------------------------------------------------------------------------( x% \7 Y" [$ {- ~/ }
;外部中断0操作
! f  r& h1 E5 E5 @! k0 K+ c;-----------------------------------------------------------------------------------------------            7 U. J4 q- W- ]: k; F$ v
f_0:      PUSH      PSW                 ;保护现场% `2 m' O/ F1 m3 u& g% P* M4 z0 K: f
          PUSH      ACC/ a7 W+ [& N$ ]& C" F2 j( K
          NOP                           ;延时等待响应
$ X+ t& u2 O4 M+ o& P          NOP            + e$ I1 f4 c" N, @- |4 z; |' j
          SETB      wai_show            ;关闭中断1操作指示灯! L0 D) \! |/ H
          NOP
7 d, c( i: B. G( T5 ], R* T          MOV             A,#11H              ;把55H送到累加器! u9 ]' e5 z1 E) a, V& l3 V: V$ W
          MOV              SBUF,A              ;送到缓冲区
, t7 Z" a4 ]0 s7 _5 b9 M          JNB       TI,$                ;等待发送完成
& x, W* X) L) P) q" p6 Y/ S          CLR       TI                  ;允许再发送
4 r9 o% s8 s, Q/ K9 A: J# s          MOV              A,#0AAH             ;把AAH送到累加器
6 ]% n4 B/ n+ m- H: G7 p          MOV              SBUF,A              ;送到缓冲区1 r$ B  Q4 c& l2 E& v# F  P
          JNB       TI,$                ;等待发送完成6 Y$ O# `' _9 X
          CLR       TI                  ;允许再发送& B4 i" |* H' [
          NOP              
* t7 A& s6 J* u% ~- {          NOP    " A' _4 \% h  i* T  C
          CLR       nei_show            ;点亮中断0操作指示灯            & o1 n3 K/ u9 w. g! [+ j
                SETB      send                ;发送操作已完成标示# m& f2 O, O& s
                POP       ACC  p6 E  U3 j- ~/ E: _5 e2 e6 J
          POP       PSW
& |  Y8 y( |2 h6 a          RETI                            * p! Z' M4 i: b0 p; s% G' a
;-----------------------------------------------------------------------------------------------6 K$ a$ E' t0 v% J4 j8 ^
;外部中断1操作
/ N2 j& M" y( r2 |7 n1 I- H;-----------------------------------------------------------------------------------------------     
% q; k, q! [! T, A0 |f_1:      PUSH      PSW                 ;保护现场
" b3 e! d' t& I2 y; k7 b          PUSH      ACC' C5 F  E$ W* S7 B
          NOP                           ;延时等待响应
8 G: i# d9 R5 _# _          NOP
' O" ]! I. F! w# g9 p6 \7 G" s          SETB      nei_show            ;关闭中断0操作指示灯
/ ]3 x0 |& c% t% z& d          NOP" I" k! E  Y9 i8 t' c+ b3 J/ O
          MOV             A,#11H              ;把55H送到累加器
" h: w; c0 u5 \8 @, p          MOV              SBUF,A              ;送到缓冲区9 o! B2 c" P$ I" Q
          JNB       TI,$                ;等待发送完成
6 z7 p7 L+ }  U8 z          CLR       TI                  ;允许再发送
9 j. e6 Q1 N6 L8 i7 E# M7 L          MOV              A,#99H              ;把99H送到累加器
8 C" J0 l+ {) V4 ]  v          MOV              SBUF,A              ;送到缓冲区+ B  V& {4 L& k! w. E
          JNB       TI,$                ;等待发送完成
2 V# j, T2 s1 J5 x; ?          CLR       TI                  ;允许再发送
' g8 c0 I1 J- [+ P# l          NOP ' D  J8 U- L4 q
          NOP                 
1 O$ K# U: ?2 u          CLR       wai_show            ;点亮中断1操作指示灯
9 q3 `4 o; j5 i* h                SETB      send                ;发送操作已完成标示5 a% P5 w$ z% v
                POP       ACC
: [  p) R* Z& A          POP       PSW- h+ B7 l8 L2 a* D
          RETI                    
  E: {1 g8 N& ^3 n) l;-----------------------------------------------------------------------------------------------
" T9 W8 D4 T; U( B& o6 T;串口中断子程序
" Q% T+ I% @, Y' ~% \7 P% G- z0 d;-----------------------------------------------------------------------------------------------
$ O1 m  ^5 w+ G6 k# H) b, _' V# Cserv:     PUSH      PSW* F  E+ q3 i& K( q# o; R. Q
          PUSH      ACC$ J1 o8 p% c+ {
          NOP
0 Z; x; R: |" z* V          CLR       RI
4 K( j9 v( Q" M6 D          MOV       A,SBUF
) ]3 p0 {* h( u3 V, t, U9 C          MOV       R0,A0 ^& ?8 C% W' X  K6 |
          CJNE      A,#11H,NEXT1& b5 C+ M1 j0 {% y8 I: ?# m8 R
          MOV       A,R04 l; ]: L5 D' a1 c- i& ~
NEXT1:    CJNE      A,#0AAH,NEXT20 H: f% |: t8 F" G; a+ G
          CLR       nei_show
; M( o9 f) o6 a9 e' H& y% ]NEXT2:    CJNE      A,#99H,NEXT3' M" T' X1 w8 k; `% k
          CLR       wai_show: p0 t3 p5 i+ Q; m  @
NEXT3:    POP       ACC
* e0 }+ f9 f4 e( z0 y          POP       PSW
0 k( m  A; I- r9 O) q2 o          RETI
# i+ t. l) T3 g+ o8 F8 n;-----------------------------------------------------------------------------------------------& A( F+ {3 a" `0 o
;延时10ms子程序6 W# t' w' M0 B- ]
;-----------------------------------------------------------------------------------------------3 Y2 f$ S  ~+ j, H# Z8 a
del10:    MOV       R7,#40  c0 S3 V) F5 t) z1 j/ ]# D7 J
del1:     MOV       R6,#123
! s7 ^1 A8 B: R) E          NOP                  5 c/ x9 \, x0 O$ c: g) d8 y
del2:     DJNZ      R6,del21 }1 J- G9 c7 f* Q  G, L% G* \
          DJNZ      R7,del15 f, @0 e$ A1 q) I, G
          RET7 s! g2 j, n2 L+ Y3 u! l
;-----------------------------------------------------------------------------------------------
1 F. W$ q3 B2 Q9 r: Q;中断初始化子程序8 n+ x$ ~  f$ e* \! z
;----------------------------------------------------------------------------------------------- " J4 r6 [3 ~5 ^- g" B: @8 d
init:     SETB      EA                  ;mcu开放中断* Y% G9 W/ N* y8 x; s& `
          SETB      EX0                 ;允许INT0中断$ F/ E0 j- e6 V. N3 C. _& Y
          SETB      IT0                 ;设置INT0为边缘触发形式7 T' H  c" T  m( n- a
          SETB      EX1                 ;允许INT1中断1 N3 T7 g% p7 ~) c4 n
          SETB      IT1                 ;设置INT1为边缘触发形式, R# N( |( Q3 X/ O/ n9 R  G/ o
          SETB      ES                  ;允许串口中断) K% r( y% E1 L5 i! h
          RET
; T1 Z) h1 C& `;----------------------------------------------------------------------------------------------- 2 y4 n7 U, x/ L
;串口初始化子程序
0 h" M0 p2 A! ?  F( };-----------------------------------------------------------------------------------------------
8 f1 @) |1 ~! V8 e! j# v8 K8 |initRS232:MOV                    TMOD,#20H           ;定时器工作在方式22 ~! a' G* ?" i# s( q( Z9 A
          MOV              TH1,#0D0H           ;设置波特率0E8H-2400,0D0H-1200$ O! u4 T( O$ Q- k3 u4 T& g
          MOV       TL1,#0D0H
$ v  X9 U3 L: t) N# w$ k          MOV       PCON,#80H           CON-电源控制* v0 J/ j& |8 y, ^# j$ @
          SETB      TR1                 ;启动定时器1( e. J% t) ^: u) ?, F: w
          MOV       SCON,#0D0H          ;SCON-串行口控制  MODE3 启动串行口接收数据   , c! K3 z# J- J: k
          RET                           ;返回
8 a3 b( J5 G/ x% ]7 C         
/ ^' t) O9 |- }2 |* J- \1 R; n          END$ J( l" Q! a' L

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-9-3 07:28 , Processed in 0.093750 second(s), 24 queries , Gzip On.

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

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

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