UART代码发送垃圾

时间:2015-11-03 14:32:22

标签: assembly uart 8051 edsim51

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

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,但串行监视器显示垃圾,请参见图像。 UART

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

1 个答案:

答案 0 :(得分:0)

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

詹姆斯罗杰斯 - EdSim51 Creator