avr內(nèi)部EEPROM實(shí)驗(yàn)
內(nèi)部flash中保存的是燒錄進(jìn)去的程序。
本文引用地址:http://m.butianyuan.cn/article/201611/316846.htm內(nèi)部EEPROM可以保存數(shù)據(jù),并且斷電后還保存著。
內(nèi)部SRAM可以保存變量數(shù)據(jù),斷電后不保存。
仿真圖片
程序代碼
#include
#include
#include "delay.h"
#define uchar unsigned char
#define uint unsigned int
uchar led7[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共陽7段數(shù)碼管顯示0-9對應(yīng)的8bit
uchar temp;
void main(void)
{
inti_port(); //端口初始化
eeprom_read(0x00, 0x01, &temp);//先讀0x00位置的內(nèi)容
if(temp>9) //循環(huán)顯示0-9
{
temp=0;
}
PORTB=led7[temp]; //通過共陽數(shù)碼管顯示
temp++; //把讀出的內(nèi)容+1
eeprom_write(0x00, 0x01, &temp);//把+1后的內(nèi)部寫入EEPROM
while(1)
{};
}
void inti_port(void)
{
PORTB=0xff;
DDRB=0xff;
}
//EEPROM寫入函數(shù) addr:地址;number:長度;p_buff:寫入數(shù)據(jù)存放指針
void eeprom_write(uint addr, uchar number, uchar *p_buff)//此段參考atmage16規(guī)格書寫
{
EEARH = 0x00;
while(number--)
{
while(EECR&(1<
EEDR=*p_buff++;
EECR|=(1<
}
//EEPROM讀取函數(shù) addr:地址;number:長度;p_buff:讀出數(shù)據(jù)存放指針*/
void eeprom_read(unsigned int addr, unsigned char number, unsigned char *p_buff)//此段參考atmage16規(guī)格書寫
{
while(EECR&(1<
while(number--)
{
EEARL=addr++;
EECR|=(1<
}
}
評論