yc-cgk 发表于 2017-3-17 17:33:50

IO口扩展74Hc165实验的疑惑

本帖最后由 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就被第二位给替换了。

yc-cgk 发表于 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

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

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

HC6800-ES-V2.0 发表于 2017-3-18 19:43:16

以前有人问过。
好像是这样的:165是并转串的芯片,与595不同,595是串转并。再想想吧

yc-cgk 发表于 2017-3-18 21:57:41

HC6800-ES-V2.0 发表于 2017-3-18 19:43
以前有人问过。
好像是这样的:165是并转串的芯片,与595不同,595是串转并。再想想吧

理解不了,能不能举个例子说明一下

HC6800-ES-V2.0 发表于 2017-3-18 22:29:25

yc-cgk 发表于 2017-3-18 21:57
理解不了,能不能举个例子说明一下

http://www.prechin.net/forum.php?mod=viewthread&tid=1443&highlight=165

柏木之舟 发表于 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应该还没有更新数据,就是说应该是错位的,怎么烧录软件,他的程序是对的?

dreamtrue073 发表于 2018-4-18 12:19:15

看帖子已经一年了,但是这个问题也困扰我,我是这么理解的:indata不管怎么移位 ,只要INDATA没有高电平输入,他就一直是零,当第一高位是1时,i=0,赋值之后indata=01,,然后i=1时,左移1位,移位七次到高位 输出,10000000。不知道是不是可以这么理解。

付正龙 发表于 2019-9-20 16:31:00

大神们 能否帮忙解答一下这个问题感激不尽
http://www.prechin.net/forum.php?mod=viewthread&tid=38698&extra=
页: [1]
查看完整版本: IO口扩展74Hc165实验的疑惑