ATMega16内部EEPROM存储器的应用
位2-EEMWE:EEPROM主机写入允许。该位决定是否允许对EEPROM进行写入操作。当EEMWE被置位时,在EEWE为1的4个时钟周期内,将写数据到指定的地址;当EEMWE为0,设置EEWE为1不能触发写EEPROM操作。
位1-EEWE:EEPROM写允许。 该位作为EEPROM的写入触发。当地址和数据被正确设置以后,且EEMWE为1,则置位EEWE,将触发数据写入EEPROM。如果EEMWE不为1,EEWE不能触发写EEPROM的操作。写EEPROM应该遵循以下步骤:
(1)等待EEWE为0,即EEPROM为空闲状态;
(2)等待SPMCR寄存器中的SPMEN位为0;
(3)写新的EEPROM地址到寄存器EEAR(视具体情况可选);
(4)写新的EEPROM数据到寄存器EEDR(视具体情况可选);
(5)写1到EEMWE,并同时写0到EEWE;
(6)在写1到EEMWE后的4个时钟周期内,写1到EEWE位。
步骤(2)一般情况下可以省略,还需要注意的是,在步骤(5)和步骤(6)之间发生中断将使写入过程失败,因此建议在对EEPROM进行写操作时清零全局中断允许标志位以屏蔽所有中断。
位0-EERE:EEPROM读允许。该标志作为读取EEPROM操作的触发。当EEAR寄存器被设置了正确的地址后,向EERE位写入1,将触发EEPROM的读取操作。
简单的读写EEPROM的C代码见本期配刊光盘的本文目录。
有了上述内容,实现“密码保管箱”实例的程序流程就比较简单了。先完成ATMega16单片机的初始化,其初始化代码可以通过ICC AVR软件自动生成。之后,程序开始检测4×4小键盘上的输入,如果小键盘的输入与程序中设定的密码管理箱密码相同,则将存储在EEPROM中的密码送到串口中通过电脑或液晶显示模块进行显示。当然,我们还需要考虑一些编程细节,比如如何比较设定的密码与用户输入的密码等。关于小键盘的操作我们在今年第5期第39页的文章中已经用汇编语言实现过,本期配刊光盘中给出了采用C语言编写的程序,代码看起来更清晰易懂。
设计好程序后,我们可以用上期介绍的ICC AVR软件进行程序的编译。打开ICC AVR,建立一个工程psmanager,并在工程选项里设定芯片为ATMega16,然后选择Tools→Application Builder,或者点击菜单栏上的快捷图标,进入应用程序生成器,可以帮助用户快速生成初始化等相关代码。
如次啊图所示,Target CPU选择M16,Xtal speed根据实际使用情况选择。在Ports项里面是端口初始状态的设置。Timer0、Timer1、Timer2中分别是ATMega16的3个定时器的设置。UART中是串口的设置。根据实际需要选择合适的设置,然后点击OK,ICC AVR会按照所设置的选项产生初始化代码,用户也可以自行编写初始化代码。
将Application Builder。产生的代码保存为main.c,并且加入工程。接下来将需要写入EEPROM的密码生成*.eep文件,假设有两组密码需要存储,分别是建设银行卡密码(为123456)和EMAIL ABC@163.COM密码(为ABCDEFG),并设定密码保管箱的密码为“567890”。
ICC AVR用以下方法产生用于写入EEPROM的eep文件:
#pragma data:eeprom
//设置数据区到EEPROM
char key[]={‘5’,‘6’,‘7’,
‘8’,‘9’,‘O’}
char password[]={“CBC:
123456%ABC@163.COM:
ABCDEFG$")
//假设我们用“%”作为密码之
间的分割;“$”为密码结束标志
#pragma data:data
//设置数据区回到数据存储器
将以上代码添加在main.c中,注意必须紧跟着头文件之后。这样ICC AVR编译完成后,除了生成单片机执行文件}.hex,同时还将产生一个eep文件,可以通过Ponyprog软件写入ATMega16的EEPROM存储器中。由于某种原因,在ATMega16的O~511共512个字节的EEPROM中,在地址O处的字节是不能使用的,所以上面的密码将从EEPROM的地址1处依次存储,即ATMega16可用的EEPROM为511个字节。
本例程中将功能相关的函数放在一起构成一个C文件,因此在一个工程中会有多个C源文件,这样做的好处是使得结构清晰,修改和扩充都很方便。但是要注意文件包含问题,可以查阅相关的C语言书籍。
在完成所有的代码后进行编译,将编译后生成的hex文件和eep文件一起写入ATMega16。步骤如下:打开Ponyprog软件,选择File→OpenProgram(FLASH)File,选中生成的hex文件;再选择File→Open Data(EEPROM)File,将文件类型更改为*.eep,然后选中eep文件。连接好硬件后,点击Command→Write All,即可写入。
工作中的系统如上图所示。 因为本文介绍的“密码保管箱”要借助于电脑进行显示,还不够独立,笔者将在下期介绍如何使用ATMega16控制液晶显示屏,让密码保管箱可以独立使用。
存储器相关文章:存储器原理
评论