chengxu.c

来自「15入15出继电器控制板」· C语言 代码 · 共 110 行

C
110
字号
/********************************************************************
                            汇诚科技

实现功能:EEPROM应用程序
使用芯片:STC15F104E
晶振:12MHZ
编译环境:Keil
作者:zhangxinchunleo
网站:www.ourhc.cn
淘宝店:汇诚科技 http://shop36330473.taobao.com
【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!     

*********************************************************************/
/********************************************************************/
#include "Hfile\\STC12C5A60S2.h"
#include <intrins.H>
#define uchar unsigned char //宏定义字符型变量
#define uint  unsigned int	//宏定义整型变量
/********************************************************************
                            命令定义
*********************************************************************/
#define CMD_IDLE     0	 //EEPROM无操作
#define CMD_READ     1	 //读取字节
#define CMD_PROGRAM  2	 //写入字节
#define CMD_ERASE    3	 //擦除字节
/********************************************************************
                       编程周期由晶振决定
*********************************************************************/
//#define ENABLE_IAP 0X80	 //编程周期由晶振决定(如果<30MHZ选用此项)
//#define ENABLE_IAP 0X81	 //编程周期由晶振决定(如果<24MHZ选用此项)
//#define ENABLE_IAP 0X82	 //编程周期由晶振决定(如果<20MHZ选用此项)
  #define ENABLE_IAP 0X83	 //编程周期由晶振决定(如果<12MHZ选用此项)
//#define ENABLE_IAP 0X84	 //编程周期由晶振决定(如果<6MHZ选用此项)
//#define ENABLE_IAP 0X85	 //编程周期由晶振决定(如果<3MHZ选用此项)
//#define ENABLE_IAP 0X86	 //编程周期由晶振决定(如果<2MHZ选用此项)
//#define ENABLE_IAP 0X87	 //编程周期由晶振决定(如果<1MHZ选用此项)

#define IAP_ADDRESS 0X0000	 //内部EEPROM地址

/********************************************************************
                            操作函数
*********************************************************************/
void IapIdle()
{
IAP_CONTR=0;
IAP_CMD=0;
IAP_TRIG=0;
IAP_ADDRH=0X80;
IAP_ADDRL=0;
}

/********************************************************************
                            读取一个字节函数
*********************************************************************/
uchar IapReadByte(uint addr)
{
uchar dat;  
IAP_CONTR=ENABLE_IAP;
IAP_CMD=CMD_READ;
IAP_ADDRL=addr;
IAP_ADDRH=addr>>8;
IAP_TRIG=0X5A;
IAP_TRIG=0XA5;
_nop_();
_nop_();
_nop_();
dat=IAP_DATA;
IapIdle();
return dat;
}

/********************************************************************
                            写入一个字节函数
*********************************************************************/
void IapProgramByte(uint addr,uchar dat)
{

IAP_CONTR=ENABLE_IAP;
IAP_CMD=CMD_PROGRAM;
IAP_ADDRL=addr;
IAP_ADDRH=addr>>8;
IAP_DATA=dat;
IAP_TRIG=0X5A;
IAP_TRIG=0XA5;
_nop_();
_nop_();
_nop_();
IapIdle();
}
/********************************************************************
                            擦除一个扇区函数
*********************************************************************/
void IapEraseSector(uint addr)
{
IAP_CONTR=ENABLE_IAP;
IAP_CMD=CMD_ERASE;
IAP_ADDRL=addr;
IAP_ADDRH=addr>>8;
IAP_TRIG=0X5A;
IAP_TRIG=0XA5;
_nop_();
_nop_();
_nop_();
IapIdle();
}
 
/********************************************************************
                            结束
*********************************************************************/

⌨️ 快捷键说明

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