C51单片机串口中断接收与发送程序示例

需积分: 9 10 下载量 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单片机串口通讯中断接收和查询发送的实现,可作为调试或开发相关应用的起点。在实际应用中,可能需要根据具体需求对数据校验、错误处理和协议细节进行调整。