单片机串口通信实验:发送接收数据并进行奇偶校验
单片机串口通信实验:发送接收数据并进行奇偶校验
本实验使用单片机实现串口通信,包含发送和接收程序,通信速率为9600 baud。
功能描述:
- 发送: 将存储在内部RAM 20H-27H单元中的内容发送到PC机。
- 接收: 从PC机接收8个字节数据,并进行奇偶校验,校验方式为偶校验。校验错误时,点亮第1个LED,校验正确时,点亮第2个LED,并将接收到的数据存储在RAM中地址为30H-37H的单元中。
操作步骤:
- 确定通信速率为9600baud,设置串口通信参数。
- 发送程序:将存储在内部RAM 20H-27H单元中的内容通过串口发送到PC机。
- 接收程序:从PC机接收8个字节数据,并进行偶校验,校验错误时点亮第1个LED,校验正确时点亮第2个LED,并将接收到的数据存储在RAM中地址为30H-37H的单元中。
程序设计方法:
- 设置串口通信参数:波特率为9600,数据位为8位,停止位为1位,校验方式为偶校验。
- 发送程序:将内部RAM 20H-27H单元中的数据存储到串口发送寄存器中,等待发送完成。
- 接收程序:从串口接收寄存器中读取8个字节数据,并进行偶校验,校验错误时点亮第1个LED,校验正确时点亮第2个LED,并将接收到的数据存储在RAM中地址为30H-37H的单元中。
硬件原理图:

流程图:

汇编代码:
ORG 0H
MOV SP,#7FH ;初始化栈指针
MOV PCON,#80H ;禁止低功耗模式
;串口通信参数设置
MOV TMOD,#20H ;设置定时器1为模式2
MOV TH1,#FDH ;设置波特率为9600
MOV SCON,#50H ;设置串口参数:8位数据位,1位停止位,偶校验
;发送程序
MOV A,20H ;读取内部RAM 20H单元中的数据
MOV SBUF,A ;将数据存储到串口发送寄存器中
DJNZ R3,$ ;等待发送完成
;接收程序
MOV R7,#8 ;循环8次,接收8个字节数据
MOV R6,#0 ;清零校验位
RECV:
JNB RI,$ ;等待接收完成
MOV A,SBUF ;从串口接收寄存器中读取数据
MOV R0,A ;保存数据
MOV R1,A ;保存数据,备份校验位
ANL A,#FFH ;清除校验位
MOV R2,#0 ;统计数据位中1的个数
MOV R4,#8 ;循环8次,检查每个数据位是否为1
CHECK:
ANL A,#7FH ;将最高位清零
JZ ZERO ;如果该位为0,跳转到ZERO
INC R2 ;该位为1,累加1
ZERO:
RLC A ;循环左移
DJNZ R4,CHECK ;继续检查下一位
ADD R6,R2 ;累加1的个数,计算校验位
CJNE R1,A,ERROR ;如果校验位不匹配,跳转到ERROR
DJNZ R7,RECV ;继续接收下一个字节数据
MOV A,R6 ;校验正确,点亮第2个LED
MOV P3,AH ;将结果存储到P3口中,点亮LED
MOV A,R0 ;将接收到的数据存储到内部RAM 30H单元中
MOV 30H,A
SJMP $ ;程序结束,循环等待
ERROR:
MOV P3,A ;校验错误,点亮第1个LED
SJMP $ ;程序结束,循环等待
注意:
- 代码中使用到的寄存器和内存地址可能需要根据实际情况进行调整。
- 硬件连接需要根据实际电路进行修改。
- 该代码仅供参考,实际应用中需要根据具体需求进行完善。
原文地址: https://www.cveoy.top/t/topic/oibV 著作权归作者所有。请勿转载和采集!