ds1302中的31个ram的读写控制怎样用?求助大侠。。。

 我来答
百度网友4431dab
推荐于2016-12-01
知道答主
回答量:13
采纳率:0%
帮助的人:12.7万
展开全部
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的地址即可。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式