标题:
请教STC15单片机中串口库函数中的几个定义
[打印本页]
作者:
big_zhuang
时间:
2020-1-2 22:50
标题:
请教STC15单片机中串口库函数中的几个定义
本人在学习stc15单片机官方的库函数中,遇到了如下问题
在uart.h中,定义了这个结构体:
typedef struct
{
u8 id; //串口号
u8 TX_read; //发送读指针
u8 TX_write; //发送写指针
u8 B_TX_busy; //忙标志
u8 RX_Cnt; //接收字节计数
u8 RX_TimeOut; //接收超时
u8 B_RX_OK; //接收块完成
} COMx_Define;
复制代码
在uart.c文件中,使用了如下函数:
/*************** 装载串口发送缓冲 *******************************/
void TX1_write2buff(u8 dat) //写入发送缓冲,指针+1
{
TX1_Buffer[COM1.TX_write] = dat; //装发送缓冲
if(++COM1.TX_write >= COM_TX1_Lenth) COM1.TX_write = 0;
if(COM1.B_TX_busy == 0) //空闲
{
COM1.B_TX_busy = 1; //标志忙
TI = 1; //触发发送中断
}
}
复制代码
/********************* UART1中断函数************************/
void UART1_int (void) interrupt UART1_VECTOR
{
if(RI)
{
RI = 0;
if(COM1.B_RX_OK == 0)
{
if(COM1.RX_Cnt >= COM_RX1_Lenth) COM1.RX_Cnt = 0;
RX1_Buffer[COM1.RX_Cnt++] = SBUF;
COM1.RX_TimeOut = TimeOutSet1;
}
}
if(TI)
{
TI = 0;
if(COM1.TX_read != COM1.TX_write)
{
SBUF = TX1_Buffer[COM1.TX_read];
if(++COM1.TX_read >= COM_TX1_Lenth) COM1.TX_read = 0;
}
else COM1.B_TX_busy = 0;
}
}
复制代码
请问结构体中的定义,在这两个函数中是怎么发挥作用的呢?为什么这两个函数要写的这么复杂?
作者:
csmyldl
时间:
2020-1-3 01:56
方便大量数据发送
作者:
43181909
时间:
2020-1-3 09:07
也可以不使用结构体,这个也可以说是个人习惯吧
作者:
jaken_tony
时间:
2020-1-3 09:58
这个是内存缓冲区模式的吧,应该还有一个关于接收缓冲区和发送缓冲区的数组定义,即发送和接收,先不直接写端口,而是写到缓冲区,然后触发发送接收中断,由中断从内存缓冲区中读写数据。这样的好处是发送接收部分不用卡死等着发送接收完成,可以继续自行正常的处理流程,特别是发送部分。
作者:
snsoyang
时间:
2022-1-30 21:34
这是库函数为你写好的发送服务程序,他不写你就得写了.
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1