📄 ii2c.c
字号:
#include "includes.h"
sbit SDA = P1^1;
sbit SCL = P1^0;
/*启动IIc总线 */
void delay(uint8 a,uint8 b)
{
uint8 i;
uint8 j;
for(i=a; i!=0; i--)
for(j=b; j!=0; j--)
DOG = 0x00;DOG = 0xff;
}
void StartIIc()
{
SDA = 1; //发送起始条件的数据信号
SCL = 1;
delay(50,10);
_nop_();
SDA = 0; //发送起始信号
_nop_();
SCL = 0; //准备发送或接收数据
}
/*停止IIc总线*/
void StopIIc()
{
SDA = 0; //发送结束条件的数据信号
SCL = 0;
delay(50,10);
_nop_();
SCL = 1; //结束条件建立时间大于4μs
_nop_();
SDA = 1; //发送IIC总线结束信号
_nop_();
}
/*IIC检测ACK信号子程序*/
void IIcAck()
{
SCL = 1;
while(SDA);
SDA = 0;
delay(5,10);
SCL = 0;
}
/*向IIC发送8BIT数据子程序*/
void byteToIic(uint8 a)
{
uint8 i;
bit j;
SCL = 0;
for(i=0; i<8; i++)
{
j = (a & 0x80);
SDA = j;
_nop_();
delay(5,10);
_nop_();
_nop_();
SCL = 1;
a <<=1;
SCL = 0;
}
}
/*从IIC接收8BIT数据子程序*/
uint8 iicToByte()
{
uint8 i,a,j;
SDA = 1;
_nop_();
for(i=0; i<8; i++)
{
SCL = 1;
j = SDA & 0x01;
delay(5,10);
SCL = 0;
a = a<<1;
a = a|j;
}
return (a);
}
/****************************************
*函数名:IIcReadByte*********************
*功 能:IIC从2402的存储区读一个字节数据*
*****************************************/
uint8 IIcReadByte( uint8 addr)
{
uint8 tempdata;
DOG = 0x00;DOG = 0xff;
StartIIc(); //启动IIC总线
_nop_();
byteToIic(0xA0); //写24c04的芯片地址以及确定下面执行写操作
_nop_();
_nop_();
IIcAck();
_nop_();
byteToIic(addr); //写对24c04操作的地址
_nop_();
_nop_();
IIcAck();
_nop_();
StartIIc(); //再次启动IIC总线
_nop_();
byteToIic(0xA1); //写24c04的芯片地址以及确定下面执行读操作
_nop_();
_nop_();
IIcAck();
_nop_();
tempdata = iicToByte(); //从24c04中读取数据,存入临时变量tempdata中
_nop_();
StopIIc(); //停止IIC总线
_nop_();
return (tempdata);
}
/***************************************
*函数名:IIcWriteByte*******************
*功 能:IIC写1字节数据到2402的存储区***
****************************************/
void IIcWriteByte(uint8 addr,uint8 value)
{
DOG = 0x00;DOG = 0xff;
StartIIc(); //启动IIC总线
_nop_();
byteToIic(0xA0); //写24c04的芯片地址以及确定下面执行写操作
_nop_();
_nop_();
IIcAck();
_nop_();
byteToIic(addr); //写对24c04操作的地址
_nop_();
_nop_();
IIcAck();
_nop_();
byteToIic(value); // 向24c04中写数据
_nop_();
_nop_();
IIcAck();
_nop_();
StopIIc(); //停止IIC总线
_nop_(); //写入延时
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -