STC89C52单片机内部EEPROM驱动
来源:互联网 发布:我心伤悲 莫知我哀对句 编辑:程序博客网 时间:2024/04/18 20:26
STC89C52单片机内部带有4K的EEPROM,严格来说,应该是4K的FLASH,它分为8个扇区,每个扇区有512个字节。读写数据只能按字节操作,擦除数据只能按扇区操作。 由于它掉电不易失的特性,可以用来存储程序运行过程中产生的用户数据,掉电可保存。
/*************************************************************************************Fuction:STC89C52单片机内部4K的EEPROM操作驱动Software Designer:Jason*************************************************************************************/#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int/******************定义命令字节******************/ #define Read_COM 0x01 //字节读数据命令 #define Prog_COM 0x02 //字节编程数据命令 #define Erase_COM 0x03 //扇区擦除数据命令 #define En_Wait_TIME 0x81 //设置等待时间 ,并使能ISP/IAP #define Start_ADDRH 0x20 //扇区地址高位 #define Start_ADDRL 0x00 //扇区地址低位/****************特殊功能寄存器声明****************/sfr ISP_DATA = 0xe2; sfr ISP_ADDRH = 0xe3; sfr ISP_ADDRL = 0xe4; sfr ISP_CMD = 0xe5; sfr ISP_TRIG = 0xe6; sfr ISP_CONTR = 0xe7;/*****************关闭ISP&IAP功能*****************/ void ISP_IAP_disable(void) { ISP_CONTR = 0x00; ISP_CMD = 0x00; ISP_TRIG = 0x00; } /*********************字节读**********************/ uchar Byte_read(uint byte_addr) { EA = 0; //关中断 ISP_CONTR = En_Wait_TIME; //开启ISP&IAP,并送等待时间 ISP_CMD = Read_COM; //送字节读命令字 ISP_ADDRH = (uchar)(byte_addr >> 8); //送地址高字节 ISP_ADDRL = (uchar)(byte_addr & 0x00ff); //送地址低字节 ISP_TRIG = 0x46; //送触发命令字0x46 ISP_TRIG = 0xB9;//送触发命令字0xB9 _nop_(); ISP_IAP_disable(); //关闭ISP&IAP功能 EA = 1; //开中断 return (ISP_DATA); } /*********************字节编程*********************/ void Byte_program(uint byte_addr,uchar isp_iap_data) { EA = 0; //关中断 ISP_CONTR = En_Wait_TIME; //开启ISP&IAP,并送等待时间 ISP_CMD = Prog_COM; //送字节编程命令字 ISP_ADDRH = (uchar)(byte_addr >> 8); //送地址高字节 ISP_ADDRL = (uchar)(byte_addr & 0x00ff); //送地址低字节 ISP_DATA = isp_iap_data; //送数据进ISP_DATA ISP_TRIG = 0x46; //送触发命令字0x46 ISP_TRIG = 0xB9;//送触发命令字0xB9 _nop_(); ISP_IAP_disable(); //关闭ISP&IAP功能 EA = 1; //开中断 } /*********************扇区擦除*********************/ void Sector_erase(uint sector_addr) { EA = 0; //关中断 ISP_CONTR = En_Wait_TIME; //开启ISP&IAP;并送等待时间 ISP_CMD = Erase_COM; //送扇区擦除命令字 ISP_ADDRH = (uchar)(sector_addr >> 8); //送地址高字节 ISP_ADDRL = (uchar)(sector_addr & 0X00FF);//送地址低字节 ISP_TRIG = 0X46; //送触发命令字0x46 ISP_TRIG = 0XB9;//送触发命令字0xB9 _nop_(); ISP_IAP_disable(); //关闭ISP&IAP功能 EA = 1; } void main() { Sector_erase(0x2000); //扇区擦除 Byte_program(0x2000,0x88); //写EEPROM _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); P0=Byte_read(0x2000); //读EEPROMwhile(1); }
- STC89C52单片机内部EEPROM驱动
- STC89C52单片机内部EEPROM驱动
- STC89C52单片机内部eeprom的应用
- 单片机内部EEPROM的应用
- STM32L系列单片机内部EEPROM的读写
- STC单片机内部EEPROM的应用
- AVR单片机内部EEPROM应用方法
- 51单片机内部EEPROM的应用
- STM32单片机内部EEPROM的读写
- 单片机 EEPROM
- 51单片机STC89C52 蜂鸣器
- 51单片机STC89C52 继电器
- 51单片机STC89C52 iic
- STC89C52单片机RAM模式
- #单片机# ------ stc89c52引脚说明
- 我的STC89C52单片机
- 关于STC89C52驱动DS18B20
- 51单片机STC89C52 LED闪烁
- fork fvck vfork!
- Linux 启动过程详解
- 黄皮书第七章总结_对话框(咦)
- Extjs正则表达式小结
- Ubuntu 10.04 图形安装教程、网络设置、软件源、硬盘安装(超详细)
- STC89C52单片机内部EEPROM驱动
- 【编程语言】Android--错误处理--R.java文件找不到的解决办法
- Eclipse FreeMarker插件
- js省市初始化
- 开发语言选择
- JS数字键盘
- timer
- Java Web Project 转MVN Project
- split()中参数不能直接用.