2011年7月7日 星期四

DIY - PIC:C18 PIC18F4550 USART 函數庫程式 (九十四):

DIY - PICC18 PIC18F4550 USART 函數庫程式 (九十四)

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

沒有留言:

張貼留言