• STC51单片机21——EEPROM测试


    STC89C51RC系列单片机内部EEPROM详细地址表:
    第一扇区                   第二扇区                    第三扇区                    第四扇区
    起始地址  结束地址   起始地址   结束地址   起始地址   结束地址   起始地址    结束地址
    2000h      21FFh       2200h       23FFh      2400h       25FFh       2600h        27FFH
    第五扇区                    第六扇区                     第七扇区                    第八扇区
    起始地址   结束地址   起始地址   结束地址    起始地址   结束地址   起始地址    结束地址
    2800h       29FFh       2A00h      2BFFh        2C00h      2DFFh      2E00h        2FFFh

    #include
    #include
    #define uchar unsigned char    
    #define uint unsigned int

    sbit LED1 = P1^0;
    sbit LED2 = P1^1;
    sbit K1   = P1^2;               //按钮1
    sbit K2   = P1^3;               //按钮2

    void  cc(uint addr);
    void  xcx(uint addr,uchar dat);
    uchar dcx(uint addr);
    void  Q0();

    /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
    函数:主程序
    ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
    void main(void)
    {
       uchar a;

       a = dcx(0x2002);              // 开机读取EEPROM区2002h数据,
       if(a == 2)      {LED1=0;LED2=1;}
       else if(a == 6){LED1=0;LED2=0;}

       while(1)
         {
          if(!K1)
            {
              while(!K1);
              LED1=0;LED2=1;
              cc(0x2000);          // 擦除第1个扇区(2000h~21FFh)
              xcx(0x2002,2);      // 对EEPROM区2002h写入2
             }

          if(!K2)
            {
              while(!K2);
              LED1=1  ;LED2=0;
              cc(0x2000);          // 擦除第1个扇区(2000h~21FFh)
              xcx(0x2002,6);      // 对EEPROM区2002h写入6
            }
         }
    }

    /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
    函数:擦除某一扇区(每个扇区512字节)
    入口:addr = 某一扇区首地址              
    ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
    void cc(uint addr)
    {    
                                  // 0x83(晶振<5M)   0x82(晶振<10M)   0x81(晶振<20M)   0x80(晶振<40M)
        ISP_CONTR = 0x81;          // 打开 IAP 功能(ISPEN(ISP_CONTR.7)=1:允许编程改变Flash, 设置 Flash 操作等待时间。
        ISP_CMD   = 0x03;          // 用户可以对"Data Flash/EEPROM区"进行扇区擦除
        ISP_ADDRL = addr;         // ISP/IAP操作时的地址寄存器低八位,
        ISP_ADDRH = addr>>8;      // ISP/IAP操作时的地址寄存器高八位。
        EA =0;   
        ISP_TRIG = 0x46;          // 在ISPEN(ISP_CONTR.7)=1时,对ISP_TRIG先写入46h,
        ISP_TRIG = 0xB9;          // 再写入B9h,ISP/IAP命令才会生效。
        _nop_();

        Q0();                      // 关闭ISP/IAP
    }
    /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
    函数:写一字节
    入口:addr = 扇区单元地址 , dat = 待写入数据
    ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
    void xcx(uint addr,uchar dat)
    {
        ISP_CONTR = 0x81;          
        ISP_CMD   = 0x02;          // 用户可以对"Data Flash/EEPROM区"进行字节编程
        ISP_ADDRL = addr;        
        ISP_ADDRH = addr>>8;      
        ISP_DATA  = dat;          // 数据进ISP_DATA
        EA = 0;
        ISP_TRIG = 0x46;          
        ISP_TRIG = 0xB9;          
      _nop_();
        Q0();                      // 关闭ISP/IAP
    }
    /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
    函数:读一字节
    入口:addr = 扇区单元地址
    出口:dat  = 读出的数据
    ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
    uchar dcx(uint addr)
    {   
        uchar dat;
        
        ISP_CONTR = 0x81;          
        ISP_CMD   = 0x01;         // 用户可以对"Data Flash/EEPROM区"进行字节读
        ISP_ADDRL = addr;         
        ISP_ADDRH = addr>>8;      
        EA = 0;
        ISP_TRIG = 0x46;          
        ISP_TRIG = 0xB9;          
        _nop_();
     dat = ISP_DATA;              // 取出数据
        Q0();                      // 关闭ISP/IAP               
        return dat;
    }
    /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
    函数:关闭ISP/IAP操作
    ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
    void Q0()
    {
        ISP_CONTR = 0;            // 关闭IAP功能
        ISP_CMD   = 0;            // 待机模式,无ISP操作
        ISP_TRIG  = 0;            // 关闭IAP功能, 清与ISP有关的特殊功能寄存器
    }

     

  • 相关阅读:
    性能测试-CPU性能分析,用户态us高,初步定位到代码行
    C/C++家谱管理系统
    C++常用23种设计模式总结(三)------装饰模式
    网页开发从无到有——html前端学习(五)
    同花顺_代码解析_技术指标_Z_2
    长沙物业满意度调查找第三方|群狼调研(长沙物业竞争对手分析)
    什么是 Linux ?(Linux)
    GitHub 更换 CEO,产品总监接任
    A Survey on VQA: Datasets and Approaches
    jQuery中的prop方法(全选按钮)
  • 原文地址:https://blog.csdn.net/fengyuzhe13/article/details/127817105