|
本人在學(xué)習(xí)stc15單片機(jī)官方的庫函數(shù)中,遇到了如下問題
在uart.h中,定義了這個結(jié)構(gòu)體:
- typedef struct
- {
- u8 id; //串口號
- u8 TX_read; //發(fā)送讀指針
- u8 TX_write; //發(fā)送寫指針
- u8 B_TX_busy; //忙標(biāo)志
- u8 RX_Cnt; //接收字節(jié)計數(shù)
- u8 RX_TimeOut; //接收超時
- u8 B_RX_OK; //接收塊完成
- } COMx_Define;
復(fù)制代碼 在uart.c文件中,使用了如下函數(shù):
- /*************** 裝載串口發(fā)送緩沖 *******************************/
- void TX1_write2buff(u8 dat) //寫入發(fā)送緩沖,指針+1
- {
- TX1_Buffer[COM1.TX_write] = dat; //裝發(fā)送緩沖
- if(++COM1.TX_write >= COM_TX1_Lenth) COM1.TX_write = 0;
- if(COM1.B_TX_busy == 0) //空閑
- {
- COM1.B_TX_busy = 1; //標(biāo)志忙
- TI = 1; //觸發(fā)發(fā)送中斷
- }
- }
復(fù)制代碼- /********************* UART1中斷函數(shù)************************/
- 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;
- }
- }
復(fù)制代碼
請問結(jié)構(gòu)體中的定義,在這兩個函數(shù)中是怎么發(fā)揮作用的呢?為什么這兩個函數(shù)要寫的這么復(fù)雜?
|
|