标题: 求解两片74hc165级联后发送数据正确,但51单片机只能检测到低八位是怎么回事 [打印本页]

作者: xyi    时间: 2021-5-10 17:03
标题: 求解两片74hc165级联后发送数据正确,但51单片机只能检测到低八位是怎么回事
本帖最后由 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);




作者: 沧兴电子    时间: 2021-5-10 18:29
附上高清电路图
作者: 耿文兵    时间: 2021-7-19 15:48
沧兴电子 发表于 2021-5-10 18:29
附上高清电路图

8位8位移,移两次就可以了,我也是用你上面的程序调不出来,有大佬解释一下吗。
作者: lkc8210    时间: 2021-7-19 16:23
uchar temp;只有8位啊~
date[1]=(uchar)((temp<<8)&0x00ff);左移8位就清零了
應改作uint temp;
作者: 开心就好hhhh    时间: 2021-7-19 16:28
(请手工把点替换成.)
www点elecfans点com/yuanqijian/yinjiaotu/20180202628701_a.html
这里解释的很详细了,我不知道你为啥把pl拉低又立马拉高是什么意思?

作者: 开心就好hhhh    时间: 2021-7-19 16:33
本帖最后由 开心就好hhhh 于 2021-7-19 16:43 编辑

之前的老兄说得对,你应该用uint来定义,你将一个八位的数据左移16次肯定不对的呀
作者: 张天师    时间: 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位

作者: 不再快乐    时间: 2021-10-28 11:22
不是应该i<16吗,应该循环16次才对吧
作者: 音律泓竹    时间: 2021-11-7 11:46
uchar temp;只有8位
date[1]=(uchar)((temp<<8)&0x00ff);左移8位清零
改作uint temp;
作者: 13205495918    时间: 2021-11-7 15:41
数据类型定义的不对,uchar只有八位,你却想整个十六位
作者: xmcolong    时间: 2022-6-3 02:29
按键的电阻都改为上拉,低有效。
作者: wulin    时间: 2022-6-3 06:41
        uint temp;
        ......
        date[0]=temp;//取temp低8位,高位溢出舍去
        date[1]=temp>>8;//右移取temp高8位,低位溢出舍去




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1