// 93C46讀寫程序,8位數(shù)據(jù)格式
#include
sbit CS_93C46=P2^7;
sbit SK_93C46=P2^6;
sbit DI_93C46=P2^5;
sbit DO_93C46=P2^4;
unsigned char RD_93C46_byte(unsigned char addr); // 讀93c46內(nèi)部指定地址的1個字節(jié)數(shù)據(jù)
void WR_93C46_byte(unsigned char addr,unsigned char dat); // 向93c46內(nèi)部指定地址寫1個字節(jié)數(shù)據(jù)
void EWEN_93C46(void); // 擦寫允許
void EWDS_93C46(void); // 擦寫禁止
void ERASE_93C46(unsigned char addr);// 擦除指定地址的數(shù)據(jù)
void delaynms(unsigned char k); // ms延時
void leddisplay(); // 數(shù)碼管顯示
unsigned char co
//共陰極代碼 0-F, 全滅,全亮
unsigned char ledxs[8]={16,16,16,16,16,0,0,0}; // 數(shù)碼管顯示緩沖區(qū)
void main()
{
unsigned char temp;
delaynms(200);
leddisplay();
delaynms(200);delaynms(200);delaynms(200);
WR_93C46_byte(0x01,123);
temp=RD_93C46_byte(0x01);
ledxs[7]=temp%10;
ledxs[6]=(temp/10)%10;
ledxs[5]=temp/100;
leddisplay();
while(1);
}
//--------------------------------------------------------------------
// 讀93c46內(nèi)部指定地址的1個字節(jié)數(shù)據(jù)
//--------------------------------------------------------------------
unsigned char RD_93C46_byte(unsigned char addr)
{
unsigned char dat=0,i;
SK_93C46=0;
CS_93C46=0;
CS_93C46=1;
DI_93C46=1;SK_93C46=1;SK_93C46=0;
DI_93C46=1;SK_93C46=1;SK_93C46=0;
DI_93C46=0;SK_93C46=1;SK_93C46=0; // 讀數(shù)據(jù)指令:110
for(i=0;i<7;i++) // 寫7位地址
{
addr<<=1;
if((addr&0x80)==0x80)
DI_93C46=1;
else
DI_93C46=0;
SK_93C46=1;
SK_93C46=0;
}
DO_93C46=1; // DO=1,為讀取做準備
for(i=0;i<8;i++) // 讀8位數(shù)據(jù)
{
dat<<=1;
SK_93C46=1;
if(DO_93C46) dat+=1;
SK_93C46=0;
}
CS_93C46=0;
return(dat);
}
//---------------------------------------------------------------------------------
// 向93c46內(nèi)部指定地址寫1個字節(jié)數(shù)據(jù)
//---------------------------------------------------------------------------------
void WR_93C46_byte(unsigned char addr,unsigned char dat)
{
unsigned char i;
EWEN_93C46(); // 擦寫允許
CS_93C46=0;
SK_93C46=0;
CS_93C46=1;
DI_93C46=1;SK_93C46=1;SK_93C46=0;
DI_93C46=0;SK_93C46=1;SK_93C46=0;
DI_93C46=1;SK_93C46=1;SK_93C46=0; // 寫數(shù)據(jù)指令:101
for(i=0;i<7;i++) // 寫7位地址
{
addr<<=1;
if((addr&0x80)==0x80)
DI_93C46=1;
else
DI_93C46=0;
SK_93C46=1;
SK_93C46=0;
}
for(i=0;i<8;i++) // 寫8位數(shù)據(jù)
{
if((dat&0x80)==0x80)
DI_93C46=1;
else
DI_93C46=0;
SK_93C46=1;
SK_93C46=0;
dat<<=1;
}
CS_93C46=0;
DO_93C46=1;
CS_93C46=1;
while(DO_93C46==0); // 檢測忙閑
SK_93C46=0;
CS_93C46=0;
EWDS_93C46(); // 擦寫禁止
}
//----------------------------------------------------------------------------
// 擦寫允許,指令格式:100 地址:11xxxxx (7位)
//----------------------------------------------------------------------------
void EWEN_93C46(void)
{
unsigned char i,addr;
CS_93C46=0;
SK_93C46=0;
CS_93C46=1;
DI_93C46=1;SK_93C46=1;SK_93C46=0;
DI_93C46=0;SK_93C46=1;SK_93C46=0;
DI_93C46=0;SK_93C46=1;SK_93C46=0; // 100
addr=0x7f; // 01111111B
for(i=0;i<7;i++) // 寫7位地址 11xxxxx
{
addr<<=1;
if((addr&0x80)==0x80)
DI_93C46=1;
else
DI_93C46=0;
SK_93C46=1;
SK_93C46=0;
}
CS_93C46=0;
}
//-----------------------------------------------------------------------------
// 擦寫禁止,指令格式:100 地址:00xxxxx (7位)
//-----------------------------------------------------------------------------
void EWDS_93C46(void)
{
unsigned char i,addr;
CS_93C46=0;
SK_93C46=0;
CS_93C46=1;
DI_93C46=1;SK_93C46=1;SK_93C46=0;
DI_93C46=0;SK_93C46=1;SK_93C46=0;
DI_93C46=0;SK_93C46=1;SK_93C46=0; // 100
addr=0x00; // 00000000B
for(i=0;i<7;i++) // 寫7位地址 00xxxxx
{
addr<<=1;
if((addr&0x80)==0x80)
DI_93C46=1;
else
DI_93C46=0;
SK_93C46=1;
SK_93C46=0;
}
CS_93C46=0;
}
//------------------------------------
//串行數(shù)碼管顯示
//------------------------------------
void leddisplay()
{
unsigned char i;
for(i=0;i<8;i++)
{
SBUF=tab[ledxs[i]];
while(TI==0);
TI=0;
}
}
//---------------------------------------------------------------
//延時 n ms
//---------------------------------------------------------------
void delaynms(unsigned char k)
{
while(k)
{
int i;
i=110;
while(i--);
k=k-1;
}
}