Microchip C18 有內置支持 PIC18F4550 I2C 外設介面函數庫模塊 (i2c.h),衹需要用包括 i2c 頭文件 ( )。然後再呼叫不同的功能,便可控制 I2C 外設介面。
功能 –AckI2C (產生 I2C 匯流排應答條件)
原型:void AckI2C( void );
說明:該函數產生I2C 匯流排應答條件。
檔案名:acki2c.c
範例:AckI2C;
功能 –CloseI2C (禁止 SSP 模組)
原型:void CloseI2C( void );
說明:該函數禁止SSP 模組。
檔案名:closei2c.c
範例:CloseI2C;
功能 –DataRdyI2C (I2C 緩衝區中是否有資料?)
原型:unsigned char DataRdyI2C( void );
說明:確定SSP 緩衝區中是否有資料可讀。
返回值:如果SSP 緩衝區中有資料,為1;如果SSP 緩衝區中沒有資料,則為0。
檔案名:dtrdyi2c.c
範例:if (DataRdyI2C()) { var = getcI2C();}
功能 –getcI2C (從I2C 匯流排讀取一個位元組)
參見ReadI2C。
功能 –getsI2C (從工作在主 I2C 模式的 I2C 匯流排上讀取一個固定長度的資料串)
原型:unsigned char getsI2C( unsigned char * rdptr, unsigned char length );
參數:rdptr - 指向用於存儲從I2C 器件所讀取資料的PICmicro RAM 的字元型指標。
length - 從I2C 器件讀取的位元組數。
說明:該函數從I2C 匯流排上讀取一個預定義長度的資料串。
返回值:如果所有位元組都發送完畢,為0 ;如果發生匯流排衝突,則為-1 。
檔案名:getsi2c.c
範例:unsigned char string[15]; getsI2C(string, 15);
功能 –IdleI2C (迴圈直到 I2C 匯流排空閒)
原型:void IdleI2C( void );
說明:該函數檢查I2C 外設的狀態並且等待匯流排變為空閒。由於硬體 I2C 外設不允許佇列
衝匯流排序列,所以需要函數IdleI2C。在開始I2C 操作或者產生寫衝突之前, I2C 外設必須處於空閒狀態。
檔案名:idlei2c.c
範例:IdleI2C;
功能 –NotAckI2C (產生 I2C 匯流排無應答條件)
原型:void NotAckI2C( void );
說明:該函數產生I2C 匯流排無應答條件。
檔案名:noacki2c.c
範例:NotAckI2C;
功能 –OpenI2C (配置SSP 模組)
原型:void OpenI2C( unsigned char sync_mode, unsigned char slew );
參數:sync_mode - 取下列值之一,在i2c.h 中定義:
SLAVE_7 | I2C 從模式, 7 位元位址 |
SLAVE_10 | I2C 從模式, 10 位元位址 |
MASTER | I2C 主模式 |
slew - 取下列值之一,在i2c.h 中定義:
SLEW_OFF | 在 100 kHz 模式下禁止壓擺率 |
SLEW_ON | 在400 kHz 模式下使能壓擺率 |
說明:OpenI2C函數把SSP模組重定到POR狀態,然後將模組配置為主/從模式及選擇的壓擺率。
檔案名:openi2c.c
範例:OpenI2C(MASTER, SLEW_ON);
功能 –putcI2C (向I2C 匯流排寫一個位元組)
參見WriteI2C。
功能 –putsI2C (向工作在主模式或從模式的I2C 匯流排寫一個資料串)
原型:unsigned char putsI2C( unsigned char *wrptr );
參數:wrptr - 指向要寫到I2C 匯流排的資料的指標。
說明:該函數向I2C 匯流排寫一個資料串,直到出現空字元為止。不傳送空字元本身。該函可以工作在主模式或從模式。
返回值:主 I2C 模式:
如果在資料串中遇到空字元,為0 ;
如果從I2C 器件響應一個無應答Not Ack 信號,為-2 ;
如果發生寫衝突,則為-3 。
從I2C 模式:
如果在資料串中遇到空字元,為0 ;
如果主 I2C 器件響應一個終止資料傳送的無應答Not Ack 信號,為-2 。
檔案名:putsi2c.c
範例:unsigned char string[] = “data to send”; putsI2C(string);
功能 –ReadI2C / getcI2C (從I2C 匯流排讀取一個位元組)
原型:unsigned char ReadI2C (void);
說明:該函數從I2C 匯流排上讀入一個位元組。
返回值:從I2C 匯流排上讀取的資料位元組。
檔案名:readi2c.c
代碼示例: unsigned char value; value = ReadI2C();
功能 –RestartI2C (產生 I2C 匯流排重複啟動條件)
原型:void RestartI2C( void );
說明:該函數產生 I2C 匯流排重複啟動條件。
檔案名:rstrti2c.c
範例:RestartI2C;
功能 –StartI2C (產生I2C 匯流排啟動條)
原型:void StartI2C( void );
說明:該函數產生 I2C 匯流排啟動條件。
檔案名:starti2c.c
範例:StartI2C;
功能 –StopI2C (產生 I2C 匯流排停止條件)
原型:void StopI2C( void );
說明:該函數產生 I2C 匯流排停止條件。
檔案名:stopi2c.c
範例:StopI2C;
功能 –WriteI2C / putcI2C (向I2C 匯流排器件寫一個位元組)
原型:unsigned char WriteI2C( unsigned char data_out );
參數:data_out - 要寫到 I2C 匯流排器件的一位元組資料。
說明:該函數向I2C 匯流排器件寫一位元組資料。
返回值:如果寫入成功,為0 ;如果發生寫衝突,則為-1。
檔案名:writei2c.c
範例:WriteI2C(‘a’);
下面是一個簡單的代碼示例, 該程式舉例說明了配置為 I2C 主通訊的SSP 模組, 及其和Microchip 24LC01B I2C 電可擦除記憶體之間的I2C 通訊。
#include "p18cxx.h" #include "i2c.h" unsigned char arraywr[] = {1,2,3,4,5,6,7,8,0}; unsigned char arrayrd[20]; //*************************************************** void main(void) { OpenI2C(MASTER, SLEW_ON);// Initialize I2C module SSPADD = 9; //400kHz Baud clock(9) @16MHz //100kHz Baud clock(39) @16MHz while(1) { EEByteWrite(0xA0, 0x30, 0xA5); EEAckPolling(0xA0); EECurrentAddRead(0xA0); EEPageWrite(0xA0, 0x70, arraywr); EEAckPolling(0xA0); EESequentialRead(0xA0, 0x70, arrayrd, 20); EERandomRead(0xA0,0x30); } } |
資料來源:Microchip
2011 年 06 月 22 日 天氣報告
氣溫:26.7 度 @ 22:00
相對濕度:百分之94%
天氣:雨
三號強風信號 ( 2011 年 06 月 22 日 05 時 45 分 )
相關網頁:
- DIY - 電子:PIC18F4550 I2C 介面 (八十七) :
- DIY - 電子:C18 PIC18F4550 I2C 函數庫程式 (八十八) :
- DIY - 電子:DS1307 RTC IC 實時時鐘晶片 (八十九) :
- DIY - 電子:PIC18F4550 DS1307 實時時鐘電路 (九十) :
- DIY - 電子:PIC18F4550 DS1307 實時時鐘電路程式 (九十一) :
沒有留言:
張貼留言