- #include<reg52.h>
- #include"stc12ceeprom.h"
- #define DEBUG_DATA 0x5A //本测试程序最终存储在 EEPROM 单元的数值
- #define DATA_flash_START_address 0x00 //STC5Axx 系列 EEPROM 测试起始地址
- sbit wei=P0^6;
- sbit duan=P0^7;
- //uchar code table[]="0123456789";
- /*uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
- 0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,
- 0xa1,0x86,0x8e,0x89};//0到H段码 */
- void delay(uint x)
- {
- uint z,j;
- for(z=x;z>0;z--)
- for(j=800;j>0;j--);
- }
- void main()
- {
- uint eeprom_add;
- uchar read_eeprom;
- P1=0XFF;
- delay(2000);
- P1=0XF0;
- delay(2000);
- //将EEPROM 测试起始地址单元的内容读出
- eeprom_add=DATA_flash_START_address;
- //将测试起始地址送给eeprom_address
- //读EEPROM的值,存到read_eeprom
- read_eeprom=Byte_read(eeprom_add);
- if(DEBUG_DATA ==read_eeprom)
- {
- //数据是对的然后在 P0 口上将 EEPROM 的数据显示出来
- // P1=~0xaa;
- P1=0xaa;
- delay(2000);
- // P1=~read_eeprom;
- P1=read_eeprom;
- }
- else//数据是错的然后在 P0 口上将 EEPROM 的数据显示出来
- {
- P1=~0x55;
- delay(1000);
- P1=~read_eeprom;
- delay(10);
- sector_Erase(eeprom_add);//擦除扇区
- //将 DEBUG_DATA 写入 EEPROM
- Byte_write(eeprom_add,DEBUG_DATA);//字节编?
- P1=~0Xaa;//熄灭 P1.3 控制的灯
-
- }
- while(1);
- }
- #ifndef __STC12CEEPROM_H__
- #define __STC12CEEPROM_H__
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- //用于STC12C2052
- //sfr IAP_DATA =0XE2;
- //sfr IAP_ADDRH =0XE3;
- //sfr IAP_ADDRL =0XE4;
- //sfr IAP_CMD =0XE5;
- //sfr IAP_TRIG =0XE6;
- //sfr IAP_CONTR =0XE7;
- //#define WD1 0X46
- //#define WD2 0XB9
- //用于STC12C5A60S3
- sfr IAP_DATA =0XC2;
- sfr IAP_ADDRH =0Xc3;
- sfr IAP_ADDRL =0Xc4;
- sfr IAP_CMD =0Xc5;
- sfr IAP_TRIG =0Xc6;
- //sfr IAP_CONTR =0Xc7;
- #define WD1 0X5A
- #define WD2 0XA5
- #define ENABLE_ISP 0X81
- uchar Byte_read(uint add);//读一字节 调用前打开IAP
- void Byte_write(uint add,uchar ch);//字节编程
- void sector_Erase(uint add);//擦除扇区
- void IAP_Disable();//关闭IAP
- uchar Byte_read(uint add)
- {
- IAP_DATA=0X00;
- IAP_CONTR=ENABLE_ISP;
- IAP_CMD =0X01;
- IAP_ADDRH=add/256;
- IAP_ADDRL =add%256;
- IAP_TRIG =WD1;
- IAP_TRIG =WD2;
- _nop_();_nop_();
- IAP_Disable();
- return (IAP_DATA);
- }
- void Byte_write(uint add,uchar ch)
- {
- IAP_CONTR =ENABLE_ISP;
- IAP_CMD =0X02;
- IAP_ADDRH=add/256;
- IAP_ADDRL =add%256;
- IAP_DATA=ch;
- IAP_TRIG =WD1;
- IAP_TRIG =WD2;
- _nop_();_nop_();
- IAP_Disable();
- }
- void sector_Erase(uint add)
- {
- IAP_CONTR =ENABLE_ISP;
- IAP_CMD =0X03;
- IAP_ADDRH=add/256;
- IAP_ADDRL =add%256;
- IAP_TRIG =WD1;
- IAP_TRIG =WD2;
- _nop_();_nop_();
- IAP_Disable();
- }
- void IAP_Disable()
- {
- IAP_CONTR =0;
- IAP_CMD =0;
- IAP_TRIG =0;
- IAP_ADDRH=0;
- IAP_ADDRL =0;
- }
- #endif
复制代码
|