首页 理论教育 单片机实用教程:单工通信练习成果

单片机实用教程:单工通信练习成果

时间:2023-11-16 理论教育 版权反馈
【摘要】:单工通信时,在同一时间内,单片机要么向外部设备发送数据,要么接收外部设备送来的数据,两者不能同时进行。 编写程序,将单片机内40H~48H单元的数据发送给外部设备,要求串行通信口工作在方式2,数据位的第9位作为奇偶校验位。2)特殊功能寄存器的第0位(P位)为奇偶校验位,MCS-51系列单片机为偶校验,当累加器A中“1”的个数为偶数时,P位为“0”,否则P位为“1”。

单片机实用教程:单工通信练习成果

单工通信时,在同一时间内,单片机要么向外部设备发送数据,要么接收外部设备送来的数据,两者不能同时进行。

1.发送数据

要让单片机发送数据,必须编写发送数据程序,再将程序写入单片机,在程序的控制下,单片机就可以向外部设备发送数据。

【例6-6】 编写程序,将单片机内40H~48H单元的数据发送给外部设备,要求串行通信口工作在方式2(一帧数据为11位),数据位的第9位作为奇偶校验位。

解答:程序如下:

程序说明:

标号LOOP至最后一条指令的程序段要反复执行多次,第一次执行程序段时发送40H单元中的数据,当执行到最后一条指令时,R0中的数据为41H,R2中的数据由08H变为07H,然后回跳到标号LOOP处,开始第二次执行程序段,第二次执行时发送41H单元中的程序,如此反复执行多次,最后一次执行程序段时发送48H中的数据,由于执行到最后一条指令时,R2中的数据已减为“0”,不会再产生跳转,而是结束程序。

2.接收数据

要让单片机通过串行通信口接收数据,需要编写数据接收程序。下面通过一个例子来说明数据接收程序的编写方法。(www.xing528.com)

【例6-7】 编写程序,让单片机能接收外部设备送来的数据,串行通信口设为工作方式2,要求单片机能判断数据的奇偶校验位是否错误

解答:程序如下:

要读懂上面的程序,须了解下面几个要点:

1)串行通信口在接收数据时,会将第9位数据(这里为奇偶校验位)送入寄存器SCON的RB8位中。

2)特殊功能寄存器(PSW)的第0位(P位)为奇偶校验位,MCS-51系列单片机为偶校验,当累加器A中“1”的个数为偶数时,P位为“0”,否则P位为“1”。

3)如果接收的8位数据都没有发生错误,那么寄存器SCON中RB8位的值(来自帧数据中的奇偶校验位)与寄存器PSW中奇偶校验位P位的值应一致。例如外部设备传送的数据中有3个“1”,那么RB8位应为“1”,含3个“1”的数据送入累加器A中后,会使寄存器PSW的P位也为“1”。也就是说,如果数据未发生错误,P位和RB8位的值应相同;如果数据传送时发生错误,其中一位“1”变为“0”,那么传送到累加器A中的数据也只含有2个“1”,寄存器PSW的P位就为“0”,而RB8位仍为“1”(该位与数据中的奇偶校验位一致,并不因数据错误而改变),即数据发生错误,P位和RB8位的值会不同。

程序说明:在前面的程序中,“JB PSW.0,ONE”用来判断P位是否为“1”。若为“1”,再执行“JNB RB8,ERR”来判断RB8位是否为“0”。若为“0”,说明P位和RB8位的值不同,则执行校验错误标号ERR处的指令;若不为“0”(即为“1”),P位和RB8位的值相同,则执行校验正确标号RIGHT处的指令。

在执行“JB PSW.0,ONE”来判断P位是否为“1”时,若P位为“0”,则执行“JB RB8,ERR”来判断RB8位是否为“1”。若为“1”,说明P位和RB8位的值不同,则执行校验错误标号ERR处的指令;若RB8位为“0”,P位和RB8位的值相同,则执行“SJMP RIGHT”而跳转执行校验正确标号RIGHT处的指令。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈