在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;
- }
- }
复制代码请问结构体中的定义,在这两个函数中是怎么发挥作用的呢?为什么这两个函数要写的这么复杂?
一周热门 更多>