基于avr的eeprom空间的读写

avr-lib本身在<avr/eeprom.h>里面有定义eeprom的操作,现将它优化写在自定义的C文件中。

eeprom_wr.c如下:

/*
该程序主要功能是实现eeprom空间的读写;
 */ 

#include<avr/io.h>
#include <util/delay.h>
#include <avr/eeprom.h>
#define	INT8U	unsigned char
#define INT16U unsigned int

void write_byte_to_eeprom(INT8U *addr,INT8U data)//将data数据,写入addr地址;
{
	while(!eeprom_is_ready());
	eeprom_write_byte(addr, data);		
}

void read_byte_from_eeprom(INT8U *addr,INT8U* data)//将addr位置的数据读出并写到data内;
{
	while(!eeprom_is_ready());
	*data = eeprom_read_byte(addr);
}

void write_word_to_eeprom(INT16U *addr,INT16U data)//由于eeprom的地址是按字节定义的,所以,使用INT16U格式的时候,每一次增加地址,应该增加2;
{
	while(!eeprom_is_ready());	//检测eeprom是否已经准备就绪;
	eeprom_write_word(addr,data);	//将data数据,写入addr地址;
}

void read_word_from_eeprom(INT16U *addr,INT16U* data)//由于eeprom的地址是按字节定义的,所以,使用INT16U格式的时候,每一次增加地址,应该增加2;
{
	while(!eeprom_is_ready());	//检查eeprom是否已经准备就绪;
	*data = eeprom_read_word(addr);//将addr位置的数据读出并写到data内;
}
 

 

eeprom_wr.h如下:


#ifndef EEPROM_WR_H_
#define EEPROM_WR_H_
#define	INT8U	unsigned char
#define INT16U unsigned int

extern void write_byte_to_eeprom(INT8U *addr,INT8U data);
extern void read_byte_from_eeprom(INT8U *addr,INT8U* data);
extern	void write_word_to_eeprom(INT16U *addr,INT16U data);
extern void read_word_from_eeprom(INT16U *addr,INT16U* data);


#endif /* PROGRAM_WR_H_ */

本文使用LCD1602来显示eeprom的读写内容;LCD1602的例程可以参考:https://blog.csdn.net/rzchong1988/article/details/101764091

 

最后的main.c如下:

#define  F_CPU 4000000UL
#include <stdio.h>
#include <util/delay.h>
#include "lcd1602.h"
//#include "ADC_tran.h"
#include "eeprom_wr.h"
#define	INT8U	unsigned char
#define INT16U unsigned int

INT16U* addr;
INT16U  wdata;
INT16U  rdata;
INT8U*	b_addr;
INT8U   b_wdata;
INT8U   b_rdata;

char str[20];

int main(void)
{
	Init_LCD1602();
//	Init_AD(CH);
	
	b_addr=2;
	b_wdata = 230;
	b_rdata = 0;
	write_byte_to_eeprom(b_addr,b_wdata);
	read_byte_from_eeprom(b_addr,&b_rdata);
	sprintf(str,"data %d",b_rdata);
	Display_String(0,0,str);
	
	b_addr=4;
	b_wdata = 240;
	b_rdata = 0;
	write_byte_to_eeprom(b_addr,b_wdata);
	read_byte_from_eeprom(b_addr,&b_rdata);
	sprintf(str,"data %d",b_rdata);
	Display_String(0,1,str);

	_delay_ms(1000);

	addr=10;
	wdata = 30530;
	rdata = 0;
	write_word_to_eeprom(addr,wdata);
	read_word_from_eeprom(addr,&rdata);
	sprintf(str,"data %d",rdata);
	Display_String(0,0,str);
	
	addr=12;
	wdata = 30531;
	rdata = 0;
	write_word_to_eeprom(addr,wdata);
	read_word_from_eeprom(addr,&rdata);
	sprintf(str,"data %d",rdata);
	Display_String(0,1,str);
    
	while(1);
}

 

在protuess中显示如下:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值