首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 单元电路介绍 > 其它电路
基于C51单片机的93c46读写程序
来源:本站整理  作者:佚名  2011-12-16 06:31:42



“93c46读写程序
#include?
sbit?CS=P2^7;
sbit?SK=P2^6;
sbit?DI=P2^5;
sbit?DO=P2^4;

/*
extern?unsigned?char?ReadChar(unsigned?char?address);
extern?void?WriteChar(unsigned?char?address,unsigned?char?InData);
extern?void?ReadString(unsigned?char?data?*RamAddress,unsigned?char?RomAddress,
unsigned?char?Number);
extern?void?WriteString(unsigned?char?data?*RamAddress,unsigned?char?RomAddress,unsigned?char?Number);
*/

//?Write?enable?must?precede?all?programming?modes.
void?Ewen(void)?{
  unsigned?char?temp,InData;
  CS=0;?
  SK=0;
  CS=1;
   InData=0x98;?//?10011XXXX
   for(temp=9;temp!=0;temp--)?{?//?9
   DI=InData&0x80;
   SK=1;?SK=0;
   InData<<=1;
   }
  CS=0;
}

//?DISAbles?all?programming?instructions.
void?Ewds(void)?{
   unsigned?char?temp,InData;
   CS=0;
   SK=0;
   CS=1;
   InData=0x80;?//?10000XXXX
   for(temp=9;temp!=0;temp--)?{?//?9
   DI=InData&0x80;
   SK=1;?SK=0;
   InData<<=1;
   }
   CS=0;
}

// Reads?data?stored?in?memory,?at?specified?address.
unsigned?int?Read(unsigned?char?address)?{
  unsigned?char?temp;
  unsigned?int?result;
  Ewen();
  SK=0;?DI=1;?//?110?A5-A0
  CS=0;?CS=1;
  SK=1;?SK=0;???//?1
   address=address&0x3f|0x80;
   for(temp=8;temp!=0;temp--)?{?//?8
   DI=address&0x80;
   SK=1;?SK=0;
   address<<=1;
  }
  DO=1;
   for(temp=16;temp!=0;temp--)?{?//?16
   SK=1;
   result=(result<<1)|DO;
   SK=0;
   }
   CS=0;
  Ewds();
   return(result);
}

//?Writes?memory?LOCation?An?-?A0.
void?Write(unsigned?char?address,unsigned?int?InData)?{
   unsigned?char?temp;
   Ewen();
  SK=0;?DI=1;?//?101?A5-A0
   CS=0;?CS=1;
   SK=1;?SK=0;???//?1
   address=address&0x3f|0x40;
   for(temp=8;temp!=0;temp--)?{?//?8
    DI=address&0x80;
    SK=1;?SK=0;
  address<<=1;
  }
  for(temp=16;temp!=0;temp--)?{?//?16
    DI=InData&0x8000;
    SK=1;?SK=0;
    InData<<=1;
   }
    CS=0;?DO=1;
    CS=1;?SK=1;
   while(DO==0)?{???//?busy?test
    SK=0;?SK=1;
   }
   SK=0;?CS=0;
   Ewds();
}

/*
//?Erase?memory?location?An?-?A0.
void?Erase(unsigned?char?address)?{
   unsigned?char?temp;
   Ewen();
   SK=0;?DI=1;?//?111?A5-A0
   CS=0;?CS=1;
   SK=1;?SK=0;???//?1
   address|=0xc0;
   for(temp=8;temp!=0;temp--)?{?//?8
   DI=address&0x80;
   SK=1;?SK=0;
   address<<=1;
   }
  CS=0;?DO=1;
   CS=1;?SK=1;
  while(DO==0)?{
   SK=0;?SK=1;
   }
   SK=0;?CS=0;
   Ewds();
}

//?Erases?all?memory?locations.?Valid?only?at?VCC?=?4.5V?to?5.5V.
void?Eral(void)?{
   unsigned?char?temp,InData;
    Ewen();
    CS=0;
    SK=0;
    CS=1;
   InData=0x90;?//?10010XXXX
   for(temp=9;temp!=0;temp--)?{?//?9
    DI=InData&0x80;
    SK=1;?SK=0;
     InData<<=1;
  }
   CS=0;?DO=1;
     CS=1;?SK=1;
    while(DO==0)?{
   SK=0;?SK=1;
  }
   SK=0;?CS=0;
   Ewds();
}

//?Writes?all?memory?locations.?Valid?only?at?VCC?=?4.5V?to?5.5V.
void?Wral(unsigned?int?InData)?{
   unsigned?char?temp,address;
   Ewen();
   CS=0;
   SK=0;
   CS=1;
   address=0x88;?//?10001XXXX
   for(temp=9;temp!=0;temp--)?{?//?9
    DI=address&0x80;
    SK=1;?SK=0;
    address<<=1;
   }
   for(temp=16;temp!=0;temp--)?{?//?16
   DI=InData&0x8000;
   SK=1;?SK=0;
   InData<<=1;
  }
   CS=0;?DO=1;
   CS=1;?SK=1;
   while(DO==0)?{
    SK=0;?SK=1;
   }
    SK=0;?CS=0;
   Ewds();
}

*/

unsigned?char?ReadChar(unsigned?char?address)?{
    unsigned?char?temp=address>>1;
    if(address&0x01)?return((unsigned?char)(Read(temp)>>8));
    else?return((unsigned?char)(Read(temp)));
}

void?WriteChar(unsigned?char?address,unsigned?char?InData)?{
   unsigned?char?temp=address>>1;
    if(address&0x01)?Write(temp,(unsigned?int)(Read(temp)&0x00ff|(InData<<8)));
    else?Write(temp,(unsigned?int)(Read(temp)&0xff00|InData));
}

void?ReadString(unsigned?char?data?*RamAddress,unsigned?char?RomAddress,unsigned?char?Number)?{
    while(Number!=0)?{
     *RamAddress=ReadChar(RomAddress);
     RamAddress++;
     RomAddress++;
    Number--;
  }
}

void?WriteString(unsigned?char?data?*RamAddress,unsigned?char?RomAddress,unsigned?char?Number)?{
    unsigned?int?temp;
   if(Number==0)?return;
  if(RomAddress&0x01)?{
    WriteChar(RomAddress,*RamAddress);
   RamAddress++;
   RomAddress++;
   Number--;
   }
   if(Number==0)?return;
  while(Number>>1)?{
   temp=*RamAddress;
   RamAddress++;
   temp=temp|(*RamAddress)<<8;
   RamAddress++;
   Write(RomAddress>>1,temp);
   RomAddress++;
   RomAddress++;
   Number--;
    Number--;
   }
   if(Number)?WriteChar(RomAddress,*RamAddress);

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:23,117.19000 毫秒