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

📄 24c02.c

📁 用于设备工作时间监控的下位机源码
💻 C
字号:

#include <reg51.h>

sbit	DataClk			= P1^0;
sbit	DataBit			= P1^1;

extern unsigned short AT24C02DelayTime;
unsigned short TempAT24C02DelayTime;

void RxWrite24C02StartBit()
{
	DataClk = 0;
	DataBit = 1;
	TempAT24C02DelayTime=AT24C02DelayTime;
	while(TempAT24C02DelayTime==AT24C02DelayTime);

	DataClk = 1;
	TempAT24C02DelayTime=AT24C02DelayTime;
	while(TempAT24C02DelayTime==AT24C02DelayTime);
	
	DataBit = 0;
	TempAT24C02DelayTime=AT24C02DelayTime;
	while(TempAT24C02DelayTime==AT24C02DelayTime);

	DataClk = 0;
	TempAT24C02DelayTime=AT24C02DelayTime;
	while(TempAT24C02DelayTime==AT24C02DelayTime);
}

void RxWrite24C02StopBit()
{
	DataClk = 0;
	DataBit = 0;
	TempAT24C02DelayTime=AT24C02DelayTime;
	while(TempAT24C02DelayTime==AT24C02DelayTime);

	DataClk = 1;
	TempAT24C02DelayTime=AT24C02DelayTime;
	while(TempAT24C02DelayTime==AT24C02DelayTime);

	DataBit = 1;
	TempAT24C02DelayTime=AT24C02DelayTime;
	while(TempAT24C02DelayTime==AT24C02DelayTime);

	DataClk = 0;
	TempAT24C02DelayTime=AT24C02DelayTime;
	while(TempAT24C02DelayTime==AT24C02DelayTime);

	DataBit = 0;
	TempAT24C02DelayTime=AT24C02DelayTime;
	while(TempAT24C02DelayTime==AT24C02DelayTime);
}

void RxWrite24C02BitOne()
{
	DataClk = 0;
	DataBit = 1;
	TempAT24C02DelayTime=AT24C02DelayTime;
	while(TempAT24C02DelayTime==AT24C02DelayTime);

	DataClk = 1;
	TempAT24C02DelayTime=AT24C02DelayTime;
	while(TempAT24C02DelayTime==AT24C02DelayTime);

	DataClk = 0;
	TempAT24C02DelayTime=AT24C02DelayTime;
	while(TempAT24C02DelayTime==AT24C02DelayTime);

	DataBit = 0;
	TempAT24C02DelayTime=AT24C02DelayTime;
	while(TempAT24C02DelayTime==AT24C02DelayTime);
}

void RxWrite24C02BitZero()
{
	DataClk = 0;
	DataBit = 0;
	TempAT24C02DelayTime=AT24C02DelayTime;
	while(TempAT24C02DelayTime==AT24C02DelayTime);

	DataClk = 1;
	TempAT24C02DelayTime=AT24C02DelayTime;
	while(TempAT24C02DelayTime==AT24C02DelayTime);

	DataClk = 0;
	TempAT24C02DelayTime=AT24C02DelayTime;
	while(TempAT24C02DelayTime==AT24C02DelayTime);

	DataBit = 0;
	TempAT24C02DelayTime=AT24C02DelayTime;
	while(TempAT24C02DelayTime==AT24C02DelayTime);
}

unsigned char RxRead24C02OneBit()
{
	DataClk = 0;
	DataBit = 1;
	TempAT24C02DelayTime=AT24C02DelayTime;
	while(TempAT24C02DelayTime==AT24C02DelayTime);

	DataClk = 1;
	TempAT24C02DelayTime=AT24C02DelayTime;
	while(TempAT24C02DelayTime==AT24C02DelayTime);

	if (DataBit == 0){
		DataClk = 0;
		TempAT24C02DelayTime=AT24C02DelayTime;
		while(TempAT24C02DelayTime==AT24C02DelayTime);

		DataBit = 0;
		TempAT24C02DelayTime=AT24C02DelayTime;
		while(TempAT24C02DelayTime==AT24C02DelayTime);
		return 0;
	}
	else{
		DataClk = 0;
		TempAT24C02DelayTime=AT24C02DelayTime;
		while(TempAT24C02DelayTime==AT24C02DelayTime);

		DataBit = 0;
		TempAT24C02DelayTime=AT24C02DelayTime;
		while(TempAT24C02DelayTime==AT24C02DelayTime);
		return 1;
	}
}

void RxRead24C02Ack()
{
	DataClk = 0;
	DataBit = 0;
	TempAT24C02DelayTime=AT24C02DelayTime;
	while(TempAT24C02DelayTime==AT24C02DelayTime);

	DataClk = 1;
	TempAT24C02DelayTime=AT24C02DelayTime;
	while(TempAT24C02DelayTime==AT24C02DelayTime);

	DataClk = 0;
	TempAT24C02DelayTime=AT24C02DelayTime;
	while(TempAT24C02DelayTime==AT24C02DelayTime);

	DataBit = 0;
	TempAT24C02DelayTime=AT24C02DelayTime;
	while(TempAT24C02DelayTime==AT24C02DelayTime);
}

unsigned char RxRead24C02OneByte(unsigned char Address)
{
	unsigned char	usLoop, TempChar;

	// Write Start 1010 000 0/Write
	RxWrite24C02StartBit();
	RxWrite24C02BitOne();
	RxWrite24C02BitZero();
	RxWrite24C02BitOne();
	RxWrite24C02BitZero();
	RxWrite24C02BitZero();
	RxWrite24C02BitZero();
	RxWrite24C02BitZero();
	RxWrite24C02BitZero();
	RxRead24C02Ack();

	// Write Data Address
	for (usLoop=0; usLoop<8; usLoop++){
		if (((Address << usLoop) & (0x80)) == 0x00)
			RxWrite24C02BitZero();
		else
			RxWrite24C02BitOne();
	}
	RxRead24C02Ack();

	// Write Start 1010 000 1/Read
	RxWrite24C02StartBit();
	RxWrite24C02BitOne();
	RxWrite24C02BitZero();
	RxWrite24C02BitOne();
	RxWrite24C02BitZero();
	RxWrite24C02BitZero();
	RxWrite24C02BitZero();
	RxWrite24C02BitZero();
	RxWrite24C02BitOne();
	RxRead24C02Ack();

	TempChar = 0;
	for (usLoop=0; usLoop<8; usLoop++){
		TempChar = TempChar << 1;
		if (RxRead24C02OneBit()!=0)
			TempChar = TempChar | 1;
	}
	RxWrite24C02StopBit();
	return TempChar;
}


void RxWrite24C02OneByte(unsigned char TempAddress, unsigned char TempData)
{
	unsigned char	usLoop;

	// Write Start 1010 000 0/Write
	RxWrite24C02StartBit();
	RxWrite24C02BitOne();
	RxWrite24C02BitZero();
	RxWrite24C02BitOne();
	RxWrite24C02BitZero();
	RxWrite24C02BitZero();
	RxWrite24C02BitZero();
	RxWrite24C02BitZero();
	RxWrite24C02BitZero();
	RxRead24C02Ack();

	// Write Data Address
	for (usLoop=0; usLoop<8; usLoop++){
		if (((TempAddress << usLoop) & (0x80)) == 0x00)
			RxWrite24C02BitZero();
		else
			RxWrite24C02BitOne();
	}
	RxRead24C02Ack();

	// Write Data
	for (usLoop=0; usLoop<8; usLoop++){
		if (((TempData << usLoop) & (0x80)) == 0x00)
			RxWrite24C02BitZero();
		else
			RxWrite24C02BitOne();
	}
	RxRead24C02Ack();
	RxWrite24C02StopBit();

	//wait 12 ms
	TempAT24C02DelayTime=AT24C02DelayTime;
	TempAT24C02DelayTime=TempAT24C02DelayTime+12;
	while(TempAT24C02DelayTime!=AT24C02DelayTime);
}

⌨️ 快捷键说明

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