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

📄 2404.asm

📁 iic总线的参考程序.80c52+24c02
💻 ASM
字号:
#include <24c04.h>

void DelayXOPs(uchar number)
{
	uchar i;
	for(i=0;i<number;i++)
	{
		_nop_();
	}
}

void DelayXSecond(uchar number)
{//delaymsecond(10)=延时10.00579ms @w77e58*22.1184MHz(不考虑中断)
	uint data i;
	uchar data j;
	
	for(j=0; j<number; j++)
	{
		for (i=0; i<270; i++)_nop_();
	}
}

void iicStart(void)
{
	Sda=1;
	Scl=1;
	DelayXOPs(18);
	Sda=0;
	DelayXOPs(18);
	Scl=0;
	DelayXOPs(18);
}

void iicStop(void)
{
	Sda=0;
	DelayXOPs(18);
	Scl=1;
	DelayXOPs(18);
	Sda=1;
	DelayXOPs(18);
	Scl=1;
	DelayXOPs(18);
}

void MasterAck(void)
{
	Sda=0;
	DelayXOPs(18);
	Scl=1;
	DelayXOPs(18);
	Scl=0;
	DelayXOPs(18);
}

void SlavecAck()
{
	bit temp;
	//Sda=1;
	DelayXOPs(18);
	Scl=1;
	DelayXOPs(18);
	temp=Sda;
	Scl=0;
	DelayXOPs(18);
//	return(temp);
}

void iicNoAck(void)
{
	Sda=1;
	DelayXOPs(18);
	Scl=1;
	DelayXOPs(18);
	Scl=0;
	DelayXOPs(18);
}

void iicSend(uchar Dat)
{
	uchar BitCounter=8;
	uchar temp;
	do
	{
		temp=Dat;
		if((temp&0x80)==0x80)
			Sda=1;
		else
			Sda=0;
	DelayXOPs(18);
	Scl=1;
	DelayXOPs(18);
	Scl=0;
	DelayXOPs(18);
	temp=Dat<<1;
	Dat=temp;
	BitCounter--;
	}while(BitCounter);
}

uchar iicRead(void)
{
	uchar temp=0;
	uchar temp1=0;
	uchar BitCounter=8;
	Sda=1;
	do{
		Scl=0;
		DelayXOPs(18);
		Scl=1;
		DelayXOPs(18);
		temp1=Sda;
		DelayXOPs(9);
		if(temp1)
			temp=temp|0x01;
		else
			temp=temp&0xfe;
		if(BitCounter-1)
			temp=temp<<1;
		Scl=0;
		DelayXOPs(18);
		BitCounter--;
	}while(BitCounter);
	return(temp);
}

void WrToROM(uchar Dat[],uint Address,uint Num)
{
	uint i;
	uchar *PDat;
	PDat=Dat;
	for(i=0;i<Num;i++)
	{
		iicStart();
		if((Address+i)>0xff)
			iicSend(0xa2);//page 1
		else
			iicSend(0xa0);//page 0
	//	iicSend(0xa0);
		SlavecAck();
		iicSend(Address+i);
		SlavecAck();
		iicSend(*(PDat+i));
		SlavecAck();
		iicStop();
		DelayXSecond(10);
	}
}

void RdFromROM(uchar Dat[],uint Address,uint Num)
{
	uint i;
	uchar *PDat;
	PDat=Dat;
	for(i=0;i<Num;i++)
	{
		iicStart();
		if((Address+i)>0xff)
			iicSend(0xa2);//page 1
		else
			iicSend(0xa0);//page 0
	//	iicSend(0xa0);
		SlavecAck();
		iicSend(Address+i);
		SlavecAck();
		iicStart();
		if((Address+i)>0xff)
			iicSend(0xa3);//page 1
		else
			iicSend(0xa1);//page 0
	//	iicSend(0xa1);
		MasterAck();
		*(PDat+i)=iicRead();
		iicNoAck();
		iicStop();
	}
}

⌨️ 快捷键说明

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