在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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>

            新聞中心

            STC原版EEPROM修改方法

            作者: 時(shí)間:2016-11-29 來源:網(wǎng)絡(luò) 收藏
            12.4 .EEPROM測(cè)試程序(C程序及匯編程序)

            1. C程序:
            ;STC 12C5A60S2系列單片機(jī)EEPROM/IAP 功能測(cè)試程序演示
            /*------------------------------------------------------------------------------------*/
            /* --- STC MCU Limited ---------------- ---------------------------------------*/
            /* --- 演示STC 1T 系列單片機(jī)EEPROM/IAP 功能--------------------------*/
            /* --- Mobile: (86) 13922809991 -----------------------------------------------*/
            /* --- Fax: 86-755-82905966 ---------------------------------------------------*/
            /* --- Tel: 86-755-82948412 ----------------------------------------------------*/
            /* --- Web:www.STCMCU.com-----------------------------------------------*/
            /* 如果要在程序中使用或在文章中引用該程序, -------------------- ---*/
            /* 請(qǐng)?jiān)诔绦蛑谢蛭恼轮凶⒚魇褂昧薙TC的資料及程序 -----------*/
            /*-------------------------------------------------------------------------------------*/
            #include "reg5 1.h"
            #include "intrins.h"
            typedef unsigned char BYTE;
            typedef unsigned int WORD;
            /*Declare SFR associated with the IAP */
            sfr IAP_DATA = 0xC2; //Flash data register
            sfr IAP_ADDRH = 0xC3; //Flash address HIGH
            sfr IAP_ADDRL = 0xC4; //Flash address LOW
            sfr IAP_CMD = 0xC5; //Flash command register
            sfr IAP_TRIG = 0xC6; //Flash command trigger
            sfr IAP_CONTR = 0xC7; //Flash control register
            /*Define ISP/IAP/EEPROM command*/
            #define CMD_IDLE 0 //Stand-By
            #define CMD_READ 1 //Byte-Read
            #define CMD_PROGRAM 2 //Byte-Program
            #define CMD_ERASE 3 //Sector-Erase
            /*Define ISP/IAP/EEPROM operation const for IAP_CONTR*/
            //#define ENABLE_IAP 0x80 //if SYSCLK<30MHz
            //#define ENABLE_IAP 0x81 //if SYSCLK<24MHz
            #define ENABLE_IAP 0x82 //if SYSCLK<20MHz
            //#define ENABLE_IAP 0x83 //if SYSCLK< 12MHz
            //#define ENABLE_IAP 0x84 //if SYSCLK<6MHz
            //#define ENABLE_IAP 0x85 //if SYSCLK<3MHz
            //#define ENABLE_IAP 0x86 //if SYSCLK<2MHz
            //#define ENABLE_IAP 0x87 //if SYSCLK< 1MHz
            //Start address for STC12C5A60S2 series EEPROM
            #define IAP_ADDRESS 0x0000
            void Delay(BYTE n);
            void IapIdle();
            BYTE IapReadByte(WORD addr);

            本文引用地址:http://www.biyoush.com/article/201611/323484.htm

            void IapProgramByte(WORD addr, BYTE dat);
            void IapEraseSector(WORD addr);
            void main()
            {
            WORD i;
            P1 = 0xfe; // 1111 ,1110 System Reset OK
            Delay(10); //Delay
            IapEraseSector(IAP_ADDRESS); //Erase current sector
            for (i=0; i<5 12; i++) //Check whether all sector data is FF
            {
            if (IapReadByte(IAP_ADDRESS+i) != 0xff)
            goto Error; //If error, break
            }
            P1 = 0xfc; // 1111 ,11 00 Erase successful
            Delay(10); //Delay
            for (i=0; i<5 12; i++) //Program 5 12 bytes data into data flash
            {
            IapProgramByte(IAP_ADDRESS+i, (BYTE)i);
            }
            P1 = 0xf8; // 1111 ,1000 Program successful
            Delay(10); //Delay
            for (i=0; i<5 12; i++) //Verify 5 12 bytes data
            {
            if (IapReadByte(IAP_ADDRESS+i) != (BYTE)i)
            goto Error; //If error, break
            }
            P1 = 0xf0; // 1111 ,0000 Verify successful
            while ( 1);
            Error:
            P1 &= 0x7f; //0xxx,xxxx IAP operation fail
            while ( 1);
            }
            /*----------------------------Software delay function
            ----------------------------*/
            void Delay(BYTE n)
            {
            WORD x;
            while (n--)
            {
            x = 0;
            while (++x);
            }
            }

            /*----------------------------Disable ISP/IAP/EEPROM function
            Make MCU in a safe state
            ----------------------------*/
            void IapIdle()
            {
            IAP_CONTR = 0; //Close IAP function
            IAP_CMD = 0; //Clear command to standby
            IAP_TRIG = 0; //Clear trigger register
            IAP_ADDRH = 0x80; //Data ptr point to non-EEPROM area
            IAP_ADDRL = 0; //Clear IAP address to prevent misuse
            }
            /*----------------------------Read one byte from ISP/IAP/EEPROM area
            Input: addr (ISP/IAP/EEPROM address)
            Output:Flash data
            ----------------------------*/
            BYTE IapReadByte(WORD addr)
            {
            BYTE dat; //Data buffer
            IAP_CONTR = ENABLE_IAP; //Open IAP function, and set wait time
            IAP_CMD = CMD_READ; //Set ISP/IAP/EEPROM READ command
            IAP_ADDRL = addr; //Set ISP/IAP/EEPROM address low
            IAP_ADDRH = addr >> 8; //Set ISP/IAP/EEPROM address high
            IAP_TRIG = 0x5a; //Send trigger command 1 (0x5a)
            IAP_TRIG = 0xa5; //Send trigger command2 (0xa5)
            _nop_(); //MCU will hold here until ISP/IAP/EEPROM
            //operation complete
            dat = IAP_DATA; //Read ISP/IAP/EEPROM data
            IapIdle(); //Close ISP/IAP/EEPROM function
            return dat; //Return Flash data
            }
            /*----------------------------Program one byte to ISP/IAP/EEPROM area
            Input: addr (ISP/IAP/EEPROM address)
            dat (ISP/IAP/EEPROM data)
            Output:-----------------------------*/

            void IapProgramByte(WORD addr, BYTE dat)
            {
            IAP_CONTR = ENABLE_IAP; //Open IAP function, and set wait time
            IAP_CMD = CMD_PROGRAM; //Set ISP/IAP/EEPROM PROGRAM command
            IAP_ADDRL = addr; //Set ISP/IAP/EEPROM address low
            IAP_ADDRH = addr >> 8; //Set ISP/IAP/EEPROM address high
            IAP_DATA = dat; //Write ISP/IAP/EEPROM data
            IAP_TRIG = 0x5a; //Send trigger command 1 (0x5a)
            IAP_TRIG = 0xa5; //Send trigger command2 (0xa5)
            _nop_(); //MCU will hold here until ISP/IAP/EEPROM
            //operation complete
            IapIdle();
            }
            /*----------------------------Erase one sector area
            Input: addr (ISP/IAP/EEPROM address)
            Output:-----------------------------*/
            void IapEraseSector(WORD addr)
            {
            IAP_CONTR = ENABLE_IAP; //Open IAP function, and set wait time
            IAP_CMD = CMD_ERASE; //Set ISP/IAP/EEPROM ERASE command
            IAP_ADDRL = addr; //Set ISP/IAP/EEPROM address low
            IAP_ADDRH = addr >> 8; //Set ISP/IAP/EEPROM address high
            IAP_TRIG = 0x5a; //Send trigger command 1 (0x5a)
            IAP_TRIG = 0xa5; //Send trigger command2 (0xa5)
            _nop_(); //MCU will hold here until ISP/IAP/EEPROM
            //operation complete
            IapIdle();
            }



            關(guān)鍵詞: STCEEPROM修改方

            評(píng)論


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

            關(guān)閉