www.pudn.com > 24C02-external-I2C-bus-EEPROM-.rar > main.c, change:2013-08-06,size:3589b


/************************************************ 
 * 文件描述     : AT24C02外部EEPROM测试程序 
 * 程序文件     : main.c                  
 * 版    本     : 2.0 
 * 作    者     : 火龙电子工作室 
 * 日    期     : 2013.06.01 
 * 芯    片     : STC12LE5A60S2 
 * 时    钟		:11.0592MHz 
 * 开发环境		:Keil uVision V4.00a 
 * 备    注		:  
 				  程序下载后可以看到数码管显示“CorrEct"表示测试正确 
				  如果显示”Error“表示数据错误 
 ************************************************/ 
 //文件包含 
 #include "stc12le5a60s2.h" 
 #include "24c02.h" 
 #include "hc595.h" 
 
 //测试数据,8个字节 24c02页大小8字节。 
 unsigned char code TestData[8] = 
 { 
    0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77 
 }; 
 
 //数据缓存区  PAGE_SIZE:为页大小 
 unsigned char DataBuf[PAGE_SIZE];        
 	  
 //函数声明 
 void Delay_ms(unsigned int ms); 
 void AT24C02_WritePage(unsigned char * pbuf); 
 void AT24C02_ReadPage(unsigned char *pBuf); 
 
 //主方法 
 void main(void) 
 { 
 	unsigned char cnt; 
	HC595_Init();				   //HC595初始化 
	Delay_ms(500);				   //等待上电稳定 
	AT24C02_WritePage(TestData);   //写入一页数据 
	Delay_ms(500);				   //延时 
	AT24C02_ReadPage(DataBuf);	   //读取该页数据 
 
	//输出允许,开始显示 
	HC595_OE_Clr(); 
 
	for(cnt=0;cnt<PAGE_SIZE;cnt++) //验证数据是否相同 
	{ 
		//如果读出的数据和写入的数据部一样 
		if(TestData[cnt]!=DataBuf[cnt]) 
		{ 
			ToDisplayError();	   //显示错误信息 
			while(1) 
			{			 
				LED_Display(); 
			} 
		}	 
	} 
	ToDisplayCorrect();			   //显示正确信息 
 	while(1) 
	{			 
		LED_Display(); 
	} 
 } 
 /*********************************************** 
函数名称:AT24C02_WritePage 
功    能:AT24C02页写函数 
入口参数:pbuf:指向数据指针 
返 回 值:无	 
备    注:无 
************************************************/ 
void AT24C02_WritePage(unsigned char * pbuf) 
{ 
    unsigned char i; 
 
    AT24C02_Start();            			//起始信号 
    AT24C02_SendByte(AT24C02_ADD_WR);     	//发送设备地址+写信号 
    AT24C02_SendByte(TEST_ADD);     		//发送存储单元地址 
    for (i=0; i<PAGE_SIZE; i++)				//写入一页的数据 
    { 
        AT24C02_SendByte(pbuf[i]); 
    } 
    AT24C02_Stop();             			//停止信号 
} 
 /*********************************************** 
函数名称:AT24C02_ReadPage 
功    能:AT24C02页读函数 
入口参数:pbuf:指向返回数据指针 
返 回 值:无	 
备    注:无 
************************************************/ 
void AT24C02_ReadPage(unsigned char *pBuf) 
{ 
    unsigned char i; 
 
    AT24C02_Start();            			//起始信号 
    AT24C02_SendByte(AT24C02_ADD_WR);     	//发送设备地址+写信号 
    AT24C02_SendByte(TEST_ADD);     		//发送存储单元地址 
    AT24C02_Start();            			//起始信号 
    AT24C02_SendByte(AT24C02_ADD_RD);     	//发送设备地址+读信号 
    for (i=0; i<PAGE_SIZE; i++)				//读出一页数据 
    { 
        pBuf[i] = AT24C02_RecvByte();		//读出一个字节数据 
        if (i == (PAGE_SIZE-1))				//I2C协议接收最后一个数据不进行应答 
        {									//详细参考I2C协议规定 
            AT24C02_SendACK(NOACK); 		//最后一个数据不需要应答 
        } 
        else 
        { 
            AT24C02_SendACK(ACK); 			//应答 
        } 
    } 
    AT24C02_Stop();             			//停止信号 
} 
/*********************************************** 
函数名称:Delay_ms 
功    能:STC 1T单片机1ms延时程序 
入口参数:ms:延时的毫秒数 
返 回 值:无	 
备    注:示波器实测1.05ms 外部时钟11.0592MHz 
************************************************/ 
void Delay_ms(unsigned int ms) 
{ 
  	unsigned int De_Cnt; 
  	while( (ms--) != 0) 
   	{ 
    	for(De_Cnt = 0; De_Cnt < 600; De_Cnt++);  
   	}              
}