EdSim51 UART выводит странные символы - PullRequest
0 голосов
/ 10 ноября 2018

Я попытался использовать EdSim51 для имитации 8051 UART, чтобы сохранить выводимый символ A, и он работает хорошо. Однако, если я изменил некоторые регистры, которые теоретически не будут мешать выводу, выводом станут другие символы, а некоторые из них будут в расширенной таблице ASCII, такие как P, h, 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

Полный код сборки, который будет выдавать странные символы: (Основываясь на рабочем коде, я добавляю много строк, которые кажутся избыточными, они используются для увеличения вероятности возникновения странного поведения.)

ORG 0000H
;; TMOD = 0x20;
MOV TMOD,#20H
;; TH1 = (char)-6;
MOV TH1,#0FAH
;; SCON = 0x50;
MOV SCON,#50H
;; TR1 = 1;
SETB TR1
START:
;; [Begin] Trashing Registers such as R0, R1, R2, A, B, and memory 0x40.
MOV R0, #0FFH
MOV R1, #0FFH
MOV R2, #0FFH
MOV A, #15H
MOV B, #77H
MOV R0, #040H
MOV A, @R0
INC A
MOV @R0, A
;; [End] Trashing Registers.
;; SBUF = 'A';
MOV SBUF, #41H
WAIT:
;; if TI is 1, Clear TI and goto START.
JBC TI, START
;; Otherwise keep polling.
;; [Begin] Simulate multiple yields.
LCALL YIELD
LCALL YIELD
LCALL YIELD
LCALL YIELD
LCALL YIELD
LCALL YIELD
LCALL YIELD
LCALL YIELD
;; [End] Simulate multiple yields.
;; goto WAIT;
JMP WAIT
YIELD:
;; [Begin] Mess with stack pointers.
PUSH ACC
PUSH B
PUSH DPL
PUSH DPH
PUSH PSW
;; Trash registers.
MOV R0, #0FFH
MOV R1, #0FFH
MOV R2, #0FFH
MOV ACC, #15H
MOV B, #77H
POP PSW
POP DPH
POP DPL
POP B
POP ACC
RET
;; [End] End messing with stack pointers.
...