Microchip C18 有內置支持 PIC18F4550 USART (Universal Synchronous/Asynchronous Receiver/Transmitter , 通用同步/異步收發器) 函數庫模塊 (usart.h),衹需要用包括 usart 頭文件 ( )。然後再呼叫不同的功能,便可控制 USART 介面,副程式支援帶有多個 USART 外設的器件。
功能 –BusyUSART / Busy1USART / Busy2USART (USART 是否正在發送?)
原型:char BusyUSART( void );
說明:返回值表明USART 發送器現在是否正忙。應該在開始新的發送之前使用該函數。
當器件僅有一個USART 外設時使用BusyUSART ,而當器件有多個USART 外設時,使用Busy1USART 和Busy2USART 。返回值:如果USART 發送器空閒,為0 ;如果USART 發送器正在使用,則為1 。
檔案名:ubusy.c / u1busy.c / u2busy.c
範例:while (BusyUSART());
功能 –CloseUSART / Close1USART / Close2USART (禁止指定的USART 。)
原型:void CloseUSART( void );
說明:該函數禁止指定USART 的中斷、發送器和接收器。當器件僅有一個USART 外設時使用CloseUSART ,而當器件有多個USART 外設時,使用 Close1USART
檔案名:uclose.c / u1close.c / u2close.c。
範例:CloseUSART;
功能 –DataRdyUSART / DataRdy1USART / DataRdy2USART (讀緩衝區中是否有資料?)
原型:char DataRdyUSART( void );
說 明:該函數返回PIR 寄存器中RCI 標誌位元的狀態。當器件僅有一個USART 外設時使用DataRdyUSART ,而當器件有多個USART 外設時,使用 DataRdy1USART 和DataRdy2USART 。返回值:如果有資料,為1 ;如果沒有資料,則為0 。
檔案名:udrdy.c / u1drdy.c / u2drdy.c
範例:while (!DataRdyUSART());
功能 –getcUSART / getc1USART / getc2USART (從USART 讀取一個位元組。)
參見ReadUSART 。
功能 –getsUSART / gets1USART / gets2USART (從指定的USART 中讀取一個固定長度的字串。)
原型:void getsUSART ( char * buffer, unsigned char len );
參數:buffer - 指向存儲讀取字元的位址的指標。
Len - 要從USART 讀取的字元數。
說明:該函數將等待到從指定USART 中讀出len 個字元為止。當等待字元到達時,不會出現超時。當器件僅有一個USART 外設時使用getsUSART ,而當器件有多個USART 外設時,使用 gets1USART 和gets2USART 。
檔案名:ugets.c / u1gets.c / u2gets.c
範例:char inputstr[10]; getsUSART( inputstr, 5 );
功能 –OpenUSART / Open1USART / Open2USART (配置指定的USART 模組。)
原型:void OpenUSART ( unsigned char config, unsigned int spbrg);
參數:config - 從下面所列出各類型中分別取一個值並相與(‘&’)所得的值。這些值在文件usart.h 中定義。
發送中斷:
USART_TX_INT_ON 允許發送中斷
USART_TX_INT_OFF 禁止發送中斷
接收中斷:
USART_RX_INT_ON 允許接收中斷
USART_RX_INT_OFF 禁止接收中斷
USART 模式:
USART_ASYNCH_MODE 異步模式
USART_SYNCH_MODE 同步模式
發送寬度:
USART_EIGHT_BIT 8 位發送/接收
USART_NINE_BIT 9 位發送/接收
主/從模式選擇*:
USART_SYNC_SLAVE 同步從模式
USART_SYNC_MASTER 同步主模式
接收模式:
USART_SINGLE_RX 單字節接收
USART_CONT_RX 連續接收
串列傳輸速率:
USART_BRGH_HIGH 高串列傳輸速率
USART_BRGH_LOW 低串列傳輸速率
* 僅適用於同步模式
spbrg
這是寫到波特率發生器寄存器中的值,它決定USART 工作的串列傳輸速率。
計算波特率的公式為:
異步模式,高速:
FOSC / (16 * (spbrg + 1))
異步模式,低速:
FOSC / (64 * (spbrg + 1))
同步模式:
FOSC / (4 * (spbrg + 1))
其中,FOSC 為振盪器頻率。
說明:該函數按照指定的配置選項配置USART 模組。當器件僅有一個USART 外設時使用OpenUSART ,而當器件有多個USART 外設時,使用Open1USART 和Open2USART 。返回值:如果寫入成功,為0 ;如果發生寫衝突,則為-1。
檔案名:uopen.c / u1open.c / u2open.c
範 例:OpenUSART1( USART_TX_INT_OFF & USART_RX_INT_OFF & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH, 25 );
功能 –putcUSART / putc1USART / putc2USART (向USART 寫入一個位元組。)
參見WriteUSART
功能 –putsUSART / puts1USART / puts2USART / putrsUSART / putrs1USART / putrs2USART (向 USART 寫入一個包含空字元的字串。)
原型:void putsUSART( char *data );
參數:data - 指向以空字元結尾的資料串的指標。
說明:該函數向 USART 寫入一個包含空字元的字串。對於位於資料記憶體中的字串,應該使用這些函數的“puts ” 形式。對於位於程式記憶體中的字串,其中包括字串常量,應該使用這些函數的 “putrs ”形式。
當器件僅有一個USART 外設時使用putsUSART 和putrsUSART ,而當器件有多個USART 外設時,使用其他函數。
檔案名:uputs.c / u1puts.c / u2puts.c / uputrs.c / u1putrs.c / u2putrs.c
範例:putrsUSART( “Hello World!” );
功能 –ReadUSART / Read1USART / Read2USART / getcUSART / getc1USART / getc2USART (從USART 接收緩衝區讀取一個位元組(一個字元),包括第9 位(如果使能了9 位元模式的話)。)
原型:char getcUSART( void );
說明:此函數從USART 接收緩衝區讀取一個位元組。狀態位元和第9 個資料位元保
存在定義如下的聯合中:
union USART
{
unsigned char val;
struct {
unsigned RX_NINE:1;
unsigned TX_NINE:1;
unsigned FRAME_ERROR:1;
unsigned OVERRUN_ERROR:1;
unsigned fill:4;
};
};
如果使能了9 位元模式,則第9 位是唯讀的。狀態位元將始終被讀取。對於具有一個USART 外設的器件,應該使用getcUSART 和ReadUSART 函數,且狀態資訊讀入名為USART_Status 的變數,此變量類型為上述的USART 聯合。
對於具有多個USART 外設的器件,應該使用getcxUSART 和ReadxUSART 函數,狀態資訊讀入名為USARTx_Status 的變數,此變量類型為上述的USART 聯合。返回值:如果寫入成功,為0 ;如果發生寫衝突,則為-1。
檔案名:uread.c / u1read.c / u2read.c
範例:int result; result = ReadUSART(); result |= (unsigned int) USART_Status.RX_NINE << 8;
功 能 –WriteUSART / Write1USART / Write2USART / putcUSART / putc1USART / putc2USART (寫一個位元組(一個字元)到USART 發送緩衝區,包括第9 位(如果使能了9 位元模式的話)。)
原型:void putcUSART( char data );
參數:data - 要寫到USART 的值。
說明:此函數寫一個位元組到USART 發送緩衝區。如果使能了9 位元模式,則第9 位從欄位TX_NINE 寫入,此欄位包含在類型為USART 的一個變數中。
union USART
{
unsigned char val;
struct {
unsigned RX_NINE:1;
unsigned TX_NINE:1;
unsigned FRAME_ERROR:1;
unsigned OVERRUN_ERROR:1;
unsigned fill:4;
};
};
對於帶有一個USART 外設的器件,應該使用putcUSART 和Write-USART函數,Status 寄存器名為USART_Status ,其類型為上述的USART 聯合。
對於帶有多個USART 外設的器件,應該使用putcxUSART 和WritexUSART 函數,Status 寄存器名為 USARTx_Status ,其類型為上述的USART 聯合。
檔案名:uwrite.c / u1write.c / u2write.c
範例:unsigned int outval; USART1_Status.TX_NINE = (outval & 0x0100) >> 8; WriteUSART( (char) outval );
功能 –baudUSART / baud1USART / baud2USART (為增強型USART 的運行設置波特率配置位元。)
原型:void baudUSART( unsigned char baudconfig );
參數:baudconfig - 從下面所列出各類型中分別取一個值並相與(‘&’)所得的值。這些值在文件usart.h 中定義:
時鐘空閒狀態:
BAUD_IDLE_CLK_HIGH 時鐘空閒狀態為高電平
BAUD_IDLE_CLK_LOW 時鐘空閒狀態為低電平
串列傳輸速率發生:
BAUD_16_BIT_RATE 16 位波特率發生
BAUD_8_BIT_RATE 8 位波特率發生
RX 引腳監視:
BAUD_WAKEUP_ON 監測RX 引腳
BAUD_WAKEUP_OFF 不監測RX 引腳
串列傳輸速率測量:
BAUD_AUTO_ON 使能自動波特率測量
BAUD_AUTO_OFF 禁止自動波特率測量
說明:這些函數僅適用于帶有增強型USART 功能的處理器。
檔案名:ubaud.c / u1baud.c / u2baud.c
範例:baudUSART (BAUD_IDLE_CLK_HIGH & BAUD_16_BIT_RATE & BAUD_WAKEUP_ON & BAUD_AUTO_ON);
#include #include void main(void) { // configure USART OpenUSART( USART_TX_INT_OFF & USART_RX_INT_OFF & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH, 25 ); while(1) { while( ! PORTAbits.RA0 ); //wait for RA0 high WriteUSART( PORTD ); //write value of PORTD if(PORTD == 0x80) // check for termination break; }CloseUSART(); } |
參考資料:Microchip MPLAB C18 C COMPILER LIBRARIES
相關網頁:
◆ DIY - 電子:EIA RS-232 串行通信協議標準 (九十二) :
◆ DIY - 電子:MAX232 串行通信協議標準 IC (九十三) :
◆ DIY - 電子:C18 PIC18F4550 USART 函數庫程式 (九十四) :
◆ DIY - 電子:PIC18F4550 USART 電路功能介紹 (九十五) :
◆ DIY - 電子:PIC18F4550 USART 自動波特率電路介紹 (九十六) :
◆ DIY - 電子:PIC18F4550 USART 異步模式 (九十七) :
◆ DIY - 電子:PIC18F4550 + MAX232 USART 電路 (九十八) :
◆ DIY - 電子:PIC18F4550 + MAX232 USART 電路程式 (九十九) :
◆ DIY - 電子:PIC18F4550 測試程式 Hyper Terminal (一百) :
相關網頁:
◎ RS-232 ﹣串列數據通訊的介面標準 (一)
◎ RS-232 ﹣超級終端機串列介面測試 (二)
◎ RS-232 ﹣超級終端機串列介面 Loopback 測試 (三)
◎ RS-232 ﹣用 Excel 做串列介面數據傳輸及接收 (四)
◎ RS-232 ﹣用 Excel API做串列介面數據傳輸及接收 (五)
相關網頁:
◎ DIY - 智能小車:TL-WR703N 無線路由器與 16F877A 控制版串口連接電路 (二十)
◎ DIY - 智能小車:ser2net 詳細介紹 (二十一)
◎ DIY - 智能小車:智能小車 ser2net 設定 (二十二)
◎ DIY - 智能小車:16F877A 控制版串口連接程式 (二十三)
◎ DIY - 智能小車:TL-WR703N 路由器和 RS232 串行板組裝 (二十九)
◎ DIY - 智能小車:PIC 16F877A 處理器板 RS232 接收程式碼 (三十三)
相關網頁:
◎ ESCORT 3146A 5 1/2位數字雙顯示桌上型電錶數據傳輸
◎ Hameg HM507 CombiScope (模數組合示波器) – RS232
沒有留言:
張貼留言