www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀]STC89C51、52內(nèi)部都自帶有2K字節(jié)的EEPROM,54、55和58都自帶有16K字節(jié)的EEPROM,STC單片機是利用IAP技術(shù)實現(xiàn)的EEPROM,內(nèi)部Flash擦寫次數(shù)可達100,000 次以上,先來介紹下ISP與IAP的區(qū)別和特點。ISP:In System Prog

STC89C51、52內(nèi)部都自帶有2K字節(jié)的EEPROM,54、55和58都自帶有16K字節(jié)的EEPROM,STC單片機是利用IAP技術(shù)實現(xiàn)的EEPROM,內(nèi)部Flash擦寫次數(shù)可達100,000 次以上,先來介紹下ISP與IAP的區(qū)別和特點。

ISP:In System Programable 是指在系統(tǒng)編程,通俗的講,就是片子已經(jīng)焊板子上,不用取下,就可以簡單而方便地對其進行編程。比如我們通過電腦給STC單片機下載程序,或給AT89S51單片機下載程序,這就是利用了ISP技術(shù)。

IAP:In Application Programable 是指在應(yīng)用編程,就是片子提供一系列的機制(硬件/軟件上的)當片子在運行程序的時候可以提供一種改變flash數(shù)據(jù)的方法。通俗點講,也就是說程序自己可以往程序存儲器里寫數(shù)據(jù)或修改程序。這種方式的典型應(yīng)用就是用一小段代碼來實現(xiàn)程序的下載,實際上單片機的ISP功能就是通過IAP技術(shù)來實現(xiàn)的,即片子在出廠前就已經(jīng)有一段小的boot程序在里面,片子上電后,開始運行這段程序,當檢測到上位機有下載要求時,便和上位機通信,然后下載數(shù)據(jù)到存儲區(qū)。大家要注意千萬不要嘗試去擦除這段ISP引導(dǎo)程序,否則恐怕以后再也下載不了程序了。STC單片機內(nèi)部有幾個專門的特殊功能寄存器負責管理ISP/IAP功能的,見表1。

表1 ISP/IAP相關(guān)寄存器列表

名稱

地址

功能描述

D7

D6

D5

D4

D3

D2

D1

D0

復(fù)位值

ISP_DATA

E2h

Flash數(shù)據(jù)寄存器









1111 1111

ISP_ADDRH

E3h

Flash高字節(jié)地址寄存器









0000 0000

ISP_ADDRL

E4h

Flash低字節(jié)地址寄存器









0000 0000

ISP_CMD

E5h

Flash命令模式寄存器

--

--

--

--

--

MS2

MS1

MS0

xxxx x000

ISP_TRIG

E6h

Flash命令觸發(fā)寄存器









xxxx xxxx

ISP_CONTR

E7h

ISP/IAP 控制寄存器

ISPEN

SWBS

SWRST

--

--

WT2

WT1

WT0

000x x000

ISP_DATA:ISP/IAP操作時的數(shù)據(jù)寄存器。

ISP/IAP從Flash讀出的數(shù)據(jù)放在此處,向Flash寫入的數(shù)據(jù)也需放在此處。

ISP_ADDRH:ISP/IAP操作時的地址寄存器高八位。

ISP_ADDRL:ISP/IAP操作時的地址寄存器低八位。

ISP_CMD:ISP/IAP操作時的命令模式寄存器,須命令觸發(fā)寄存器觸發(fā)方可生效。命令模式如表2所示。表2 ISP_CMD寄存器模式設(shè)置

D7

D6

D5

D4

D3

D2

D1

D0

模式選擇

保留

命令選擇


--

--

--

--

--

0

0

0

待機模式,無ISP操作

--

--

--

--

--

0

0

1

對用戶的應(yīng)用程序flash區(qū)及數(shù)據(jù)flash區(qū)字節(jié)讀

--

--

--

--

--

0

1

0

對用戶的應(yīng)用程序flash區(qū)及數(shù)據(jù)flash區(qū)字節(jié)編程

--

--

--

--

--

0

1

1

對用戶的應(yīng)用程序flash區(qū)及數(shù)據(jù)flash區(qū)扇區(qū)擦除

程序在系統(tǒng)ISP程序區(qū)時可以對用戶應(yīng)用程序區(qū)/數(shù)據(jù)Flash區(qū)(EEPROM)進行字節(jié)讀/字節(jié)編程/扇區(qū)擦除;程序在用戶應(yīng)用程序區(qū)時,僅可以對數(shù)據(jù)Flash區(qū)(EEPROM)進行字節(jié)讀/字節(jié)編程/扇區(qū)擦除。STC89C51RC/RD+系列單片機出廠時已經(jīng)固化有ISP引導(dǎo)碼,并設(shè)置為上電復(fù)位進入ISP程序區(qū),并且出廠時就已完全加密。

ISP_TRIG:ISP/IAP操作時的命令觸發(fā)寄存器。

在ISPEN(ISP_CONTR.7)=1時,對ISP_TRIG 先寫入46h,再寫入B9h,ISP/IAP命令才會生效。

STC89C52RC,STC89LE52RC單片機內(nèi)部可用DataFlash(EEPROM)的地址如表3所示,其它型號單片機請查閱相關(guān)資料。

表3STC89C52RC、STC89LE52RC單片機內(nèi)部EEPROM地址表

第一扇區(qū)

第二扇區(qū)

第三扇區(qū)

第四扇區(qū)

起始地址

結(jié)束地址

起始地址

結(jié)束地址

起始地址

結(jié)束地址

起始地址

結(jié)束地址

2000H

21FFH

2200H

23FFH

2400H

25FFH

2600H

27FFH

第五扇區(qū)

第六扇區(qū)

第七扇區(qū)

第八扇區(qū)

起始地址

結(jié)束地址

起始地址

結(jié)束地址

起始地址

結(jié)束地址

起始地址

結(jié)束地址

2800H

29FFH

2A00H

2BFFH

2C00H

2DFFH

2E00H

2FFFH

每個扇區(qū)為512字節(jié),建議大家在寫程序時,將同一次修改的數(shù)據(jù)放在同一個扇區(qū),方便修改,因為在執(zhí)行擦除命令時,一次最少要擦除一個扇區(qū)的數(shù)據(jù),每次在更新數(shù)據(jù)前都必須要擦除原數(shù)據(jù)方可重新寫入新數(shù)據(jù),不能直接在原來數(shù)據(jù)基礎(chǔ)上更新內(nèi)容。

下面通過一個例子來講解STC系列單片機EEPROM的具體用法。

【例】:在實驗板上實現(xiàn)如下描述,操作STC單片機自帶的EEPROM,存儲一組按秒遞增的二位數(shù)據(jù),并且將數(shù)據(jù)實時顯示在數(shù)碼管上,數(shù)據(jù)每變化一次就往EEPROM中寫入一次,當關(guān)閉實驗板電源,再次開啟電源時,從EEPROM中讀取先前存儲的數(shù)據(jù),接著遞增顯示。


#include

#include //52系列單片機頭文件

#define uchar unsigned char

#define uint unsigned int

#define RdCommand 0x01 //定義ISP的操作命令

#define PrgCommand 0x02

#define EraseCommand 0x03

#define Error 1

#define Ok 0

#define WaitTime 0x01 //定義CPU的等待時間

sfr ISP_DATA=0xe2;//寄存器申明

sfr ISP_ADDRH=0xe3;

sfr ISP_ADDRL=0xe4;

sfr ISP_CMD=0xe5;

sfr ISP_TRIG=0xe6;

sfr ISP_CONTR=0xe7;

sbit dula=P2^6;//申明U1鎖存器的鎖存端

sbit wela=P2^7;//申明U2鎖存器的鎖存端

uchar code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

uchar num;

void delayms(uint xms)

{

uint i,j;

for(i=xms;i>0;i--)//i=xms即延時約xms毫秒

for(j=110;j>0;j--);

}

void display(uchar shi,uchar ge)//顯示子函數(shù)

{

dula=1;

P0=table[shi];//送十位段選數(shù)據(jù)

dula=0;

P0=0xff;//送位選數(shù)據(jù)前關(guān)閉所有顯示,防止打開位選鎖存時

wela=1;//原來段選數(shù)據(jù)通過位選鎖存器造成混亂

P0=0xfe;//送位選數(shù)據(jù)

wela=0;

delayms(5); //延時

dula=1;

P0=table[ge];//送個位段選數(shù)據(jù)

dula=0;

P0=0xff;

wela=1;

P0=0xfd;

wela=0;

delayms(5);

}

void ISP_IAP_enable(void)

{

EA = 0;

ISP_CONTR =ISP_CONTR & 0x18;

ISP_CONTR =ISP_CONTR | WaitTime;

ISP_CONTR =ISP_CONTR | 0x80;

}

void ISP_IAP_disable(void)

{

ISP_CONTR =ISP_CONTR & 0x7f;

ISP_TRIG = 0x00;

EA=1;

}

void ISPgoon(void)

{

ISP_IAP_enable();

ISP_TRIG =0x46;

ISP_TRIG =0xb9;

_nop_();

}

unsigned char byte_read(unsigned int byte_addr)

{

ISP_ADDRH =(unsigned char)(byte_addr >> 8);

ISP_ADDRL =(unsigned char)(byte_addr & 0x00ff);

ISP_CMD= ISP_CMD & 0xf8;

ISP_CMD= ISP_CMD | RdCommand;

ISPgoon();

ISP_IAP_disable();

return(ISP_DATA);

}

void SectorErase(unsigned int sector_addr)

{

unsigned intiSectorAddr;

iSectorAddr =(sector_addr & 0xfe00);

ISP_ADDRH =(unsigned char)(iSectorAddr >> 8);

ISP_ADDRL =0x00;

ISP_CMD =ISP_CMD & 0xf8;

ISP_CMD = ISP_CMD| EraseCommand;

ISPgoon();

ISP_IAP_disable();

}

void byte_write(unsigned int byte_addr, unsigned charoriginal_data)

{

ISP_ADDRH =(unsigned char)(byte_addr >> 8);

ISP_ADDRL =(unsigned char)(byte_addr & 0x00ff);

ISP_CMD= ISP_CMD & 0xf8;

ISP_CMD= ISP_CMD | PrgCommand;

ISP_DATA =original_data;

ISPgoon();

ISP_IAP_disable();

}

void main()

{

uchar a,b,num1;

TMOD=0x01; //設(shè)置定時器0為工作方式1(0000 0001)

TH0=(65536-50000)/256;

TL0=(65536-50000)%6;

EA=1;

ET0=1;

TR0=1;

num1=byte_read(0x2000);//程序開始時讀取EEPROM中數(shù)據(jù)

if(num1>=60)//防止首次上電時讀取出錯

num1=0;

while(1)

{

if(num>=20)

{

num=0;

num1++;

SectorErase(0x2000);//擦除扇區(qū)

byte_write(0x2000,num1);//重新寫入數(shù)據(jù)

if(num1==60)

{

num1=0;

}

a=num1/10;

b=num1;

}

display(a,b);

}

}

void timer0() interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%6;

num++;

}


本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

采用51單片機最小開發(fā)板,由8位自制獨立按鍵控制。單片機芯片為STC89C52RC,晶振為@12.000 mhz。8X8LED點陣屏模塊由MAX7219驅(qū)動,MAX7219包含一個自動掃描電路。你只需要把要顯示的數(shù)據(jù)發(fā)送...

關(guān)鍵字: 51單片機 MAX7219 寄存器

在嵌入式系統(tǒng)開發(fā)的廣闊領(lǐng)域,51單片機和STM32無疑是兩種極具代表性的微控制器。對于初學者而言,選擇學習路徑時往往會面臨一個抉擇:是直接跨越51單片機,挑戰(zhàn)更高層次的STM32,還是從51開始,逐步進階?本文旨在探討直...

關(guān)鍵字: 51單片機 STM32

倫敦2024年10月24日 /美通社/ -- 根據(jù)最新的GSMA "2024年移動互聯(lián)網(wǎng)連接狀況" 報告,全球43%的人口(相當于34.5億人)...

關(guān)鍵字: 移動互聯(lián)網(wǎng) GSMA BSP 讀寫

在嵌入式系統(tǒng)開發(fā)中,特別是在使用8051系列單片機(簡稱C51)進行編程時,數(shù)據(jù)類型的選擇與定義對程序的性能和可讀性至關(guān)重要。C51語言在標準C語言的基礎(chǔ)上進行了擴展,以適應(yīng)單片機特有的硬件結(jié)構(gòu)和操作需求。本文將深入探討...

關(guān)鍵字: C51數(shù)據(jù) 51單片機

在嵌入式系統(tǒng)領(lǐng)域,51單片機作為一種經(jīng)典的微控制器,廣泛應(yīng)用于各種自動化控制系統(tǒng)中。其外部引腳作為單片機與外界交互的接口,承載著數(shù)據(jù)傳輸、控制信號輸出等重要功能。本文將通過對51單片機外部引腳的案例分析,結(jié)合實際代碼,深...

關(guān)鍵字: 51單片機 單片機

在電子技術(shù)的浩瀚星空中,LED(發(fā)光二極管)以其獨特的魅力成為了一顆璀璨的明星。而結(jié)合51單片機這一經(jīng)典的嵌入式開發(fā)平臺,LED的應(yīng)用更是被賦予了無限可能,其中,花樣流水燈便是一個生動而富有創(chuàng)意的實例。本文將帶您深入探索...

關(guān)鍵字: 51單片機 LED

在現(xiàn)代嵌入式系統(tǒng)設(shè)計中,51單片機作為一種經(jīng)典的微控制器,憑借其豐富的功能和廣泛的應(yīng)用領(lǐng)域,仍然受到工程師們的青睞。定時器中斷是51單片機中一個非常實用的功能,它可以在特定的時間間隔內(nèi)自動觸發(fā)中斷,執(zhí)行預(yù)設(shè)的操作,從而提...

關(guān)鍵字: 51單片機 定時器

深圳2024年8月22日 /美通社/ -- 對于消費級SSD來說,性能一直是用戶最為關(guān)注的重要指標之一。高性能不僅是提升數(shù)據(jù)處理速度的關(guān)鍵,更是支撐AI模型訓(xùn)練、大數(shù)據(jù)分析及高負載應(yīng)用的基礎(chǔ),尤其是在AI應(yīng)用加速落地背景...

關(guān)鍵字: SSD 測試 讀寫 IO

STM32與51單片機之間有什么差異呢?兩者可以說是一場科技與性能的較量了。在科技飛速發(fā)展的今天,微控制器(MCU)已廣泛應(yīng)用于各類電子設(shè)備和系統(tǒng)中,發(fā)揮著舉足輕重的作用。其中,STM32和51單片機作為兩種常見的微控制...

關(guān)鍵字: STM32 51單片機 MCU

51單片機將是下述內(nèi)容的主要介紹對象,通過這篇文章,小編希望大家可以對51單片機的相關(guān)情況以及信息有所認識和了解,詳細內(nèi)容如下。

關(guān)鍵字: 單片機 51單片機
關(guān)閉