93C46可擦除芯片的使用程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
93C46可擦除芯片的使用程序
/*93C46芯片的基本使用程序*/
#include
#include
sbit spi_d=P1^1;
sbit spi_cs=P1^2;
sbit spi_clk=P1^4;
sbit spi_q=P1^5;
unsigned int dt=0;
unsigned char adr,j,rdt,temp,dta;
#define EWEN 0x98
#define ERAL 0x90
#define EWDS 0x80
int ef=0;
void init_93c()
{}
/*该函数实现对93c46芯片的读出数据操作(主要的操作就是送出地址然后读取数据)*/ unsigned char read_93c(unsigned char adr)
{
unsigned char j,rdt;
init_93c();
spi_cs=1;
dt=adr;
dt=dt<<6;
dt|=0xc000;
for(j=10;j>0;j--)
{
spi_d=dt&0x8000;
spi_clk=1;
_nop_();
spi_clk=0;
dt<<=1;
}
for(j=0;j<8;j++)
{
spi_clk=1;
_nop_();
_nop_();
rdt<<=1;
if(spi_q)
rdt++;
spi_clk=0;
}
spi_cs=0;
return(rdt);
}
/*写允许、写禁止、全擦除的通用设置函数*/ void com_93c(unsigned char cmd)
{
unsigned char j,temp;
unsigned int k;
temp=cmd;
init_93c();
spi_cs=1;
for(j=10;j>0;j++)
{
spi_d=cmd&0x80;
spi_clk=1;
spi_clk=0;
cmd<<=1;
}
spi_cs=0;
if(temp==ERAL)
{
spi_clk=1;
_nop_();
spi_clk=0;
spi_cs=1;
_nop_();
for(k=0;k<0xffff;k++)
{
spi_clk=1;
_nop_();
spi_clk=0;
if(spi_q) break;/*检测到输出ready信号就跳出*/ }
spi_cs=0;
if(k!=0)/*如果k不为0,说明擦除成功*/
ef=0;
else
ef=1;/*k=0说明整个循环下来都没有等到检测到ready信号*/ } }
/*该函数实现对93c46芯片实现写入数据的功能*/
void wtite_93(unsigned char adr,dta)
{
unsigned char j;
unsigned int dt,k;
com_93c(EWEN);
dt=adr;
dt=dt<<6;
dt|=0xa000;
for(j=10;j>0;j--)
{
spi_d=dt&0x8000;
spi_clk=1;
_nop_();
spi_clk=0;
dt<<=1;
}
dt=dta*256;
for(j=8;j>0;j--)
{
spi_d=dt&0x8000;
spi_clk=1;
_nop_();
spi_clk=0;
dt<<=1;
}
spi_cs=0;
spi_clk=1;
_nop_();
spi_clk=0;
spi_cs=1;
_nop_();
for(k=0;k<0xffff;k++) { spi_clk=1;
_nop_();
if(spi_q) break;
}
spi_cs=0;
if(k!=0)
ef=0;
else
ef=1;
com_93c(EWDS);
}
/*全擦除函数*/
void erase_93c(void) {
com_93c(EWEN);
com_93c(ERAL);
com_93c(EWDS); }
void main()
{
com_93c(EWEN); wtite_93(adr,dta); erase_93c(); read_93c(adr);
}。