EEPROM的读写例子

发布者:meilidaowl最新更新时间:2016-10-19 来源: eefocus关键字:EEPROM  读写例子 手机看文章 扫描二维码
随时随地手机看文章
几乎所有的AVR单片机都带有Flash ROM、SRAM、EEPROM存储器,Flash ROM是程序存储器,不怕掉电;SRAM是静态数据存储器,掉电后数据会丢失;EEPROM是电擦写存储器,不怕掉电,一般用来存储经常需要修改的数据。

    EEPROM的擦写一般有两种方法,一种是单片机正常运行时自身程序对EEPROM进行擦写,一种就是用编程器对EEPROM进行独立的擦写。

1:下面是单片机正常运行时自身程序对EEPROM进行擦写例子:

'EEPROM的读写例子
'www.avrdiy.com
'BASCOM-AVR1.11.8.1
'程序功能, 按一下INT0按键,那么PC5端口将输出0.5Hz的方波,
' 再按一下INT0按键,那么PC5端口将输出0.2Hz的方波,
'重新启动后PC5的输出频率与重新启动前的状态相同
'-------------------------------------------------------------------------------
$regfile = "m88def.dat"
$crystal = 1000000
Config Int0 = Falling      '定义下降沿触发INT0中断
Ddrd.2 = 0
Portd.2 = 1
Enable Interrupts          '打开全局中断
Enable Int0                '打开INT0中断
On Int0 Int0_ok            '中断INT0入口
'-------------------------------------------------------------------------------
'定义变量A是字节型,并且存放在EEPROM中,存放位置由编译器自动安排
'主程序没有对 A 进行赋值,所以第一次运行时 A 的数据可能是255
Dim A As Eram Byte
Dim B As Byte
'-------------------------------------------------------------------------------
Ddrc.5 = 1
Portc.5 = 0
B = A
Do
    Waitms B
    Portc.5 = Not Portc.5  '取反操作
Loop
End
'-------------------------------------------------------------------------------
Int0_ok:
    If A = 100 Then
        A = 250
        Else
        A = 100
    End If
    B = A
Return

上面的程序也可以改写成如下:

'EEPROM的读写例子
'www.avrdiy.com
'BASCOM-AVR1.11.8.1
$regfile = "m88def.dat"
$crystal = 1000000
Config Int0 = Falling      '定义下降沿触发INT0中断
Ddrd.2 = 0
Portd.2 = 1
Enable Interrupts          '打开全局中断
Enable Int0                '打开INT0中断
On Int0 Int0_ok            '中断INT0入口
'-------------------------------------------------------------------------------
Dim A As Byte
'-------------------------------------------------------------------------------
Ddrc.5 = 1
Portc.5 = 0
Readeeprom A,2             '读取EEPROM地址2的数值并且赋值给A
Do
    Waitms A
    Portc.5 = Not Portc.5  '取反操作
Loop
End
'-------------------------------------------------------------------------------
Int0_ok:
    If A = 100 Then
        A = 250
        Else
        A = 100
    End If
    Writeeeprom A,2        '将A的数值保存在EEPROM的地址2中
Return

2:用编程器对EEPROM进行独立的写操作时,首先必须得有准备写入的EEP文件,BASCOM-AVR可以产生这种文件,程序如下:

'EEPROM的读写例子
'www.avrdiy.com
'BASCOM-AVR1.11.8.1
$regfile = "m8515.dat"
$crystal = 1000000
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.2 , Rs = Portb.3
Config Lcd = 16 * 2
Dim A(9) As Byte
Dim I As Byte

Cls
Waitms 100
For I = 3 To 7
    Readeeprom A(i) , I   '从EEPROM的地址I开始读数据,并且赋值给数组A(I)
    Lcd A(i) ; "|";
Next I
End

$eeprom               '告诉编译器数组Shuzu的数据将存放在EEPROM
$eepromhex            '要求编译器产生适合烧写EEPROM的hex文件
Shuzu:
    Data 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9

上面的这个程序中LCD的显示结果是 4|5|6|7|8|
关键字:EEPROM  读写例子 引用地址:EEPROM的读写例子

上一篇:M8做的简易电子节拍器
下一篇:一个精练的频率计与时钟程序

推荐阅读最新更新时间:2024-03-16 15:16

51proteus仿真:I2c总线和EEPROM2404的读写
仿真电路图: 仿真程序: #include reg52.h #include INTRINS.H #define uchar unsigned char #define uint unsigned int sbit SCL=P1^0; sbit SDA=P1^1; void delay(void) { _nop_(); _nop_(); _nop_(); _nop_(); } void InitI2C(void) { SDA = 1; SCL = 1; } void I2CStart(void) { SDA=1; delay(); SCL=1; delay(); SDA=0; delay(); SCL=0; }
[单片机]
51proteus仿真:I2c总线和<font color='red'>EEPROM</font>2404的<font color='red'>读写</font>
51单片机EEPROM(E2PROM)测试程序
/ * * 文件名称: eeprom.c * 摘 要: 对EEPROM某个扇区进行读、写和擦除,并发送到串口 UART=9600 8位数据 CRYSTAL=18.432 TIMER_MODE=12T (EEPROM就是DATA FLASH,擦除只能按扇区,读写可以按字节,字节为0XFF时才可以写) * CPU芯片: STC12C5A16S2 instruction mode:1T * 作 者: XCY * 修改日期: 2012年3月27日 * */ #include reg52.h #include intrins.h typedef unsigned char BYTE; typedef unsigned
[单片机]
基于ATmegal28L的智能探测车的设计与实现
1 引言 智能探测车能根据任务及环境信息做出全局路径规划,可在行进中不断感知局部环境信息并做出决策,从而能够安全行驶并到达目标。本文以ATmegal28L单片机为核心介绍了一种智能探路车的设计雏形,该系统利用各种传感器获取周围环境信息,采用多传感器信息融合技术对接收到的信息进行处理与判断,从而自动绕开障碍物:能与计算机实现无线通讯;具有预先设定路线的功能;通过JTAG接口可以方便地在线调试程序或下载程序。 美国Atmel公司推出的ATmegal28L是基于AVR RISC的低功耗8位单片机,最高工作频率可达16 MHz,具有128 KB Flash内部存储器、4 KBEEPROM和4 KB SRAM数据存储空间,并且采用了JTA
[单片机]
基于ATmegal28L的智能探测车的设计与实现
飞思卡尔单片机DZ60---EEPROM读写
//向EEPROM中写入数据,然后读出数据,赋值给PORTD,点亮相应的LED灯 #include hidef.h /* for EnableInterrupts macro */ #include derivative.h /* include peripheral declarations */ #define uint unsigned int #define uchar unsigned char #define LED PTDD #define LED_DIR PTDDD #define LED_OFF 0XFF void Read_EEPROM(uint start_addr, uchar
[单片机]
ATmega16读写EEPROM AT25256(ICC编译)程序
#include iom162v.h #define BAUD 9600 //波特率4800 #define CRYSTAL 3686400 // 晶振 3M #define BAUD_set (unsigned int)( (unsigned long)CRYSTAL/(16*(unsigned long)BAUD)-1 ) //波特率计算 #define BAUD_H (unsigned char)(BAUD_set 8) //波特率寄存器 #define BAUD_L (unsigned char)(BAUD_set) /* // GPRS #define GPRS_ONOFFH PORTA|=(1 PA5) #defi
[单片机]
Linux下I2C总线EEPROM驱动程序设计方法
  1 引言   I2C (Inter-Integrated Circuit1 总线 是一种由Philips公司开发的2线式串行总线,用于连接微 控制器 及其外围设备。它是同步 通信 的一种特殊形式,具有 接口 线少、控制方式简单、器件封装形式小、通信速率较高等优点。在主从通信中,可有多个I2C总线器件同时接到I2C总线上,通过地址来识别通信对象。笔者在开发基于MPC8250的 嵌入式 Linux系统的过程中发现I2C总线在 嵌入式系统 中应用广泛,I2C总线控制器的类型比较多,对系统提供的操作接口差别也很大。与I2C总线相连的从设备主要有微控制器、EEPROM、实时 时钟 、A/D转换器等.MPC8250处理器正是通过内部的
[电源管理]
Linux下I2C总线<font color='red'>EEPROM</font>驱动程序设计方法
I2C总线及EEPROM的Linux驱动程序的设计
   1 引言   I2C (Inter-Integrated Circuit1总线是一种由Philips公司开发的2线式串行总线,用于连接微控制器及其外围设备。它是同步通信的一种特殊形式,具有接口线少、控制方式简单、器件封装形式小、通信速率较高等优点。在主从通信中,可有多个I2C总线器件同时接到I2C总线上,通过地址来识别通信对象。笔者在开发基于MPC8250的嵌入式Linux系统的过程中发现I2C总线在嵌入式系统中应用广泛,I2C总线控制器的类型比较多,对系统提供的操作接口差别也很大。与I2C总线相连的从设备主要有微控制器、EEPROM、实时时钟、A/D转换器等.MPC8250处理器正是通过内部的I2C总线控制器来和这些连
[单片机]
I2C总线及<font color='red'>EEPROM</font>的Linux驱动程序的设计
基于S3C2440的嵌入式Linux驱动——AT24C02(EEPROM I2C接口)驱动解读
本文将介绍Linux中AT24C02驱动。AT24C02是一种EEPROM,使用I2C接口来访问。 在开发板中,使用I2C控制器0和AT24C02连接,这里就不给出原理图了,如需要,可以搜索TQ2440开发板的原理图。 目标平台:TQ2440 CPU:s3c2440 内核版本:2.6.32 本文所有的代码均位于内核源码:linux/drivers/misc/eeprom/at24.c中。 1. 模块注册和注销 static int __init at24_init(void) { /* 将io_limit向下圆整到最近的2的幂*/ io_limit = rounddown_pow_of_two(
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved