ds1302中的31个ram的读写控制怎样用?求助大侠。。。
展开全部
void Delay_ds1302()
{
_nop_();
_nop_();
}
void DelayNms(uint t)
{
uint x,y;
for(x=t;x>0;x--)
for(y=125;y>0;y--);/*1ms延时*/
}
/**************************************
从DS1302读1字节数据
**************************************/
BYTE DS1302_ReadByte()
{
BYTE i;
BYTE dat = 0;
for (i=0; i<8; i++) //8位计数器
{
SCLK = 0; //时钟线拉低 上升沿数据有效
Delay_ds1302(); //延时等待
dat >>= 1; //数据右移一位
if (IO) dat |= 0x80; //读取数据
SCLK = 1; //时钟线拉高
Delay_ds1302(); //延时等待
}
return dat;
}
/**************************************
向DS1302写1字节数据
**************************************/
void DS1302_WriteByte(BYTE dat)
{
char i;
for (i=0; i<8; i++) //8位计数器
{
SCLK = 0; //时钟线拉低
Delay_ds1302(); //延时等待
dat >>= 1; //移出数据
IO = CY; //送出到端口
SCLK = 1; //时钟线拉高
Delay_ds1302(); //延时等待
}
}
/**************************************
读DS1302某地址的的数据
**************************************/
BYTE DS1302_ReadData(BYTE addr)
{
BYTE dat;
RST = 0;
Delay_ds1302();
SCLK = 0;
Delay_ds1302();
RST = 1;
Delay_ds1302();
DS1302_WriteByte(addr); //写地址
dat = DS1302_ReadByte(); //读数据
SCLK = 1;
RST = 0;
return dat;
}
/**************************************
往DS1302的某个地址写入数据
**************************************/
void DS1302_WriteData(BYTE addr, BYTE dat)
{
RST = 0;
Delay_ds1302();
SCLK = 0;
Delay_ds1302();
RST = 1;
Delay_ds1302();
DS1302_WriteByte(addr); //写地址
DS1302_WriteByte(dat); //写数据
SCLK = 1;
RST = 0;
}
根据上面的代码,只需要传递相应RAM的地址即可。
{
_nop_();
_nop_();
}
void DelayNms(uint t)
{
uint x,y;
for(x=t;x>0;x--)
for(y=125;y>0;y--);/*1ms延时*/
}
/**************************************
从DS1302读1字节数据
**************************************/
BYTE DS1302_ReadByte()
{
BYTE i;
BYTE dat = 0;
for (i=0; i<8; i++) //8位计数器
{
SCLK = 0; //时钟线拉低 上升沿数据有效
Delay_ds1302(); //延时等待
dat >>= 1; //数据右移一位
if (IO) dat |= 0x80; //读取数据
SCLK = 1; //时钟线拉高
Delay_ds1302(); //延时等待
}
return dat;
}
/**************************************
向DS1302写1字节数据
**************************************/
void DS1302_WriteByte(BYTE dat)
{
char i;
for (i=0; i<8; i++) //8位计数器
{
SCLK = 0; //时钟线拉低
Delay_ds1302(); //延时等待
dat >>= 1; //移出数据
IO = CY; //送出到端口
SCLK = 1; //时钟线拉高
Delay_ds1302(); //延时等待
}
}
/**************************************
读DS1302某地址的的数据
**************************************/
BYTE DS1302_ReadData(BYTE addr)
{
BYTE dat;
RST = 0;
Delay_ds1302();
SCLK = 0;
Delay_ds1302();
RST = 1;
Delay_ds1302();
DS1302_WriteByte(addr); //写地址
dat = DS1302_ReadByte(); //读数据
SCLK = 1;
RST = 0;
return dat;
}
/**************************************
往DS1302的某个地址写入数据
**************************************/
void DS1302_WriteData(BYTE addr, BYTE dat)
{
RST = 0;
Delay_ds1302();
SCLK = 0;
Delay_ds1302();
RST = 1;
Delay_ds1302();
DS1302_WriteByte(addr); //写地址
DS1302_WriteByte(dat); //写数据
SCLK = 1;
RST = 0;
}
根据上面的代码,只需要传递相应RAM的地址即可。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询