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

📄 main.c

📁 十几个proteus的仿真实例
💻 C
字号:
#include <reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit SCL=P2^0;
sbit SDA=P2^1;

//void delay(uchar n)
//	{
//	uint i;
//	uchar j;
//	for(j=0;j<n;j++)
//		for(i=0;i<6000;i++);
//	}
//
///*启动I2C总线*/
//void sta()
//	{
//	SDA=1;
//	SCL=1;
//	_nop_();
//	SDA=0;
//	_nop_();
//	SCL=0;
//	}
//
//void stop( )/*停止I2C总线*/
//	{
//	SDA=0;
//	SCL=1;
//	delay(1);
//	SDA=1;
//	delay(1);
//	}
//
//void mack( )/*发送应答位*/
//	{
//	SDA=0;
//	SCL=1;
//	_nop_();
//	SCL=0;
//	SDA=1;
//	}
//
//void mnack( )/*发送非应答位*/
//	{
//	SDA=1;
//	SCL=1;
//	_nop_();
//	SCL=0;
//	SDA=0;
//	}
//
//void cack( )/*应答位检查*/
//	{
//	SDA=1;
//	SCL=1;
//	F0=0;
//	if(SDA==1)
//	F0=1;
//	SCL=0;
//	_nop_( );
//	}
//
///*向虚拟I2C总线上发送1个数据字节*/
//void wrbyt(uchar shu)
//	{
//	uchar i;
//	for(i=0;i<8;i++)
//		{
//		if((shu&0x80)>0)
//			{
//			SDA=1;
//			SCL=1;
//			_nop_();
//			SCL=0;
//			SDA=0;
//			}
//		else
//			{
//			SDA=0;
//			SCL=1;
//			_nop_();
//			SCL=0;
//			}
//		shu=shu<<1;
//		}
//	}
//
///*从I2C总线上读取1个数据字节*/
//uchar rdbyt( )
//	{
//	uchar nn=0xff,mm=0x80,uu=0x7f;
//	uchar j;
//	for(j=0;j<8;j++)
//		{
//		SDA=1;
//		SCL=1;
//		if(SDA==0)
//			{nn=(nn&uu);}
//		else
//			{nn=(nn|mm);}
//		nn=_crol_(nn,1);
//		SCL=0;
//		}
//	return(nn);
//	}
//
//void wrnbyta(uchar slaw,uchar gg[],uchar n)
//	{
//	do
//		{
//		sta( );
//		wrbyt(slaw);
//		cack( );
//		}
//	while(F0==1);
//		wrbyt(gg[n]);
//		cack( );
//	}
//
///*向虚拟I2C总线上发送n个字节的数据
//参数:写命令字、需要写到总线的数据、写数据长度
//ff[]:前两个字节分别为高地址、低地址、接着是数据,其中数据长度=地址+数据
//*/
//void wrnbyt(uchar slaw,uchar ff[],uchar number)
//	{
//	uchar idata k;
//	do
//		{
//		sta( );
//		wrbyt(slaw);
//		cack( );
//		}
//	while(F0==1);
//	for(k=0;k<number;k++)
//		{
//		wrbyt(ff[k]);
//		cack( );
//		while(F0==1)
//		wrnbyta(slaw,ff,k);
//		}
//	stop( );
//	}
//
///*从虚拟I2C总线上读取n个字节的数据
//前提:已初始化读取的首地址
//参数:读命令字、保存数组、读取字节数
//*/
//void rdnbyt(uchar slar,uchar qq[],uchar number)
//	{
//	uchar idata data0,l;
//	do
//		{
//		sta( );
//		wrbyt(slar);
//		cack( );
//		}
//	while(F0==1);
//	for(l=0;l<number-1;l++)
//		{
//		data0=rdbyt( );
//		qq[l]=data0;
//		mack( );
//		}
//	data0=rdbyt( );
//	qq[l]=data0;
//	mnack( );
//	stop( );
//	}
//
////读任意地址单元数据
////参数:高地址、低地址
//char eeprom_read(uchar addr_h,uchar addr_l)
//	{
//	char a[2],temp[1];
//	a[0]=addr_h;
//	a[1]=addr_l;
//	wrnbyt(0xa0,a,2);
//	rdnbyt(0xa1,temp,1);
//	return(temp[0]);
//	}
//
////写一字节到任意单元
//void eeprom_write(uchar addr_h,uchar addr_l,uchar data1)
//	{
//	char a[3];
//	a[0]=addr_h;
//	a[1]=addr_l;
//	a[2]=data1;
//	wrnbyt(0xa0,a,3);
//	}

void main()
	{
//	char out[]={0x00,0x00,0x01,0x02,0x03};//将0x01,0x02,0x03写到以0x0000为首地址eeprom中
//	char intd[5];	//连续读数据缓存数组
//	wrnbyt(0xa0,out,5);//将0x01,0x02,0x03写到以0x0000为首地址eeprom中
//	wrnbyt(0xa0,out,2);//初始化首地址,如果不是0x0000,须将out数组初始化
//	rdnbyt(0xa1,intd,3);//从初始化地址中读3个字节到intd数组中
//	eeprom_write(0x00,0x10,0xaa);//将0xaa写到0x0010地址中去
//	P0=eeprom_read(0x00,0x10);//读取0x0010地址中的数据
//	while(1);
	}

⌨️ 快捷键说明

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