老古开发网首页
导航:老古开发网首页文章索引索引第2345页文章分类单片机第31页→[24C512程序]
| -文章搜索 - 最新文章 - |

第2166篇:24C512程序

发布时间:2006年7月11日 点击次数:1598
来源:   作者:
 

#include <REG52.H>
#include <stdio.h>

sbit escl=P0^3;      
sbit esda=P0^2;
void w24c512(uchar pageadr,uchar wdataadr,uchar wdata);//一个字节写入24C512子程序,入口:uchar pageadr,uchar wdataadr,uchar wdata
uchar r24c512(uchar pageadr,uchar wdataadr);//从24C512中读取一个字节,入口uchar pageadr,uchar wdataadr,有返回值
void delay_10us(void);

 //==================//写24C512子程序单字节//==================
//============//入口:uchar pageadr,uchar wdataadr,uchar wdata========
void w24c512(usigned char device,unsigned int wdataadr,uchar wdata)
{
uchar i,msb,lsb;
uchar deviceadr;
escl=0;
delay_10us();
esda=1;
delay_10us();
escl=1;
delay_10us();
esda=0;
delay_10us();
escl=0;
//开始时序

if (device==0)
{
deviceadr=0xa0;
}
else
{
deviceadr=0xa2;
}
order=deviceadr;
for(i=0;i<8;i++)
 {
 esda=order7;
 delay_10us();
 escl=1;
 delay_10us();
 escl=0;
 delay_10us();
 order=order<<1;
 }
 delay_10us();
 escl=1;
 delay_10us();
 escl=0; 
//page adr sequ
 msb=wdataadr/256;
 lsb=wdataadr % 256; 
 order=msb;
    for(i=0;i<8;i++)
 {
 esda=order7;
 delay_10us();
 escl=1;
 delay_10us();
 escl=0;
 delay_10us();
 order=order<<1;
 }
 delay_10us();
 escl=1;
 delay_10us();
 escl=0;
//msb高字节

 order=lsb;
    for(i=0;i<8;i++)
 {
 esda=order7;
 delay_10us();
 escl=1;
 delay_10us();
 escl=0;
 delay_10us();
 order=order<<1;
 }
 delay_10us();
 escl=1;
 delay_10us();
 escl=0;
//lsb低字节

 order=wdata;
    for(i=0;i<8;i++)
 {
 esda=order7;
 delay_10us();
 escl=1;
 delay_10us();
 escl=0;
 delay_10us();
 order=order<<1;
 }
 delay_10us();
 escl=1;
 delay_10us();
 escl=0; 
//want to write a byte

esda=0;
delay_10us();
escl=1;
delay_10us();
esda=1;
delay_10us();
escl=0;
delay_10us();
delay_10us();
delay_10us();
}
//stop

 


//==================//读24C512子程序单字节//==================
//==================//入口:uchar pageadr,uchar wdataadr,有返回值======
uchar r24c16(usigned char device,unsigned int wdataadr,uchar wdata){
uchar i,msb,lsb,deviceadr;


escl=0;
delay_10us();
esda=1;
delay_10us();
escl=1;
delay_10us();
esda=0;
delay_10us();
escl=0;
//start sequ

if (device==0)
{
deviceadr=0xa0;
}
else
{
deviceadr=0xa2;
}
order=deviceadr;
for(i=0;i<8;i++)
 {
 esda=order7;
 delay_10us();
 escl=1;
 delay_10us();
 escl=0;
 delay_10us();
 order=order<<1;
 }
 delay_10us();
 escl=1;
 delay_10us();
 escl=0; 
//page adr sequ
 
 msb=wdataadr/256;
 lsb=wdataadr % 256; 
 order=msb;

    for(i=0;i<8;i++)
 {
 esda=order7;
 delay_10us();
 escl=1;
 delay_10us();
 escl=0;
 delay_10us();
 order=order<<1;
 }
 delay_10us();
 escl=1;
 delay_10us();
 escl=0; 
//unit adr sequ


 order=lsb;
    for(i=0;i<8;i++)
 {
 esda=order7;
 delay_10us();
 escl=1;
 delay_10us();
 escl=0;
 delay_10us();
 order=order<<1;
 }
 delay_10us();
 escl=1;
 delay_10us();
 escl=0; 
//unit adr sequ

 


 

 escl=0;
 delay_10us();
 esda=1;
 delay_10us();
 escl=1;
 delay_10us();
 esda=0;
 delay_10us();
 escl=0;
//restart

if (device==0)
{
deviceadr=0xa1;
}
else
{
deviceadr=0xa3;
}
 order=deviceadr;
 for(i=0;i<8;i++)
 {
 esda=order7;
 delay_10us();
 escl=1;
 delay_10us();
 escl=0;
 delay_10us();
 order=order<<1;
 }
 delay_10us();
 escl=1;
 delay_10us();
 escl=0; 
//page adr sequ

 order=0x00;
 esda=1;

 for(i=0;i<8;i++)
 {
 order=order<<1; 
 escl=1;
 delay_10us();
 order0=esda;
 delay_10us();
 escl=0;
 delay_10us();
  }
 //read data
  esda=1;
 escl=1;
 delay_10us();
 escl=0;
 //ack

esda=0;
delay_10us();
escl=1;
delay_10us();
esda=1;
delay_10us();
escl=0;
delay_10us();
delay_10us();
delay_10us();
wdataadr=order;
return(wdataadr);
}
//stop

void delay_10us(void)
{
 unsigned int  i;
 for(i=0;i<600;i++)
 {
 
 }
}



欢迎进入老古论坛进行讨论
[单片机] 相关文章:
(转)XD5101实验二----按键计数(led显示)
简介:
程序功能:按键计数。每个键对应数码管一位。按键1位数加1,键2十位数加1,键3百位数加1,键4千位数加1。超过量程,清零。 程序源码: #include&lt;reg52.h&gt; #define uchar unsigned char sbit s1 = P2^3; sbit s2 = P2^0; sbit s3 = P2^1; sbit s4 = P2^2; sbit en = P2^5; sbit Key1= P3^2; sbit Key2= P3^3; sbit Key3......

关于硬件设计的几点小窍门之系统效率
PCB设计规范系列之一(摘)
关于硬件设计的几点小窍门之成本节约
关于硬件设计的几点小窍门之信号完整性
 
下一个:[单片机]A51 2.2.2 英特尔/爱特梅尔WM251的CPU寄存器
简介:
除了传统8051中的4个寄存器堆,每个堆8个寄存器之外,251架构支持一个额外的32字节的寄存器。低8字节被分配的地址是00:00-00:0x1F。低8字节这样分配,是为了支持8051微处理器的寄存器堆。寄存器堆可由以下方式寻址: 寄存器0-15可用作字节、字或双字(DWord)寄存器。 寄存器16-31即可作为字被寻址,也可作为双字被寻址。 寄存器DR51和DR60只可作为双字寄存器。 有16个可作为字节寄存器(R0-R15),16个可作为字寄存器(WR0-WR30)和1......

上一个:[单片机]A51 2.2.1 8051版的CPU寄存器

老古开发网版权所有 2006年9月 asp.Net V2.0 设计:老古
页面缓存:30分钟 执行时间:31毫秒