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

📄 eeprom.c

📁 nokia5110智能电子钟的设计ds1302+ds18b20+stc12c5a60s2
💻 C
字号:
/**************************************************************************************
*		         			子程序:底层程序     									  *			  					  
*						    功能:内部EEPROM  IAP功能,存放闹钟值;					  *
*     						调用子程序;		      								  *
*																					  *
***************************************************************************************/
#include <intrins.h>
# include "stc12c5a60s2.h"
 #define  uchar unsigned char    
 #define  uint  unsigned int 
////以下是ISP/IAP操作时间宏定义选项
 #define  EN_IAP        0x83             //系统时钟 ≤ 12MHz//
/****************【IAP功能使用时调用的3个函数】****************/ 
uchar R_EROM(uchar n,uint x);			  //读第n扇区,第x字节的数据 
void  W_EROM(uchar n,uint x,uchar dat);  //向第n扇区,第x字节写入数据dat 
void  C_EROM(uchar n);					  //擦除第n扇区
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函数:禁止IAP操作,清IAP相关寄存器┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/ 
void Q0()
{      
	IAP_CONTR = 0;          
	IAP_CMD   = 0;                
	IAP_TRIG  = 0;                         
	IAP_ADDRH = 0x80;              
	IAP_ADDRL = 0;              
}
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函数:读一字节入口:第n扇区,第x字节 出口:dat┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
uchar R_EROM(uchar n,uint x)
{      
	uchar dat; 	  
	uint  addr;	  
	addr =(n-1)*0x0200 + x-1;                              
	IAP_CONTR = EN_IAP;        
	IAP_CMD   = 1;       	      //允许读取EEPROM      
	IAP_ADDRL = addr;                      
	IAP_ADDRH = addr >> 8;           
	IAP_TRIG  = 0x5a;                      
	IAP_TRIG  = 0xa5;                        
	_nop_();                                         
	dat = IAP_DATA;                  
	Q0();	                                
	return dat;                        
}
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函数:写一字节入口:第n扇区,第x字节,待写入数据dat┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
void W_EROM(uchar n,uint x,uchar dat)
{	  
	uint  addr;	  
	addr = (n-1)*0x0200 + x-1;       
	IAP_CONTR = EN_IAP;              
	IAP_CMD   = 2;    	      //允许编写EEPROM      
	IAP_ADDRL = addr;                      
	IAP_ADDRH = addr >> 8;                 
	IAP_DATA  = dat;                        
	IAP_TRIG  = 0x5a;                      
	IAP_TRIG  = 0xa5;                        
	_nop_();                                          
	Q0();    
}
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函数:擦除某一扇区	入口:第n扇区		┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
void C_EROM(uchar n)
{      
	uint  addr;	  
	addr = (n-1)*0x0200; 	  
	IAP_CONTR = EN_IAP;       
	IAP_CMD   = 3;    	      //允许擦除EEPROM           
	IAP_ADDRL = addr;                      
	IAP_ADDRH = addr >> 8;              
	IAP_TRIG  = 0x5a;                      
	IAP_TRIG  = 0xa5;                        
	_nop_();                                         
	Q0();
}

⌨️ 快捷键说明

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