单片机C51串口中断接收和发送是嵌入式系统中常用的功能,用于实现设备间的通信。本文提供了一个简单的测试例程,用于验证51系列单片机的串口接收中断和查询发送功能。 我们来看串口通信协议。在本例中,每个数据包由多个字节组成,第一个字节的最高位(MSB)为1作为标识,后续字节的MSB为0。数据包的最后一个字节是前面所有字节的低7位进行异或运算得到的校验和。通过这个校验和,可以检测数据在传输过程中是否发生错误。测试时,可以通过串口调试助手发送特定的16进制序列(如95 10 20 25),如果接收端正确地接收到相同的序列,说明串口通信正常。 接下来是C51的程序代码解析: 1. `init_serialcomm()` 函数负责初始化串口。它设置SCON寄存器为模式1(8位UART模式),使能串行中断,设置TMOD寄存器为定时器1工作在模式2(8位自动重载),并开启定时器1。同时,PCON寄存器的SMOD位被设置为1,用于调整波特率。TH1寄存器的值决定了波特率,此处设置为0xF4,对应于11.0592MHz晶振下的4800bps波特率。打开串行中断(IE寄存器的RI位)和定时器1(TR1位)。 2. `send_char_com()` 函数用于发送单个字符。它将字符放入SBUF寄存器,等待发送完成(TI标志位为1)后清零TI,确保下一次发送不会被阻塞。 3. `send_string_com()` 函数发送一个字符串。它遍历字符串中的每个字符,调用`send_char_com()`函数逐个发送。 4. `serial()` 是串口接收中断服务函数。当RI标志位被置1时,表示接收缓冲区中有新数据。首先清零RI,然后读取SBUF中的字符。如果接收到的字符大于127,说明是数据包的第一个字节,记录下来并计算校验和。否则,继续接收下一个字节,更新校验和。当接收到的数据达到指定长度(INBUF_LEN),并且校验和正确时,设置`read_flag`标志,表示数据接收完成。 5. `main()` 函数是程序的主循环。它不断检查`read_flag`,如果有数据接收完成,就清零`read_flag`,并通过`send_string_com()`函数将接收到的数据回发出去。 总结来说,这个C51串口例程展示了如何使用中断处理串口接收,并通过查询方式发送数据。中断接收提高了实时性,而查询发送则适用于简单、低速率的通信场景。通过这个测试程序,开发者可以验证51单片机串口通信的基本功能,为更复杂的通信应用打下基础。

















剩余8页未读,继续阅读


- 粉丝: 74
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 基于.net技术的一家人酒店管理系统的设计与实现(1)(1).doc
- 计算机网络教研室工作计划(1).doc
- 医疗行业大数据分析报告(1).ppt
- 珠海横琴新区配电网规划自动化毕业论文(1).doc
- 互联网+文化产业推广模式研究(1).docx
- 计算机硬件体系结构(1)(1).ppt
- 高职院校信息化教学设计探索与实践(1).docx
- 电子商务年度工作总结范文(1).docx
- 基于java的聊天室—客户端大学论文(1).doc
- 互联网+一带一路金融合作问题研究(1).docx
- 基于STM32的方波信号测试仪设计-(1).docx
- 畅通房地产开发企业楼盘销售计算机管理解决方案(1).doc
- 互联网+视域下高职创新创业教育探究(1).docx
- 空间信息数据采集装备生产扩能项目申请立项环境影响评估报告表(1).doc
- 中国联通网站seo优化方案(1).ppt
- 人工智能与未来教育的任务(1).doc


