wr24c02.c

来自「机械产品控制器」· C语言 代码 · 共 120 行

C
120
字号
#include <reg52.h>
#include <stdio.h>
#include <intrins.h>


#define WriteDeviceAddress 0xa0
#define ReadDviceAddress 0xa1

sbit SDA=P2^0;
sbit SCL=P2^1;

void Start()
{
	SDA=1;
	SCL=1;
	SDA=0;
	SCL=0;
}


void Stop()
{
	SCL=0;
	SDA=0;
	SCL=1;
	SDA=1;
}

void Ack()
{
	SDA=0;
	SCL=1;
	SCL=0;
	SDA=1;
}

/***************************************************************************/
void NoAck()
{
	SDA=1;
	SCL=1;
	SCL=0;
}

/***************************************************************************/
bit TestAck()
{
	bit ErrorBit;
	SDA=1;
	SCL=1;
	ErrorBit=SDA;
	SCL=0;
	return(ErrorBit);
}

/***************************************************************************/

void Write8Bit(unsigned char input)
{
	unsigned char temp;
	for(temp=8;temp!=0;temp--) {
	SDA=(bit)(input&0x80);
	SCL=1;
	_nop_();
	SCL=0;
	input=input<<1;
	}
}

/***************************************************************************/
void Write24c02(unsigned char idata *Wdata,unsigned char RomAddress,unsigned char number)
{
	Start();
	Write8Bit(WriteDeviceAddress);
        if(TestAck()) return;
	Write8Bit(RomAddress);
        if(TestAck()) return;
	for(;number!=0;number--) {
		Write8Bit(*Wdata);
	        if(TestAck()) return;
		Wdata++;
		}
	Stop();
}

/***************************************************************************/
unsigned char Read8Bit()
{
	unsigned char temp,rbyte=0;
	for(temp=8;temp!=0;temp--) {
		SCL=1;
		rbyte=rbyte<<1;
        rbyte=rbyte|((unsigned char)(SDA));
		SCL=0;
		}
	return(rbyte);
}

/***************************************************************************/
void Read24c02(unsigned char idata *RamAddress,unsigned char RomAddress,unsigned char bytes)
{
	Start();
	Write8Bit(WriteDeviceAddress);
        if(TestAck()) return;
	Write8Bit(RomAddress);
	if(TestAck()) return;
	Start();
	Write8Bit(ReadDviceAddress);
	if(TestAck()) return;
	while(bytes!=1) {
		*RamAddress=Read8Bit();
		Ack();
		RamAddress++;
		bytes--;
		}
	*RamAddress=Read8Bit();
	NoAck();
	Stop();
}

⌨️ 快捷键说明

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