STC4052eeprom.rar

  • PUDN用户
    了解作者
  • Visual C++
    开发工具
  • 2KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 3
    下载次数
  • 2009-09-03 08:23
    上传日期
STC4052eeprom读写程序。提供了底层驱动和调用API函数及其说明。
STC4052eeprom.rar
  • STC4052eeprom
  • eeprom.h
    2.2KB
  • eeprom.c
    7.3KB
内容介绍
/****************************************Copyright (c)************************************************** ** HANGZHOU ZHONHEN ELECTRIC CO.,LTD ** ** http://www.hzzh.com/ ** **--------------File Info------------------------------------------------------------------------------- ** File Name: eeprom.c ** Last modified Date: 2009-07-21 ** Last Version: 1.0 ** Descriptions: User Configurable File ** **------------------------------------------------------------------------------------------------------ ** Created By: Maolianghua ** Created date: 2009-07-21 ** Version: 1.0 ** Descriptions: First version ** **------------------------------------------------------------------------------------------------------ ** Modified by: ** Modified date: ** Version: ** Descriptions: ** ********************************************************************************************************/ #include "eeprom.h" #include "intrins.h" //定义Flash 操作等待时间及允许IAP/ISP/EEPROM 操作的常数 //#define ENABLE_ISP 0x80 //系统工作时钟<30MHz 时,对IAP_CONTR 寄存器设置此值 //#define ENABLE_ISP 0x81 //系统工作时钟<24MHz 时,对IAP_CONTR 寄存器设置此值 //#define ENABLE_ISP 0x82 //系统工作时钟<20MHz 时,对IAP_CONTR 寄存器设置此值 #define ENABLE_ISP 0x83 //系统工作时钟<12MHz 时,对IAP_CONTR 寄存器设置此值 //#define ENABLE_ISP 0x84 //系统工作时钟<6MHz 时,对IAP_CONTR 寄存器设置此值 //#define ENABLE_ISP 0x85 //系统工作时钟<3MHz 时,对IAP_CONTR 寄存器设置此值 //#define ENABLE_ISP 0x86 //系统工作时钟<2MHz 时,对IAP_CONTR 寄存器设置此值 //#define ENABLE_ISP 0x87 //系统工作时钟<1MHz 时,对IAP_CONTR 寄存器设置此值 #define Read_Byte_CMD 0x01 // 读取单字节命令 #define Write_Byte_CMD 0x02 // 写单字节命令 #define Sector_Erase_CMD 0x03 // 扇区擦除命令 //*****************************函数声明******************************* void IAP_Disable(); uint8 Byte_Read(uint16 addr); void Byte_Program(uint16 addr, uint8 Data); void Sector_Erase(uint16 addr); //********************************************************************* union union_temp16 { uint16 un_temp16; uint8 un_temp8[2]; }my_unTemp16; /**************************************************************************** * 名 称:uint8 Byte_Read(uint16 addr) * 功 能:字节读数据。 * 入口参数:addr -> 要读数据的地址 * 出口参数:返回读到的数据 ****************************************************************************/ uint8 Byte_Read(uint16 addr) { IAP_DATA = 0x00; IAP_CMD = Read_Byte_CMD; // IAP/ISP/EEPROM 字节读命令 my_unTemp16.un_temp16 = addr; IAP_ADDRH = my_unTemp16.un_temp8[0]; // 设置目标单元地址的高8 位地址 IAP_ADDRL = my_unTemp16.un_temp8[1]; // 设置目标单元地址的低8 位地址 EA = 0; IAP_TRIG = 0x46; // 先送 5Ah,再送A5h 到ISP/IAP 触发寄存器,每次都需如此 IAP_TRIG = 0xB9; // 送完A5h 后,ISP/IAP 命令立即被触发起动 EA = 1; return (IAP_DATA); } /**************************************************************************** * 名 称:void Byte_Program(uint16 addr, uint8 Data) * 功 能:字节编程,调用前需打开IAP 功能。 * 入口参数:addr -> 要写数据的地址, Data-> 要写的数据 * 出口参数:无 ****************************************************************************/ void Byte_Program(uint16 addr, uint8 Data) { IAP_CMD = Write_Byte_CMD; // IAP/ISP/EEPROM 字节编程命令 my_unTemp16.un_temp16 = addr; IAP_ADDRH = my_unTemp16.un_temp8[0]; // 设置目标单元地址的高8 位地址 IAP_ADDRL = my_unTemp16.un_temp8[1]; // 设置目标单元地址的低8 位地址 IAP_DATA = Data; // 要编程的数据先送进IAP_DATA 寄存器 EA = 0; IAP_TRIG = 0x46; // 先送 5Ah,再送A5h 到ISP/IAP 触发寄存器,每次都需如此 IAP_TRIG = 0xB9; // 送完A5h 后,ISP/IAP 命令立即被触发起动 EA = 1; } /**************************************************************************** * 名 称:void Sector_Erase(uint16 addr) * 功 能:擦除扇区,调用前需打开IAP 功能。 * 入口参数:addr -> 要写数据的地址, Data-> 要写的数据 * 出口参数:无 ****************************************************************************/ void Sector_Erase(uint16 addr) { IAP_CMD = Sector_Erase_CMD; // IAP/ISP/EEPROM 扇区擦除命令 my_unTemp16.un_temp16 = addr; IAP_ADDRH = my_unTemp16.un_temp8[0]; // 设置目标单元地址的高8 位地址 IAP_ADDRL = my_unTemp16.un_temp8[1]; // 设置目标单元地址的低8 位地址 EA = 0; IAP_TRIG = 0x46; // 先送 5Ah,再送A5h 到ISP/IAP 触发寄存器,每次都需如此 IAP_TRIG = 0xB9; // 送完A5h 后,ISP/IAP 命令立即被触发起动 EA = 1; } /**************************************************************************** * 名 称:void IAP_Disable() * 功 能:关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态。 * 入口参数:无 * 出口参数:无 * 说 明:一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关 ****************************************************************************/ void IAP_Disable() { IAP_CONTR = 0; // 关闭IAP 功能 IAP_CMD = 0; // 清命令寄存器,使命令寄存器无命令,此句可不用 IAP_TRIG = 0; // 清命令触发寄存器,使命令触发寄存器无触发,此句可不用 IAP_ADDRH = 0; IAP_ADDRL = 0; } /**************************************************************************** * 名 称:void Read_Data_From_Eeprom(uint16 addr,uint8 *Data_p,uint8 Length) * 功 能:读取数据。 * 入口参数:addr->读取数据首地址 Data_p ->读取数据存放首地址 Length->读取数据长度 * 出口参数:无 ****************************************************************************/ void Read_Data_From_Eeprom(uint16 addr,uint8 *Data_p,uint8 Length) { uint8 i; if(Length==0) return; // 非法操作 IAP_CONTR = ENABLE_ISP; // 打开IAP 功能, 设置Flash 操作等待时间 for(i=0;i<Length;i++) { *Data_p++ =Byte_Read(addr++); // 字节读数据 } IAP_Disable(); // 关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态, // 一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关 } /**************************************************************************** * 名 称:void Write_Data_To_Eeprom(uint16 addr,uint8 *Data_p,uint8 Length) * 功 能:写数据。 * 入口参数:addr->写数据首地址 Data_p ->写数据存放的地址 Length->写数据长度 * 出口参数:无 ****************************************************************************/ void Write_Data_To_Eeprom(uint16 addr,uint8 *Data_p,uint8 Length) { uint8 i; if(Length==0) return; // 非法操作 IAP_CONTR = ENABLE_ISP; // 打开IAP 功能, 设置Flash 操作等待时间 Sector_Erase(DATA_FLASH_START_ADDRESS); // 擦除整个扇区 for(i=0;i<Length;i++) { Byte_Program(addr++,*Data_p++); // 字节写数据 } IAP_Disable(); // 关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态, // 一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关 } /********************************************************************************************************* ** End Of File ********************************************************************************************************/
评论
    相关推荐
    • 数据库课程设计
      一个数据库课程设计,access管理工具实现,用的是窗体!
    • 数据库课程设计
      数据库课程设计十分完整有需要的请下载啊谢谢
    • 数据库课程设计
      广东工业大学数据库课程设计,可视化界面连接数据库,delphi7
    • 数据库课程设计
      数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述 数据库课程设计实验及其描述
    • 数据库课程设计
      数据库课程设计》由周爱武、汪海威、肖云编著,遵循数据库课程设计的具体要求,独立于具体的数据库教材,从实际应用系统的需求着手,引导读者逐步完成数据库设计全过程,重点讲解数据库系统的需求分析、概念设计、...
    • 数据库课程设计
      数据库课程设计人事管理系统 数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计人事管理系统数据库课程设计...
    • 数据库课程设计
      数据库课程设计,基于visual basic自助银行管理系统,界面很清爽,实用。同学都说好,所以就上传了!!!
    • 数据库课程设计
      数据库课程设计 里面有详细的文档资料 包含数据库一切的图 以及生成的数据库表文件 期末得分为优秀
    • 数据库课程设计
      可以作为数据库课程设计,也可以作为Java的课程设计,内容全面。本资源转载的,非本人原创。用于交流学习,特此申明!
    • 数据库课程设计
      数据库课程设计蓝天大学学生管理系统 2.商店信息管理系统 3.实验室机房收费管理系统 4.图书馆资料检索系统 5.企业库存管理系统 6.仓库管理系统 7.工程项目管理系统 8.教材管理系统 9.企业人事管理系统 10.企业财务...