|
本帖最后由 防滑销钉 于 2014-11-18 22:02 编辑
关于74hc165大家应该都很熟悉了,这里我想将8个按键连接在hc165的8个并行接口上,转换为串行数据输出。然后通过单片机采集串行数据,判断按键的状态。
网上常见的读取的驱动如下。
UINT8 _74HC165_GetData(void)//读取数据
{
UINT8 i,Data=0;
_74HC165_nPL=0;
_74HC165_nPL=1;
for(i=0;i<8;i++)
{
Data<<=1;
Data|=_74HC165_SDA;
_74HC165_CLK=0;
_74HC165_CLK=1;
}
_74HC165_CLK=0;
return(Data);
}
语句 _74HC165_nPL=0;将并行数据送入芯片内部寄存器,然后紧接着就是将数据串行输出了。
_74HC165_nPL=1;使能串行输出,在时钟的每个上升沿将数据从高位到低位依次送到串行口上。
这里我不明白的是,当第一次进入for循环时,先将时钟置为0 (_74HC165_CLK=0;),然后读取当前的电平( Data|=_74HC165_SDA),然后将时钟置1(_74HC165_CLK=1),也就是产生上升沿。
但是在第一次读取电平的时候,上升沿还没有来到啊?74hc165不是在时钟的每个上升沿,才会依次将数据送到串行线上吗?
第一次进入for循环的时候,还没有产生上升沿,那么这次的读取岂不是没有作用?
for循环结束的时候,不就只读到了7个有效数字吗? |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|