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

📄 eep.c

📁 基于Keil uVision2平台的C51控制温度老化试验箱的源代码。 1、温度传感器采集温度 2、传感器信号传入 ADC电路 3、经AT89C52单片机的处理分析输出控制 4、通过继电器控制
💻 C
字号:

/*-------------------------------------------------------------------------*/
#include <absacc.h>
#include <reg52.h>
#include <eep.h>
#include <intrins.h>
#include <lcd.h>
/*-------------------------------------------------------------------------*/
//#define s_delay(); {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}
/*-------------------------------------------------------------------------*/
bit start_bit(void);
void stop_bit(void);
//void ack(void);
void no_ack(void);
bit write_byte(unsigned char);
unsigned char read_byte(void);
/*----------------------------------------------------------------*/
bit start_bit(void)
{
	bit jump=1;
	sda=1;
	scl=1;
	if((sda & scl)==0) //error
		jump=1;
	else
		jump=0;
	s_delay();
	sda=0;
	s_delay();
	scl=0;
	return jump;
}
/*----------------------------------------------------------------*/
void stop_bit(void)
{
	sda=0;
	s_delay();
	scl=1;
	s_delay();
	sda=1;
}
/*----------------------------------------------------------------
void ack(void)
{
	sda=0;
	s_delay();
	scl=1;
	s_delay();
	scl=0;
} */
/*----------------------------------------------------------------*/
void no_ack(void)
{
	sda=1;
	s_delay();
	scl=1;
	s_delay();
	scl=0;
}
/*----------------------------------------------------------------*/
bit write_byte(unsigned char number)
{
	unsigned char i;
	bit temp;
	for(i=0;i<8;i++)
	{
		sda=number&0x80;
		s_delay();
		scl=1;
		s_delay();
		scl=0;
		s_delay();
		number=number<<1;
	}
	sda=1;
	s_delay();
	scl=1;
	s_delay();
	i=0;
	if(sda && (i<10))
		{
		_delay500us(1);
		i++;
		}
	temp=sda;
	scl=0;
	return temp;
}
/*----------------------------------------------------------------*/
unsigned char read_byte(void)
{
	unsigned char i,number;
	number=0;
	sda=1;
	for(i=0;i<8;i++)
	{
		s_delay();
		number=number<<1;
		scl=1;
		s_delay();
		if(sda)
			number+=1;
		scl=0;
	}
	return(number);
}
/*----------------------------------------------------------------*/
void _write_eep_byte(unsigned int address,unsigned char number)
{
	if(start_bit()==0)
		if(write_byte(0xa0|((((unsigned char *) &address)[0])<<1))==0)
			if(write_byte(((unsigned char *) &address)[1])==0)
				if(write_byte(number)==0)
	stop_bit();
	_delay500us(200);
}
/*----------------------------------------------------------------*/
unsigned char _read_eep_byte(unsigned int address)
{
	unsigned char number;
	if(start_bit()==0)
		{
		if(write_byte(0xa0|((((unsigned char *) &address)[0])<<1))==0)
			if(write_byte(((unsigned char *) &address)[1])==0)
				if(start_bit()==0)
					{
					if(write_byte(0xa1|((((unsigned char *) &address)[0])<<1))==0)
						{
						number=read_byte();
						no_ack();
						}
					}
		}
	stop_bit();
	return(number);
}
/*----------------------------------------------------------------
void _write_eep_word(unsigned int address,unsigned int number)
{
	_write_eep_byte(address,((unsigned char *)&number)[0]);
	address++;
	_write_eep_byte(address,((unsigned char *)&number)[1]); 
}
/*----------------------------------------------------------------
unsigned int _read_eep_word(unsigned int address)
{
	unsigned int number;
	((unsigned char *)&number)[0]=_read_eep_byte(address);
	address++;
	((unsigned char *)&number)[1]=_read_eep_byte(address);
	return number; 
}
/*----------------------------------------------------------------*/

⌨️ 快捷键说明

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