打印

新手求助,单片机串口通信

[复制链接]
1514|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
toto1222|  楼主 | 2011-9-16 08:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用汇编写的,单片机就是51,用到了MAX232,发送数据总是收不到结果,郁闷
ORG  0000H
AJMP  MAIN
ORG  0023H
AJMP  UART                ;串口中断
ORG  0030H
MAIN:
      MOV  SP,#60H
      MOV  R0,#50H     ;接收数据首地址入R0
      MOV       R7,#10H     ;接收数据长度入R7
      MOV  TMOD,#20H   ;T1工作方式2
      SETB  EA          ;开总中断
      LCALL  URTINIT     ;串口初始化
      AJMP  $     ;等待串口中断
;*******************************************************
UART:
      PUSH  ACC
      JNB  RI,URT1     ;RI=0即没有接受完则转到URT1继续接收
URT0:                       ;接收完毕各标志位清零
      CLR  ES
      CLR  RI
      MOV  A,SBUF
      MOV  @R0,A
      INC  R0
      DJNZ      R7,URT1     ;数据未接收完则转URT1
      CLR  EA
URT1:
      SETB  ES          ;串行口中断允许位置1
      POP  ACC
RTI:  RETI
;*******************************************************
URTINIT:
        MOV  SCON,#50H   ;串口工作方式1
        MOV     PCON,#00H   ;SMOD=0
        MOV  TH1,#0E8H   ;12M 2400BPS
        MOV  TL1,#0E8H
        CLR     ET1         ;禁止T1中断
        SETB  TR1         ;开启定时器
        SETB  ES          ;开启串口中断
        RET
  END

相关帖子

沙发
toto1222|  楼主 | 2011-9-16 08:59 | 只看该作者
MOV  TH1,#0E8H   ;12M 2400BPS
这注释错了,忽略它吧:o

使用特权

评论回复
板凳
ygzjyh| | 2011-9-16 12:13 | 只看该作者
程序应该没错,既然TH1的值为0E8H,那么波特率应该是1200的,晶振采用11.0592M

使用特权

评论回复
地板
toto1222|  楼主 | 2011-9-16 13:35 | 只看该作者
是啊,一开始以为是晶振和波特率的问题,后来调了调还是不行

使用特权

评论回复
5
dengm| | 2011-9-16 16:30 | 只看该作者
MOV  TH1,#0E8H   ;12M 2400BPS
应为:  MOV  TH1,#0E6H   ;12M 2400BPS

URT1:
      SETB  ES          ;串行口中断允许位置1
      POP  ACC
RTI:  RETI
应为:
URT1:
      CLR TI
      SETB  ES          ;串行口中断允许位置1
      POP  ACC
RTI:  RETI

使用特权

评论回复
6
ygzjyh| | 2011-9-16 20:25 | 只看该作者
查一下硬件电路,晶振是否为11.0592M,波特率是否为1200,如果晶振或波特率设置不对,则肯定接收数据不对的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

34

帖子

1

粉丝