PIC單片機之I2C(從模式)
網(wǎng)上有許多講解單片機 實(shí)現I2C主模式,但是從模式的很少。我現在就來(lái)講講PIC單片機使用MSSP模塊實(shí)現I2C從模式。
有關(guān)I2C協(xié)議的具體介紹可以看 《PIC單片機之I2C(主模式)》,我們這里直接講解實(shí)例
實(shí)例講解:我們模仿 AT24C02 EEPROM 的協(xié)議。讓一個(gè)主模式的單片機,來(lái)讀取從模式單片機的數據。
下面為AT24C02的隨機地址讀取的協(xié)議。
第一個(gè)字節 :輸入7位地址和一位的寫(xiě)狀態(tài)位,
第二個(gè)字節:然后寫(xiě)入EEPROM數據地址,
第三個(gè)字節:輸入7位地址和一位的讀狀態(tài)位,
第四~N個(gè)字節:讀出的EEPROM的數據。
我們來(lái)講解下程序的基本思路:我們使能了MSSP中斷,即是I2C接收中斷,當PIC單片機接收到一個(gè)數據后就會(huì )產(chǎn)生中斷。那是接收到設備地址,還是接收到數據,由SSP1STAT寄存器的狀態(tài)位來(lái)判斷。
需要判斷的狀態(tài)位分別是 :
數據和地址: 用來(lái)判斷接收到是地址還是數據
啟動(dòng)位: 用來(lái)判斷是否接收到啟動(dòng)位
讀寫(xiě): 用來(lái)判斷是寫(xiě)狀態(tài)還是讀狀態(tài)。
緩存滿(mǎn): 用來(lái)判斷緩沖區是否滿(mǎn)
我們以隨機地址讀取為例:講講程序執行的過(guò)程
1,從單片機接收到啟示位和設備地址中斷:我們判斷SSP1STAT的狀態(tài)位為(寫(xiě)狀態(tài),地址,緩存滿(mǎn),接收到啟示位) 然后讀取緩存中的設備地址, 接著(zhù)在讀取 需要讀/寫(xiě)的數據地址。
2,單片機再次接收到設備地址:我們判斷是SSP1STAT的狀態(tài)為(讀狀態(tài))然后從設備就輸出數據
我們以寫(xiě)字節數據為例:
1,從單片機接收到啟示位和設備地址中斷:我們判斷SSP1STAT的狀態(tài)位為(寫(xiě)狀態(tài),地址,緩存滿(mǎn),接收到啟示位) 然后讀取緩存中的設備地址, 接著(zhù)在讀取 需要讀/寫(xiě)的數據地址。
2,單片機判斷SSP1STAT的狀態(tài)位為(寫(xiě)狀態(tài),數據,緩存滿(mǎn))那么單片機就接收輸入的數據。
初始化設置:
1,設置I2C通信的兩引腳為CLK SCL為輸入,
TRISB6 = input;
TRISB4 = input;
2,將MSSP設置為I2C從模式,七位從地址
SSP1CONbits.SSPM0 = 0;
SSP1CONbits.SSPM1 = 1;
SSP1CONbits.SSPM2 = 1;
SSP1CONbits.SSPM3 = 0;// I2C slave mode ,7bit address
3,使能CLK時(shí)鐘
SSP1CONbits.CKP = 1; // enable clock
4,設置從設備地址為 0xA0
SSP1ADD =0xA0; //slave address is 0xa0
5,開(kāi)啟I2C
SSP1CONbits.SSPEN=1;//enable I2c
6,清楚狀態(tài)標志
SSPSTAT=0;
單片機相關(guān)文章:單片機教程
單片機相關(guān)文章:單片機視頻教程
單片機相關(guān)文章:單片機工作原理
評論