日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于51单片机的EEPROM读写

發(fā)布時(shí)間:2023/12/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于51单片机的EEPROM读写 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本講內(nèi)容:

? ? ? 對(duì)存儲(chǔ)器的基本知識(shí)進(jìn)行介紹。介紹EEPROM芯片AT24C02;通過例程展示EEPROM的讀寫。

? ? ? 存儲(chǔ)器是應(yīng)用于各種嵌入式場(chǎng)合的存儲(chǔ)部件,按功能可分為只讀存儲(chǔ)器(ROM)和隨機(jī)存取存儲(chǔ)器(RAM)兩大類,分別用作固定數(shù)據(jù)存儲(chǔ)和臨時(shí)數(shù)據(jù)緩存。

RAM(Random Access Memory),隨機(jī)存取存儲(chǔ)器:

? ? ? RAM的特點(diǎn)是:上電運(yùn)行時(shí),操作系統(tǒng)和應(yīng)用程序的所有正在運(yùn)行的數(shù)據(jù)和程序都會(huì)放置其中,并且隨時(shí)可以對(duì)存放在里面的數(shù)據(jù)進(jìn)行修改和存取。它的工作需要由持續(xù)的電力提供,一旦系統(tǒng)斷電,存放在里面的所有數(shù)據(jù)和程序都會(huì)自動(dòng)清空掉,并且再也無法恢復(fù)。

使用得比較多的RAM種類有:?

DRAM(Dynamic RAM,動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器):

? ? ? 這是最普通的RAM,一個(gè)電子管與一個(gè)電容器組成一個(gè)位存儲(chǔ)單元,DRAM將每個(gè)內(nèi)存位作為一個(gè)電荷保存在位存儲(chǔ)單元中,用電容的充放電來做儲(chǔ)存動(dòng)作,但因電容本身有漏電問題,因此必須每幾微秒就要刷新一次,否則數(shù)據(jù)會(huì)丟失。存取時(shí)間和放電時(shí)間一致,約為2~4ms。因?yàn)槌杀颈容^便宜,通常都用作計(jì)算機(jī)內(nèi)的主存儲(chǔ)器。

SRAM(Static RAM,靜態(tài)隨機(jī)存取存儲(chǔ)器):

? ? ? 靜態(tài),指的是內(nèi)存里面的數(shù)據(jù)可以長(zhǎng)駐其中而不需要隨時(shí)進(jìn)行存取。每6顆電子管組成一個(gè)位存儲(chǔ)單元,因?yàn)闆]有電容器,因此無須不斷充電即可正常運(yùn)作,因此它可以比一般的動(dòng)態(tài)隨機(jī)處理內(nèi)存處理速度更快更穩(wěn)定,往往用來做高速緩存。

SDRAM(Synchronous DRAM,同步動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器):

? ? ? ?這是一種與CPU實(shí)現(xiàn)外頻Clock同步的內(nèi)存模式,工作電壓為3.3V。 所謂clock同步是指內(nèi)存能夠與CPU同步存取資料,這樣可以取消等待周期,減少數(shù)據(jù)傳輸?shù)难舆t,因此可提升計(jì)算機(jī)的性能和效率。

DDR SDRAM(Double Data Rate二倍速率同步動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器):

? ? ? 作為SDRAM的換代產(chǎn)品,它具有兩大特點(diǎn):

? ? ? 其一,速度比SDRAM有一倍的提高;

? ? ? 其二,采用了DLL(Delay Locked Loop:延時(shí)鎖定回路)提供一個(gè)數(shù)據(jù)濾波信號(hào)。這是目前內(nèi)存市場(chǎng)上的主流模式。

只讀存儲(chǔ)器(read-only memory --- ROM)可以分為以下兩大類:

? ? ?(1)掩模編程ROM,它所存儲(chǔ)的固定邏輯信息是由生產(chǎn)廠家通過光刻掩模版來決定的。

? ? ?(2)現(xiàn)場(chǎng)可編程ROM(programmable read-only memory)。

??????? a:PROM(可編程ROM)。此類ROM通常采用溶絲結(jié)構(gòu),用戶可根據(jù)編程的需要,把無用的溶絲燒斷來完成編程工作(即把信息寫入到存儲(chǔ)器中)。但一旦編程完畢,就無法再變更,故用戶只可編程(寫)一次。

??????? b:EPROM(可擦除可編程ROM-erasable programmable read only memory)。

此類ROM存儲(chǔ)單元中存貯信息的管子采用浮柵結(jié)構(gòu),可用紫外線或X-射線把原來存的信息一次全部擦除。

??????? c:EEPROM(電可擦除可編程ROM,也叫E2PROM-electrically erasable programmable read only memory)。

??????? d: Flash Memory(快閃存儲(chǔ)器)

這是一種可以直接在主機(jī)板上修改內(nèi)容而不 需要將IC拔下的內(nèi)存,當(dāng)電源關(guān)掉后儲(chǔ)存在里面的資料并不會(huì)流失掉,在寫入資料時(shí)必須先將原本的資料清除掉,然后才能再寫入新的資料,缺點(diǎn)為寫入資料的速度太慢。

EEPROM芯片AT24C02介紹:

?

?

例程:

/*****************EEPROM讀寫*******************

*單片機(jī)型號(hào):STC89C52RC

*開發(fā)環(huán)境:KEIL

*功能:向IIC總線器件24c02EEPROM中地址為1的存儲(chǔ)單元中寫入數(shù)據(jù)50

? ? ? ? ? ? 并將其讀出,顯示于數(shù)碼管上。 ??

****************************************************/

#include<reg51.h>

#define uint unsigned int

#define uchar unsigned char

sbit sda=P2^0;sbit scl=P2^1;sbit LE1=P2^6;sbit LE2=P2^7;sbit LED=P1^0;

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,

0x5e,0x79,0x71};

void delay1(uint z)

{

?uchar x,x1;

?for(;z>0;z--)

?{for(x=0;x<114;x++){for(x1=0;x1<1;x1++);}}

}

void delay_5us()

{

?int i;

?for(i=0;i<1;i++){;}

}

void delay(int In,int Out)????????????????????????????????????????????????????????????????????????????????????????? //定義延時(shí)函數(shù)?

{

?int i,j;

?for(i=0;i<In;i++)

?{for(j=0;j<Out;j++){;}}

}

void star()

{

?sda=1;delay_5us();

?scl=1;delay_5us();

?sda=0;delay_5us();

}

void stop()

{

?sda=0;delay_5us();

?scl=1;delay_5us();

?sda=1;delay_5us();

}

void ack()

{

?uchar z=0;

?while((sda==1)&&(z<50))z++;

?scl=0;

?delay_5us();

}

void write(uchar slave_write_address,uchar byte_address,uchar data_data)

{

?uchar temp,temp1,i,ii;

?star();

?for(ii=0;ii<3;ii++)

?{

? if(ii==0)

? {temp=slave_write_address;temp1=slave_write_address;}

? else if(ii==1)

? {temp=byte_address;temp1=byte_address;}

? else if(ii==2)

? {temp=data_data;temp1=data_data;}

? for(i=0;i<8;i++)

? {

?? scl=0;

?? delay_5us();

?? temp=temp1;

?? temp=temp&0x80;

?? if(temp==0x80)sda=1;

?? else sda=0;

?? delay_5us();

?? scl=1;delay_5us();

?? scl=0;delay_5us();

?? temp1=temp1<<1;

? }

? sda=1;delay_5us();

? scl=1;delay_5us();

? ack();

?}

?stop();

}

uchar read(uchar slave_write_address,uchar byte_address,uchar slave_read_address)

{

?uchar temp,temp1,i,ii,x,data_data;

?star();

?for(ii=0;ii<3;ii++)

?{

? if(ii==0)

? {temp=slave_write_address;temp1=slave_write_address;}

? else if(ii==1)

? {temp=byte_address;temp1=byte_address;}

? else if(ii==2)

? {star();temp=slave_read_address;temp1=slave_read_address;}

? for(i=0;i<8;i++)

? {

? ?scl=0;delay_5us();

?? temp=temp1;temp=temp&0x80;

?? if(temp==0x80)sda=1;

?? else sda=0;

?? delay_5us();

??

?? scl=1;delay_5us();

?? scl=0;delay_5us();

?? temp1=temp1<<1;

? }

? sda=1;delay_5us();

? scl=1;delay_5us();

? ack();

? }

? for(x=0;x<8;x++)

? {

?? data_data=data_data<<1;

?? sda=1;delay_5us();

?? scl=0;delay_5us();

?? scl=1;delay_5us();

?? if(sda==1)data_data|=0x01;

? }

? ack();

? stop();

? return data_data;

}

??????????????????????

void display(uchar a,uchar b)

{

?LE1=0;

?P0=table[a];LE1=1;LE1=0;?????? //顯示百位

?LE2=0;

?P0=0xfe;LE2=1;LE2=0;

?delay(5,100);

?LE1=0;

?P0=table[b];LE1=1;LE1=0;?????? //顯示十位

?LE2=0;

?P0=0xfd;LE2=1;LE2=0;

?delay(5,100);

}

void main()

{

?unsigned char num;

?unsigned char buffer;

?unsigned char a,b;

?num = 0x32;

?loop1:write(0xa0,0x01,num);

?delay1(20);

?buffer=read(0xa0,0x01,0xa1);

?delay1(20);

?if(buffer!=num){goto loop1;}

?a=buffer/10;

?b=buffer%10;

?LED=0;delay(5,1000);

?LED=1;delay(5,1000);

?LED=0;delay(5,1000);

?LED=1;delay(5,1000);

?while(1){display(a,b);}

}

最后,求求看到的此文的小伙伴點(diǎn)贊關(guān)注支持一下下哦。畢竟,碼字不容易哦,您的支持是我最大的動(dòng)力呀!!!嗚嗚嗚~~~

總結(jié)

以上是生活随笔為你收集整理的基于51单片机的EEPROM读写的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。