历史上的今天
今天是:2025年01月07日(星期二)
2020年01月07日 | (51基础篇) - 021 STC89C51系列单片机 内部EEPROM 驱动
2020-01-07 来源:elecfans
最近又看了一下关于stc单片机的知识,感觉在使用中EEPROM是个经常用到的东西,特地学习了一下,给大家分享一下心得,如有不足,多多包涵,废话不多说,一图解千言,先上图:

/*--------------------------------------------------------------分界线-----------------------------------------------------------------------------------*/
main_eepprom.c
1 #include 2 3 #ifdef EEPROM 4 #include "eeprom.h" 5 #endif 6 7 # define LEDALL P1 8 9 void Delay(int n){ 10 unsigned int x; 11 while (n--) { 12 x = 0; 13 while (++x); 14 } 15 } 16 17 void main(){ 18 char i; 19 unsigned char temp,temp0,temp1; 20 while (1){ 21 for(i=0; i<4; i++){ 22 temp0 = STC_EEPROM_assign_Read(0,0); 23 temp1 = STC_EEPROM_assign_Read(0,1); 24 temp = (temp0 %16)+((temp1/16)*16); 25 LEDALL = ~temp; 26 Delay(1); 27 temp = 0x11<28 temp0 = temp %16; 29 temp1 = (temp / 16)*16; 30 SCT_EEPROM_assign_Write(0,0,temp0); 31 SCT_EEPROM_assign_Write(0,1,temp1); 32 temp = 0; 33 } 34 } 35 } Eeprom.h 1 /*-------------------------------------------------------------------------- 2 eeprom.h 3 4 --------------------------------------------------------------------------*/ 5 6 #ifndef __EEPROM_H__ 7 #define __EEPROM_H__ 8 #include "intrins.h" 9 10 /*声明与IAP相关的SFR寄存器 */ 11 sfr IAP_DATA = 0xE2; //闪存数据寄存器 12 sfr IAP_ADDRH = 0xE3; //Flash地址为HIGH 13 sfr IAP_ADDRL = 0xE4; //Flash地址为LOW 14 sfr IAP_CMD = 0xE5; //Flash命令寄存器 15 sfr IAP_TRIG = 0xE6; //Flash命令触发器 16 sfr IAP_CONTR = 0xE7; //闪存控制寄存器 17 /*宏定义 ISP/IAP/EEPROM 命令*/ 18 #define EEPROM_CMD_IDLE 0 //支持 19 #define EEPROM_CMD_READ 1 //字节读 20 #define EEPROM_CMD_PROGRAM 2 //字节编程 21 #define EEPROM_CMD_ERASE 3 //扇区擦除 22 /*IAP_CONTR定义ISP / IAP / EEPROM 时钟操作常量*/ 23 #define EEPROM_ENABLE_IAP 0x80 //开启IAP功能 24 //Clock 时钟配置 25 #define Clock_20M_40M 0x00 //if SYSCLK<40MHz 26 #define Clock_10M_20M 0x01 //if SYSCLK<20MHz 27 #define Clock_5M_10M 0x02 //if SYSCLK<10MHz 28 #define Clock_0M_5M 0x03 //if SYSCLK<5MHz 29 30 //EEPROM的起始地址 31 #define EEPROM_BASE_ADDRESS 0x0000 32 //STC89C51系列 33 #define STC89x51_EEPROM_Start_ADDRESS EEPROM_BASE_ADDRESS+0x01000 //STC89C/LE51 34 #define STC89x52_EEPROM_Start_ADDRESS EEPROM_BASE_ADDRESS+0x02000 //STC89C/LE52 35 #define STC89x53_EEPROM_Start_ADDRESS EEPROM_BASE_ADDRESS+0x03000 //STC89C/LE53 36 #define STC89x54_EEPROM_Start_ADDRESS EEPROM_BASE_ADDRESS+0x04000 //STC89C/LE54 37 #define STC89x58_EEPROM_Start_ADDRESS EEPROM_BASE_ADDRESS+0x08000 //STC89C/LE58 38 #define STC89x510_EEPROM_Start_ADDRESS EEPROM_BASE_ADDRESS+0x0A000 //STC89C/LE510 39 #define STC89x512_EEPROM_Start_ADDRESS EEPROM_BASE_ADDRESS+0x0C000 //STC89C/LE512 40 #define STC89x514_EEPROM_Start_ADDRESS EEPROM_BASE_ADDRESS+0x0E000 //STC89C/LE514 41 //STC89C51RC/RD+系列 42 #define STC89x51RC_EEPROM_Start_ADDRESS EEPROM_BASE_ADDRESS+0x01000 //STC89C/LE51RC/RD+ 43 #define STC89x52RC_EEPROM_Start_ADDRESS EEPROM_BASE_ADDRESS+0x02000 //STC89C/LE52RC/RD+ 44 #define STC89x54RC_EEPROM_Start_ADDRESS EEPROM_BASE_ADDRESS+0x04000 //STC89C/LE54RC/RD+ 45 #define STC89x58RC_EEPROM_Start_ADDRESS EEPROM_BASE_ADDRESS+0x08000 //STC89C/LE58RC/RD+ 46 #define STC89x510RC_EEPROM_Start_ADDRESS EEPROM_BASE_ADDRESS+0x0A000 //STC89C/LE510RC/RD+ 47 #define STC89x512RC_EEPROM_Start_ADDRESS EEPROM_BASE_ADDRESS+0x0C000 //STC89C/LE512RC/RD+ 48 #define STC89x514RC_EEPROM_Start_ADDRESS EEPROM_BASE_ADDRESS+0x0E000 //STC89C/LE514RC/RD+ 49 //STC90C51系列 50 #define STC90x51_EEPROM_Start_ADDRESS EEPROM_BASE_ADDRESS+0x01000 //STC90C/LE51 51 #define STC90x52_EEPROM_Start_ADDRESS EEPROM_BASE_ADDRESS+0x02000 //STC90C/LE52 52 #define STC90x54_EEPROM_Start_ADDRESS EEPROM_BASE_ADDRESS+0x04000 //STC90C/LE54 53 #define STC90x58_EEPROM_Start_ADDRESS EEPROM_BASE_ADDRESS+0x08000 //STC90C/LE58 54 #define STC90x510_EEPROM_Start_ADDRESS EEPROM_BASE_ADDRESS+0x0A000 //STC90C/LE510 55 #define STC90x512_EEPROM_Start_ADDRESS EEPROM_BASE_ADDRESS+0x0C000 //STC90C/LE512 56 #define STC90x514_EEPROM_Start_ADDRESS EEPROM_BASE_ADDRESS+0x0E000 //STC90C/LE514 57 //STC90C51RC/RD+系列 58 #define STC90x51RC_EEPROM_Start_ADDRESS EEPROM_BASE_ADDRESS+0x01000 //STC90C/LE51RC/RD+ 59 #define STC90x52RC_EEPROM_Start_ADDRESS EEPROM_BASE_ADDRESS+0x02000 //STC90C/LE52RC/RD+ 60 #define STC90x12RC_EEPROM_Start_ADDRESS EEPROM_BASE_ADDRESS+0x03000 //STC90C/LE52RC/RD+ 61 #define STC90x54RC_EEPROM_Start_ADDRESS EEPROM_BASE_ADDRESS+0x04000 //STC90C/LE54RC/RD+ 62 #define STC90x58RC_EEPROM_Start_ADDRESS EEPROM_BASE_ADDRESS+0x08000 //STC90C/LE58RC/RD+ 63 #define STC90x510RC_EEPROM_Start_ADDRESS EEPROM_BASE_ADDRESS+0x0A000 //STC90C/LE510RC/RD+ 64 #define STC90x512RC_EEPROM_Start_ADDRESS EEPROM_BASE_ADDRESS+0x0C000 //STC90C/LE512RC/RD+ 65 #define STC90x514RC_EEPROM_Start_ADDRESS EEPROM_BASE_ADDRESS+0x0E000 //STC90C/LE514RC/RD+ 66 //STC12xx052AD系列 67 #define STC12xx052AD_EEPROM_Start_ADDRESS EEPROM_BASE_ADDRESS+0x00000 //STC12xx052AD 68 69 70 //EEPROM SIZE 71 #define Sector_size 0x0200 72 //STC89C51系列 73 #define STC89x51_EEPROM_Sector_Number 18 74 #define STC89x52_EEPROM_Sector_Number 10 75 #define STC89x53_EEPROM_Sector_Number 4 76 #define STC89x54_EEPROM_Sector_Number 90 77 #define STC89x58_EEPROM_Sector_Number 58 78 #define STC89x510_EEPROM_Sector_Number 44 79 #define STC89x512_EEPROM_Sector_Number 28 80 #define STC89x514_EEPROM_Sector_Number 12 81 //STC89C51RC/RD+系列 82 #define STC89x51RC_EEPROM_Sector_Number 8 83 #define STC89x52RC_EEPROM_Sector_Number 8 84 #define STC89x54RC_EEPROM_Sector_Number 90 85 #define STC89x58RC_EEPROM_Sector_Number 58 86 #define STC89x510RC_EEPROM_Sector_Number 42 87 #define STC89x512RC_EEPROM_Sector_Number 26 88 #define STC89x514RC_EEPROM_Sector_Number 10 89 //STC90C51系列 90 #define STC90x51_EEPROM_Sector_Number 10 91 #define STC90x52_EEPROM_Sector_Number 10 92 #define STC90x54_EEPROM_Sector_Number 90 93 #define STC90x58_EEPROM_Sector_Number 58
史海拾趣
|
我从汉邦16路录像机输出的16路视频信号 通过75-5 能传送多远的距离? 我实际要传送到1公里左右的距离,1公里外只要看就行了 中间要加视频信号放大器吗?… 查看全部问答> |
|
#include unsigned char i,j; unsigned char code tab[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd, 0x87,0xff,0xef} ; void Init_Com( ...… 查看全部问答> |
|
lantronix程序对硬件进行设置时候出现问题,请高手帮忙解决! 单位购买了一套系统,使用非接触IC卡消费机实现对卡上消费数据的操作,串口处标识的为rs232 rs485。现在由于服务器故障,要重新安装调试服务器,但是我把当初对消费机设置的软件弄丢了,只能在网上找了lantronix的不同版本来做设置,总是不能通过。 ...… 查看全部问答> |
|
我在测试人家的USB仿真模型时碰到了大问题 我用自己写的数据发送模块仿真USB HOST的数据发送,将数据 发送给要测试的USB DEVICE的仿真模型,当我发送完第一个SETUP 包后 USB DEVICE是不是应该回一个ACK信号啊? 为什么我的USB DEVICE的仿真模型 ...… 查看全部问答> |
|
和很多痴迷电子的工程师一样,自己家中常常进行一些实验,螺丝刀到示波器,必须的开发及测试设备虽然简单却也一应俱全,平常用的电子器件和芯片也是大袋小兜的数不尽,如果用到外国的料,一般只好到外国网站找,好像Findchips,oemtrade,但都需要用信 ...… 查看全部问答> |




