📄 iic.c
字号:
#include <reg52.h>
#include <absacc.h>
#include <intrins.h>
sbit IIC_SDA=P1^4;//IIC的数据线
sbit IIC_SCL=P1^3;//IIC的时钟信号
void IIC_Delay(void)//延时
{
_nop_();
_nop_();
//_nop_();
//_nop_();
//_nop_();
//_nop_();
//_nop_();
}
void IIC_Start(void)//IIC的启动信号
{
IIC_SDA=1;
IIC_SCL=1;
IIC_Delay();
IIC_SDA=0;
IIC_Delay();
IIC_SCL=0;
IIC_Delay();
IIC_SDA=1;
IIC_Delay();
}
void IIC_End(void)//提供IIC的结束信号
{
IIC_SDA=0;
IIC_Delay();
IIC_SCL=1;
IIC_Delay();
IIC_SDA=1;
IIC_Delay();
}
void IIC_Write(unsigned char data1)//向IIC总线发送8位数据,并请求一个应答信号
{
unsigned char i;
for(i=0;i<8;i++)//向IIC总线发送8位数据
{
if((data1&128)==128) IIC_SDA=1;
else IIC_SDA=0;
IIC_Delay();
IIC_SCL=1;
data1=data1<<1;
IIC_Delay();
IIC_SCL=0;
IIC_Delay();
}
IIC_SDA=1;//请求一个应答信号
}
unsigned char IIC_Read(void)//从IIC总线上读出一个8位的数
{
unsigned char i,j;
j=0;
for(i=0;i<8;i++)
{
j=j<<1;
IIC_SCL=1;
IIC_Delay();
if(IIC_SDA==1) j++;
IIC_SCL=0;
IIC_Delay();
}
return(j);
}
unsigned char IIC_RandomRead(unsigned char Address)//给定一个地址,从这个地址读出内容
{
unsigned char T_Byte;
bit Ack=1;
while(Ack==1) //dummy write ,select current address
{
IIC_Start();
IIC_Write(0xa2); /*写入写控制字*/
IIC_SCL=1;
IIC_Delay();
if(IIC_SDA)
Ack=1; //EEPROM busy,need retrs
else Ack=0; //EEPROM Acknowledge
IIC_SCL=0;
}
Ack=1; //设置地址
while(Ack==1)
{
IIC_Write(Address);
IIC_SCL=1;
IIC_Delay();
if(IIC_SDA==1) Ack=1;
else Ack=0;
IIC_SCL=0;
}
IIC_Start();
Ack=1;
while(Ack==1) //读指令
{
IIC_Write(0xa3); /*写入读控制字*/
IIC_SCL=1;
IIC_Delay();
if(IIC_SDA==1)
Ack=1;
else Ack=0;
IIC_SCL=0;
}
T_Byte=IIC_Read(); //从IIC总线上读出一个8位的数
IIC_SDA=1;//do not Acknowledge
IIC_Delay();
IIC_SCL=1;
IIC_Delay();
IIC_SCL=0;
IIC_Delay();
IIC_End();
return T_Byte;
}
void IIC_RandomWrite(unsigned char Address,unsigned char Data) //给定一个地址和数据,将数据写入到地址中
{
bit Ack=1;
while(Ack==1)/*测试是否能写入*/
{
IIC_Start();
IIC_Write(0xa2);/*写入写控制字*/
IIC_SCL=1;
IIC_Delay();
if(IIC_SDA==1) Ack=1;
else Ack=0;
IIC_SCL=0;
}
IIC_Write(Address);/*写入8位地址*/
IIC_SCL=1;
IIC_Delay();
IIC_SCL=0;
IIC_Write(Data);/*写入数据*/
IIC_SCL=1;
IIC_Delay();
IIC_SCL=0;
IIC_End();/*送停止位,启动写入时序*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -