打印
[STC单片机]

请教STC15单片机中串口库函数中的几个定义

[复制链接]
855|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
big_zhuang|  楼主 | 2020-1-2 21:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在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;
        }
}
请问结构体中的定义,在这两个函数中是怎么发挥作用的呢?为什么这两个函数要写的这么复杂?

使用特权

评论回复

相关帖子

沙发
ayb_ice| | 2020-1-3 08:29 | 只看该作者
这都叫复杂

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

9

帖子

0

粉丝