立即注册
查看: 515|回复: 2

[经验分享] 51单片机经典范例演练(三):对I/O口进行拓展

已绑定手机
已实名认证
发表于 2021-11-24 17:32:23 | 显示全部楼层 |阅读模式 来自 广东省深圳市
51单片机引脚总数只有40,通用I/O引脚只有24个,资源比较紧张。当引脚数目不能满足项目需要时,对I/O口的拓展就是必须掌握的技能了。
我们最常使用的是串行数据端口拓展,即单片机使用串行方式发送或接收数据,通过中间芯片,实现串行数据于并行数据之间的转换。

1、使用74LS165实现对51单片机并行数据转串口的输入
73LS165引脚功能图:
1.jpg
引脚介绍:
SHIFT/LOAD  :  为低电平时,并行数据从A-H被置入寄存器;为高电平时,在时钟信号下进行移位
CLK:时钟输入
A~H:并行输入口
QH、~QH:串行输出口
接线说明:P1^7----->SHIFT/LOADTXD ----->CLOCKRXD ----->OUTPUT QH
#include <reg52.h>
sbit LOAD = P1^7;
void UART_Init()
{
SCON = 0x10;
ES = 0;
}
unsigned char PA()
{
unsigned char PA_data;
LOAD = 0;//SH/LOAD为低电平,74LS165将并行数据装入寄存器
LOAD = 1;//SH/LOAD为高电平,在时钟信号下进行移位
UART_Init();
while(RI==0);
RI==0;
PA_data == SBUF;
return PA_data;
}
此处,我们同样可以选择使用通用I/O口而不是有串口功能的引脚来接收数据与控制时钟.

2、使用74LS165实现对51单片机并行数据转串口的输入
2.jpg
QA~QH:并行输出口
DSA\DSB :串行输入口
CLR  :清零位
CLK  :时钟输入
接线说明:
RXD ------>DSA\DSB
TXD ------>CLK
P1^7------>CLR

#include <reg52.h>
sbit CLR = P1^7;
void UART_Init()
{
SCON = 0x00;
ES = 0;
}
PA_out(unsigned char PA_data)
{
CLR = 0;
CLR = 1;
UART_Init();
while(TI==0);
TI = 0;
SBUF = PA_data;
}
这里同样可以使用通用I/O来代替模拟串口通信。
其实,在51单片机的使用过程中我们会经常使用这种通用I/O来模拟像I2C等各类通信方式。
今天介绍的这种串并口转换的方式对单片机引脚进行拓展的方式,会经常用于低速率设备中,向我们第一节课讲的LCD1602,就可以增加74LS1604来减少对单片机引脚的占用。
不过,因为串口是按位读取,接收端接收数据后还需要进行重组,因此不适用于对速率要求较高的场景。面对这种情况,我们还可以选择使用并行数据端口拓展I/O的方式,这一部分请大家自行学习了解。

已绑定手机
发表于 2022-4-7 09:30:15 | 显示全部楼层 来自 上海市
学习了,感谢楼主给力
发表于 2022-7-20 17:29:33 | 显示全部楼层 来自 北京市
好文,谢谢!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

合作/建议

TEL: 19168984579

工作时间:
周一到周五 9:00-11:30 13:30-19:30
  • 扫一扫关注公众号
  • 扫一扫打开小程序
Copyright © 2013-2024 一牛网 版权所有 All Rights Reserved. 帮助中心|隐私声明|联系我们|手机版|粤ICP备13053961号|营业执照|EDI证
在本版发帖搜索
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表