单片机串口通信实验:发送接收数据并进行奇偶校验

本实验使用单片机实现串口通信,包含发送和接收程序,通信速率为9600 baud。

功能描述:

  • 发送: 将存储在内部RAM 20H-27H单元中的内容发送到PC机。
  • 接收: 从PC机接收8个字节数据,并进行奇偶校验,校验方式为偶校验。校验错误时,点亮第1个LED,校验正确时,点亮第2个LED,并将接收到的数据存储在RAM中地址为30H-37H的单元中。

操作步骤:

  1. 确定通信速率为9600baud,设置串口通信参数。
  2. 发送程序:将存储在内部RAM 20H-27H单元中的内容通过串口发送到PC机。
  3. 接收程序:从PC机接收8个字节数据,并进行偶校验,校验错误时点亮第1个LED,校验正确时点亮第2个LED,并将接收到的数据存储在RAM中地址为30H-37H的单元中。

程序设计方法:

  1. 设置串口通信参数:波特率为9600,数据位为8位,停止位为1位,校验方式为偶校验。
  2. 发送程序:将内部RAM 20H-27H单元中的数据存储到串口发送寄存器中,等待发送完成。
  3. 接收程序:从串口接收寄存器中读取8个字节数据,并进行偶校验,校验错误时点亮第1个LED,校验正确时点亮第2个LED,并将接收到的数据存储在RAM中地址为30H-37H的单元中。

硬件原理图:

image-20211218141346582

流程图:

image-20211218141401601

汇编代码:

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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录