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

📄 eeprom.c

📁 主要介绍了24c16的读写,mcu为89s52,lcd为TC2002A,完成功能是把数据写入24c16中,再把数据从24c16读出,并显示在lcd中.编辑环境为keil2,已通过测试.
💻 C
字号:
#include<reg52.h>
#include<intrins.h>
#include"main.h"
#include"port.h"
#include"delay.h"
#include "eeprom.h"
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};

//#include"eeprom.h"
#define NUM 10
uChar idata sendbuf[NUM];
uChar idata receivebuf[NUM];
//bit bdata SystemError;
bit SystemError;
void iic_start(void)
{
	EA=0;
	SDA=1;
	SCL=1;
	delayNOP();
	SDA=0;
	delayNOP();
	SCL=0;
}
void iic_stop(void)
{
	SDA=0;
	SCL=1;
	delayNOP();
	SDA=1;
	delayNOP();
	SCL=0;
}

void slave_ACK(void)
{
	SDA=0;
	SCL=1;
	delayNOP();
	SDA=1;
	SCL=0;
}

void slave_NOACK(void)
{
	SDA=1;
	SCL=1;
	delayNOP();
	SDA=0;
	SCL=0;
}

void check_ACK(void)
{
	SDA=1;
	SCL=1;
	F0=0;
	if(SDA==1)
		F0=1;
	SCL=0;
}

void IICSendByte(uChar ch)
{
	uChar idata n=8;
	while(n--)
	{
		if((ch&0x80)==0x80)
			{
				SDA=1;
				SCL=1;
				delayNOP();
				SDA=0;
				SCL=0;
			 }
		else
			{
				SDA=0;
				SCL=1;
				delayNOP();
				SCL=0;
			 }
			 ch=ch<<1;
	 }
}
uChar IICreceiveByte(void)
{
	uChar idata n=8;
	uChar tdata;
	while(n--)
	{
		SDA=1;
		SCL=1;
		tdata=tdata<<1;
		if(SDA==1)
			tdata=tdata|0x01;
		else
			tdata=tdata&0xfe;
		 SCL=0;
	 }
	 return(tdata);
}

void writeNByte(uChar slave_add,uChar n)
{
	uChar idata send_da,i=0;
	iic_start();
	IICSendByte(slave_add);
	check_ACK();
	if(F0==1)
	{
		SystemError=1;
		return;
	}
	while(n--)
	{
		send_da=sendbuf[i++];
		IICSendByte(send_da);
		check_ACK();
		if(F0==1)
			{
			SystemError=1;
			return;
			}
	}
	iic_stop();
}

void receiveNByte(uChar idata slave_add,uChar n)
{
	uChar idata receive_da,i=0;
	iic_start();
	IICSendByte(slave_add);
	check_ACK();
	if(F0==1)
	{
		SystemError=1;
		return;
	}
	while(n--)
	{
		receive_da=IICreceiveByte();
		receivebuf[i++]=receive_da;
		slave_ACK();
	}
	slave_NOACK();
	iic_stop();
}
/*
void writeByte2dev(unsigned char address_H,unsigned char address_L,unsigned char wr_data)
{
	iic_start();
	IICSendByte(0x00);//设备地址
	check_ACK();//检查应答位,
	if(F0==1)
	{
		SystemError=1;//若非应答表明器件错误或已坏,置错误标志位SystemError
		return;
	 }
	 IICSendByte(0x01);
	 check_ACK();
	 if(F0==1)
	 {
	 SystemError=1;
		return;
	 }
	 IICSendByte(0x0a);//片内低8bit地址
	  check_ACK();//检查应答位,
	  if(F0==1)
	 {
	 SystemError=1;
		return;
	 }
	 IICSendByte(0xff);
	  check_ACK();
	  if(F0==1)
	 {
	 SystemError=1;
		return;
	 }
	 iic_stop();//全部发完则停止,

}
*/

⌨️ 快捷键说明

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