请选择 进入手机版 | 继续访问电脑版

普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 6651|回复: 7

IO口扩展74Hc165实验的疑惑

[复制链接]

4

主题

19

帖子

246

积分

中级会员

Rank: 3Rank: 3

积分
246
发表于 2017-3-17 17:33:50 | 显示全部楼层 |阅读模式
本帖最后由 yc-cgk 于 2017-3-17 20:32 编辑

u8 Read74HC165(void)
{  
  u8 i;
  u8 indata;
               
   IN_PL = 0;
   _nop_();      
   IN_PL = 1;        
              
   indata=0;  
   for(i=0; i<8; i++)
    {
          indata = indata<<1;         
          SCK = 0;  
      _nop_();
          indata |= IN_Data;
      SCK = 1;
        }
   
   return(indata);
首先  IN_PL = 0;时读入数据到移位寄存器(视频是这么说的)。IN_PL = 1; 时开始移位,这时的数据是在移位寄存器中的,  indata=0;  变量为0, indata = indata<<1;  这时移位0有意义吗(移位寄存器中的数据都没有转到 indata里呀)?
然后,这段中先  indata = indata<<1; 后,再  indata |= IN_Data;  ,那第一位不是没有传到 IN_Data就被第二位给替换了。

回复

使用道具 举报

4

主题

19

帖子

246

积分

中级会员

Rank: 3Rank: 3

积分
246
 楼主| 发表于 2017-3-19 19:29:44 | 显示全部楼层
HC6800-ES-V2.0 发表于 2017-3-18 22:29
http://www.prechin.net/forum.php?mod=viewthread&tid=1443&highlight=165

是不是这样理解的
&#160;indata=0;&#160;&#160;&#160; &#160;
在这之间时,因为P1^7管脚是直接和74hc165的输出脚QH连在一起,这时的indata就已经取了一位数据了
for(i=0; i<8; i++)

然后才有了后面的
{
          indata = indata<<1;           //左移一位

回复 支持 1 反对 0

使用道具 举报

20

主题

1343

帖子

8339

积分

论坛元老

Rank: 8Rank: 8

积分
8339
发表于 2017-3-18 19:43:16 | 显示全部楼层
以前有人问过。
好像是这样的:165是并转串的芯片,与595不同,595是串转并。再想想吧
回复 支持 反对

使用道具 举报

4

主题

19

帖子

246

积分

中级会员

Rank: 3Rank: 3

积分
246
 楼主| 发表于 2017-3-18 21:57:41 | 显示全部楼层
HC6800-ES-V2.0 发表于 2017-3-18 19:43
以前有人问过。
好像是这样的:165是并转串的芯片,与595不同,595是串转并。再想想吧

理解不了,能不能举个例子说明一下
回复 支持 反对

使用道具 举报

20

主题

1343

帖子

8339

积分

论坛元老

Rank: 8Rank: 8

积分
8339
发表于 2017-3-18 22:29:25 | 显示全部楼层
回复 支持 反对

使用道具 举报

0

主题

1

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2017-5-3 13:22:20 | 显示全部楼层
原来不是只有我一个不理解。。
indata=0,即为0x00;
第一次移位,indata<<1;变成0x00;
如果k8按下,indata|=INDATA意思是indata=indata与INDATA按位或,
H值为0,给P1^7,这时indata=0x00,但是ndata|=INDATA这个按位或却在INDATA更新数据之前,所以这个2时候INDATA应该还没有更新数据,就是说应该是错位的,怎么烧录软件,他的程序是对的?
回复 支持 反对

使用道具 举报

0

主题

1

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2018-4-18 12:19:15 | 显示全部楼层
看帖子已经一年了,但是这个问题也困扰我,我是这么理解的:indata不管怎么移位 ,只要INDATA没有高电平输入,他就一直是零,当第一高位是1时,i=0,赋值之后indata=01,,然后i=1时,左移1位,移位七次到高位 输出,10000000。不知道是不是可以这么理解。
回复 支持 反对

使用道具 举报

1

主题

4

帖子

24

积分

新手上路

Rank: 1

积分
24
发表于 2019-9-20 16:31:00 | 显示全部楼层
大神们 能否帮忙解答一下这个问题  感激不尽
http://www.prechin.net/forum.php ... id=38698&extra=
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-3-29 04:50 , Processed in 0.090546 second(s), 31 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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