日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

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

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

知識(shí)點(diǎn):ISP與IAP介紹

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

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

STC單片機(jī)內(nèi)部有幾個(gè)專門的特殊功能寄存器負(fù)責(zé)管理ISP/IAP功能的,見(jiàn)表1。

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

名稱地址功能描述D7D6D5D4D3D2D1D0復(fù)位值ISP_DATAE2hFlash數(shù)據(jù)寄存器







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







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







0000 0000ISP_CMDE5hFlash命令模式寄存器----------MS2MS1MS0xxxx x000ISP_TRIGE6hFlash命令觸發(fā)寄存器







xxxx xxxxISP_CONTRE7hISP/IAP 控制寄存器ISPENSWBSSWRST----WT2WT1WT0000x x000

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

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

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

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

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

表2 ISP_CMD寄存器模式設(shè)置

D7D6D5D4D3D2D1D0模式選擇保留命令選擇
----------000待機(jī)模式,無(wú)ISP操作----------001對(duì)用戶的應(yīng)用程序flash區(qū)及數(shù)據(jù)flash區(qū)字節(jié)讀----------010對(duì)用戶的應(yīng)用程序flash區(qū)及數(shù)據(jù)flash區(qū)字節(jié)編程----------011對(duì)用戶的應(yīng)用程序flash區(qū)及數(shù)據(jù)flash區(qū)扇區(qū)擦除

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

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

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

STC89C52RC,STC89LE52RC單片機(jī)內(nèi)部可用Data Flash(EEPROM)的地址如表3所示,其它型號(hào)單片機(jī)請(qǐng)查閱相關(guān)資料。

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

第一扇區(qū)第二扇區(qū)第三扇區(qū)第四扇區(qū)起始地址結(jié)束地址起始地址結(jié)束地址起始地址結(jié)束地址起始地址結(jié)束地址2000H21FFH2200H23FFH2400H25FFH2600H27FFH第五扇區(qū)第六扇區(qū)第七扇區(qū)第八扇區(qū)起始地址結(jié)束地址起始地址結(jié)束地址起始地址結(jié)束地址起始地址結(jié)束地址2800H29FFH2A00H2BFFH2C00H2DFFH2E00H2FFFH

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

注意:上面的是數(shù)據(jù)存儲(chǔ)區(qū)的地址,程序存儲(chǔ)區(qū)地址是從0~1FFF,共8K,程序區(qū)只能是ISP編程。

以下是自己寫(xiě)的這部分功能代碼,因?yàn)轱L(fēng)格問(wèn)題,不太喜歡原著代碼,感覺(jué)自己的還嚴(yán)謹(jǐn)一點(diǎn)。

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

/* IAP驅(qū)動(dòng) */

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

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

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

/*名稱地址功能描述D7D6D5D4D3D2D1D0復(fù)位值*/

/*ISP_DATAE2hFlash數(shù)據(jù)寄存器1111 1111*/

/*ISP_ADDRHE3hFlash高字節(jié)地址寄存器0000 0000*/

/*ISP_ADDRLE4hFlash低字節(jié)地址寄存器0000 0000*/

/*ISP_CMDE5hFlash命令模式寄存器----------MS2MS1MS0xxxx x000*/

/*ISP_TRIGE6hFlash命令觸發(fā)寄存器xxxx xxxx*/

/*ISP_CONTRE7hISP/IAP 控制寄存器ISPENSWBSSWRST----WT2WT1WT0000x x000*/

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

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

/*ISP_CMD寄存器模式設(shè)置*/

/* D7D6D5D4D3D2D1D0模式選擇*/

/*保留命令選擇*/

/* ----------000待機(jī)模式,無(wú)ISP操作*/

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

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

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

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

/*在ISPEN(ISP_CONTR.7) =1時(shí),對(duì)ISP_TRIG 先寫(xiě)入46h,再寫(xiě)入B9h,ISP/IAP命令才會(huì)生效。*/

/* 定義常量 */

#define ERROR 0

#define OK 1

/* 定義Flash 操作等待時(shí)間 */

//#define WAIT_TIME 0x00 //mcu clock 40mhz

//#define WAIT_TIME 0x01 //mcu clock 20mhz

//#define WAIT_TIME 0x02 //mcu clock 10mhz

#define WAIT_TIME 0x03 //mcu clock 5mhz

sfr ISP_DATA= 0xe2; // Flash數(shù)據(jù)寄存器

sfr ISP_ADDRH= 0xe3;// Flash高字節(jié)地址寄存器

sfr ISP_ADDRL= 0xe4;// Flash低字節(jié)地址寄存器

sfr ISP_CMD= 0xe5;// Flash命令模式寄存器

sfr ISP_TRIG= 0xe6;// Flash命令觸發(fā)寄存器

sfr ISP_CONTR= 0xe7;// ISP/IAP 控制寄存器

#define CMD_READ0x01// 定義IAP的讀字節(jié)操作

#define CMD_PRGM0x02// 定義IAP的寫(xiě)字節(jié)操作

#define CMD_ERASE0x03// 定義IAP的擦除扇區(qū)操作

/*********************** 打開(kāi) ISP,IAP 功能 ***********************/

static void ISPIAPEnable(void)

{

  //EA= 0; // 關(guān)中斷

  ISP_CONTR= ISP_CONTR & 0x18; // 0001,1000

  ISP_CONTR= ISP_CONTR | WAIT_TIME;// 寫(xiě)入硬件延時(shí)

  ISP_CONTR= ISP_CONTR | 0x80; // ISPEN = 1

}

/*********************** 關(guān)閉 ISP,IAP 功能 ***********************/

static void ISPIAPDisable(void)

{

  ISP_CONTR= ISP_CONTR & 0x7f;// ISPEN = 0

  ISP_TRIG= 0x00;

  //EA = 1; // 開(kāi)中斷

}

/************************* 觸發(fā)Flash操作 *************************/

static ActiveOperate(void)

{

  bit eacpy;

  eacpy = EA;

  EA = 0;

  ISPIAPEnable();

  ISP_TRIG = 0x46; // 觸發(fā)ISP_IAP命令字節(jié)1

  ISP_TRIG = 0xb9; // 觸發(fā)ISP_IAP命令字節(jié)2

  {UINT8 i=2; while(i--);}

  ISPIAPDisable();

  EA = eacpy;

}

/**************************** 讀一字節(jié) ****************************/

static UINT8 IAPReadByte(const UINT16 uiAddr)

{

  ISP_ADDRH= (UINT8)(uiAddr >> 8);// 寫(xiě)地址

  ISP_ADDRL= (UINT8)(uiAddr&0xFF);

  ISP_CMD = ISP_CMD & 0xf8;// 清低三位

  ISP_CMD = ISP_CMD | CMD_READ;// 寫(xiě)入讀命令

  ActiveOperate();// 觸發(fā)執(zhí)行

  return (ISP_DATA); // 返回讀到的數(shù)據(jù)

}

/**************************** 寫(xiě)一字節(jié) ****************************/

static void IAPWriteByte(const UINT16 uiAddr, const UINT8 ucData)

{

  ISP_ADDRH= (UINT8)(uiAddr >> 8);// 寫(xiě)地址

  ISP_ADDRL= (UINT8)(uiAddr&0xFF);

  ISP_CMD = ISP_CMD & 0xf8;// 清低三位

  ISP_CMD = ISP_CMD | CMD_PRGM;// 寫(xiě)入寫(xiě)命令

  ISP_DATA= ucData; // 寫(xiě)入數(shù)據(jù)準(zhǔn)備

  ActiveOperate();// 觸發(fā)執(zhí)行

}

/**************************** 擦除一扇區(qū) ****************************/

static void IAPEarseSection(const UINT16 uiAddr)

{

  UINT16uiSecAddr;

  uiSecAddr= (uiAddr & 0xfe00);// 取扇區(qū)地址

  ISP_ADDRH= (UINT8)(uiSecAddr >> 8);// 寫(xiě)地址

  ISP_ADDRL= 0x00;

  ISP_CMD= ISP_CMD & 0xf8; // 清低三位

  ISP_CMD= ISP_CMD | CMD_ERASE;// 寫(xiě)入擦除命令

  ActiveOperate();// 觸發(fā)執(zhí)行

}

------------------------------------------------------------------------------------------------------------------------

#include//到宏晶網(wǎng)站下載頭文件或自己在現(xiàn)有的頭文件上加上相應(yīng)的寄存器定義即可。
#include
#define uchar unsigned char
#define uint unsigned int

/****************uart init***********/
void UART_inti(void)
{
AUXR=0x40;//定時(shí)器1速度是普通8051的12倍,不分頻
TMOD=0x20;//定時(shí)器1工作在方式2,用來(lái)產(chǎn)生波特率
SCON=0x50;//串口工作在方式1,允許接收
TL1=0xF7;//波特率為38400;FB為115200
TH1=0xF7;
PCON=0x00;//SMOD=0
TR1=1; //產(chǎn)生波特率
}

void ISP_write

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

P430顱內(nèi)出血檢測(cè)設(shè)備的研制策略 1 引言 在中國(guó)有許多因創(chuàng)傷性顱腦損傷的患者急需搶救,但相當(dāng)一部分顱內(nèi)出血患者因未能及時(shí)診斷,延誤了搶救和治療時(shí)機(jī).因而出現(xiàn)腦血腫或腦疝后壓

關(guān)鍵字: 單片機(jī) LCD 醫(yī)療設(shè)備 eeprom

1 前言   近年來(lái),數(shù)字化電視技術(shù)迅猛發(fā)展,特別是遙控系統(tǒng)的面市,各廠商在電視機(jī)中加人微處理器(MCU),各種人工智能化彩電完全替代了老式電視手動(dòng)(機(jī)械式)控制和記憶方式。隨著電視專用

關(guān)鍵字: eeprom 串行通信 i2c總線

物聯(lián)網(wǎng)(IoT)沒(méi)有表現(xiàn)出短期流行的跡象。每一新應(yīng)用都添加許多端點(diǎn)到互聯(lián)網(wǎng)。不同的無(wú)線技術(shù)激增,在大部分射頻(RF)頻譜運(yùn)行,就是最好的證明。 工程師在對(duì)廣泛的IoT端點(diǎn)進(jìn)行調(diào)

關(guān)鍵字: eeprom RFID 物聯(lián)網(wǎng)

通過(guò)在單個(gè)器件中集成EEPROM存儲(chǔ)和RFID聯(lián)接,工程師可以設(shè)計(jì)IoT端點(diǎn),使其可存儲(chǔ)工作數(shù)據(jù)并與服務(wù)工程師通信,即使電源故障或完全斷電。 這呈現(xiàn)了服務(wù)和維護(hù)的全新范例,并且完全適用于IoT。

關(guān)鍵字: eeprom RFID 電源資訊

24C02:256 個(gè)字節(jié)的 EEPROM。一般情況下,EEPROM 擁有 30 萬(wàn)到 100 萬(wàn)次的壽命?;?I2C 通信協(xié)議的器件。I2C 是一個(gè)通信協(xié)議,它擁有嚴(yán)密的通信時(shí)序邏輯要求,而EEPROM 是一個(gè)器件,...

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

在向 EEPROM 連續(xù)寫(xiě)入多個(gè)字節(jié)的數(shù)據(jù)時(shí),如果每寫(xiě)一個(gè)字節(jié)都要等待幾 ms 的話,整體上的寫(xiě)入效率就太低了。因此 EEPROM 的廠商就想了一個(gè)辦法,把 EEPROM 分頁(yè)管理。24C01、24C02 這兩個(gè)型號(hào)是...

關(guān)鍵字: eeprom 單片機(jī) 頁(yè)寫(xiě)入

物聯(lián)網(wǎng)(IoT)沒(méi)有表現(xiàn)出短期流行的跡象。每一新應(yīng)用都添加許多端點(diǎn)到互聯(lián)網(wǎng)。不同的無(wú)線技術(shù)激增,在大部分射頻(RF)頻譜運(yùn)行,就是最好的證明。

關(guān)鍵字: eeprom IoT RFID

//**************************************************//實(shí)驗(yàn)?zāi)康模?/熟悉使用單片機(jī)模擬讀寫(xiě)24C01EEPROM//1、首先向24C01EEPROM寫(xiě)入數(shù)據(jù)//2、在...

關(guān)鍵字: 24c01 eeprom pic單片機(jī) 模擬讀寫(xiě)

最近本人在學(xué)習(xí)ARM7的遠(yuǎn)程升級(jí),在這里將自己的學(xué)習(xí)過(guò)程與大家分享,有錯(cuò)誤的地方還請(qǐng)大家指出便于改正! ISP(In-System Programming)即“在系統(tǒng)可編程”,指電路板...

關(guān)鍵字: iap isp
關(guān)閉