標(biāo)題:
STC15W104 EEPROM測試程序
[打印本頁]
作者:
流淌的歌聲
時(shí)間:
2017-1-25 11:31
標(biāo)題:
STC15W104 EEPROM測試程序
資料下載:
15W104 EEPROM測試.zip
(14.27 KB, 下載次數(shù): 59)
2017-1-25 11:29 上傳
點(diǎn)擊文件名下載附件
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字節(jié)讀命令
#define CMD_PROGRAM 2 //IAP字節(jié)編程命令
#define CMD_ERASE 3 //IAP扇區(qū)擦除命令
uchar bright;
/***************延時(shí)程序*********************************/
void Delay(uchar n)
{
uint x;
while(n--)
{
x=0;
while(++x);
}
}
/****************關(guān)閉IAP********************************/
void IAPIdle()
{
IAP_CONTR =0; //關(guān)閉IAP功能
IAP_CMD =0; //清除命令寄存器
IAP_TRIG =0; //清除觸發(fā)寄存器
IAP_ADDRH =0x80; //將地址設(shè)置到非IAP區(qū)域
IAP_ADDRL =0; //
}
/****************從EEPROM讀一字節(jié)**************************/
uchar IAPReadByte(uint addr)
{
uchar dat; //數(shù)據(jù)緩沖區(qū)
IAP_CONTR =ENABLE_IAP; //使能IAP
IAP_CMD =CMD_READ; //設(shè)置IAP命令
IAP_ADDRL =addr; //設(shè)置IAP底地址
IAP_ADDRH =addr>>8; //設(shè)置IAP高地址
IAP_TRIG =0x5a; //寫觸發(fā)命令0x5a
IAP_TRIG =0xa5; //寫觸發(fā)命令0xa5
_nop_(); //等待EEPROM操作完成
dat=IAP_DATA; //讀EEPROM數(shù)據(jù)
IAPIdle(); //關(guān)閉IAP
return dat; //返回?cái)?shù)據(jù)
}
/***************寫一字節(jié)到EEPROM**************************/
void IAPProgramByte(uint addr,uchar dat)
{
IAP_CONTR =ENABLE_IAP; //使能IAP
IAP_CMD =CMD_PROGRAM; //設(shè)置IAP命令
IAP_ADDRL =addr; //設(shè)置IAP底地址
IAP_ADDRH =addr>>8; //設(shè)置IAP高地址
IAP_DATA=dat; //寫EEPROM數(shù)據(jù)
IAP_TRIG =0x5a; //寫觸發(fā)命令0x5a
IAP_TRIG =0xa5; //寫觸發(fā)命令0xa5
_nop_(); //等待EEPROM操作完成
IAPIdle(); //關(guān)閉IAP
}
/**************扇區(qū)擦除**********************************/
void IAPEraseSector(uint addr)
{
IAP_CONTR =ENABLE_IAP; //使能IAP
IAP_CMD =CMD_ERASE; //設(shè)置IAP命令
IAP_ADDRL =addr; //設(shè)置IAP底地址
IAP_ADDRH =addr>>8; //設(shè)置IAP高地址
IAP_TRIG =0x5a; //寫觸發(fā)命令0x5a
IAP_TRIG =0xa5; //寫觸發(fā)命令0xa5
_nop_(); //等待EEPROM操作完成
IAPIdle(); //關(guān)閉IAP
}
/**************主函數(shù)***********************************/
void main()
{
uint i;
bright=255;
P3=0xfe; //1111,1110系統(tǒng)OK
Delay(10); //延時(shí)
IAPEraseSector(IAP_ADDRESS); //扇區(qū)擦除
for(i=0;i<512;i++) //檢測是否擦除成功(全FF檢測)
{
if(IAPReadByte(IAP_ADDRESS+i)!=0xff)
goto Error; //如出錯(cuò),則退出
}
P3=0xfc; //1111,1100擦除成功
Delay(10);
IAPProgramByte(IAP_ADDRESS,bright); //編程字節(jié)
P3=0xf8; //1111,1000編程完成
Delay(10);
if(IAPReadByte(IAP_ADDRESS)!=255) //校驗(yàn)512字節(jié)
goto Error; //如校驗(yàn)錯(cuò)誤,則退出
P3=0xf0;
//1111,0000測試完成
while(1);
Error:
P3=0xcf; //1100,1111IAP操作失敗
while(1);
}
復(fù)制代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1