ATmega8535L Eeprom示例程序
//***************ICCAVR V6.30编译*****************//
#include
#define uchar unsigned char
#define uint unsigned int
//数码管字型表,对应0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F//
uchar Table[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar Read_Data[4]; //定义读出数据
void DelayMs(uint i) //Ms级延时,参数i为延时时间
{uint j;
for(;i!=0;i--)
{for(j=8000;j!=0;j--) {;}}
}
void Display(uchar *p) //动态显示函数,参数p为待显示的数组名
{uchar i,sel=0x01;
for(i=0;i<4;i++)
{PORTA=sel; //选通最右边的数码管
PORTC=0xff-Table[p[i]]; //送字型码
DelayMs(1); //显示延时
sel=sel<<1; //移位以显示前一位
}
}
void Init_IO(void) //初始化I/O口
{DDRA=0xff; //设置A口为推挽1输出
PORTA=0xff;
DDRC=0xff; //设置C口为推挽1输出
PORTC=0xff;
}
void Write_EEPROM(uchar Data,uint Address)
{if(EECR&0x20) DelayMs(4);
EEARH=Address>>8;
EEARL=Address&0x00ff;
EEDR=Data;
EECR=EECR|0x04;
EECR=EECR|0x02;
DelayMs(4);
}
uchar Read_EEPROM(uint Address)
{uchar i;
if(EECR&0x01) DelayMs(4);
EEARH=Address>>8;
EEARL=Address&0x00ff;
EECR=EECR|0x01;
DelayMs(5);
i=EEDR;
return(i);
}
void main(void)
{uchar i;
Init_IO(); //初始化I/O口
PORTA=0xff; //点亮以测试所有的数码管
PORTC=0x00;
DelayMs(300); //延时
PORTC=0xff; //熄灭所有的数码管
for(i=0;i<4;i++)
Write_EEPROM(5*i,i);
for(i=0;i<4;i++)
Read_Data[i]=Read_EEPROM(i);
while(1)
Display(Read_Data);
}
关键字:ATmega8535L Eeprom
引用地址:
ATmega8535L Eeprom示例程序
推荐阅读最新更新时间:2024-03-16 15:49
MAXQ环境下EEPROM的保护措施
介绍 在嵌入式微控制器应用中,通常都要用到非易失性存储器。无论是掉电时维持需要保存的设置,还是存储公司的重要记录,可靠的非易失性存储器都是现代微控制器领域的一个基本单元。 非易失性存储常常采用外部串行存储器实现。多年以来,该领域用到了数十亿颗类似存储器件,它们的可靠性得到了的广泛认可。目前,存储器可以做到几百字节到1兆字节甚至更大的容量,在每一个需要保持设置的设备中,都能找到这样一个紧凑、廉价的器件。 包括EEPROM、闪存和旋转式存储器在内,所有类型的非易失性存储器都面临一个共同的问题:写周期被中断时,数据会丢失。一旦在写周期执行过程中掉电,那么即使再恢复电源,也很难修复损坏的数据。 本文提出了一种基于事务的提交-回退机制,
[缓冲存储]
AVR单片机EEPROM的操作
本程序简单的示范了如何使用ATMEGA16的EERPOM EEPROM的简介 EEPROM的写操作 EEPROM的读操作 出于简化程序考虑,各种数据没有对外输出,学习时建议使用JTAG ICE硬件仿真器 在打开调试文件到JTAG后, 打开Debug - JTAG ICE Options菜单, 然后在JTAG ICE Properties中点击Dbug页面,将preserve eeprom选项选中。 在每次仿真调试时候,就保护EEPROM内容了。 否则,会按照默认设置擦除EEPROM的内容。 由于定义了EEPROM变量,JTAG调试时会询问是否初始化EEPROM,请选择 EEPROM的数据也可
[单片机]
51单片机 EEPROM 24c02 + 数码管 + 中断 统计开机次数
_ :24c02的SCL连P2.0;SDA连P2.1;WP接GND;P0接8位数码管的8针;P2.2连段码;P2.3连位码; _ :delay.c 1 #include delay.h 2 /* 3 uS延时函数,含有输入参数 unsigned char t,无返回值 4 unsigned char 是定义无符号字符变量,其值的范围是 5 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时 6 长度如下 T=tx2+5 uS 7 */ 8 void DelayUs2x(unsigned char t) 9 { 10 while(--t); 11 } 12 /* 13 mS延时函数,含有输入参数 unsi
[单片机]
PIC单片机对9346EEPROM程序的读写设计
由于在使用时,找了很久也没找到相关的程序,因此把自己后来编写的程序贴出来,希望能给后来者借鉴参考!;实验目的:熟悉SPI总线以及9346EEPROM的读写 ;RBO键按下时把DATA和DATA2写入到EEPROM中以EE—ADDR为地址的单元内, ;完成后,单个数码观显示“9”做为完成标志 ;RB1键按下时,读取EEPROM中以EE—ADDR为地址的单元,并送数码管显示 ;硬件要求:S3、S5、S6拨码管置ON,S1第7、8位置ON。 LIST P=16F877A, R=DEC include “P16F877A.inc” ;包含头文件 __CONFIG _DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_
[单片机]
STC单片机AD和EEPROM的程序设计C代码
/*---------------------------------------------------------------- *File Name: stc_AD.c - *Description: A/D 转换程序 *Project: - *MCU type: STC12C5410AD - - *Company: WY - *Compiler: KEI
[单片机]
S3C2440 测试程序(七) IIC实验1--读写EEPROM(不开中断)
硬件IIC类似软件模拟IIC,硬件IIC读取ACK需要判断寄存器IICCON的bit4是否发生中断为1。 初始化: rGPEUP = 0xc000; //SDA SCL关上拉 rGPECON = 0xa0000000; //GPE14 GPE15设为SDA SCL功能 rIICCON = (1 7)|(0 6)|(1 5)|(0xf); 注: bit : 1--enable ACK bit : 0--IICCLK = PCLK/16 bit : 1--enable interrupt 该为不管用不用到中断都必须为1 bit : 1--interrupt
[单片机]
治标治本,彻底解决AVR单片机EEPROM数据丢失问题
编译环境:WinAVR-20060421 + AVR Studio 4.12.498 Service Pack 4 基本思路:每份写到EEPRM的数据,都做三个备份,每个备份的数据都做CRC16校验,只要系统运行中出错,错误地修改了EEPROM数据, 那么根据校验字节就知道哪个备份的数据被修改了,然后用正确的备份覆盖出错的备份,达到数据恢复的目的。 EEPROMSave.h 文件: /* EEPROM管理定义 */ #define EepromPageSize 64 //页容量定义 #define EepromPage0Addr 0x0000 //各个页的其始地址定义 #def
[单片机]
I^2C总线EEPROM编程心得
相比起学校教材所用的8031+锁存器+存储芯片的组合搭建(不过貌似这种组合只有教科书才用),8952+AT24CXX的组合已经完全够用而且可以很明确地将AT24CXX功能定位在掉电数据存储。 自己在进行电子钟的编程中,将AT24C02作为了闹钟定时保存的存储,因为操作方便,很适合作为程序附加功能的拓展,比如电子密码储存部件等等。对于没接触过的人来说,唯一头痛的就是I^2C总线的软件模拟编程,虽然只有SCL和SDA两条通讯线以及高低电平,上下沿几种状态加以组合,但是单调得难以理解,尤其延时应该是多少,应答怎么实现这些问题都很困扰。I^2C总线是AT24CXX硬件自带,而常见8952不自带的,所以进行交互通讯时,需要在8952上运行软
[单片机]