今天继续学习 74HC165 芯片 的原理和编程
时序图
并行A-H接口对应 串口OUTPUT QH ,转换串口的过程为,单片机通过控制CLK和SH/LD来把A-H的数据转化为串口,输出到GH
代码语言:javascript复制#include"reg52.h"
#include"intrins.h"
#define GPIO_LED P0
typedef unsigned char u8;
typedef unsigned int u16;
sbit IN_PL=P1^6;
sbit IN_Data=P1^7;
sbit SCK=P3^6;//clock
u8 Read74HC165(){
//programm according to Sequence Diagram
u8 indata;
u8 i;
IN_PL=0;
_nop_();//短暂延时产生一定宽度的脉冲
IN_PL=1;//将外部信号全部读入锁存器中
_nop_();
indata=0;//保存数据的变量清0
for(i=0;i<8;i ){
indata=indata<<1; //左移一位
SCK=0;//时钟置0
_nop_();
indata|=IN_Data;
SCK=1; //时钟置1
}
return indata;
}
void main(){
u8 h165Value;
while(1){
h165Value=Read74HC165();
if(h165Value!=0xff){
GPIO_LED=h165Value;
}
}
}
C语言中没有_nop_()函数。
在51C中一般包含在#include "intrins.h" 头文件中。
该函数是在51单片机中用的延时函数,表示执行一条没有什么意义的指令,延时一个指令周期,有的指令周期是两个或两个以上的机械周期,但是_nop_();指令需要的只是一个机械周期也就是12个时钟周期(震荡周期)。
51单片机中,1个机械周期 = 12个时钟周期 = 12 * ( 1 / f)。(f 为晶振频率)。