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

📄 main.c

📁 基于EEPROM AT24C64的数据存储
💻 C
字号:
#include <stdio.h>
#include <absacc.h>
#include <intrins.h>
#include <./Atmel/at89x52.h>
#include "source.h"
struct MY_TIMER TT[TIMER_NUM];
struct volt_detect volt_group;
TMDEV_OPS   Opsgp;
void time2()    interrupt T2_INT 
{
	unsigned char i;
	for(i=0;i<TIMER_NUM;i++)
	{
		if(TT[i].enable==1)
		{
			if(TT[i].count==0)
			{
			  	TT[i].enable=0;	
				TT[i].flag=1;
			}
			else{
				TT[i].count--;
			}
		}
	}
	TF2=0;
}
void start_timer(void)
{
    T2CON=0X00;
	RCAP2L=TIMER2L; //10ms
	TL2=TIMER2L;
	RCAP2H=TIMER2H;
	TH2=TIMER2H;
 	ET2=1;//enable timer2 interrupt
	TR2=1;//start timer
}
void reset_timer(unsigned char i)
{
	TT[i].enable=0;
	TT[i].count=0;
}
void set_timer(unsigned char i,unsigned int count) // time out counter*10ms 
{
	TT[i].count=count;
	TT[i].enable=1;
	TT[i].flag=0;
}

main()
{
	unsigned char fsm_adc=0;
	unsigned int  V_ADJ=0,i;
	EEPROM_DATA Eprom;
	IE=0X40;
	start_timer();/*开始定时器*/
	EA=1;       /* Enable interrupts */
	TMOD=0x22;//timer1 mode 2 timer0 mode 2 (8 bit auto reload mode)     

	set_timer(WRITE_TIMER,WRITE_TIMER_LEN);
	set_timer(READ_TIMER,READ_TIMER_LEN);

	eeprom_read(OffsetOf(EEPROM_DATA,vol),  sizeof(Eprom.vol),(unsigned char *)&Eprom.vol);
		/*采用OffsetOf()宏可以知道成员函数在EEPROM中的具体地址位置,这样可以不用记住EEPROM中某个*/
		/*存储变量的具体位置,以后添加存储变量更加灵活*/
	eeprom_write(OffsetOf(EEPROM_DATA,cnt), sizeof(Eprom.cnt),(unsigned char *)&Eprom.cnt);
	I2C_lineOpen(&I2c,100);//初10k
	for(i=0;i<1204;i++){
		Eprom.buf[i]=i&0xff;
	}
	while(1){
		if(TT[WRITE_TIMER]){
			set_timer(WRITE_TIMER,WRITE_TIMER_LEN);
			if(!Opsgp.dealing)
				At24c64_Write((unsigned char *)Eprom.buf,OffsetOf(EEPROM_DATA,buf),512);			
		}
		if(TT[READ_TIMER]){
			set_timer(READ_TIMER,READ_TIMER_LEN);
			if(!Opsgp.dealing)	
				At24c64_Read((unsigned char *)Eprom.buf,OffsetOf(EEPROM_DATA,vol),512);	
		}
	 	if(Opsgp.eeprom_read_over){
			if(Opsgp.eeprom_read_over==1){
				//Eeprom read ok.
			}
			else{ 
				//Eeprom read error .
			}
			Opsgp.eeprom_read_over=0;
		}
		if(Opsgp.eeprom_write_over){
			if(Opsgp.eeprom_write_over){
				// Eprom Write Ok
			}
			else{
				// Eprom Write Err
			}			
			Opsgp.eeprom_write_over=0;
		}
	}
}

⌨️ 快捷键说明

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