搜索
bottom↓
回复: 20

实在没招了,简单的74HC165弄疯了,各位帮忙看看吧。

[复制链接]

出0入0汤圆

发表于 2014-1-7 01:13:49 | 显示全部楼层 |阅读模式
本帖最后由 lswhome 于 2014-1-7 01:19 编辑

51单片机,只有一片,典型的应用线路图:


程序:


sbit        _74HC165_nPL=P0^3;
sbit        _74HC165_SDA=P0^4;
sbit        _74HC165_CLK=P0^5;


UINT8 _74HC165_GetData(void)//读取数据
{
        UINT8 i,Data=0;
       
       
        _74HC165_nPL=0;
        _74HC165_nPL=1;
       
        for(i=0;i<8;i++)
        {       
               
                _74HC165_CLK=0;
                Data<<=1;
                Data|=_74HC165_SDA;
                _74HC165_CLK=1;
        }
        return(Data);
}

程序改了无数次了,现在改成这样了,但还是不对,读到的数据完全不对,上拉电阻我改成10K不行,现在又改成4.7K,问题就是除了D7接地读到的数据是正确的(0111 1111),其他的D0~D6任何一个接地,读出的数据都是1111 1110,我就纳闷了,IC换了4个了,都是这样。。。除了D7,其他任意两个接地,读到的数据,就这几种,0xfe,0xee,0xfc,这是啥毛病?程序里我也加过延时,但结果都一样,主频试过11.05926M 12M 24M,结果都相同,实在搞不明白了。。。电压是5V供电的,用万能表测试对应的引脚,接地的时候,D0~D7引脚的对应的电压都是正确的。。但就是无法得到正确的数据,无语了,IC是SOP16封装的74HC165D。。各位帮忙看看是哪里的问题?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2014-1-7 02:00:30 | 显示全部楼层
两片,16键


51的代码:
uint KeyPort(void)
{
        uchar i;
        uint key;

        KeySH = 0;
        _nop_();_nop_();
        KeySH = 1;
        for(i=0;i<16;i++)
        {                                                          
                 KeyCLK = 0;               
                key >>= 1;
                if(KeyDat)
                        key |= 0x8000;
                else
                        key &= 0x7fff;
                KeyCLK = 1;
        }

        return key;
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-1-7 08:22:39 | 显示全部楼层
楼主上面有个CE端也用了 不知道有,没有打开啊

出0入0汤圆

发表于 2014-1-7 08:23:16 | 显示全部楼层
读之前要把它拉低

出0入0汤圆

发表于 2014-1-7 08:33:58 | 显示全部楼层
问题应该是这里了 Data|=_74HC165_SDA;
我们一般是这样的,如2楼的
if(KeyDat)
                        key |= 0x8000;
                else
                        key &= 0x7fff;
两个级联
或者我是用一个的这样        if(ID) id |= 0x80;else id &= 0x7f;//165驱动

出0入0汤圆

发表于 2014-1-7 08:55:01 | 显示全部楼层
很明显Data|=_74HC165_SDA;中的右边部分是个BIT,所以,你应该懂了,不懂去看看C吧

出0入0汤圆

发表于 2014-1-7 09:52:51 | 显示全部楼层
你好!这样试一下。
sbit        _74HC165_nPL=P0^3;
sbit        _74HC165_SDA=P0^4;
sbit        _74HC165_CLK=P0^5;


UINT8 _74HC165_GetData(void)//读取数据
{
        UINT8 i,Data=0;
        
        
        _74HC165_nPL=0;
       _74HC165_CLK=1;
      _74HC165_CLK=0;
        _74HC165_nPL=1;
        
        for(i=0;i<8;i++)
        {        
               
                _74HC165_CLK=0;
                Data<<=1;
               if(_74HC165_SDA){
                   Data++;
                }
                _74HC165_CLK=1;
        }
        return(Data);
}

出0入0汤圆

 楼主| 发表于 2014-1-7 12:03:33 | 显示全部楼层
感谢楼上的几位,你们提到的方法我都试过了,都不行,结果都是一样,就这么简单的一个程序,我都弄了一天了,几乎所有的可能都试过了。。。。就是不对,现在开始怀疑这个芯片是假的了。。。。

出130入129汤圆

发表于 2014-1-7 12:05:26 | 显示全部楼层
自己一步步代码试下,移位1次,Q7输出变化没有

出0入0汤圆

发表于 2014-1-7 13:46:27 | 显示全部楼层
单步跟踪程序走,有个万用表测测电压应该就知道了。

出0入0汤圆

 楼主| 发表于 2014-1-7 15:16:15 | 显示全部楼层
我让我朋友试了下,程序没问题,电路也没问题,同样的东西,他那里就没问题,我这里就不行,IC表面刻的字也都是一样的,NXP 74HC165D,所以不是程序的问题,也不是硬件的问题,只能是我买的这个165肯定是假货,我擦,这东西竟然都作假。。。。我再买几块别的牌子的试试吧,某宝上的东西没保证啊!!!5555555555555555

出0入0汤圆

发表于 2014-1-7 15:28:49 | 显示全部楼层
刚才测试了楼主开始的那个代码,结果是正确的,只是我比较习惯数据右移,这种方式就不好使了。
抱歉,是我说错了。
那么只有怀疑芯片有问题了,或者接线有问题。

出0入0汤圆

发表于 2014-1-7 15:35:04 | 显示全部楼层
我们也某宝买的,没有问题啊
你多少钱买的?

出0入0汤圆

发表于 2014-1-7 15:43:43 | 显示全部楼层
这玩意都有假的,现在搞电子太可怜了。

出0入0汤圆

 楼主| 发表于 2014-1-7 16:51:48 | 显示全部楼层
xiaobendan 发表于 2014-1-7 15:35
我们也某宝买的,没有问题啊
你多少钱买的?

5毛钱一片,就买了10片做试验的。。。

出0入0汤圆

发表于 2014-1-7 17:22:07 | 显示全部楼层
哦,差不多,我们买的是插件的0.55,贴片应该0.5差不多的

出0入0汤圆

 楼主| 发表于 2014-1-19 21:04:46 | 显示全部楼层
lswhome 发表于 2014-1-7 15:16
我让我朋友试了下,程序没问题,电路也没问题,同样的东西,他那里就没问题,我这里就不行,IC表面刻的字也 ...

事实上,之前买的那10片确实是假货,我擦,从另一家买了10片,焊上啥毛病没有,挺好用的。。。55555555555555

出0入98汤圆

发表于 2014-1-19 21:39:07 | 显示全部楼层
唉,早看到早就跟你说, 曾经我也发生过这样的问题,3个人查了近1个月才到最后买了新的搞定。问题是这种片子用编程器测试,还能读出这个是165,很郁闷的,你用编程器的功能测试试试!

出0入0汤圆

 楼主| 发表于 2014-1-19 23:37:42 | 显示全部楼层
cdust 发表于 2014-1-19 21:39
唉,早看到早就跟你说, 曾经我也发生过这样的问题,3个人查了近1个月才到最后买了新的搞定。问题是这种片 ...

我没有编程器,业余玩玩的,没想到竟然碰到假货。。。。。。郁闷。。。。买的电容也是,1uf贴片,实际测试只有0.001uf,我真心无语了,我说呢这1UF的贴片这么薄? 10UF的,有一个测试容量只有6UF,其他的8.5~9.5UF之间,看来这些零件的质量真的堪忧啊!!!!

出0入0汤圆

发表于 2014-2-9 14:52:05 | 显示全部楼层
两个名显的错误呀:
1.时钟错了,CLK平时是低电平,取每位数前先置高,取完再置低。
2.锁存位(SHIFT LOAD)的操作呢?锁存位平时是高电平,在取8bit前,先要将锁存位置低一下,再重新置高,然后才能执行前面1的流程

你看下时序图吧:
http://wenku.baidu.com/link?url= ... 7NmObBYntvwLjGj33aa
第二页

出0入0汤圆

 楼主| 发表于 2014-2-9 15:53:26 | 显示全部楼层
barryliu 发表于 2014-2-9 14:52
两个名显的错误呀:
1.时钟错了,CLK平时是低电平,取每位数前先置高,取完再置低。
2.锁存位(SHIFT LOAD ...

谢谢,时序都是没有问题的,更换了IC,问题解决。。。就是那个IC的问题,竟然是假的。。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 12:33

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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