新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STC單片機內部FLASH讀寫程序

        STC單片機內部FLASH讀寫程序

        作者: 時間:2016-11-23 來源:網絡 收藏
        //#i nclude "STC89C51.h"

        //#i nclude

        本文引用地址:http://www.104case.com/article/201611/320127.htm


        #define ERROR 0
        #define OK 1


        #define WAIT_TIME0x00//mcu clock 40mhz
        //#define WAIT_TIME0x01//mcu clock 20mhz
        //#define WAIT_TIME0x02//mcu clock 10mhz
        //#define WAIT_TIME0x03//mcu clock 5mhz



        #define HOUR0x8000
        #define MINUTE0x8001



        void ISP_EN(void)
        {
        EA=0;// 關中斷
        ISP_CONTR=ISP_CONTR & 0x18; // 0001,1000
        ISP_CONTR=ISP_CONTR | WAIT_TIME;
        ISP_CONTR=ISP_CONTR | 0x80; // 1000,0000
        }


        void ISP_DI(void)
        {
        ISP_CONTR=ISP_CONTR & 0x7f;// 0111,1111
        ISP_TRIG=0x00;
        EA= 1; // 開中斷
        }


        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; // 1111,1000
        ISP_CMD=ISP_CMD|0x01; // 0000,0001 字節讀數據存儲區

        ISP_EN();

        ISP_TRIG=0x46;
        ISP_TRIG=0xb9;
        _nop_();

        ISP_DI();
        return (ISP_DATA);
        }


        void Sector_erase(unsigned int Sector_addr)
        {
        unsigned char addre;
        addre=(unsigned char)(Sector_addr >> 8); // 1111,1110,0000,0000; 取扇區地址
        ISP_ADDRH =addre&0xfe;
        ISP_ADDRL=0x00;

        ISP_CMD=ISP_CMD&0xf8;// 1111,1000
        ISP_CMD=ISP_CMD|0x03;// 0000,0011 扇區擦除數據存儲區

        ISP_EN();

        ISP_TRIG=0x46; // 觸發ISP_IAP命令
        ISP_TRIG=0xb9; // 觸發ISP_IAP命令
        _nop_();

        ISP_DI();
        }


        void Byte_program(unsigned int byte_addr, unsigned char DataBuf)
        {
        ISP_ADDRH=(unsigned char)(byte_addr >> 8);
        ISP_ADDRL=(unsigned char)(byte_addr & 0x00ff);

        ISP_CMD=ISP_CMD&0xf8; // 1111,1000
        ISP_CMD=ISP_CMD|0x02;// 0000,0010 字節編程數據存儲區
        ISP_DATA=DataBuf;

        ISP_EN();

        ISP_TRIG=0x46; // 觸發ISP_IAP命令
        ISP_TRIG=0xb9; // 觸發ISP_IAP命令
        _nop_();

        ISP_DI();
        }


        unsigned char ByteProgramVerify(unsigned int byte_addr, unsigned char DataBuf)
        {
        ISP_ADDRH=(unsigned char)(byte_addr >> 8);
        ISP_ADDRL=(unsigned char)(byte_addr & 0x00ff);

        ISP_CMD=ISP_CMD&0xf8; // 1111,1000
        ISP_CMD=ISP_CMD|0x02;// 0000,0010 字節編程數據存儲區
        ISP_DATA=DataBuf;

        ISP_EN();

        ISP_TRIG=0x46;
        ISP_TRIG=0xb9;
        _nop_();

        ISP_DATA=0x00;

        ISP_CMD=ISP_CMD&0xf8; // 1111,1000
        ISP_CMD=ISP_CMD|0x01; // 0000,0001

        ISP_TRIG=0x46; // 觸發ISP_IAP命令
        ISP_TRIG=0xb9; // 觸發ISP_IAP命令
        _nop_();

        ISP_DI();

        if(ISP_DATA==DataBuf)returnOK;
        elsereturnERROR;
        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 广饶县| 阳谷县| 岢岚县| 江津市| 方城县| 永春县| 墨玉县| 勃利县| 日土县| 和静县| 蚌埠市| 长岛县| 安平县| 金秀| 伊宁市| 八宿县| 阿克| 晋宁县| 栖霞市| 龙井市| 杭锦后旗| 漳州市| 清水河县| 巴彦淖尔市| 泰和县| 台中市| 信阳市| 出国| 隆德县| 驻马店市| 天津市| 扶绥县| 彩票| 衡山县| 阿坝县| 阿克| 调兵山市| 缙云县| 湖南省| 青川县| 隆昌县|