用74LS165实现串口扩展并行输入口

本文介绍74LS165移位寄存器的各端口功能及其与8051单片机的接口电路设计。通过串口及I/O口两种方式驱动74LS165,实现并行数据输入,并提供了示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、74LS165各个端口功能

SH/RD':移位/装载数据,当为高电平时,在时钟信号下进行移位,当为低电平时,将并行输入口的数据送到寄存器中
CLK:时钟输入
A~H:并行输入口

QH、QH':串行输出口
GND:接地端
SER:串行输入口,通过它可以将多个74LS165连接起来,也可以和其他串行口连接,在时序配合的情况下,将数据加入送出的串行数据中
CLKINH:时钟抑制
VCC:电源


  2、  下图8051单片机与74LS165的接口电路。8051单片机的串口工作于模式0,为同步移位寄存器输入/输出方式,收/发的数据为8位,低位在前,无起始位、奇偶校验位和停止位。串行数据从RXD(P3.0)输入,移位时钟由TXD(P3.1)输出。端口线 P1.7用于控制74LS165的工作状态。当P1.7输出低电平时,74LS165将并行数据置入寄存器中;当
P1.7输出高电平时,74LS165工作在时钟控制下的串行移位状态,数据通过RXD(P3.0)移入8051单片机。
 

 

用串口驱动74LS165 

74LS165实现串口扩展并行输入口

示例代码

 利用单片机串口实现输入移位寄存器,只需用软件置REN=1(同时RI=0),即开始接
收。数据字节在移位时钟脉冲的配合下,从低位至高位一位一位地接收下来并装入SBUF中,
在启动接收过程(即写SCON,清RI位)开始后的第8个机器周期RI被置位。这一数据帧
接收完毕,可进行下一帧的接收。

#include <STC89C5xRC.H>

sbit LOAD=P1^7;                 //控制引脚SH/RD’
void UART_init();
unsigned char PA(void);

void mian()
{
	UART_init();
	while(1)
	{		
	}
	
}
//串口初始化
void UART_init()
{
	SCON=0x10;
	//设置串行口为方式0,允许接收和
	ES=1;//打开串口中断
	RI=0;
}
//数据接收函数PA()
unsigned char PA(void)
{
	unsigned char PA_deta;
	LOAD=0;//低电平 74LS165将并行数据装入寄存器
	LOAD=1;//高电平 74LS165在时钟信号下进行移位
	UART_init();
	//74LS165工作在时钟控制下的串行移位状态
	while(RI==0);
	RI=0;
	PA_deta=SBUF;
	return PA_deta;
}

2、用I/O口驱动74LS165

   单片机的串口工作在模式0,只是作为同步移位寄存器。如果能够直接用I/O模拟移位
寄存器的时序,同样能驱动74LS165,实现并行数据的输入。如图2-2所示,P1.5被用于串
行数据输入,P1.6用于移位时钟输出,P1.7用来控制74LS165的工作状态。

示例代码

#include <STC89C5xRC.H>

sbit a7=ACC^7;
sbit CLK=P1^6;//模拟时钟串口
sbit DETA=P1^5;//模拟串口数据
sbit LD=P1^7;//控制引脚

unsigned char PAs(void);
unsigned char in_simuseri(void);

void main()
{
	while(1)
	{
	}
}

//数据输入函数
//输出参数deta_buf
//8位同位移位寄存器 将DETA串行输入的数据按从低位到高位保存到 deta_buf
unsigned char in_simuseri(void)
{
	unsigned char i;
	unsigned char deta_buf;
	i=8;
	do
	{
		ACC=ACC>>1;
		if(CLK==0)
			a7=DETA;
		if(CLK==1);
	}
	while(--i!=0);
	CLK=0;
	deta_buf=ACC;
	return(deta_buf);
}
//数据输出函数
//输出参数PAs_buf,返回并行输入74LS165的数据
//直接调用即可读取并行输入74LS165的数据
unsigned char PAs(void)
{
	unsigned char PAs_buf;
	LD=0;
	LD=1;
	PAs_buf=in_simuseri();
	return(PAs_buf);
}


 

                                          

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_橘子汽水_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值