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

📄 stc_eep.c

📁 51单片机驱动2相步进电机程序。 keil 开发软件。
💻 C
字号:
#include  "config.h" 
 
/*
STC12C2052AD:
1扇区: 1000H-11FFH	 2扇区: 1200H-13FFH

STC12C5410AD:
1扇区: 2800H-29FFH	 2扇区: 2A00H-2BFFH
3扇区: 2C00H-2DFFH	 4扇区: 2E00H-2FFFH

STC89C51RC:
1扇区: 2000H-21FFH	2扇区: 2200H-23FFH	3扇区: 2400H-25FFH	 4扇区: 2600H-27FFH 
5扇区: 2800H-29FFH	6扇区: 2A00H-2BFFH	7扇区: 2C00H-2DFFH	 8扇区: 2F00H-2FFFH 

STC89C52RC:
1扇区: 2000H-21FFH	2扇区: 2200H-23FFH	3扇区: 2400H-25FFH	 4扇区: 2600H-27FFH 
5扇区: 2800H-29FFH	6扇区: 2A00H-2BFFH	7扇区: 2C00H-2DFFH	 8扇区: 2F00H-2FFFH 
*/
//typedef unsigned char	uint8;
//typedef unsigned int	uint16;
//typedef unsigned long	uint32;

uint16 xdata FLASH_ADDRESS=0x2800;    //STC12C2052 1000 EEPROM 测试起始地址
 
/*******************************************************************************/
//-----------------------延时大约10ms---------------------------------------  
void Delay_ms(uint16  delay)          //带参数延时(delay=10,大约10ms,24MHz,1CLK)
{    
	uint16  i;
     for (; delay>0; delay--)  
        for (i=0;i<10;i++);    
}
/*******************************************************************************/
//------------------------IAP操作--------------------------------------------  
void Do_IAP()                     //IAP操作
{   
	ISP_CONTR=0x82;               //打开 IAP 功能, 设置 Flash 操作等待时间
    ISP_ADDRH=FLASH_ADDRESS/0x100;//起始地址
    ISP_ADDRL=FLASH_ADDRESS%0x100;    
	ISP_TRIG=0x46;                //先送46h,再送B9h 到ISP/IAP 触发寄存器
    ISP_TRIG=0xb9;                //送完B9h 后,ISP/IAP 命令立即被触发起动
	ISP_CONTR=0;                  //关闭 IAP 功能
    ISP_CMD=0;                    //清命令寄存器,使命令寄存器无命令,此句可不用
    ISP_TRIG=0;                   //清命令触发寄存器,使命令触发寄存器无触发,此
} 
/*******************************************************************************/ 
//------------------------- 字节读--------------------------------------------
 
void Byte_Read()
{   
	ISP_CMD=0x1;                  //设置为IAP/ISP/EEPROM 字节读模式命令
    Do_IAP();                     //IAP操作
}
/*******************************************************************************/ 
//-------------------------字节编程-------------------------------------------- 
void Byte_Program()
{   
	ISP_CMD=0x02;                 //设置为IAP/ISP/EEPROM 字节编程模式命令
    //ISP_DATA=DEBUG_DATA;        //待编程的数据先送进ISP_DATA 寄存器
    Do_IAP();                     //IAP操作
}
/*******************************************************************************/ 
//-------------------------擦除扇区 ----------------------------------------- 
void Sector_Erase()
{   ISP_CMD=0x03;                  //设置为IAP/ISP/EEPROM 扇区擦除模式命令
    Do_IAP();                      //IAP操作
}
/*******************************************************************************/
//-------------------------读addx地址起的num哥数值到地址*p-------------------  
void Read_eep_all(uint16 addx,uint8 num,uint8 *p) 
{ 
	uint8 xdata i=0; 
	FLASH_ADDRESS=addx; 
	  for(i=0;i<num;i++)
	    {
	      
	      Byte_Read();
	      *p=ISP_DATA;
	      Delay_ms(1);
	      FLASH_ADDRESS=FLASH_ADDRESS+1;
	      p++; 
		}  
}
/*******************************************************************************/
//--------------------------读一个地址的数值------------------------------------ 
uint8 Read_eep_Byte(uint16 X)
{ 
	uint8 DD;  
	FLASH_ADDRESS = X; 
	Byte_Read();
	DD = ISP_DATA;
	Delay_ms(1); 
 	return (DD);
}
/********************************************************************************/
void write_eep_all(uint16 addx,uint8 num,uint8 *p)  
{
  	uint8 xdata i=0; 
	FLASH_ADDRESS=addx;     //存入EEPROM
  	Sector_Erase();
  	Delay_ms(10);
  	for(i=0;i<num;i++)
	   {
	  		ISP_DATA=*p;
	     	Byte_Program();
	     	Delay_ms(1);
	     	FLASH_ADDRESS=FLASH_ADDRESS+1;      
	    	p++; 
	  	}
} 
/*******************************************************************************/
void write_eep_Byte(uint16 X,uint8 p) 
{
  	uint8 xdata i=0; 
	FLASH_ADDRESS=X;     //存入EEPROM
  	Sector_Erase();
  	Delay_ms(10);
	 
	ISP_DATA=p;
	Byte_Program();
	Delay_ms(1);  
}



⌨️ 快捷键说明

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