51单片机串口通信教程:中断方式实现C程序详解

需积分: 50 123 下载量 90 浏览量 更新于2024-07-23 6 收藏 395KB PDF 举报
该资源主要涉及51单片机的串口通信程序,包含RS232串口通信的C51语言实现,适合初学者理解串口通信的基本原理和编程方法。通过示例程序,讲解如何配置51单片机进行串口通信,包括波特率设置、中断服务程序的编写等。 在51单片机中,串口通信是设备间数据传输的重要方式,通常使用标准的RS232接口。在给出的第一个程序中,我们看到串口通信的初始化设置: 1. 打开串口调试工具,将波特率设置为9600,这意味着每秒传输9600个比特。 2. 晶振频率为11.0592MHz,这是计算波特率所必需的参数。 3. SCON寄存器设置为0x50,表示模式1(8位UART),并启用接收。 4. TMOD寄存器设置为0x20,将定时器1配置为模式2,用于8位重装载,以实现波特率发生器。 5. TH1和TL1寄存器设置适当的值(0xFD)以生成9600波特的波特率。 6. TR1置1,启动定时器1。 7. 开启总中断EA和串口中断ES,以处理接收中断和发送中断。 8. 主程序中,主循环不做任何操作,通信由中断服务程序处理。 9. 串行中断服务程序UART_SER()处理接收中断(RI)和发送中断(TI),读取SBUF中的数据并将其转发回电脑。 第二个程序提供了一个中断方式的51单片机与电脑进行串口通信的C程序实例: 1. 引入了必要的头文件<reg51.h>和<string.h>。 2. 定义了全局变量char ch和read_flag用于标记数据是否已读取。 3. init_serialcom()函数中,串口初始化设置与第一个程序类似,但包含了设置SMOD位,用于波特率翻倍(如果需要更高波特率)。 4. TH1的值计算为19200波特的波特率发生器设置。 这两个程序都展示了如何在51单片机上设置串口通信,以及如何通过中断处理数据的接收和发送。中断方式可以提高系统的实时性,因为单片机可以在等待中断的同时执行其他任务。通过这些示例,学习者可以深入理解51单片机的串口通信机制,并能够根据实际需求修改和扩展程序。