在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 關(guān)于STC單片機(jī)EEPROM的應(yīng)用總結(jié)

            關(guān)于STC單片機(jī)EEPROM的應(yīng)用總結(jié)

            作者: 時間:2016-12-01 來源:網(wǎng)絡(luò) 收藏
            大建議:
            1、同一次修改的數(shù)據(jù)放在同一個扇區(qū)中不是同一次修改的數(shù)據(jù)放在另外的扇區(qū)就不須讀出保護(hù)。
            2、如果一個扇區(qū)只用一個字節(jié),那就是真正的EEPROM,STC單片機(jī)的Dataflash比外部EEPROM要快很多讀一個字節(jié)/編程一個字節(jié)大概是2個時鐘/55微秒。
            3、如果在一個扇區(qū)中存放了大量的數(shù)據(jù),某次只需要修改其中的一個字節(jié)或一部分字節(jié)時,則另外的不需要修改的數(shù)據(jù)須先讀出放在STC單片機(jī)的RAM中,然后擦除整個扇區(qū),再將需要保留的數(shù)據(jù)和需修改的數(shù)據(jù)按字節(jié)逐字節(jié)寫回該扇區(qū)中(只有字節(jié)寫命令,無連續(xù)字節(jié)寫命令)。這時每個扇區(qū)使用的字節(jié)數(shù)是使用的越少越方便(不需要讀出一大堆需保留數(shù)據(jù))。
            常見問題:
            1、IAP指令完成后,地址是否會自動” 加1”或“減1”?
            不會
            2、送5A和A5觸發(fā)之后下一次IAP命令是否還需要送5A和A5觸發(fā)?
            是,一定要。
            STC12C5201AD/PWM單片機(jī)內(nèi)部EEPROM地址表

            第一扇區(qū)
            第二扇區(qū)
            第三扇區(qū)
            第四扇區(qū)
            每個扇區(qū)
            512字節(jié)
            建議同一次修改的數(shù)據(jù)放在同一個扇區(qū),不是同一次修改的數(shù)據(jù)放在不同的扇區(qū),不必用滿,當(dāng)然也可以用滿。
            起始地址
            結(jié)束地址
            起始地址
            結(jié)束地址
            起始地址
            結(jié)束地址
            起始地址
            結(jié)束地址
            0000h
            1FFH
            200H
            3FFH
            400H
            5FFH
            600H
            7FFH
            第五扇區(qū)
            第六扇區(qū)
            第七扇區(qū)
            第八扇區(qū)
            起始地址
            結(jié)束地址
            起始地址
            結(jié)束地址
            起始地址
            結(jié)束地址
            起始地址
            結(jié)束地址
            800H
            9FFH
            A00H
            BFFH
            C00H
            DFFH
            E00H
            FFFH
            第九扇區(qū)
            第十扇區(qū)
            第十一扇區(qū)
            第十二扇區(qū)
            起始地址
            結(jié)束地址
            起始地址
            結(jié)束地址
            起始地址
            結(jié)束地址
            起始地址
            結(jié)束地址
            1000H
            11FFH
            1200H
            13FFH
            1400H
            15FFH
            1600H
            17FFH

            下面就舉一個例子來說明一下EEPROM的應(yīng)用
            程序功能:
            三個按鍵分別是,開關(guān)、增大、減小。通過7段數(shù)碼管將鍵值顯示出來(1-9)。
            并將開關(guān)鍵關(guān)閉前的鍵值保存在EEPROM中,系統(tǒng)再次上電時顯示上次關(guān)閉前的鍵值。
            #include//頭文件
            #include”intrins.h”
            /******宏定義*************/
            #define uintunsigned int//用unsigned int 代替unsigned int
            #define ucharunsigned char//用uchar 替代unsigned char
            /*********位定義**************/
            sbit SW=P3^2;//開關(guān)
            sbit INC=P3^3;//增大按鍵
            sbit DEC=P3^4;//減小按鍵
            sbitDATA=P1^5;//595數(shù)據(jù)流
            sbitSHIFT=P1^6;//595移位寄存器
            sbitSTORAGE=P1^7;//595存儲寄存器
            sbitBEEP=P1^4;//蜂鳴器
            /數(shù)碼管顯示代碼
            uchar codenum[]={0x01,0xf3,0x89,0xa1,0xb2,0xa4,0x84,0xf1,0x80,0x20} ; //0-9代碼
            //變量聲明
            bit kai=0,biaozhi=0;
            uchar MA,dat;
            /*定義與EEPROM相關(guān)的特殊功能寄存器*/
            sfrIAP_DATA=0XC2;//FLASH data register
            sfrIAP_ADDRH=0XC3;//FLASH address high
            sfrIAP_ADDRL=0XC4;//FLASH address low
            sfrIAP_CMD=0XC5;//FLASH command register
            sfrIAP_TRIG=0XC6;//FLSH command trigger
            sfrIAP_CONTR=0XC7;//flashcontrol register
            /*定義IAP/ISP/EEPROM命令*/
            #define CMD_IDLE0//stand_by
            #define CMD_READ1//byte_read
            #defineCMD_PROGRAM 2//byte_program
            #defineCMD_ERASE 3//sector_erase
            /*定義與EEPROM相關(guān)的寄存器 */
            //#defineENABLE_IAP0X80 //if sysclk<30MHz
            //#defineENABLE_IAP0X81 //if sysclk<24MHz
            //#defineENABLE_IAP0X82 //if sysclk<20MHz
            #defineENABLE_IAP0X83 //if sysclk<12MHz//定義控制寄存器
            //#defineENABLE_IAP0X84 //if sysclk<6MHz
            //#defineENABLE_IAP0X85 //if sysclk<3MHz
            //#define ENABLE_IAP 0X86//if sysclk<2MHz
            //#defineENABLE_IAP0X87 //if sysclk<1MHz
            /*定義EEPROM 的起始地址*/
            #defineIAP_ADDRESS 0X0000
            /****初始化函數(shù)**********/
            Void iapidle()
            {
            IAP_CONTR=0;//關(guān)閉IAP功能
            IAP_CMD=0;//CMD寄存器初始化
            IAP_TRIG=0;//清空觸發(fā)寄存器
            IAP_ADDRH=0X80;//數(shù)據(jù)指針指向非EEPROM區(qū)
            IAP_ADDRL=0;//CLEAR IAP address to preventmisuse
            }
            /*讀EEPROM的一個字節(jié)地址的內(nèi)容
            輸入:地址
            輸出:EEPROM字節(jié)數(shù)據(jù)
            */
            uchar iapreadbyte(uint addr)
            {
            IAP_CONTR=ENABLE_IAP;//設(shè)置IAP控制寄存器
            IAP_CMD=CMD_READ;//設(shè)置IAP的命令寄存器為讀狀態(tài)
            IAP_ADDRL=addr;//設(shè)置EERPROM的低8位地址
            IAP_ADDRH=addr>>8;
            IAP_TRIG=0X5A;
            IAP_TRIG=0XA5;
            _nop_();
            dat=IAP_DATA;
            iapidle();
            return dat;
            }
            /*寫一個字節(jié)的IAP/ISP/EEPROM空間
            輸入: 字節(jié)地址
            要寫入的數(shù)據(jù)
            Void iapprogrambyte(uint addr,uchar dat)
            {
            IAP_CONTR=ENABLE_IAP;//打開IAP功能并設(shè)置等待時間
            IAP_CMD=CMD_PROGRAM;//設(shè)置寫命令
            IAP_ADDRL=addr;//設(shè)置字節(jié)地址低8位
            IAP_ADDRH=addr>>8;//設(shè)置字節(jié)地址的高8位
            IAP_DATA=dat;//寫內(nèi)容
            IAP_TRIG=0X5A;//發(fā)送觸發(fā)命令1
            IAP_TRIG=0XA5;//發(fā)送觸發(fā)命令2
            _nop_();//等待直到寫操作完成
            Iapidle();
            }
            /*扇區(qū)擦除
            輸入:地址
            Void iaperasesector(uint addr)
            {
            IAP_CONTR=ENABLE_IAP;//開IAP功能并設(shè)置等待時間
            IAP_CMD=CMD_ERASE;//設(shè)置擦除命令
            IAP_ADDRL=addr;
            IAP_ADDRH=addr>>8;
            IAP_TRIG=0x5a;
            IAP_TRIG=0XA5;
            _nop_();
            Iapidle();
            }
            /********寫595函數(shù)*******************/
            void write_595(uchar x)
            {
            uchar j;
            for(j=0;j<8;j++)
            {
            x=x<<1;
            SHIFT=0;
            _nop_();
            _nop_();
            _nop_();
            DATA=CY;
            SHIFT=1;
            _nop_();
            _nop_();
            _nop_();
            SHIFT=0;
            }

            關(guān)鍵詞: STC單片機(jī)EEPRO

            評論


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

            關(guān)閉