標題:
STC12C5A60S2單片機IIC總線程序(實測通過)
[打印本頁]
作者:
WANGXL
時間:
2020-5-3 23:16
標題:
STC12C5A60S2單片機IIC總線程序(實測通過)
不講原理(網(wǎng)上詳細講原理的有很多),只講其代碼實現(xiàn)。
(說明:實測通過)
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) //毫秒級延時函數(shù)
{
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延時,用于穩(wěn)定IO狀態(tài)
{
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口初始化,使總線處于空閑狀態(tài)
{
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() //總線結(jié)束
{
IIC_SCL = 0;
IIC_SDA = 0;
IIC_Delay();
IIC_SCL = 1;
IIC_Delay();
IIC_SDA = 1;
IIC_Delay();
}
復制代碼
需要完整版請下載 源文件:
IIC驅(qū)動.zip
2020-5-3 23:16 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
1.56 KB, 下載次數(shù): 87, 下載積分: 黑幣 -5
作者:
feng_li
時間:
2021-8-3 18:52
我從STC89C52 IIC移植過來的,改了_nop_()次數(shù),也不行了
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1