标题:
STC12C5A片内EEPROM测试程序
[打印本页]
作者:
腾飞的龙
时间:
2015-10-1 08:43
标题:
STC12C5A片内EEPROM测试程序
#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
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1