Проблема проверки четности в микроконтроллере 8051 (СБОРКА) - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь решить эту проблему с 8051 на ассемблере. Итак, вот вопрос: там 8-битные данные поступают с компьютера с 9600 бод. Каждые данные проходят проверку на четность с помощью микроконтроллера 8051. Если четность данных равна 1, R0 увеличивается. Если это ноль, R1 увеличивается. После 10 данных, если данные с четностью 1 больше, чем данные с четностью 0, загорается светодиод P1.0. Иначе загорается светодиод P1.1. Напишите в программу для этого. (Crystal 11.059MHz)

Я написал это, но как мне получить четность данных?

MOV TMOD,#00100000B
MOV SCON,#11001000B
MOV TH1,#-3
SETB TR1
MOV R0,#0 
MOV R1,#0
MOV R2,#10 
MAIN:
JNB RI,$
CLR RI
MOV A,SBUF
MOV C,RB8
MOV P,C
JB P,PARITY1 
PARITY0: 
INC R1 
SJMP DONGU
PARITY1:
INC R0
DONGU: 
DJNZ R2,MAIN
MOV A,R0
SUBB A,R1
JC LEDB
LEDA: 
CPL P1.0
SJMP DONE
LEDB:
CPL P1.1
DONE: NOP
END  

Я думаю, что эта часть бессмысленна для этой проблемы, что делать?

MOV C,RB8
MOV P,C

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 17 апреля 2020

Общая идея заключается в получении бита четности входящих данных из специального бита RB8, расположенного в регистре SCON (http://www.keil.com/support/man/docs/is51/is51_ov_cpupsw.htm), который является регистром последовательного порта.

Исходя из этого, берется одна из двух ветвей (PARITY0 и PARITY1).

Единственная странная вещь заключается в том, что входящий бит четности, RB8, перемещается в бит P, который бесполезен; можно было загрузить RB8 в переноску и выполнить jc / jn c. Бит P полезен для определения четности байта, загруженного в аккумулятор, поэтому нет смысла пытаться записать в него.

Для получения дополнительной информации вы можете посмотреть здесь: https://openlabpro.com/guide/uart-8051/ для просмотра общего обзора последовательного порта 8051.

...