找回密码
 注册
关于网站域名变更的通知
查看: 175|回复: 4
打印 上一主题 下一主题

51单片机经典范例演练3 对I/O口进行拓展

  [复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-5-24 09:29 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

. Q6 a5 m7 h$ R  P( q7 n 51单片机引脚总数只有40,通用I/O引脚只有24个,资源比较紧张。当引脚数目不能满足项目需要时,对I/O口的拓展就是必须掌握的技能了。+ K2 Y0 _5 H, ^- n& |$ Y
我们最常使用的是串行数据端口拓展,即单片机使用串行方式发送或接收数据,通过中间芯片,实现串行数据于并行数据之间的转换。2 i* H+ P- h  N, b) ~$ @. u

1 \: n, @0 W+ e5 h& G) A, }1、使用74LS165实现对51单片机并行数据转串口的输入
- j9 u; S" j% |1 e8 W0 Q6 A73LS165引脚功能图:
: [6 a* L0 u7 D; z) ^
  i' M+ h7 F1 C9 T- ^& V引脚介绍:
: \* w) a2 c6 q9 E! [& kSHIFT/LOAD  :  为低电平时,并行数据从A-H被置入寄存器;为高电平时,在时钟信号下进行移位
, X: A# a7 \5 F7 C+ H- ~CLK:时钟输入
) D' z, X6 a! F6 W0 C" J, c6 CA~H:并行输入口
' C% J" P: V4 a; B- j, V3 t+ LQH、~QH:串行输出口
+ }4 N0 G6 a" }7 O: ~# V* T* J接线说明1^7----->SHIFT/LOADTXD ----->CLOCKRXD ----->OUTPUT QH% B, N7 D: d) X  e
#include <reg52.h>
9 l3 C6 `9 i6 wsbit LOAD = P1^7;
  o5 |0 z7 \; g; l5 i- cvoid UART_Init()
: J8 h/ H+ t6 j( H! d) B{0 P7 w1 }3 B5 v5 m4 N$ ~5 J
SCON = 0x10;& H  X" p1 @1 U7 Y: W6 m
ES = 0;8 g* ~$ r( E; M6 Y! o. p5 V' ?6 L
}0 ?( w8 s; G8 Y0 a8 a
unsigned char PA()
2 S1 n$ e0 A* Y6 N{. B/ f1 c% j$ I, }: A) d: T, h1 C
unsigned char PA_data;
8 {, u1 d/ w6 c% [# K5 pLOAD = 0;//SH/LOAD为低电平,74LS165将并行数据装入寄存器
  ?8 X" g. N4 E% X9 wLOAD = 1;//SH/LOAD为高电平,在时钟信号下进行移位. Y1 X! t8 B$ L+ z) _
UART_Init();0 V( q7 B* s; c
while(RI==0);
+ U6 R; q# ]" e! o  r3 ^9 ORI==0;
1 `) A; p* C$ \. H2 \; z" UPA_data == SBUF;2 F2 ?2 v5 L, G: I8 K9 ]& L) c
return PA_data;* U0 N- @/ A. T7 Y% J6 z
}- V* V$ c# F& v; `6 z$ `' g
此处,我们同样可以选择使用通用I/O口而不是有串口功能的引脚来接收数据与控制时钟.
" K0 J/ J# t! B" K6 |- c& M( n/ ~* l8 Z  G1 C9 k7 L% x$ _0 f
2、使用74LS165实现对51单片机并行数据转串口的输入
2 _& q( F+ W* L& P1 y
4 d3 k& l# L& r* G! v2 l9 W+ U/ a& eQA~QH:并行输出口+ E/ n2 J% k; f+ M& ~2 p
DSA\DSB :串行输入口
9 e9 ^) t2 _7 e/ c  {1 F8 @3 \2 _2 JCLR  :清零位- y+ G/ L2 W; O+ ?$ d9 v8 R
CLK  :时钟输入0 N* q3 ]8 \2 b, `( B
接线说明:
. _! @0 E1 w+ r) H! J) }. x+ HRXD ------>DSA\DSB
' K& q3 b- x0 ?" g" y" UTXD ------>CLK6 z9 ?& w2 z! I! J( O" k+ F1 v
P1^7------>CLR# \5 x. d" q3 b$ R+ S

6 ^' X( Q# T# l5 a#include <reg52.h>
/ l- |# |/ }" D. Jsbit CLR = P1^7;5 k0 d$ G4 K0 A8 J2 N
void UART_Init()5 q1 v9 u2 U; r% v
{8 \) m$ g) H7 F1 q. R4 K
SCON = 0x00;! s  K1 H0 `* h7 b( ^8 W8 V' T5 h
ES = 0;
6 d% C& C) g* p. y# L4 }  K! o}
" N% `% r2 W5 T9 tPA_out(unsigned char PA_data)9 }3 A8 P7 G! D5 B4 d- F) W: M
{+ U% ~2 E- J2 ^0 Z
CLR = 0;: Y- {# K( \1 l- J5 ^  {6 M9 s
CLR = 1;
$ t  J& F7 c( C$ O, ]; @/ f2 PUART_Init();
1 {% Z3 l: |7 A* {# E5 twhile(TI==0);: c) q# e7 ]! d3 d" @
TI = 0;) z3 I0 ], g1 }4 a- [1 @
SBUF = PA_data;! Q+ g& g1 ^9 |" e9 T
}! O  Q5 F7 h; M1 r
这里同样可以使用通用I/O来代替模拟串口通信。+ x* x7 f# @- O8 ], e- ~+ I
其实,在51单片机的使用过程中我们会经常使用这种通用I/O来模拟像I2C等各类通信方式。3 r. }) v9 b1 k: L0 E+ l
今天介绍的这种串并口转换的方式对单片机引脚进行拓展的方式,会经常用于低速率设备中,向我们第一节课讲的LCD1602,就可以增加74LS1604来减少对单片机引脚的占用。
' ~! y; x1 I" l% h不过,因为串口是按位读取,接收端接收数据后还需要进行重组,因此不适用于对速率要求较高的场景。面对这种情况,我们还可以选择使用并行数据端口拓展I/O的方式,这一部分请大家自行学习了解。3 n/ w- A$ J/ M; I
        

该用户从未签到

2#
发表于 2022-5-24 13:27 | 只看该作者
学习学习。||ヽ(* ̄▽ ̄*)ノミ|Ю
  • TA的每日心情
    开心
    2023-6-2 15:15
  • 签到天数: 1 天

    [LV.1]初来乍到

    3#
    发表于 2022-5-24 13:27 | 只看该作者
    很不错,赶紧收藏起来
    + v# N- D; Y# V! _

    该用户从未签到

    4#
    发表于 2022-5-24 14:49 | 只看该作者
    方式太多了

    该用户从未签到

    5#
    发表于 2022-5-24 16:20 | 只看该作者
    嗯嗯,方法有很多
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-8-11 19:13 , Processed in 0.125000 second(s), 26 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表