C51单片机串口中断接收与发送程序示例
需积分: 9 198 浏览量
更新于2024-10-25
收藏 29KB DOC 举报
"单片机串口通讯程序代码,用于51单片机中断接收与查询发送测试。通信协议涉及字节标志、异或校验和。程序包含初始化串口、发送字符和字符串以及中断接收功能。"
在单片机编程中,串口通讯是一种常用的数据传输方式,尤其在51系列单片机中,它允许设备间通过串行接口进行数据交换。此程序代码是针对51单片机的串口接收中断和发送例程,目的是验证中断接收功能的正确性。
首先,通信协议是数据传输的基础,本例中的协议规定了数据帧的结构。第1字节的最高位(MSB)为1,作为起始标志,后续字节的MSB为0,表明它们不是首字节。数据帧的最后一个字节是前面所有字节(除了起始标志位)的后7位进行异或运算的结果,用于校验数据的完整性和准确性。例如,测试时可发送十六进制的"95102025",并期待同样数据的返回,以检查串口通讯是否正常。
程序中的`init_serialcomm()`函数负责设置串口通讯参数。它将SCON设置为模式1,即8位UART模式,并开启串口接收中断。同时,设置了定时器1为模式2,用于波特率发生器,以实现4800bps的波特率。PCON的SMOD位被置1,以翻倍定时器1的时钟频率。接着,开启串口中断使能(IE)并启动定时器1。注意,这里的波特率计算基于单片机的晶振频率11.0592MHz。
发送数据通过`send_char_com()`和`send_string_com()`两个函数完成。前者发送单个字符,等待发送中断标志TI清零后再继续;后者发送整个字符串,直到达到指定长度。
中断接收函数`serial()`在中断服务子程序中处理。当RI(接收中断标志)被置位时,表示有新的数据到来。程序读取SBUF(串行缓冲区)中的字符,并根据其值判断是起始字节还是后续数据字节。如果是起始字节,计数器重置,开始存储接收到的数据,并计算校验和。如果是后续数据字节,则累加到数据数组中。中断服务子程序最后清除RI标志,以准备接收下一次中断。
这个程序代码为开发者提供了一个基础的51单片机串口通讯中断接收和查询发送的实现,可作为调试或开发相关应用的起点。在实际应用中,可能需要根据具体需求对数据校验、错误处理和协议细节进行调整。
2013-06-08 上传
2022-06-05 上传
2008-07-12 上传
2020-07-15 上传
2010-09-25 上传
2020-08-12 上传
2010-03-09 上传
2013-07-08 上传
mayongqiangma
- 粉丝: 0
- 资源: 6
最新资源
- C语言数组操作:高度检查器编程实践
- 基于Swift开发的嘉定单车LBS iOS应用项目解析
- 钗头凤声乐表演的二度创作分析报告
- 分布式数据库特训营全套教程资料
- JavaScript开发者Robert Bindar的博客平台
- MATLAB投影寻踪代码教程及文件解压缩指南
- HTML5拖放实现的RPSLS游戏教程
- HT://Dig引擎接口,Ampoliros开源模块应用
- 全面探测服务器性能与PHP环境的iprober PHP探针v0.024
- 新版提醒应用v2:基于MongoDB的数据存储
- 《我的世界》东方大陆1.12.2材质包深度体验
- Hypercore Promisifier: JavaScript中的回调转换为Promise包装器
- 探索开源项目Artifice:Slyme脚本与技巧游戏
- Matlab机器人学习代码解析与笔记分享
- 查尔默斯大学计算物理作业HP2解析
- GitHub问题管理新工具:GIRA-crx插件介绍