我尝试使用EdSim51模拟8051 UART,以保持输出字符A
,并且效果很好。但是,如果我更改了一些理论上不会干扰输出的寄存器,则输出将变成其他一些字符,其中一些在扩展ASCII表中,例如P
,h
,{ {1}},ENQ
,VT
,BEL
,NEL
,,
Ð
。
我想知道我的代码有什么问题还是仅仅是EdSim51的错误?
¨
设置为System Clock (MHz)
,而11.0592
设置为8-bit UART Baud Rate
。
下面的工作代码将4800 Baud
设置为SBUF
,然后等到'A'
变成TI
,将1
设置为TI
并循环。它不使用任何寄存器,堆栈,累加器,仅使用简单的命令。
完整的汇编代码:(一直输出字符0
。)
A
将产生奇怪字符的完整汇编代码:(基于工作代码,我添加了许多看似多余的行,它们用于增加发生奇怪行为的可能性。)
ORG 0000H
;; TMOD = 0x20;
MOV TMOD,#20H
;; TH1 = (char)-6;
MOV TH1,#0FAH
;; SCON = 0x50;
MOV SCON,#50H
;; TR1 = 1;
SETB TR1
START:
;; SBUF = 'A';
MOV SBUF, #41H
WAIT:
;; if TI is 1, Clear TI and goto START.
JBC TI, START
;; Otherwise keep polling.
;; goto WAIT;
JMP WAIT