找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

50

主题

340

帖子

3260

积分

五级会员(50)

Rank: 5

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

EDA365欢迎您!

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

x
小弟是做FPGA/CPLD和一些简单硬件设计的,这两天逼于要写一个单片机程序(没办法,谁知道公司人少!)...可是,委实不会啊!!折腾了半天,参考了不少书籍,好不容易码出了一段~但是调试它愣是没反应!!时间又紧,小弟实在是没办法,只好上论坛来求救~~还望大侠们指点迷津~
/ \+ w6 _4 ^& ^# A
% ~3 n& A) m: ?; p9 Y- G0 |: d   要到达的功能:  80C2051单片机的中断源外接两个按键——当按下键1时把11AA通过串口发送到另一个单片机上;当按下键2时把1199通过串口发送到另一个单片机上...无按键时候等待操作!!6 y, k* n( ?. }* q4 K2 a4 B9 S
   程序见下:
$ }& v5 w. f3 q$ f          nei_in    EQU       P: J3 [# j- T3 b' ~+ Y6 r: V
          wai_in    EQU       P  i, a. Q' G& ]
          nei_show  EQU       P1.3+ N6 l; a! `7 P/ Q
          wai_show  EQU       P1.4* |7 q9 f# L% J& X& q
          send      EQU       P1.2; {3 j: ^3 O+ P5 q
;-----------------------------------------------------------------------------------------------
. {1 b* `' x1 c! z, p3 e/ }          ORG       0000H
. x7 H- _' B( c( Q7 H          AJMP      main                ;跳转至主程序
9 l- A3 Y6 P# N. v9 s          ORG       0003H
, `4 e& I  b. o- k1 C          LJMP      f_0                 ;转到外部中断0
' [( E' q' J7 [) A          ORG       0013H
, r- _' o& I+ I  H/ p5 a4 i          LJMP      f_1                 ;转到外部中断1* l, P$ `, d# U0 h
          ORG                    0023H% k' B$ N7 d' m" i1 ~
          LJMP            serv                ;串口中断
5 e5 V) S4 Q4 ^* J$ ~;-----------------------------------------------------------------------------------------------7 M8 J/ i# o4 x. y7 o3 `
;主程序
# Q& Z1 E* p2 k, ~) ]6 B4 F;-----------------------------------------------------------------------------------------------      
0 l! m8 e( x/ G          ORG       0030H               ;主程序开始地址
& V; @& l# g/ N. c; ?: Qmain:     LCALL     initRS232           ;串口初始化' N' {/ D' L' i: G$ F$ h
          LCALL     init                ;中断初始化. n: |- u' o, c. r' b
          CLR       send
$ z% W* Q$ `( c! T+ h          SJMP      $                   ;等待操作         
* U8 ]. [, a5 I3 W;-----------------------------------------------------------------------------------------------# X, f) f! s, `0 y2 U
;外部中断0操作
3 I; J! Z1 [, H& _! b;-----------------------------------------------------------------------------------------------            
3 o% J2 L/ w& A" n2 M+ V/ yf_0:      PUSH      PSW                 ;保护现场: z& G' \( ~: v" [( M
          PUSH      ACC
2 b  _0 e3 j! Q% b, b. e" }          NOP                           ;延时等待响应
  X' b: q0 L; |: b          NOP            
5 m# H3 R" V* D. \& f          SETB      wai_show            ;关闭中断1操作指示灯. u& L/ e( d. b- J3 e3 U' |
          NOP
/ m) U, J9 `7 \, y0 U) r% u/ r* B0 j( ?          MOV             A,#11H              ;把55H送到累加器
3 y7 |! a/ X# E! Z4 o2 ^$ r          MOV              SBUF,A              ;送到缓冲区: ^; Q! K1 t0 \% L0 ~+ R6 ?
          JNB       TI,$                ;等待发送完成
3 W. w9 A0 `. b4 k- [/ g          CLR       TI                  ;允许再发送8 R2 ?  T3 b! E- ]* w% P9 V4 q
          MOV              A,#0AAH             ;把AAH送到累加器8 Q0 d' t! V  [- V' A/ D
          MOV              SBUF,A              ;送到缓冲区3 K% Y( z) L- V4 `. A" E0 ?
          JNB       TI,$                ;等待发送完成# ?: f7 L: w" g* Q+ K. ]# @4 N9 ^
          CLR       TI                  ;允许再发送8 ]; B/ x  v& q) F  d
          NOP              
- Q' V: @, _5 v. j) Y          NOP   
( F/ o, b$ b( i' N' _8 x/ r          CLR       nei_show            ;点亮中断0操作指示灯            * b/ [: e. L4 j  s
                SETB      send                ;发送操作已完成标示( K6 G# n8 `% Z3 z4 q8 ^6 u
                POP       ACC8 u$ u; S1 m) R1 i9 g1 c) t
          POP       PSW
1 x6 O4 k, E/ `- e/ D* v+ a8 T          RETI                            $ h+ ^  C0 H7 X# r- ~+ y8 ], U) G, y3 B
;-----------------------------------------------------------------------------------------------& @) k2 ~# [4 m  i
;外部中断1操作
" W" B. z3 _1 [1 e( d* I;-----------------------------------------------------------------------------------------------     % A  D7 p5 B9 _- m' h" B
f_1:      PUSH      PSW                 ;保护现场/ M3 q( e9 M% \, x1 x5 O
          PUSH      ACC
: f6 z- V- N, k: \          NOP                           ;延时等待响应+ I% v7 o/ A9 I
          NOP " ^8 @6 U$ K& W1 B
          SETB      nei_show            ;关闭中断0操作指示灯7 B; C0 X* a* I1 D5 i* d, _# p) u; {
          NOP
' f5 f0 G0 ?) j0 Z- u9 r# D9 [' ?          MOV             A,#11H              ;把55H送到累加器  U4 i- f3 v/ }  ?7 }
          MOV              SBUF,A              ;送到缓冲区# D  P+ }$ f5 K1 d9 E( M2 ~
          JNB       TI,$                ;等待发送完成% E( f8 }: |# S& A( H2 J
          CLR       TI                  ;允许再发送
+ r0 W3 V5 \% E4 R+ t          MOV              A,#99H              ;把99H送到累加器
3 N9 o1 C' K8 U2 K# n" i- B* t          MOV              SBUF,A              ;送到缓冲区8 D4 t/ z& k; @, y/ ?/ o2 ]) a
          JNB       TI,$                ;等待发送完成
1 q2 |8 ?& r7 _          CLR       TI                  ;允许再发送; H1 l2 ^9 n0 P
          NOP $ y0 a, N$ D# @( }" K; \7 n
          NOP                  " P" u9 s6 C* O3 x0 M/ k/ p. Z2 ^" v
          CLR       wai_show            ;点亮中断1操作指示灯 $ U% @) i  M5 d+ A
                SETB      send                ;发送操作已完成标示$ {0 L. K) V+ q
                POP       ACC
/ y2 q; ^: R) s) k8 ^          POP       PSW
$ b; f# g) e: G+ M; @          RETI                    ) B, p1 \4 I9 R% |0 F+ Z6 I7 y
;-----------------------------------------------------------------------------------------------
' M: \- F& V2 ^1 \: f;串口中断子程序) o7 @+ f5 Z& e2 p# P  r
;-----------------------------------------------------------------------------------------------
0 s  f. c. k: r7 G) n* s2 M( Lserv:     PUSH      PSW
# ^' H) Z6 T$ H# Q' h3 g/ b" |          PUSH      ACC! f# V8 O) p% R/ N
          NOP" C) Q2 R9 \$ R
          CLR       RI
( _* Q9 o3 ]5 R( x- Y7 s          MOV       A,SBUF, G/ x) c! J* e, v
          MOV       R0,A
5 K( \( Y, x/ q+ ?) n          CJNE      A,#11H,NEXT1: m1 A" k! ?! _* `( o9 [9 ], A# |
          MOV       A,R0" d+ b/ g0 W1 I* B" G4 g' t. M
NEXT1:    CJNE      A,#0AAH,NEXT2
+ ]& s( f7 R1 G! W4 h2 a1 m          CLR       nei_show& [6 B4 ~( c9 Q4 w- ?( D# G) m
NEXT2:    CJNE      A,#99H,NEXT3; h7 k( X0 w. R- A4 J
          CLR       wai_show
2 e* J! d- I) y; z# a; D/ i0 bNEXT3:    POP       ACC. a2 s! w( t$ s  N9 M( H% C
          POP       PSW
( i" `. D8 w) h# V. T          RETI% ]6 Q' g7 ]4 }5 T: v% K! S
;-----------------------------------------------------------------------------------------------  ?9 K3 g3 c2 l. |! o
;延时10ms子程序' X! t/ D6 S2 Y" Z5 `# z. U
;-----------------------------------------------------------------------------------------------6 _) r' q5 m( c0 y- q: A
del10:    MOV       R7,#40
! }4 @" N$ I4 |; Ydel1:     MOV       R6,#123
$ |/ b0 z# i5 l8 z3 L8 n          NOP                  : ~5 w% U+ k/ t: b/ r! ?
del2:     DJNZ      R6,del2
0 a: ]1 c1 B# f8 X0 t& P9 Q& e          DJNZ      R7,del1. i2 p8 B3 n: g; |4 [# |: ?
          RET
( v' r9 N; e/ {6 F0 g* b+ l;----------------------------------------------------------------------------------------------- ! h* X+ I3 C8 y" `+ J5 G: G6 x
;中断初始化子程序
5 d- s8 u& D2 E) Q7 Q3 y;-----------------------------------------------------------------------------------------------
) u7 A- _/ U5 ?9 ]init:     SETB      EA                  ;MCU开放中断
: l/ z  j; D0 H8 }' Z          SETB      EX0                 ;允许INT0中断
( ~8 o% H$ i6 `. h4 g5 s          SETB      IT0                 ;设置INT0为边缘触发形式
; o7 Y+ F2 y; r3 o- \3 o8 p; E+ Z- ]          SETB      EX1                 ;允许INT1中断. |+ I8 q/ ]) h+ @& x
          SETB      IT1                 ;设置INT1为边缘触发形式8 L; n' W, V0 u& {! y6 s
          SETB      ES                  ;允许串口中断& G" ^0 B4 a4 m4 m9 |5 w& A
          RET 6 B. `* Z3 {0 p1 `
;----------------------------------------------------------------------------------------------- # a9 J0 `  n1 ]6 Y
;串口初始化子程序/ ~3 q/ n* u9 d. P
;-----------------------------------------------------------------------------------------------
/ v' K! ?% |8 F9 linitRS232:MOV                    TMOD,#20H           ;定时器工作在方式2
/ f! c9 p" O# C, p: I3 A          MOV              TH1,#0D0H           ;设置波特率0E8H-2400,0D0H-1200
; o5 U9 D4 R& m% j! E! V! v          MOV       TL1,#0D0H1 i$ `% A& ~$ N8 C1 u
          MOV       PCON,#80H           CON-电源控制
2 h3 n* c* P- n- p3 q" u& C          SETB      TR1                 ;启动定时器1
& `0 v  m* y7 y6 y5 J5 O) n8 a          MOV       SCON,#0D0H          ;SCON-串行口控制  MODE3 启动串行口接收数据   - [6 y* z( O" F) _2 X/ R
          RET                           ;返回
5 c" e  a* f2 s, d3 @$ m" d, T         
1 i( s" D2 m% D/ B" n          END
- t7 }" O/ D" T5 m1 T, n5 y4 e; Q: T* {) B
现在调试中,灯也不亮(电路中,发光二极管正极接5V电,负极通过上拉电阻接单片机),串口传输也不成功....& N/ j. g& b# F7 N
另外,小弟个人还怀疑按键的解法有问题。电路中采取独立式键盘一段直接接到中断源上,一端接地。并没有采用电源+上来电阻的形式。我查了下书籍,有的说到,单片机里面有上拉电阻可以这样子接法,但小弟还是怀疑~~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2025-2-2 23:54 , Processed in 0.054185 second(s), 33 queries , Gzip On.

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

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

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