学习笔记之内部eeprom读写

导读:爱华网网友为您分享以下“学习笔记之内部eeprom读写”资讯,希望对您有所帮助,感谢您对aIhUaU.com的支持!

AVR学习笔记之内部EEPROM读写

AVR单片机的多数型号都有芯片内置的EEPROM,这些EEPROM可以用来保护芯片掉电后要保存的数据。Atmega16内置的EEPROM的容量是512字节,可以重复擦写的次数是10万次。

AVRGCC自带的EEPROM读写函数可对Atmega16内部的EEPROM进行读写操作。如果要使用AVRGCC中自带的EEPROM读写函数,首先要在程序中包含#include<avr/eeprom.h>这个头文件。 AVRGCC内置EEPROM访问函数库如下:

(1)void eeprom_read_block(void *buf, unsigned int addr, size_t n):从EEPROM的addr地址开始,读取n个字节到buf。

(2)int eeprom_is_ready():宏定义,EEPROM准备好(EECR =0)返回非0,否则返回0。

(3)unsigned char eeprom_read_byte (unsigned int addr):从EEPROM读取addr地址处的字节数据,在以前的版本中为unsigned char eeprom_rb(unsigned int addr),新版也兼容旧版本的函数。

(4)unsigned int eeprom_read_word(unsigned int addr):从EEPROM读取一个整数,低字节地址addr,高字节地址(addr+1) ,在以前的版本中为unsigned int eeprom_rw(unsigned int addr),新版本也兼容旧版本的函数。

(5)void eeprom_write_byte (unsigned int addr, unsigned char val):向EEPROM的addr地址处写入字节数据val,在以前的版本中为void eeprom_wb(unsigned int addr, unsigned char val),新版本也兼容旧版本的函数。

在做读写EEPROM实验的时候需要对熔丝位进行正确的设置,应选择熔丝位为“执行芯片擦除时保留EEPROM的内容”,即EESAVE=0。

下面就通过实例来调用这些函数。程序代码如下:

学习笔记之内部eeprom读写

#include <avr/io.h>

#include <avr/iom16.h>

#include <string.h>

#include <stdio.h>

#include<avr/signal.h>

#include<avr/interrupt.h>

#define F_CPU 16000000

#include <util/delay.h>

#include <avr/eeprom.h>

#define BAUD 9600

#define delay_us(x) _delay_us(x) //AVR GCC延时函数 x(us)

#define delay_ms(x) _delay_ms(x) //AVR GCC延时函数 x(ms)

void port_init()

{

DDRD|=(1<<PD1);//把TXD端口配置为输出

PORTA=0x00;

}

void usart_init()

{

UCSRA=0X00;

UCSRC|=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//写UCSRC,异步操作,禁止奇偶校验,停止位数为1,8位字符长度

UBRRH=(F_CPU/BAUD/16-1)/256;//波特率高4位

UBRRL=(F_CPU/BAUD/16-1)%256;//波特率低8位

UCSRB|=(1<<TXEN);//使能发送,使能接收,使能接受中断 }

void usart_put_char(unsigned char TX_data)//发送一个字节的数据

{

while(!(UCSRA&(1<<UDRE)));//检测UDRE是否为1,只有在UDRE为1的情况下,才

能向缓冲器UDR中写入数据。

UDR=TX_data;

}

int main()

{

unsigned char i;

port_init();

usart_init();

for(i=0;i<10;i++)eeprom_write_byte(i,i);

while(1);

}

上段程序是对EEPROM进行写操作,通过for(i=0;i<10;i++)eeprom_write_byte(i,i);这段程序实现的是在地址0—9分别写数据0—9。那么怎么知道我数据是否成功写入了呢?下面还要进行读操作,作用是把刚才写入的数据读出来,看看是否和写入的一样,只需要修改主程序即可。修改后的代码如下:

int main()

{

unsigned char i;

port_init();

usart_init();

for(i=0;i<10;i++)

usart_put_char(eeprom_read_byte(i));

while(1);

}

程序修改后重新编译下载到单片机后,打开串口调试助手,肯定会发现什么数据都没有,别急,重新按下单片机的复位键就可以看到数据了。因为在主程序中发送数据的指令只执行了一次,速度很快,在你打开串口调试助手前就已经过去了,因此需复位一下才能看到现象。现象如下图所示:

读回的数据分别是00,01,02,03,04,05,06,07,08,09,发现和写入的数据是相同的,那么说明成功的对eeprom进行了读写操作。

只要会了这两个最基本的读写操作,那么Atmega16内部的512字节的eeprom空间就可以为你所用了。


百度搜索“爱华网”,专业资料,生活学习,尽在爱华网  

爱华网本文地址 » http://www.aihuau.com/a/394551/745900210790.html

更多阅读

教学研究:对高中语文读写结合教学的实践与反思

对高中语文读写结合教学的实践与反思黄蔚玲【摘要】读写结合教学模式,是新课程改革的需要,也是高考改革的需要,更是提升学生学习语文能力的需要。本文通过对高中语文教学的现状思考,以及读写结合教学的实践与反思,对如何实现读写

伤寒学习笔记(下

伤寒学习笔记---14,桂枝用量问题?学习仲景药法,涉及用量问题。深入考证,固然不必,简单了解,实属必要。仅以桂枝为例,整理如下:基本资料:《现代中医药应用与研究大系》1985年版,简称《大系》。药法:凡例里说:“将其折合今之用量---,并结合笔者临床

“Doit,掌控每一天”学习笔记和使用感受

使用感受:学习经历:微信课,4节沪江职场讲座,准备报名参加易仁教主的威海线下活动。以上表明:我对Doit软件学习的决心,不仅仅是因为教主的推荐,更多的是对自我的挑战。参加“沪江网:掌控每一天活动:写感受,拿福利”是我做过的最漂亮的项目类事

转载 SPSS学习笔记之——生存分析的Cox回归模型比例风险模型

原文地址:SPSS学习笔记之——生存分析的Cox回归模型(比例风险模型)作者:王江源一、生存分析基本概念1、事件(Event)指研究中规定的生存研究的终点,在研究开始之前就已经制定好。根据研究性质的不同,事件可以是患者的死亡、疾病的复发、仪器

声明:《学习笔记之内部eeprom读写》为网友积滿海岸的蘤海分享!如侵犯到您的合法权益请联系我们删除