我正在尝试使用汇编语言的8051解决此问题。因此,这是一个问题:8位数据来自计算机,波特率为9600。每个数据都通过8051微控制器进行奇偶校验。如果数据奇偶校验为1,则R0增加。如果为零,则R1增加。 10个数据后,如果奇偶校验为1的数据大于奇偶校验为0的数据,则P1.0 led点亮。否则,P1.1 led点亮。为此编写程序。 (晶体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
谢谢您的帮助。
一般的想法似乎是从位于串行寄存器SCON寄存器(http://www.keil.com/support/man/docs/is51/is51_ov_cpupsw.htm)中的特殊位RB8获得输入数据的奇偶校验位。
基于它,采用两个分支(PARITY0和PARITY1)之一。
唯一奇怪的是,传入的奇偶校验位RB8被移到了P位,这是没有用的;可以将RB8装入进位并执行jc / jnc。 P位对于了解累加器中加载的字节的奇偶校验很有用,尝试对其进行写是没有意义的。