找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1258|回复: 3
收起左侧

单片机DS1302芯片程序不太懂(地址右移问题)求指点

[复制链接]
ID:847202 发表于 2020-12-24 13:00 来自手机 | 显示全部楼层 |阅读模式
/*******************************************************************************
* 函数功能                   : 读取一个地址的数据
*******************************************************************************/
uchar Ds1302Read(uchar addr)
{
        uchar n,dat,dat1;
        RST = 0;
        _nop_();

        SCLK = 0;//先将SCLK置低电平。
        _nop_();
        RST = 1;//然后将RST(CE)置高电平。
        _nop_();

        for(n=0; n<8; n++)//开始传送八位地址命令
        {
                DSIO = addr & 0x01;//数据从低位开始传送
                addr >>= 1;
                SCLK = 1;//数据在上升沿时,DS1302读取数据
                _nop_();
                SCLK = 0;//DS1302下降沿时,放置数据
                _nop_();
        }
        _nop_();
        for(n=0; n<8; n++)//读取8位数据
        {
                dat1 = DSIO;//从最低位开始接收
                dat = (dat>>1) | (dat1<<7);
                SCLK = 1;
                _nop_();
                SCLK = 0;//DS1302下降沿时,放置数据
                _nop_();
        }

        RST = 0;
        _nop_();        //以下为DS1302复位的稳定时间,必须的。
        SCLK = 1;
        _nop_();
        DSIO = 0;
        _nop_();
        DSIO = 1;
        _nop_();
        return dat;        
}
这个DS1302的程序有点看不懂,请问那个地址右移一位之后,它的地址会是哪一个?如果它的地址是0x81,它右移一位不是变成了0x40了吗?DS1302没有这个地址啊!
回复

使用道具 举报

ID:213173 发表于 2020-12-24 17:17 | 显示全部楼层
串行传输数据是把1个字节8位数据按位逐个传输,根据不同器件特性要求由低到高或由高到低传输。
DSIO = addr & 0x01;是把 addr的最低位分离出来赋值于DSIO
addr >>= 1;等效addr = addr>>1; addr 右移1位后,最低位溢出,最高位补0。循环8次就把1个字节数据由低到高传输出去。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:235200 发表于 2020-12-25 00:50 | 显示全部楼层
如果它的地址是0x81,它右移一位不是变成了0x40了吗?DS1302没有这个地址啊!
你只看到了右移1位,实际上是右移8位才把该数据赋值给DS1302,确定要读出的地址单元,读出时即先送入地址,DS1302才会有数据输出,写入时也需先送地址,才会把要写入的数据写入指定的地址中

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:390416 发表于 2020-12-25 12:58 | 显示全部楼层
建议你先去看看《人人学会单片机》视频教程第13课、14课  595的移位发送。视频讲解很详细的!
595和1302是一样的移位传输方式
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表