⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i2c.c

📁 嵌入式通用EEPROM读写程序.
💻 C
字号:
#include <reg51.h>

#include "i2ch.h"
#include "typedef.h"
void Delay10us(void)
{
}
void I2CStart(void)
{
	SetBit(I2CPort,SDA);
	Delay10us();
	SetBit(I2CPort,SCL);
	Delay10us();
	ClrBit(I2CPort,SDA);
	Delay10us();
	ClrBit(I2CPort,SCL);
}
void I2CStop(void)
{
	ClrBit(I2CPort,SDA);
	Delay10us();
	SetBit(I2CPort,SCL);
	Delay10us();
	SetBit(I2CPort,SDA);
}
void I2CAck(unsigned char ack)
{
	unsigned char ch;
	ClrBit(I2CPort,SDA);
	if(ack) SetBit(I2CPort,SDA);
	Delay10us();
	SetBit(I2CPort,SCL);
	Delay10us();
	ch=I2CPort;
	ch &=(1<<SDA);
	ClrBit(I2CPort,SCL);
	ClrBit(I2CPort,SCL);
	
}
void I2CTx(unsigned char ch)
{
	unsigned char i;
	for(i=0;i<8;i++){
		if(ch&0x80) SetBit(I2CPort,SDA);
		else		ClrBit(I2CPort,SDA);
		SetBit(I2CPort,SCL);
		Delay10us();
		ClrBit(I2CPort,SCL);
		ch <<=1;
	}
}
unsigned char I2CRx(void)
{
	unsigned char i,ch,uc0;
	SetBit(I2CPort,SDA);
	i=0;
	while(1){
		SetBit(I2CPort,SCL);
		Delay10us();
		uc0=I2CPort;
		uc0 &=(1<<SDA);
		if(uc0) SetBit(ch,0);
		else	ClrBit(ch,0);
		ClrBit(I2CPort,SCL);
		i++;
		if(i>7) break;
		ch <<=1;
	}
	return(ch);
}
unsigned char I2CRead(unsigned int Addr)
{
	unsigned char ch;
	I2CSetReadAddr(Addr);
	I2CAck(0);
	ch=I2CRx();
	I2CAck(1);
	I2CStop();
	return(ch);
}
void I2CSetReadAddr(unsigned int Addr)
{
	I2CSetWriteAddr(Addr);
	I2CStart();
	I2CTx(0xa1);
}
void I2CSetWriteAddr(unsigned char Addr)
{
	I2CStart();
	I2CTx(0xa0);
	I2CAck(0);
	I2CTx(Addr/256);
	I2CAck(0);
	I2CTx(Addr%256);
	I2CAck(0);
}
/*
说明:
1: 连续读取起始地址为ADDR的内容.
  I2CSetReadaddr(ADDR);
  while(1){
    I2CAck(0);
    tmp=I2CRx();
  }
2: 连续写入起始地址为ADDR的内容.
  I2CSetReadaddr(ADDR);
  while(1){
    I2CAck(0);
    I2CTx(*ptr++);
  }
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -