×
单片机 > 单片机程序设计 > 详情

STC11F02E_EEPROM 头文件

发布时间:2020-06-03 发布时间:
|
/*************************************************************/

/*****File  Function :  STC11F02E_EEPROM Read and Write  *****/
/*****Program Author :  ZhengWen(ClimberWin)             *****/
/*****Compile Date   :  2009/3/3                         *****/
/*****Edition Info   :  V1.0                             *****/
/*************************************************************/
/*****Amend   Date   :  2009.3.3                         *****/
/*****修改内容:修改读写子程序,使得更加的简洁********/
/*************************************************************/
#ifndef __STC11FXX_EEPROM_CLIMBERWIN__
#define __STC11FXX_EEPROM_CLIMBERWIN__
#define uchar unsigned char
#define uint  unsigned int          
#include
/*******************************************************/

/*****STC11FXX特殊功能寄存器定义********/
sfr  isp_wdt     = 0xc1;
sfr  isp_data    = 0xc2;
sfr  isp_addrh   = 0xc3;
sfr  isp_addrl   = 0xc4;
sfr  isp_cmd     = 0xc5;
sfr  isp_trig    = 0xc6;
sfr  isp_contr   = 0xc7;
/*****************************************/

/***************STC11FXX扇区擦除程序*************************/
void STC89CXX_EEPROM_Erase(unsigned char t_addr)
{
    isp_addrh = t_addr;   //可以不要 扇区里任意一个字节的地址都是扇区地址,无需求首地址,单片机会自己处理
    isp_addrl = 0;
    EA    =    0;         //关中断
    isp_contr = 0x81;      
    isp_cmd = 3;          //扇区擦除,要某字节为空,必须擦除1个扇区
    isp_trig = 0x5a;     //先送0x5a再送 0xa5 ISP/IAP 触发寄存器,每次都需要如此
    isp_trig = 0xa5;     //送完0xa5后 ISP/IAP 立即被触发启动
    _nop_();
    _nop_();
    isp_contr = 0;   
    isp_cmd = 0;
    isp_trig = 0;
    isp_addrh = 0;
    isp_addrl = 0;
   // EA = 1;                 // 开中断
}
/***********************************************/


/***************STC11FXX_EEPROM字节写程序*************************/

void STC89CXX_EEPROM_Char_Write(unsigned int Write_addr ,unsigned char Write_data)
{
      
        isp_data = Write_data;
        isp_addrh = Write_addr/256;     //送地址高位
        isp_addrl = Write_addr%256;    //地址低位
        EA =  0;                     /* 关中断 */
        isp_contr = 0x81;      
        isp_cmd = 2;                //送扇区命令
        isp_trig = 0x5a;;
        isp_trig = 0xa5;
        _nop_();
        _nop_();
        isp_contr = 0;              
        isp_cmd = 0;
        isp_trig = 0;
        isp_addrh = 0;
        isp_addrl = 0;        
       // EA = 1;                    /* 开中断 */
   
}
/**************************************************************/

/***************STC11FXX_EEPROM字节读程序*************************/

STC89CXX_EEPROM_Char_Read(unsigned int Read_addr)
{
  
       
        isp_addrh = Read_addr/256;  //送地址高字节
        isp_addrl = Read_addr%256;  //送地址低字节(从0开始到num-1为止)
        EA = 0;                /* 关中断 */
        isp_contr = 0x81;      /*20M,是0x80 orl 1 */
        isp_cmd = 1;           // 1表示字节读
        isp_trig = 0x5a;       //先送0x5a再送 0xb9 ISP/IAP 触发寄存器,每次都需要如此
        isp_trig = 0xa5;       //送完0xa5后 ISP/IAP 立即被触发启动
        _nop_();               //空指令
        _nop_();               //空指令
        isp_contr = 0;         //禁止ISP/IAP 操作
        isp_cmd = 0;           //去除ISP/IAP 命令
        isp_trig = 0;          //防止 ISP/IAP 命令误触发
        isp_addrh = 0;         //地址指向非EEPROM地址区,防止误操作
        isp_addrl = 0;        
      //  EA = 1;                            /* 开中断 */
        return(isp_data);
   

/**************************************************************/

/*******************************************************************************/

#endif



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
AVR熔丝位操作时的要点和需要注意的相关事项