zoukankan      html  css  js  c++  java
  • STC89C52单片机内部EEPROM驱动

    STC89C52单片机自身带有4K的存储空间,分为8个扇区,每个扇区512字节,第一扇区起始地址为:0x2000, 结束地址为:21FF, 第八扇区起始地址为0x2E00,结束地址是2FFF

    #include <reg52.h>
    #include <intrins.h>
    #define uchar unsigned char
    #define uint unsigned int
    /******************定义命令字节******************/     
    #define Read_COM    0x01                     //字节读数据命令   
    #define Prog_COM    0x02                    //字节编程数据命令   
    #define Erase_COM    0x03                   //扇区擦除数据命令    
    #define En_Wait_TIME    0x81                //设置等待时间 ,并使能ISP/IAP      
    #define Start_ADDRH 0x20                    //扇区地址高位    
    #define Start_ADDRL 0x00                    //扇区地址低位
    /****************特殊功能寄存器声明****************/
    sfr ISP_DATA = 0xe2; 
    sfr ISP_ADDRH = 0xe3;   
    sfr ISP_ADDRL = 0xe4; 
    sfr ISP_CMD = 0xe5; 
    sfr ISP_TRIG = 0xe6;    
    sfr ISP_CONTR = 0xe7;
    /*****************关闭ISP&IAP功能*****************/   
    void ISP_IAP_disable(void)   
    {   
        ISP_CONTR = 0x00;   
        ISP_CMD = 0x00;    
        ISP_TRIG = 0x00;   
    }   
    /*********************字节读**********************/     
    uchar Byte_read(uint byte_addr)   
    {   
        EA = 0;                                        //关中断    
        ISP_CONTR = En_Wait_TIME;                   //开启ISP&IAP,并送等待时间    
        ISP_CMD = Read_COM;                         //送字节读命令字       
        ISP_ADDRH = (uchar)(byte_addr >> 8);          //送地址高字节    
        ISP_ADDRL = (uchar)(byte_addr & 0x00ff);    //送地址低字节        
        ISP_TRIG = 0x46;                            //送触发命令字0x46   
        ISP_TRIG = 0xB9;                            //送触发命令字0xB9   
        _nop_();   
        ISP_IAP_disable();                          //关闭ISP&IAP功能    
        EA = 1;                                     //开中断    
        return (ISP_DATA);   
    }     
    /*********************字节编程*********************/   
    void Byte_program(uint byte_addr,uchar isp_iap_data)   
    {   
        EA = 0;                                     //关中断    
        ISP_CONTR = En_Wait_TIME;                   //开启ISP&IAP,并送等待时间    
        ISP_CMD = Prog_COM;                         //送字节编程命令字      
        ISP_ADDRH = (uchar)(byte_addr >> 8);          //送地址高字节    
        ISP_ADDRL = (uchar)(byte_addr & 0x00ff);    //送地址低字节        
        ISP_DATA = isp_iap_data;                    //送数据进ISP_DATA    
        ISP_TRIG = 0x46;                            //送触发命令字0x46   
        ISP_TRIG = 0xB9;                            //送触发命令字0xB9   
        _nop_();   
        ISP_IAP_disable();                          //关闭ISP&IAP功能    
        EA = 1;                                     //开中断       
    }   
       
    /*********************扇区擦除*********************/   
    void Sector_erase(uint sector_addr)   
    {   
        EA = 0;                                     //关中断    
        ISP_CONTR = En_Wait_TIME;                   //开启ISP&IAP;并送等待时间    
        ISP_CMD = Erase_COM;                        //送扇区擦除命令字      
        ISP_ADDRH = (uchar)(sector_addr >> 8);       //送地址高字节    
        ISP_ADDRL = (uchar)(sector_addr & 0X00FF);    //送地址低字节        
        ISP_TRIG = 0X46;                            //送触发命令字0x46  
        ISP_TRIG = 0XB9;                            //送触发命令字0xB9   
        _nop_();   
        ISP_IAP_disable();                          //关闭ISP&IAP功能    
        EA = 1;   
    }  
    void main()   
    {      
        Sector_erase(0x2000);                       //扇区擦除    
        Byte_program(0x2000,0x88);                     //写EEPROM    
        _nop_();   
        _nop_();   
        _nop_(); 
        _nop_();   
        _nop_();   
        _nop_();   
        P0=Byte_read(0x2000);                        //读EEPROM
        while(1);    
    }
  • 相关阅读:
    C++中char*,String,int,CString间转换
    获取本地MAC地址和多IP
    子窗口
    linux记录键盘
    curses和窗口
    使用curses函数写的hello world 程序
    Java 复习笔记
    Ubuntu apt install 下载软件很慢的解决办法
    Ubuntu python多个版本管理
    VMware下的Ubuntu16设置连接主机网络,设置主机下可以通过xshell访问 VMware下的Ubuntu
  • 原文地址:https://www.cnblogs.com/tyjsjl/p/3367674.html
Copyright © 2011-2022 走看看