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

📄 5.c

📁 用proteus开发的24c02实现I2C
💻 C
字号:

#include<REG51.h>
#define uchar unsigned char

sbit scl= P3^3;
sbit sda= P3^4;

void delay()
{
	; ; 
}


void start()
{
	sda=1;
	scl=1;	
	delay();
	sda=0;
	delay();
}

void stop()
{
	sda=0;
	scl=1;	
	delay();
	sda=1;
	delay();
}

void response()
{
	uchar i;
	scl=1;
	delay();
    while(sda==1 && i<255 ) i++;
	delay();
	scl=0;
	delay();
}

void init()
{
	sda=1;
	scl=1;
	delay();
}

void write_byte( uchar data1 )
{
	unsigned int i;
	uchar temp;
	temp=data1;
	
	
	for(i=0;i<8;i++)
	{
		temp=temp<<1;
		scl=0;
		delay();
		sda=CY;
		delay();
		scl=1;
		delay();
	}
	scl=0;
	delay();
	sda=1;
	delay();
}

uchar read_byte()
{
	unsigned int i;
	uchar k;
	
    for(i=0;i<8;i++)
	{
		scl=0;
		delay();
		scl=1;
		delay();
		k=(k<<1) | sda;
	}
	scl=0;
	delay();
	return k;
}


void write_addr(uchar addr,uchar data1)
{
	start();
	write_byte(0xa0);
	response();
	write_byte(addr);
	response();
	write_byte(data1);
	response();
	stop();
}

uchar read_addr(uchar addr)
{
	uchar data1;
	start();
	write_byte(0xa0);
	response();
	write_byte(addr);
	response();

	start();
	write_byte(0xa1);
	response();
	data1=read_byte();
	response();
	stop();
	return data1; 
}


void delay1(uchar x)
{
	uchar a,b;
	for(a=x;a>0;a--)
	 for(b=100;b>0;b--);
}

void main()
{
	init();
//	write_addr(23,0x77);
//	delay1(100);
	P1=read_addr(23);
	while(1);
}

/*
#include<reg52.h>
#define uchar unsigned char
sbit sda=P2^7;
sbit scl=P2^6;
uchar a;
void delay()
{ ;;  }
void start()  //开始信号
{	
	sda=1;
	delay();
	scl=1;
	delay();
	sda=0;
	delay();
}

void stop()   //停止
{
	sda=0;
	delay();
	scl=1;
	delay();
	sda=1;
	delay();
}

void respons()  //应答
{
	uchar i;
	scl=1;
	delay();
	while((sda==1)&&(i<250))i++;
	scl=0;
	delay();
}

void init()
{
	sda=1;
	delay();
	scl=1;
	delay();
}

void write_byte(uchar date)
{
	uchar i,temp;
	temp=date;


	for(i=0;i<8;i++)
	{
		temp=temp<<1;
		scl=0;
	    delay();
		sda=CY;
		delay();
		scl=1;
		delay();
	//	scl=0;
     //   delay();
	}
	scl=0;
	delay();
	sda=1;
	delay();
}

uchar read_byte()
{
	uchar i,k;
	scl=0;
	delay();
	sda=1;
	delay();
	for(i=0;i<8;i++)
	{
		scl=1;
		delay();	
		k=(k<<1)|sda;
		scl=0;
		delay();	
	}
	return k;
}

void delay1(uchar x)
{
	uchar a,b;
	for(a=x;a>0;a--)
	 for(b=100;b>0;b--);
}

void write_add(uchar address,uchar date)
{
	start();
	write_byte(0xa0);
	respons();
	write_byte(address);
	respons();
	write_byte(date);
	respons();
	stop();
}

uchar read_add(uchar address)
{
	uchar date;
	start();
	write_byte(0xa0);
	respons();
	write_byte(address);
	respons();
	start();
	write_byte(0xa1);
	respons();
	date=read_byte();
	stop();
	return date;
}

void main()
{
	uchar m_temp;
    init();
	write_add(23,0x88);
	delay1(100);
	m_temp=read_add(23);
	while(1)
	{
		P1=m_temp;
	}
}

*/

⌨️ 快捷键说明

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