网站公告列表     本站开通全国范围代收货款业务,详情请点击  [dycxin  2008年5月14日]        
加入收藏
设为首页
联系站长
您现在的位置: EDA加油站 >> 51单片机 >> 51入门 >> C语言 >> 正文
  [推荐]93c46读写程序          【字体:
93c46读写程序
93c46读写程序
作者:admin    51单片机来源:网络    点击数:    更新时间:2007-8-4    
“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);

51单片机录入:dycxin    责任编辑:dycxin 
  • 上一个51单片机:

  • 下一个51单片机:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    DS18B20温度传感器C51程序,…
    基于频谱分析的机电设备状态…
    AT89s8252单片机在3G基站控制…
    单片机实现智能荧光鉴伪
    智能盲人导行仪的设计与实现
    基于AT89C51型单片机的CAN总…
    STC单片机IO管脚毁坏动态自检…
    具备跳号跳频和跳址的nrf905…
    51单片机边沿触发中断响应时…
    8051单片机在线升级软件的方…
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    EDA加油站|我要EDA网|山东电子网--东营市荣燕商贸有限公司版权所有! 站长:阿荣
    联系电话:0546-7870320,13371507828 电邮:51edacn@163.com
    山东东营西城济南路百祥电脑商城B302室 邮编:257000 鲁ICP备07018763号  鲁ICP备07000091号 鲁ICP备05003434号
    公司帐号:1615011209000037682 户名:东营市荣燕商贸有限公司 开户行:工行西城支行石油大学分理处