标题:
STC15W104 EEPROM测试程序
[打印本页]
作者:
流淌的歌声
时间:
2017-1-25 11:31
标题:
STC15W104 EEPROM测试程序
资料下载:
15W104 EEPROM测试.zip
(14.27 KB, 下载次数: 59)
2017-1-25 11:29 上传
点击文件名下载附件
15W104 EEPROM测试
下载积分: 黑币 -5
/*******************************************************
STC15W104 EEPROM测试
测试芯片工作频率为11.0592MHz
/********************************************************/
#include <STC_NEW_8051.H>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define ENABLE_IAP 0x82
#define IAP_ADDRESS 0x0000
#define CMD_IDLE 0 //空闲模式
#define CMD_READ 1 //IAP字节读命令
#define CMD_PROGRAM 2 //IAP字节编程命令
#define CMD_ERASE 3 //IAP扇区擦除命令
uchar bright;
/***************延时程序*********************************/
void Delay(uchar n)
{
uint x;
while(n--)
{
x=0;
while(++x);
}
}
/****************关闭IAP********************************/
void IAPIdle()
{
IAP_CONTR =0; //关闭IAP功能
IAP_CMD =0; //清除命令寄存器
IAP_TRIG =0; //清除触发寄存器
IAP_ADDRH =0x80; //将地址设置到非IAP区域
IAP_ADDRL =0; //
}
/****************从EEPROM读一字节**************************/
uchar IAPReadByte(uint addr)
{
uchar dat; //数据缓冲区
IAP_CONTR =ENABLE_IAP; //使能IAP
IAP_CMD =CMD_READ; //设置IAP命令
IAP_ADDRL =addr; //设置IAP底地址
IAP_ADDRH =addr>>8; //设置IAP高地址
IAP_TRIG =0x5a; //写触发命令0x5a
IAP_TRIG =0xa5; //写触发命令0xa5
_nop_(); //等待EEPROM操作完成
dat=IAP_DATA; //读EEPROM数据
IAPIdle(); //关闭IAP
return dat; //返回数据
}
/***************写一字节到EEPROM**************************/
void IAPProgramByte(uint addr,uchar dat)
{
IAP_CONTR =ENABLE_IAP; //使能IAP
IAP_CMD =CMD_PROGRAM; //设置IAP命令
IAP_ADDRL =addr; //设置IAP底地址
IAP_ADDRH =addr>>8; //设置IAP高地址
IAP_DATA=dat; //写EEPROM数据
IAP_TRIG =0x5a; //写触发命令0x5a
IAP_TRIG =0xa5; //写触发命令0xa5
_nop_(); //等待EEPROM操作完成
IAPIdle(); //关闭IAP
}
/**************扇区擦除**********************************/
void IAPEraseSector(uint addr)
{
IAP_CONTR =ENABLE_IAP; //使能IAP
IAP_CMD =CMD_ERASE; //设置IAP命令
IAP_ADDRL =addr; //设置IAP底地址
IAP_ADDRH =addr>>8; //设置IAP高地址
IAP_TRIG =0x5a; //写触发命令0x5a
IAP_TRIG =0xa5; //写触发命令0xa5
_nop_(); //等待EEPROM操作完成
IAPIdle(); //关闭IAP
}
/**************主函数***********************************/
void main()
{
uint i;
bright=255;
P3=0xfe; //1111,1110系统OK
Delay(10); //延时
IAPEraseSector(IAP_ADDRESS); //扇区擦除
for(i=0;i<512;i++) //检测是否擦除成功(全FF检测)
{
if(IAPReadByte(IAP_ADDRESS+i)!=0xff)
goto Error; //如出错,则退出
}
P3=0xfc; //1111,1100擦除成功
Delay(10);
IAPProgramByte(IAP_ADDRESS,bright); //编程字节
P3=0xf8; //1111,1000编程完成
Delay(10);
if(IAPReadByte(IAP_ADDRESS)!=255) //校验512字节
goto Error; //如校验错误,则退出
P3=0xf0;
//1111,0000测试完成
while(1);
Error:
P3=0xcf; //1100,1111IAP操作失败
while(1);
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1