51单片机C语言实现串口通信与数据接收教程

需积分: 10 1 下载量 87 浏览量 更新于2024-09-15 收藏 8KB TXT 举报
本文档主要介绍了如何使用51单片机通过电脑串口进行通信,并提供了相关的C语言程序实现。首先,我们了解两个关键部分: 1. **初始化串口通信**: - 在`init_serialcom()`函数中,作者设置了串口工作模式,将UART设置为模式1,波特率为19200bps(根据给定的晶振频率11.0592MHz计算得出)。TMOD寄存器被设置以启用定时器1的模式2(8位计数器),并使能SMOD。定时器1的溢出中断被打开(IE=0x90),以及启动定时器1(TR1=1)。 该函数还包括一个发送数据的子函数`send_char_com()`,它将字符数据写入串口缓冲区SBUF,并在数据发送完成时置位标志`TI`。 2. **串口通信中断处理**: - 在串口中断服务子程序`serial() interrupt 4 using 3`中,当接收标志`RI`变为1时,说明有新的数据接收。程序读取接收到的字符并将其保存到`ch`变量中,同时设置`read_flag`为1,表示数据已经准备好。 3. **主函数和波特率计算**: - 主函数`main()`首先调用`init_serialcom()`进行串口初始化,然后进入无限循环等待数据。当`read_flag`为1时,表示可以读取数据,读取后清零`read_flag`并使用`send_char_com()`发送数据。 为了设置正确的波特率,通过计算`TH1`和`TL1`寄存器的值,利用定时器1的溢出频率来匹配给定的波特率。在这里,波特率被设为9600bps,代码使用XTAL1的频率11.0592MHz作为基础进行计算。 总结起来,本文档详细展示了如何使用C语言编程实现51单片机与电脑之间的串口通信,包括串口的初始化、数据传输和接收过程,以及如何根据晶振频率计算和调整波特率。这对于学习51单片机的串口通信应用开发非常有帮助。