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

📄 eeprom.c

📁 cygnal上的数据采集的程序(带实时时钟)
💻 C
字号:
#include<intrins.h>
#include "EEPROM.h"
#include "C8051f.h"

extern unsigned char EEPROMTime;

sbit EEPROM_SDA = P2^2;
sbit EEPROM_SCL = P2^3;

sbit a0 = ACC^0;                 
sbit a1 = ACC^1;
sbit a2 = ACC^2;
sbit a3 = ACC^3;
sbit a4 = ACC^4;
sbit a5 = ACC^5;
sbit a6 = ACC^6;
sbit a7 = ACC^7;

void s24(void)                 //起始函数
{
	EEPROM_SCL = 0;
	EEPROM_SDA = 0;
	_nop_();
    EEPROM_SCL = 1; 
    EEPROM_SDA = 1;
    _nop_();
    EEPROM_SDA = 0;
    _nop_();
    EEPROM_SCL = 0;
}

void p24(void)                 //停止函数
{
	EEPROM_SCL = 0;
	EEPROM_SDA = 0;
	_nop_();
    EEPROM_SCL = 1;
    _nop_();
    EEPROM_SDA = 1;
	_nop_();
	EEPROM_SCL = 0;
	EEPROM_SDA = 0;
}

unsigned char rd24(void) 		//从24c16读一字节数据
{       
	ACC = 0x00;
	EEPROM_SDA = 0;
	EEPROM_SCL = 0;
	EEPROM_SCL = 1; a7 = EEPROM_SDA; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
	EEPROM_SCL = 1; a6 = EEPROM_SDA; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
	EEPROM_SCL = 1; a5 = EEPROM_SDA; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
	EEPROM_SCL = 1; a4 = EEPROM_SDA; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
	EEPROM_SCL = 1; a3 = EEPROM_SDA; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
	EEPROM_SCL = 1; a2 = EEPROM_SDA; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
	EEPROM_SCL = 1; a1 = EEPROM_SDA; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
	EEPROM_SCL = 1; a0 = EEPROM_SDA; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
	EEPROM_SDA = 0;
	EEPROM_SCL = 1; _nop_();_nop_();_nop_();_nop_();
	EEPROM_SCL = 0; //24c16的一位回答位。
	return(ACC);
}

void wd24(unsigned char dd) 			//向24c16写一字节数据
{      
	ACC = dd;
	EEPROM_SDA = a7; EEPROM_SCL = 1; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
	EEPROM_SDA = a6; EEPROM_SCL = 1; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
	EEPROM_SDA = a5; EEPROM_SCL = 1; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
	EEPROM_SDA = a4; EEPROM_SCL = 1; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
	EEPROM_SDA = a3; EEPROM_SCL = 1; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
	EEPROM_SDA = a2; EEPROM_SCL = 1; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
	EEPROM_SDA = a1; EEPROM_SCL = 1; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
	EEPROM_SDA = a0; EEPROM_SCL = 1; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
	EEPROM_SCL = 1;
	EEPROM_SCL = 0;
}
/*
unsigned char EEPROM_Read(unsigned int address)
{
	unsigned char dd;

    s24();                        		
    wd24(0xa0);                				
	_nop_();_nop_();_nop_();_nop_(); 
	EEPROM_SCL = 0;                       		
    wd24(address);                			
    _nop_();_nop_();_nop_();_nop_();
    EEPROM_SCL = 0;
	s24();                             		
    wd24(0xa1);                			
    EEPROM_SCL = 0;
    dd = rd24();              				
    p24();                   		
    return(dd);
}

void EEPROM_Write(unsigned int address,unsigned char dd)
{
	s24();                  
    wd24(0xa0);            
    EEPROM_SCL = 0; 
    wd24(address);           
    EEPROM_SCL = 0;
    wd24(dd);               
    EEPROM_SCL = 0;
    p24();
}
*/

unsigned char EEPROM_Read(unsigned int address)
{
	unsigned char dd;

	dd = ((address&0x7ff)/256) << 1;
	s24();
	wd24(0xa0|dd);
	EEPROM_SCL = 0;
	wd24(address);
	EEPROM_SCL = 0;
	s24();
	wd24(0xa1|dd);
	EEPROM_SCL = 0;
	dd = rd24();
	p24();
	return(dd);
}

void EEPROM_Write(unsigned int address,unsigned char dd)
{
	unsigned char ddd;
	ddd = ((address & 0x7ff)/256) << 1;
	s24();
	wd24(0xa0|ddd);
	EEPROM_SCL = 0;
	wd24(address);
	EEPROM_SCL = 0;
	wd24(dd);
	EEPROM_SCL = 0;
	p24();
	EEPROMTime = 0;     //time为定时器时间参考,time增加1代表1ms,如果没有用定时器,取消该行
	while (1) 
	{
		s24();
		wd24(0xa0|ddd);
		EEPROM_SDA = 1;
		if (EEPROM_SDA == 0) break;
		if (EEPROMTime > 10) break; //此行防止由于eeprom器件损坏后的死循环
		EEPROM_SCL = 0;
	}
}




⌨️ 快捷键说明

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