|
不講原理(網上詳細講原理的有很多),只講其代碼實現。(說明:實測通過)
IIC.H文件
- #ifndef _IIC_C_
- #define _IIC_C_
- #include "STC12C5A60S2.H"
- #include "intrins.h"
- #define IIC_SDA P10
- #define IIC_SCL P11
- void IIC_IO_Init();
- void IIC_Delay();
- void Delayms(unsigned int ms);
- void IIC_Start();
- void IIC_Stop();
- void IIC_WriteByte(uchar Dat);
- unsigned char IIC_ReadByte();
- void IIC_Ack();
- bit IIC_WaitAck();
- void IIC_WriteData(unsigned char DeciceAddress,unsigned char RegisterAddress,unsigned char Dat);
- unsigned char IIC_ReadData(unsigned char DeciceAddress,unsigned char RegisterAddress);
- #endif
復制代碼 部分IIC.c文件
- #include "IIC.h"
- void Delayms(unsigned int ms) //毫秒級延時函數
- {
- unsigned char i, j;
- unsigned int k;
- for(k=0;k<ms;k++)
- {
- _nop_();
- i = 11;
- j = 190;
- do
- {
- while (--j);
- } while (--i);
- }
- }
- void Delay2us() //2us延時,用于穩定IO狀態
- {
- unsigned char i;
- _nop_();
- _nop_();
- i = 2;
- while (--i);
- }
- void IIC_Delay() //IIC延時,需大于4.7us,這里取8us
- {
- unsigned char i;
- i = 19;
- while (--i);
- }
- void IIC_IO_Init() //IO口初始化,使總線處于空閑狀態
- {
- IIC_SCL = 1;
- IIC_SDA = 1;
- }
- void IIC_Start() //總線開始
- {
- IIC_SDA = 1;
- IIC_SCL = 1;
- IIC_Delay();
-
- IIC_SDA = 0;
- IIC_Delay();
- IIC_SCL = 0;
- IIC_Delay();
- }
- void IIC_Stop() //總線結束
- {
- IIC_SCL = 0;
- IIC_SDA = 0;
- IIC_Delay();
- IIC_SCL = 1;
- IIC_Delay();
- IIC_SDA = 1;
- IIC_Delay();
- }
復制代碼 需要完整版請下載 源文件:
|
-
-
IIC驅動.zip
2020-5-3 23:16 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
1.56 KB, 下載次數: 87, 下載積分: 黑幣 -5
|