基于proteus的51单片机仿真实例七十一、并口转串口器件74HC165应用实例

1、74HC165是一个8位并行输入/串行输出的器件。
根据该器件的真值表,可以了解其读取数据所需的时序
 
2、在keil c51中新建工程ex59,编写如下程序代码,编译并生成ex59.hex文件
// 8位并行输入/串行输出器件74HC165实例演示
#include <reg51.h>      // 包含头文件
sbit HC165_DATA = P2^0;     // 定义串行数据端口
sbit HC165_SH = P2^1;     // 定义数据锁存端口
sbit HC165_CLK = P2^2;     // 定义串行时钟端口
// 延时函数
void delayms(unsigned int x)
{
   unsigned char i;
  while(x--)
  {
    for(i = 0;i < 120;i++);
  }
}
// 主函数
void main(void)
{
  unsigned char dat = 0,i,temp = 0x80;
 P3 = 0xff;      //  先熄灭所有LED
 P2 = 0xff;      //  P2口输出高,当P2口做输入口时,要先输出1才能正确读取端口状态
 HC165_CLK = 0;     //  串行时钟端口置0
   HC165_SH = 0;    //  锁存端口置0,读入8位并行数据
  HC165_SH = 1;    //  锁存端口置1,保持读入的数据
  for(i = 0;i < 8;i++)  //  依次读入8位数据
  {
     if(HC165_DATA)   //  判断读取的是高电平还是低电平
    {
     dat = dat|temp;  //   合并读取的位数据
     HC165_CLK = 1;   //   产生一个上升沿,串出下一个数据
     temp = temp >> 1;
     delayms(1);
     HC165_CLK = 0;
     delayms(1);
    }
  }
  P3 = dat;  //    获得的数据送P3口
  delayms(500);
  while(1);
 
}
3、在proteus中新建仿真文件ex59.dsn,电路原理图如下所示
基于proteus的51单片机仿真实例七十一、并口转串口器件74HC165应用实例
4、将ex59.hex文件载入at89c51中,启动仿真,观察运行结果。下图是程序运行结果
基于proteus的51单片机仿真实例七十一、并口转串口器件74HC165应用实例