1:驱动简述;
驱动实现串口中断接收和发送数据,缓冲区使用环形缓冲区。发送:手动置RI中断标志位为1,发生中断,在中断发送函数中将需要发送的数据一一发送出去,具体见示例;接收:在中断接收函数中保存接收到满足协议的数据,后置接收成功标志位,最终在main函数while循环中轮询接收成功标志位是否置1,如果置1,处理接收到的数据。
2:代码示例;
以下代码模仿modbus协议,贴串口发送函数和中断处理函数,适用于51系列单片机,具体的串口协议可参考modbus协议或者自己根据需求定义。
uart.h文件
#define COM_TX1_Lenth 20
#define COM_RX1_Lenth 20
typedef struct
{
unsigned char TX_read; //发送读指针
unsigned char TX_write; //发送写指针
unsigned char B_TX_busy; //忙标志
unsigned char RX_Cnt; //接收字节计数
unsigned char RX_read; //接收读指针
unsigned char RX_write; //接收写指针
}COMx_Define;
uart.c文件
//串口发送函数 发送一个字节
void Usart_Tx_Func(unsigned char Data)
{
Usart1_Tx_Buffer[COM1.TX_write] = Data; //装发送缓冲
if(++COM1.TX_write >= COM_TX1_Lenth)
COM1.TX_write = 0;
if(COM1.B_TX_busy == 0) //空闲
{
COM1.B_TX_busy = 1; //标志忙
TI = 1; //手动触发发送中断
}
}
//串口发送函数
void Usart_Send(unsigned char *ptr,unsigned char num)
{
if(num == 0)
{
for(;*ptr!='