找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

50

主题

340

帖子

3260

积分

五级会员(50)

Rank: 5

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

EDA365欢迎您!

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

x
小弟是做FPGA/CPLD和一些简单硬件设计的,这两天逼于要写一个单片机程序(没办法,谁知道公司人少!)...可是,委实不会啊!!折腾了半天,参考了不少书籍,好不容易码出了一段~但是调试它愣是没反应!!时间又紧,小弟实在是没办法,只好上论坛来求救~~还望大侠们指点迷津~
9 \9 c5 v- \' t; o/ g
' Q+ F% F) }8 x0 L4 J1 T   要到达的功能:  80C2051单片机的中断源外接两个按键——当按下键1时把11AA通过串口发送到另一个单片机上;当按下键2时把1199通过串口发送到另一个单片机上...无按键时候等待操作!!
2 J( H* p* E- F   程序见下:' U. D/ Q  R' L
          nei_in    EQU       P
+ h2 M( S4 y$ z/ @# }  D% r          wai_in    EQU       P: [! @& U! L. y- a! o
          nei_show  EQU       P1.39 `  j+ F( l0 @  N
          wai_show  EQU       P1.4' B* i7 U1 F6 n% _6 x
          send      EQU       P1.2
" `: i9 V1 J4 W5 ?. F8 J;-----------------------------------------------------------------------------------------------
" L. v6 j4 p, s! @  x, r          ORG       0000H
8 b4 [6 V( |! G( J          AJMP      main                ;跳转至主程序9 Z8 P7 G, g/ s; n1 B* j, y! E) v. @
          ORG       0003H
. C+ _% x; t3 ^5 V* ]6 h7 h2 B1 D          LJMP      f_0                 ;转到外部中断0
9 E; T  _$ _2 S+ h+ n' l          ORG       0013H4 Z8 N. e: p& v" N- `  y2 k/ h: h
          LJMP      f_1                 ;转到外部中断11 \0 z2 c' \6 @
          ORG                    0023H. W. ^4 f5 B2 n7 a+ S
          LJMP            serv                ;串口中断! A0 `  v4 T" P: w' I# @
;-----------------------------------------------------------------------------------------------9 k2 I% ~8 O/ z2 c4 L
;主程序* m& H# G: z  N9 L
;-----------------------------------------------------------------------------------------------       $ T+ W: u. a$ C% u* d0 ~
          ORG       0030H               ;主程序开始地址
  t2 A6 K; m- |& u% w  p' {1 pmain:     LCALL     initRS232           ;串口初始化. \% u& P& j; a. K
          LCALL     init                ;中断初始化
- f8 {2 k: w$ y7 w/ g% h* E+ C9 |' @          CLR       send
2 j+ l' C- \) _7 ~' b; p          SJMP      $                   ;等待操作          4 Q- c/ h9 U9 `' \) e; R* r4 q0 G
;-----------------------------------------------------------------------------------------------
4 x5 Y( s/ Q: d# V7 A/ F& Q7 A;外部中断0操作
* B6 l( c! ]" R( X4 V+ _  ?;-----------------------------------------------------------------------------------------------            
- F+ W: s: U0 {" Q& s$ tf_0:      PUSH      PSW                 ;保护现场3 ?) q- F+ G% V% I8 ^
          PUSH      ACC2 b# O- z( k) T& d0 n: y: _% Y
          NOP                           ;延时等待响应1 l6 V* T8 f* F- a9 J( t
          NOP            
5 ~* E% f4 X% ^          SETB      wai_show            ;关闭中断1操作指示灯
+ Z  l0 y" M# ^& m* `! F          NOP# v% z0 \2 D, O1 Z1 m, Q
          MOV             A,#11H              ;把55H送到累加器
3 x2 {, A* `) L( z          MOV              SBUF,A              ;送到缓冲区' u$ T- L$ W, ^$ n' z2 y
          JNB       TI,$                ;等待发送完成7 i: G1 _. k  v. M0 w
          CLR       TI                  ;允许再发送% Q) `2 K/ L! |' O2 m
          MOV              A,#0AAH             ;把AAH送到累加器
0 a" p" i# _- `2 J! c9 |          MOV              SBUF,A              ;送到缓冲区3 `* c4 c2 [- g& _% _, p% N( z
          JNB       TI,$                ;等待发送完成# W' w5 r4 f" r3 D+ C
          CLR       TI                  ;允许再发送
$ Y" q5 q7 |6 T$ b          NOP              + j9 O* @2 ?3 ~0 \$ `7 }
          NOP   
: E) B+ ~$ @8 k# u          CLR       nei_show            ;点亮中断0操作指示灯            # \6 d% y  C9 j' B' ~/ b
                SETB      send                ;发送操作已完成标示
% D( }/ p& F! l  u9 X                POP       ACC4 b- z. Z5 n' b) e! t+ ~8 ?
          POP       PSW0 Z" }' m$ t( M, I1 S
          RETI                            0 |2 ?: y; a7 e2 i
;-----------------------------------------------------------------------------------------------. b- [* j. G! i+ _' g. w1 s% ]! o
;外部中断1操作1 o/ e) v7 A, _# [4 I
;-----------------------------------------------------------------------------------------------     % X2 H  e; ~) G0 C) ]8 y  g1 `
f_1:      PUSH      PSW                 ;保护现场" e& ?% D3 s" K$ m0 n- N4 ^
          PUSH      ACC4 p! x% |$ x5 z  h1 D* T8 B$ h
          NOP                           ;延时等待响应7 @+ K' n0 U3 \. r: A) z& J
          NOP 7 r# _3 k8 Q% G# Q) C- i
          SETB      nei_show            ;关闭中断0操作指示灯
, O& A5 ?1 B1 c3 F4 z% j) a. S- h          NOP
5 m3 x* Q6 ~$ ?          MOV             A,#11H              ;把55H送到累加器7 f3 a0 j; T* s
          MOV              SBUF,A              ;送到缓冲区
3 O  x* L' _: J$ u/ W  s          JNB       TI,$                ;等待发送完成; z: j9 Z0 C1 T- R5 P6 q
          CLR       TI                  ;允许再发送
  G  H% G! {' a; U$ ]& W          MOV              A,#99H              ;把99H送到累加器( d$ O% V% R3 a6 l
          MOV              SBUF,A              ;送到缓冲区
( M- E3 k" }1 s- l          JNB       TI,$                ;等待发送完成
8 G3 p% O3 P* A/ a$ E          CLR       TI                  ;允许再发送
" @0 K6 T3 S) y! I( C+ @          NOP
4 l- G9 C. j; P9 @$ M. q( i          NOP                 
: G$ x. j. Z3 N  W8 a          CLR       wai_show            ;点亮中断1操作指示灯 & ~0 V8 m( Z; u% G
                SETB      send                ;发送操作已完成标示  l9 P9 J# V6 h! Z& O# {3 e# K
                POP       ACC9 ]( Y6 W7 F9 B6 c- a. W) U! o
          POP       PSW+ B( J' c; P1 T; g2 Z1 ]- g9 D/ f
          RETI                    
. W* s8 Z- [# n8 `) v;-----------------------------------------------------------------------------------------------
* S# z- Z' j) T  B/ }5 C5 @* w! ?, g;串口中断子程序
! F5 O% t& l* t4 S* d  y; X;-----------------------------------------------------------------------------------------------
* N9 `1 h* f& qserv:     PUSH      PSW8 T$ L& X; b/ H4 q
          PUSH      ACC
1 q/ {  ^# Y$ V) ~          NOP/ W3 r3 w" I. ]" o+ M3 S$ p7 a
          CLR       RI
3 _; {! q) a7 n( w/ U          MOV       A,SBUF2 V7 ~. _/ t9 ^; O; t1 C/ G
          MOV       R0,A4 X2 Q) ~- G# M3 G% N7 W9 e
          CJNE      A,#11H,NEXT15 D1 j  K& q) x1 [( t$ p' Z, q3 z
          MOV       A,R0
4 \: F  R& ?. p2 {. w6 b/ ANEXT1:    CJNE      A,#0AAH,NEXT2
: M+ Z6 k) l+ a8 u0 @+ S1 N) B          CLR       nei_show8 W; N2 ^# J- j* d+ V# ~9 {! B
NEXT2:    CJNE      A,#99H,NEXT3( B% w/ m' H8 n+ B- L
          CLR       wai_show
4 k8 N! W( c5 R, T6 GNEXT3:    POP       ACC9 u/ Y" F6 F7 D6 l* }% _& o3 A, s
          POP       PSW  s  ?* C5 }) B0 C+ y& u: a
          RETI/ ~( ~# J1 U# y; _: f! {
;-----------------------------------------------------------------------------------------------
' T" t8 A; w# y7 Q' R;延时10ms子程序
3 N/ e5 g+ j5 |1 P;-----------------------------------------------------------------------------------------------
7 D' ]( s) w, m! Xdel10:    MOV       R7,#40, h2 X! o( E! p7 _. [$ b
del1:     MOV       R6,#1237 c- N" R! \: A& g. S
          NOP                  . s( t# v& n+ b: L6 M. I
del2:     DJNZ      R6,del2- X2 K" f/ h1 W& h
          DJNZ      R7,del1. H* ~4 R; N7 T& e- B; T% |
          RET
8 E7 ?4 O* t; a7 |;----------------------------------------------------------------------------------------------- $ I/ \" P+ C2 J( S) c% c5 T3 V( Z
;中断初始化子程序; t: |2 w% g6 F2 ?: G! ~- X/ {
;----------------------------------------------------------------------------------------------- # B( _5 f; u' a& K4 D
init:     SETB      EA                  ;MCU开放中断* X3 ^0 v; G. z, L- q+ I
          SETB      EX0                 ;允许INT0中断
1 M0 s# n' A; V2 G& }$ F2 x# Q          SETB      IT0                 ;设置INT0为边缘触发形式
" M+ j, l! _6 q. h$ |; O          SETB      EX1                 ;允许INT1中断8 C1 Q: O. N6 k/ Q% S/ Q
          SETB      IT1                 ;设置INT1为边缘触发形式3 x' f: ]& O0 {" `- I
          SETB      ES                  ;允许串口中断4 y% f; R4 [8 t' I" {
          RET 5 K9 H1 O2 O4 E' g% K) F& L  P7 H
;----------------------------------------------------------------------------------------------- 8 o( P+ B0 U" l  B" k0 G% G+ }' k$ @. V$ }
;串口初始化子程序* J- A9 w, I( L3 |' ]1 @' O6 y  J
;----------------------------------------------------------------------------------------------- . _8 w9 ?6 s) T! \9 i# H  O9 ]
initRS232:MOV                    TMOD,#20H           ;定时器工作在方式2
8 V; v9 G4 d8 P! i) s- t: m8 M+ D$ C          MOV              TH1,#0D0H           ;设置波特率0E8H-2400,0D0H-1200
' Z, x% ^& H/ V% g& d          MOV       TL1,#0D0H0 d* h  B! ~' r( `( t' O
          MOV       PCON,#80H           CON-电源控制
4 v  U! Z5 V. ]. D          SETB      TR1                 ;启动定时器1: i% f+ N! g; k+ k4 M8 ?# M2 R
          MOV       SCON,#0D0H          ;SCON-串行口控制  MODE3 启动串行口接收数据   
" G, D. t9 w  I% D6 I          RET                           ;返回1 h$ @- H: x! u; p% y  F
         
0 O# ~+ O1 E- L6 o+ n9 v9 X: A          END
5 R( ]- r) ?2 Z0 F9 Q# K# _: C. [* W; V. x$ C/ _& v
现在调试中,灯也不亮(电路中,发光二极管正极接5V电,负极通过上拉电阻接单片机),串口传输也不成功....
2 Z: w2 z4 b1 ]9 p 另外,小弟个人还怀疑按键的解法有问题。电路中采取独立式键盘一段直接接到中断源上,一端接地。并没有采用电源+上来电阻的形式。我查了下书籍,有的说到,单片机里面有上拉电阻可以这样子接法,但小弟还是怀疑~~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2025-2-3 02:54 , Processed in 0.053403 second(s), 32 queries , Gzip On.

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

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

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