新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > avr內(nèi)部EEPROM實(shí)驗(yàn)

avr內(nèi)部EEPROM實(shí)驗(yàn)

作者: 時(shí)間:2016-11-11 來(lái)源:網(wǎng)絡(luò) 收藏
學(xué)習(xí)了AVR內(nèi)部EEPROM的使用。

內(nèi)部flash中保存的是燒錄進(jìn)去的程序。

本文引用地址:http://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}; //共陽(yáng)7段數(shù)碼管顯示0-9對(duì)應(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]; //通過(guò)共陽(yáng)數(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:長(zhǎng)度;p_buff:寫入數(shù)據(jù)存放指針
void eeprom_write(uint addr, uchar number, uchar *p_buff)//此段參考atmage16規(guī)格書寫
{
EEARH = 0x00;
while(number--)
{
while(EECR&(1< EEARL=addr++;
EEDR=*p_buff++;
EECR|=(1< EECR|=(1< }
}

//EEPROM讀取函數(shù) addr:地址;number:長(zhǎng)度;p_buff:讀出數(shù)據(jù)存放指針*/
void eeprom_read(unsigned int addr, unsigned char number, unsigned char *p_buff)//此段參考atmage16規(guī)格書寫
{
while(EECR&(1< EEARH=0x00;
while(number--)
{
EEARL=addr++;
EECR|=(1< *p_buff++=EEDR;
}
}



關(guān)鍵詞: AVR內(nèi)部EEPRO

評(píng)論


技術(shù)專區(qū)

關(guān)閉