找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2124|回复: 11
打印 上一主题 下一主题
收起左侧

求解两片74hc165级联后发送数据正确,但51单片机只能检测到低八位是怎么回事

[复制链接]
跳转到指定楼层
楼主
8黑币
本帖最后由 xyi 于 2021-5-11 10:02 编辑

uchar i,j,h;
        uchar temp;
        uchar date[2];
        
        HC165_PL = 0;
        HC165_PL = 1;
        if(HC165_OUT==1)
                        temp |= 0x01;
        
        for(i=0;i<15;i++)
        {
                temp = temp << 1;
                HC165_CLK = 0;
                _nop_();
                _nop_();
                HC165_CLK = 1;
                if(HC165_OUT==1)
                        temp |= 0x01;
        }
        date[0]=(uchar)(temp&0x00ff);
        date[1]=(uchar)((temp<<8)&0x00ff);



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:748096 发表于 2021-5-10 18:29 | 只看该作者
附上高清电路图
回复

使用道具 举报

板凳
ID:377070 发表于 2021-7-19 15:48 | 只看该作者

8位8位移,移两次就可以了,我也是用你上面的程序调不出来,有大佬解释一下吗。
回复

使用道具 举报

地板
ID:161164 发表于 2021-7-19 16:23 | 只看该作者
uchar temp;只有8位啊~
date[1]=(uchar)((temp<<8)&0x00ff);左移8位就清零了
應改作uint temp;
回复

使用道具 举报

5#
ID:934353 发表于 2021-7-19 16:28 | 只看该作者
(请手工把点替换成.)
www点elecfans点com/yuanqijian/yinjiaotu/20180202628701_a.html
这里解释的很详细了,我不知道你为啥把pl拉低又立马拉高是什么意思?
回复

使用道具 举报

6#
ID:934353 发表于 2021-7-19 16:33 | 只看该作者
本帖最后由 开心就好hhhh 于 2021-7-19 16:43 编辑

之前的老兄说得对,你应该用uint来定义,你将一个八位的数据左移16次肯定不对的呀
回复

使用道具 举报

7#
ID:814525 发表于 2021-7-19 17:56 | 只看该作者
uchar i,j,h;
        uint temp;
        uchar date[2];
        
        HC165_PL = 0;
        HC165_PL = 1;
        if(HC165_OUT==1)
                        temp |= 0x01;
        
        for(i=0;i<15;i++)
        {
                temp = temp << 1;
                HC165_CLK = 0;
                _nop_();
                _nop_();
                HC165_CLK = 1;
                if(HC165_OUT==1)
                        temp |= 0x01;
        }
        date[0]=(uchar)(temp&0x00ff);
        date[1]=(uchar)((temp>>8)&0x00ff);  //高8位
回复

使用道具 举报

8#
ID:763596 发表于 2021-10-28 11:22 | 只看该作者
不是应该i<16吗,应该循环16次才对吧
回复

使用道具 举报

9#
ID:978853 发表于 2021-11-7 11:46 | 只看该作者
uchar temp;只有8位
date[1]=(uchar)((temp<<8)&0x00ff);左移8位清零
改作uint temp;
回复

使用道具 举报

10#
ID:908826 发表于 2021-11-7 15:41 | 只看该作者
数据类型定义的不对,uchar只有八位,你却想整个十六位
回复

使用道具 举报

11#
ID:13282 发表于 2022-6-3 02:29 | 只看该作者
按键的电阻都改为上拉,低有效。
回复

使用道具 举报

12#
ID:213173 发表于 2022-6-3 06:41 | 只看该作者
        uint temp;
        ......
        date[0]=temp;//取temp低8位,高位溢出舍去
        date[1]=temp>>8;//右移取temp高8位,低位溢出舍去
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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