找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

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

查看数: 3955 | 评论数: 11 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
xyi
发布时间: 2021-5-10 17:03

正文摘要:

本帖最后由 xyi 于 2021-5-11 10:02 编辑 uchar i,j,h;         uchar temp;         uchar date[2];          ...

回复

ID:213173 发表于 2022-6-3 06:41
        uint temp;
        ......
        date[0]=temp;//取temp低8位,高位溢出舍去
        date[1]=temp>>8;//右移取temp高8位,低位溢出舍去
ID:13282 发表于 2022-6-3 02:29
按键的电阻都改为上拉,低有效。
ID:908826 发表于 2021-11-7 15:41
数据类型定义的不对,uchar只有八位,你却想整个十六位
ID:978853 发表于 2021-11-7 11:46
uchar temp;只有8位
date[1]=(uchar)((temp<<8)&0x00ff);左移8位清零
改作uint temp;
ID:763596 发表于 2021-10-28 11:22
不是应该i<16吗,应该循环16次才对吧
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位
ID:934353 发表于 2021-7-19 16:33
本帖最后由 开心就好hhhh 于 2021-7-19 16:43 编辑

之前的老兄说得对,你应该用uint来定义,你将一个八位的数据左移16次肯定不对的呀
ID:934353 发表于 2021-7-19 16:28
(请手工把点替换成.)
www点elecfans点com/yuanqijian/yinjiaotu/20180202628701_a.html
这里解释的很详细了,我不知道你为啥把pl拉低又立马拉高是什么意思?
ID:161164 发表于 2021-7-19 16:23
uchar temp;只有8位啊~
date[1]=(uchar)((temp<<8)&0x00ff);左移8位就清零了
應改作uint temp;
ID:377070 发表于 2021-7-19 15:48

8位8位移,移两次就可以了,我也是用你上面的程序调不出来,有大佬解释一下吗。
ID:748096 发表于 2021-5-10 18:29
附上高清电路图

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

Powered by 单片机教程网

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