【问题标题】:UART code sends garbageUART代码发送垃圾
【发布时间】:2016-02-03 18:08:30
【问题描述】:

我使用 EdSim51 仿真器(用于 8051 MCU),跟随 this notes。我编写了一个发送数据的程序,但有时(并非总是)它会发送垃圾。

JMP main

ORG 23h ; serial interrupt vector
  JBC TI,sendString
RETI

ORG 30h
str: DB 'H','e','l','l','o',0Dh,0

sendString:
  CLR A
  MOVC A,@A+DPTR ; read next char from str
  INC DPTR
  JZ sendStringEnd ; if the char is not 0
    MOV SBUF,A ; write next char
  sendStringEnd:
RETI

main:
CLR SM0
SETB SM1 ; serial mode 1

MOV TMOD,#20h
MOV TH1,#243
MOV TL1,#243
SETB TR1 ; 2400 baud rate

SETB EA
SETB ES ; enable serial interrupt

MOV DPTR,#str ; DPTR points to Hello string
SETB TI ; force interrupt

JMP $

MOV SBUF,A 将正确的数据写入 SBUF,但串行监视器显示垃圾,请参见图像。

看起来波特率没有同步。还是我忘记了什么?乱码输出的来源是什么?

【问题讨论】:

  • @HansPassant 他做到了。他已经将这个东西连接到串行中断并且甚至检查TI位。

标签: assembly uart 8051 edsim51


【解决方案1】:

您忘记在 ISR 结束时清除 TI。由于串口的两个中断源(发送和接收)共享一个向量,TI 和 RI 在向量化时都不会被硬件清零。这取决于程序员。

詹姆斯·罗杰斯 - EdSim51 创作者

【讨论】:

  • 我用过JBC TI,sendString - 这不应该很清楚吗TI
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
  • 2012-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-22
  • 2017-02-09
相关资源
最近更新 更多