AVR学习笔记十一、AVR内部EEPROM的读写实验.doc_第1页
AVR学习笔记十一、AVR内部EEPROM的读写实验.doc_第2页
AVR学习笔记十一、AVR内部EEPROM的读写实验.doc_第3页
AVR学习笔记十一、AVR内部EEPROM的读写实验.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

AVR学习笔记十一、AVR内部EEPROM的读写实验 -基于LT_Mini_M1611.1 基于ATmega16内部EEPROM的读写实验11.1.1、实例功能AVR单片机的多数型号都有芯片内置的EEPROM,这些EEPROM可以用来保护芯片掉电后要保存的数据。对于ATmega16来说,芯片内置的EEPROM的容量是2K位(即512字节),可以重复擦写的次数是10万次。AVR单片机中的EEPROM是数据型EEPROM,即只能保存数据,在AVR单片机正常工作的情况下,可以用WINAVR中自带的函数读/写这些数据。本实例就利用WINAVR中自带的EEPROM的读写函数来对ATmega16的内部EEPROM进行读写。本实例有两个功能模块: 了解WINAVR自带的EEPROM读写函数。 编写程序,实现对ATmwga16内部EEPROM的读写。通过本实例的学习,掌握以下知识点: 如何利用WINAVR自带的EEPROM读写函数实现对ATmega16的内部EEPROM的读写。11.1.2 WINAVR中自带EEPROM读写函数的说明WINAVR中自带了EEPROM读写函数,利用这些函数可以很轻松的实现对AVR单片机内部EEPROM的读写。如果要使用WINAVR中自带的EEPROM读写函数,首先要在程序中包含EEPROM函数的头文件,使用如下语句即可:#include 同我们前面学习过的AT24C16一样,在对EEPROM进行读写之前,应当确认EEPROM已经准备好被操作;否则,如果在EEPROM处于写周期时对其进行读写操作的话,可能会导致非常大的读写延迟。因此,在对EEPROM进行读写前,应用eeprom_is_ready()查询EEPROM的工作状态,在准备好的情况下,再进行操作,从而确保程序的实时性。下面我们来了解一下EEPROM的读写函数。 测试EEPROM是否准备好,如果准备好,宏函数返回1,否则返回0#define eeprom_is_ready() bit_is_clear(EECR,EEWE) 读取指定地址处的一个字节uint8_t eeprom_read_byte(const uint8_t *addr) 读取指定地址处的一个字(即两个字节) uint16_t eeprom_read_word(const uint16_t *addr) 成块读取指定地址处的成块数据(多个字节) void eeprom_read_block (void *pointer_ram ,const void *pointer_eeprom,size_t n)其中各参数分别是指:pointer_ram读取的数据在RAM区存放的位置pointer_eeprom 读取的数据在EEPROM区存放的位置n 读取的字节长度 向指定地址写入一个字节数据 void eeprom_write_byte(uint8_t *addr, uint8_t value) 向指定地址写入一个字的数据(两个字节)void eeprom_write_word(uint16_t *addr, uint16_t value) 向指定地址写入成块的数据(多个字节)void eeprom_write_block(const void *pointer_ram , void *pointer_eeprom , size_t n)其中各参数分别是指:pointer_ram将要写入的数据在RAM区存放的位置pointer_eeprom 将要写入的数据在EEPROM区存放的位置n 写入的字节长度 等待EEPROM读写空闲,发生空闲时返回 #define eeprom_busy_wait do while (!eeprom_is_ready()11.1.3 电路和连接本实例只是对AVR单片机内部EEPROM的读写。没有用到任何外部电路(当然电源电路、复位电路、下载电路等构成单片机工作的最基本电路还是需要的。_)。11.1.4 程序设计1、程序功能程序的功能是对ATmega16单片机的内部EEPROM进行读写操作,通过控制8个LED显示读取的数据是否正确,程序比较简单,直接看程序就能明白原理了。2函数说明本程序主要使用的是WINAVR自带的EEPROM读写函数,前面已经介绍过,在此不再说明。 3、使用WINAVR开发环境,使用的是外部12M的晶振,所以需要将makefile文件中的时钟频率修改为12M。另外在程序烧录到单片机的时候,熔丝位也要选择为外部12M晶振(注意是晶振,不是外部振荡器,一定不要选择错了,否则会导致单片机不能再烧写程序)。4、程序代码#include /io端口寄存器配置文件,必须包含#include #include /WINAVR自带的EEPROM读写函数头文件/变量声明/EEMEM unsigned char const eeprom12 = 1,2,3,4,5,6,7,8,9,10,11,12;/函数声明void Delayus(unsigned int lus); /us延时函数void Delayms(unsigned int lms); /ms延时函数int main(void) /GCC中main文件必须为返回整形值的函数,没有参数unsigned char i;unsigned char Read_Buff8 = 0; /读取数据缓冲区unsigned char Write_Buff8 = 0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08; /写入数据缓冲区PORTB = 0x00; DDRB = 0xFF; /端口PortB设为输出口,通过相应位LED的变化指示程序运行结果 /下面这段程序演示对内部EEPROM进行单字节读写eeprom_busy_wait(); /等待EEPROM读/写空闲eeprom_write_byte(0x00,0x01); /向地址第0个字节0写入字节数据1/如果要检测掉电后EEPROM中数据是否保存,可先将该程序写入单片机,然后屏蔽/上面这两句话,再编译程序,随后将单片机掉电,过一会再上电,再将不含写操作命令./的程序写入单片机,也就是只执行读操作,观察LED显示是否正确。不过需要特别注意/的是:在做这个实验的时候,熔丝位需要正确设置,应当选择熔丝位为“执行芯片擦除时/保留EEPROM的内容”即EESAVE=0。eeprom_busy_wait(); /等待EEPROM读/写空闲i = eeprom_read_byte(0x00); /从地址第0个字节0读出1字节数据PORTB = i; /用8个LED显示读出的数据Delayms(2000); PORTB = 0x00; /熄灭所有LEDDelayms(500);/下面这段程序演示对内部EEPROM进行多字节读写eeprom_busy_wait(); /eeprom_write_block (Write_Buff,0x05,8); /从地址第5个字节开始写入8字节数据eeprom_busy_wait(); /eeprom_read_block(Read_Buff,0x05,8); /从地址第5个字节开始读出8字节数据if(Read_Buff0 = 0x01) /判断读出的8个数据是否正确PORTB = 0x01; /第一个字节正确,LED1亮Delayms(500);if(Read_Buff1 = 0x02)PORTB |= 0x02; /第2个字节正确,LED2亮Delayms(500);if(Read_Buff2 = 0x03)PORTB |= 0x04; /第3个字节正确,LED3亮Delayms(500);if(Read_Buff3 = 0x04)PORTB |= 0x08; /第4个字节正确,LED4亮Delayms(500);if(Read_Buff4 = 0x05)PORTB |= 0x10; /第5个字节正确,LED5亮Delayms(500);if(Read_Buff5 = 0x06)PORTB |= 0x20; /第6个字节正确,LED6亮Delayms(500);if(Read_Buff6 = 0x07)PORTB |= 0x40; /第7个字节正确,LED7亮Delayms(500);if(Read_Buff7 = 0x08)PORTB |= 0x80; /第8个字节正确,LED8亮Delayms(500);while(1) /us级别的延时函数void Delayus(unsig

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论