軟件實現(xiàn)I2C主模式通訊看似簡單,但實際應(yīng)用中最容易犯的錯誤就是對SCL和SDA總線上高電平的實現(xiàn)過程。在硬件設(shè)計上,任意選擇單片機的兩個IO引腳分別指派為SCL和SDA,雖然不是必須的,但為方便軟件編程一般設(shè)于同一個端口,并在其上外接上拉電阻,至于ESD保護電阻和抗干擾濾波電容則為可選件,不影響I2C總線通訊。當器件占用總線時,需要在SCL或SDA引腳上輸出低電平, 軟件就將PORT寄存器相關(guān)位設(shè)定為0的同時對應(yīng)的TRIS寄存器位也設(shè)為0;當釋放總線即總線上變?yōu)楦唠娖綍r,注意不能直接從IO引腳上輸出高電平,而是應(yīng)該將TRIS位設(shè)為1,使引腳變成高阻輸入狀態(tài),通過外接的上拉電阻得到高電平。很多工程師沒有遵循這種操作規(guī)范,盡管在特定的應(yīng)用中也可以實現(xiàn)I2C通訊,但留有很多隱患,不可盲目照搬。 對于PIC單片機來說,I2C總線的控制基本上可以簡化到對TRIS寄存器相關(guān)位的控制。在初始化時先將數(shù)據(jù)端口寄存器PORTx |