您当前的位置:五五电子网电子知识单片机-工控设备STC单片机(STC90/89系列内部 EEPROM 放数据(C语言) 正文
STC90/89系列内部 EEPROM 放数据(C语言)

STC90/89系列内部 EEPROM 放数据(C语言)

点击数:7278 次   录入时间:03-04 11:52:58   整理:http://www.55dianzi.com   STC单片机(
    if( (in_sector_begin_addr + counter) > USED_BYTE_QTY_IN_ONE_SECTOR )
        return ERROR;

    /* 将该扇区数据 0 - (USED_BYTE_QTY_IN_ONE_SECTOR-1) 字节数据读入缓冲区保护 */
    sector_addr        =    (begin_addr & 0xfe00);     /* 1111,1110,0000,0000; 取扇区地址        */
    byte_addr        =   sector_addr;            /* 扇区地址为扇区首字节地址                 */

    ISP_IAP_enable();
    for(i = 0; i < USED_BYTE_QTY_IN_ONE_SECTOR; i++)
    {
        ISP_ADDRH    =    (INT8U)(byte_addr >> 8);
        ISP_ADDRL    =    (INT8U)(byte_addr & 0x00ff);

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

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

        protect_buffer[i]    =    ISP_DATA;
        byte_addr++;
    }

    /* 将要写入的数据写入保护缓冲区的相应区域,其余部分保留 */
    for(i = 0; i < counter; i++)
    {
        protect_buffer[in_sector_begin_addr] = array[i];
        in_sector_begin_addr++;
    }

    /* 擦除 要修改/写入 的扇区 */
    ISP_ADDRH    =    (INT8U)(sector_addr >> 8);
    ISP_ADDRL    =    0x00;
    ISP_CMD        =    ISP_CMD    &    0xf8;        /* 1111,1000 */
    ISP_CMD        =    ISP_CMD    |    SECTOR_ERASE_AP_and_Data_Memory_Command;    /* 0000,0011 */

    ISP_TRIG    =    0x46;        /* 触发ISP_IAP命令 */
    ISP_TRIG    =    0xb9;        /* 触发ISP_IAP命令 */
    _nop_();

    /* 将保护缓冲区的数据写入 Data Flash, EEPROM */
    byte_addr    =   sector_addr;            /* 扇区地址为扇区首字节地址    */
    for(i = 0; i< USED_BYTE_QTY_IN_ONE_SECTOR; i++)
    {
        /* 写一个字节 */
        ISP_ADDRH    =    (INT8U)(byte_addr >> 8);
        ISP_ADDRL    =    (INT8U)(byte_addr & 0x00ff);
        ISP_DATA    =    protect_buffer[i];
        ISP_CMD        =    ISP_CMD    &    0xf8;        /* 1111,1000 */
        ISP_CMD        =    ISP_CMD    |    PROGRAM_AP_and_Data_Memory_Command;        /* 0000,0010 */

        ISP_TRIG    =    0x46;        /* 触发ISP_IAP命令 */
        ISP_TRIG    =    0xb9;        /* 触发ISP_IAP命令 */
        _nop_();

        /* 读回来 */
        ISP_DATA    =    0x00;

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

        ISP_TRIG    =    0x46;        /* 触发ISP_IAP命令 */
        ISP_TRIG    =    0xb9;        /* 触发ISP_IAP命令 */
        _nop_();

        /*  比较对错 */
        if(ISP_DATA != protect_buffer[i])
        {
            ISP_IAP_disable();
            return ERROR;
        }
        byte_addr++;

上一页  [1] [2] [3] [4] [5] [6] [7] [8]  下一页


本文关键字:C语言  STC单片机(单片机-工控设备 - STC单片机(

《STC90/89系列内部 EEPROM 放数据(C语言)》相关文章>>>