STC单片机内部EEPROM记录开机次数(c语言).docVIP

  • 80
  • 0
  • 约1.65千字
  • 约 4页
  • 2017-07-05 发布于河南
  • 举报

STC单片机内部EEPROM记录开机次数(c语言).doc

STC单片机内部EEPROM记录开机次数(c语言)

/*STC单片机内部EEPROM八位数码管显示开机次数。本文档仅以学习交流之用。*/ #includereg51.h #includeintrins.h typedef unsigned char BYTE; typedef unsigned int WORD; sfr IAP_DATA =0XE2;//STC15系列为0XC2 sfr IAP_ADDRH=0XE3;//STC15系列为0XC3 sfr IAP_ADDRL=0XE4;//STC15系列为0XC4 sfr IAP_CMD=0XE5;//STC15系列为0XC5 sfr IAP_TRIG=0XE6;//STC15系列为0XC6 sfr IAP_CONTR=0xe7;//STC15系列为0XC7 #define CMD_IALE 0 #define CMD_READ 1 #define CMD_PROGRAM 2 #define CMD_ERASE 3 #define ENABLE_IAP 0X81//根据单片机的频率选。详细见数据手册。我为12MHZ STC15系列: STC89C51: #define IAP_ADDRESS 0X2000//自己选择的扇区 unsigned char code dofly_table[10]={0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0X7f};//对应显示1~。 void IapIdle(); BYTE IapReadByte(WORD addr); void IapProramByte(WORD addr,BYTE dat); void IapErasector(WORD addr); void main() { BYTE i; i=IapReadByte(IAP_ADDRESS); IapErasector(IAP_ADDRESS); i++; IapProramByte(IAP_ADDRESS,i); P1=dofly_table[i]; while(1); } void IapIdle() { IAP_CONTR=0; IAP_CMD=0; IAP_TRIG=0; IAP_ADDRH=0X80; IAP_ADDRL=0; } BYTE IapReadByte(WORD addr) { BYTE dat; IAP_CONTR=ENABLE_IAP; IAP_CMD=CMD_READ; IAP_ADDRL=addr; IAP_ADDRH=addr8; IAP_TRIG=0X46;//STC15系列为0X5A IAP_TRIG=0Xb9;//STC15系列为0XA5 _nop_; dat=IAP_DATA; IapIdle(); return dat; } void IapProramByte(WORD addr,BYTE dat) { IAP_CONTR=ENABLE_IAP; IAP_CMD=CMD_PROGRAM; IAP_ADDRL=addr; IAP_ADDRH=addr8; IAP_DATA=dat; IAP_TRIG=0X46;//STC15系列为0X5A IAP_TRIG=0Xb9;//STC15系列为0XA5 _nop_; IapIdle(); } void IapErasector(WORD addr) { IAP_CONTR=ENABLE_IAP; IAP_CMD=CMD_ERASE; IAP_ADDRL=addr; IAP_ADDRH=addr8; IAP_TRIG=0X46;//STC15系列为0X5A IAP_TRIG=0Xb9;//STC15系列为0XA5 _nop_; IapIdle(); } 2014.11.24. 21:55 小谢

文档评论(0)

1亿VIP精品文档

相关文档