51单片机内部EEPROM读写

发布者:PositiveVibes最新更新时间:2024-07-29 来源: cnblogs关键字:51单片机  内部EEPROM  读写 手机看文章 扫描二维码
随时随地手机看文章

#include

#include

//定义类型,方便代码移植


typedef unsigned char UINT8;

typedef unsigned int  UINT16;

typedef unsigned long UINT32;


typedef char INT8;

typedef int  INT16;

typedef long INT32;


static     UINT8 i=0;

/*

定义寄存器 ISP 

*/


sfr ISP_DATA= 0xe2;  // Flash数据寄存器

sfr ISP_ADDRH= 0xe3;// Flash高字节地址寄存器

sfr ISP_ADDRL= 0xe4;// Flash低字节地址寄存器

sfr ISP_CMD= 0xe5;// Flash命令模式寄存器

sfr ISP_TRIG= 0xe6;// Flash命令触发寄存器

sfr ISP_CONTR= 0xe7;// ISP/IAP 控制寄存器






#define NOP()                                    _nop_()

#define EEPROM_START_ADDRESS    0X2000

#define LED_PORT                            P2


//微秒级延时

void DelayNus(UINT16 t)

{

    UINT16 d=0;

    d=t;

    do

    {

        NOP();

    }while(--d > 0);

}

//毫秒级延时

void DelayNms(UINT16 t)

{

    do

    {

        DelayNus(1000);

    }while(--t > 0);

}


//EEPROM使能

void EEPROMEnable(void)

{

    ISP_CONTR=0x81;//使能并设置好等待时间 

}

//EEPROM禁用

void EEPROMDisable(void)

{

    ISP_CONTR=0x00;//禁止EEPROM

    ISP_CMD = 0X00;//无ISP操作

    ISP_TRIG = 0X00;//清零

    ISP_ADDRH = 0X00;//清零

    ISP_ADDRL = 0X00;//清零

}


//eeprom 设置读写地址(相对地址)

void EEPROMSetAddress(UINT16 addr)

{

    addr+=EEPROM_START_ADDRESS;//初始化地址

    ISP_ADDRH=(UINT8)(addr>>8);//设置读写地址高字节

    ISP_ADDRL=(UINT8) addr;         //设置读写地址低字节

}


//EEPROM启动

void EEPROMStart(void)

{

    ISP_TRIG=0x46;

    ISP_TRIG=0xB9;

}


//EEPROM读取单个字节

UINT8 EEPROMReadByte(UINT16 addr)

{

    ISP_DATA=0X00;

    ISP_CMD=0X01;

    EEPROMEnable();

    EEPROMSetAddress(addr);

    EEPROMStart();

    DelayNus(10);//读取一个字节需要10us

    EEPROMDisable();

    return (ISP_DATA);

}



//EEPROM写入单个字节

UINT8 EEPROMWriteByte(UINT16 addr,UINT8 byte)

{


    EEPROMEnable();

        ISP_CMD=0X02;

    EEPROMSetAddress(addr);

    ISP_DATA=byte;

    

    

    EEPROMStart();

    DelayNus(60);

    EEPROMDisable();


}


//EEPROM扇区擦除

UINT8 EEPROMSectorErase(UINT16 addr)

{


    ISP_CMD=0X03;

    EEPROMEnable();

    EEPROMSetAddress(addr);

    EEPROMStart();

    DelayNus(10);//

    EEPROMDisable();

}




void main(void)

{


    EEPROMSectorErase(0);

    EEPROMWriteByte(0,0x0f);

    i=EEPROMReadByte(0);

    

    LED_PORT = i;

    while(1);

    

    

}


现象:

 

 

 

 

 

 

 

 


关键字:51单片机  内部EEPROM  读写 引用地址:51单片机内部EEPROM读写

上一篇:《8051单片机C语言创新教程》笔记 03
下一篇:stc89c52rc单片机下载hex文件失败的情况

推荐阅读最新更新时间:2024-11-12 07:39

多模式51单片机心形流水灯+呼吸灯+蜂鸣器音乐
1.基础硬件DIY设计 电路硬件: STC89C52RC 蜂鸣器/24个LED/4个四角按键 1)整体原理图 2)PCB电路 3)3D_PCB TOP层 2.单片机程序设计 1)呼吸灯 //呼吸灯 while(1) { for(high=1;high cycle;high++) { P2=P1=P0=0XFF; delay2(high); P2=P1=P0=0X00; low=cycle-high; delay2(low); } for(low=1;low cycle;low++) { P2=P1=P0=0XFF;; high=cycle-low;
[单片机]
多模式<font color='red'>51单片机</font>心形流水灯+呼吸灯+蜂鸣器音乐
51单片机串口通信程序,支持自定义协议
单片机源程序如下: #include reg52.h /*51串口通信by沸腾的冰块/不拼不活*/ typedef unsigned int u16; typedef unsigned char u8; #define Data_SIZE 7 //存入数组RevBuf数据长度==uart_Data_SIZE-2 #define uart_Data_SIZE 5//协议实际长度(一个汉字占两位) u8 RevBuf ; //数据接收缓冲区 u8 indata ; //防数据抵消缓冲区 u16 data_count=0; //数据长度,串口中断自增 u16 temp_length=0; //数据长度,协议长度中转 u8
[单片机]
51单片机-详细理解ASCII码
本讲我们主要通过实验操作来熟悉ASCII码与通信数据之间的关系。 我们现在实现这样的功能,在电脑端上发送“十六进制”模式或“字符格式”模式的字节给单片机,数码管则显示出这些数据的十进制值,然后观察数码管上显示的数值与发送数据的关系。 1.代码 #include reg52.h #include function.h //详见第六章第8讲 #include timer.h //详见第八章第11讲 u8 RXDBUF;//缓存接收到的数据 void ConfigUART(u16 baud) { SCON = 0x50; //配置串口为模式1 TMOD &= 0x0F; //清零T1的控制位 TMOD
[单片机]
<font color='red'>51单片机</font>-详细理解ASCII码
真正的实时操作系统,如何用51单片机来构建
  目前,大多数的产品开发是在基于一些小容量的单片机上进行的。51系列单片机,是我国目前使用最多的单片机系列之一,有非常广大的应用环境与前景,多年来的资源积累,使51系列单片机仍是许多开发者的首选。针对这种情况,近几年涌现出许多基于51内核的扩展芯片,功能越来越齐全,速度越来越快,也从一个侧面说明了51系列单片机在国内的生命力。   多年来我们一直想找一个合适的实时操作系统,作为自己的开发基础。根据开发需求,整合一些常用的嵌入式构件,以节约开发时间,尽最大可能地减少开发工作量;另外,要求这个实时操作系统能非常容易地嵌入到小容量的芯片中。毕竟,大系统是少数的,而小应用是多数而广泛的。显而易见,μC/OS—II是不太适合于以上要求的
[单片机]
真正的实时操作系统,如何用<font color='red'>51单片机</font>来构建
如何利用AT89S51单片机实现家庭语音报警系统设计
引 言 现代化居住格局使家庭生活的安全问题显得尤为重要。当前,安全的防范及报警系统是确保住宅、住户安全的重要保障。防盗的最好方法就是在不法分子有入侵企图时就发出语音警告,增加其心理压力,使其主动离开。本系统就是基于这种思想,采用了Atmel公司的AT89S51单片机作为控制核心,以美国ISD公司的ISD1420作为语音芯片的一种新型家庭语音报警系统。 系统工作原理 本系统的工作原理框图如图1所示。不法分子在所防范区域内移动时会引起红外辐射变化。当其所辐射的红外线通过菲涅尔透镜被聚焦在热释电红外传感器PIS-209S的探测元上时,热释电红外传感器将输出电压信号,然后经信号放大电路放大后送入信号采集与处理电路,经处理后向单片机输出
[单片机]
如何利用AT89S<font color='red'>51单片机</font>实现家庭语音报警系统设计
mcs51单片机中断请求源简介
(1)外部 中断 请求源:即外中断0和1,经由外部引脚引入的,在单片机上有两个引脚,名称为INT0、INT1,也就是P3.2、P3.3这两个引脚。在内部的TCON中有四位是与外中断有关的。 IT0:INT0触发方式控制位,可由软件进和置位和复位,IT0=0,INT0为低电平触发方式,IT0=1,INT0为负跳变触发方式。这两种方式的差异将在以后再谈。 IE0:INT0中断请求标志位。当有外部的中断请求时,这位就会置1(这由硬件来完成),在CPU响应中断后,由硬件将IE0清0。 IT1、IE1的用途和IT0、IE0相同。 (2)内部中断请求源 TF0:定时器T0的溢出中断标记,当T0计数产生溢出时,由硬件置位TF0。
[单片机]
基于AT89C51单片机实现自动量程切换电压测量系统的设计
在电子系统设计调试过程中,电压测量往往是一个测控或测量系统中不可缺的项目。对于电压测量,若其在一个小动态范围内变化,则无论电平高低,要做到精确测量并不困难。但当被测量在宽动态范围内变化时,例如从mV级甚至μV级到V级,做到测量误差均匀的控制在一定范围之内,常用的方式是切换量程,即指定测量范围,例如常用的数字电压表等仪器。然而在许多情况下为了保证测量的实时性,测量时不可能变换测量通道的量程,因此要在整个电压变化范围内做到精确测量就凸显出其重要性。本文基于MCU AT89C51控制,实现了一种自动量程切换的电压测试系统。 1 电压测量原理及系统组成 为了对不同量级的电压信号进行测量,对输入信号进行放大时就不能采用相同的增益倍数
[单片机]
基于AT89C<font color='red'>51单片机</font>实现自动量程切换电压测量系统的设计
合泰单片机内部EEPROM,4*4按键及存储区切换
;内容:按按键调用EEPROM内部数据通过数码管显示出来 ;数码管段码接法A-PD0,B-PD1....G-PD6,H-PD7 ;数码管位码接法OM0-PC0...COM4-PC3 ;按键接法行PA.4-PA.7列PA.0-PA.3 ;完整源码下载:http://www.51hei.com/f/hteepr.rar ;1.内部EEPROM写与读操作 ;2.4*4按键 ;3.存储区切换 include HT66F50.inc ORG0000H JMPA1 ORG0014H ;多功能中断入口地址 JMPZD1 ORG002DH Q1: DC03FH; 0 DC006H; 1 DC05BH; 2 DC04FH; 3 DC066H; 4
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved