|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
3 u% @) b+ o, h& K 51单片机引脚总数只有40,通用I/O引脚只有24个,资源比较紧张。当引脚数目不能满足项目需要时,对I/O口的拓展就是必须掌握的技能了。
, c p/ Y: R& d* J我们最常使用的是串行数据端口拓展,即单片机使用串行方式发送或接收数据,通过中间芯片,实现串行数据于并行数据之间的转换。
! B* d$ v# @; @
7 Z9 P" E; @6 d' G4 N" T+ ^3 X4 d1、使用74LS165实现对51单片机并行数据转串口的输入
o ]4 e, Q" h* f0 K73LS165引脚功能图:- F; g6 g! z( l+ u
2 v7 w; I0 x- r
引脚介绍:
8 x- b% {6 S& l1 CSHIFT/LOAD : 为低电平时,并行数据从A-H被置入寄存器;为高电平时,在时钟信号下进行移位
. h) T/ x+ h' U% U3 q Q$ a: UCLK:时钟输入" l( K$ y# O% M
A~H:并行输入口, m5 W; _- Z5 f2 N1 K. X4 u/ K
QH、~QH:串行输出口3 w/ C ?* C. H9 |0 I. D
接线说明 1^7----->SHIFT/LOADTXD ----->CLOCKRXD ----->OUTPUT QH& h/ D4 I/ i, O+ [6 A$ ?+ O
#include <reg52.h>/ o- d9 f& f6 w8 x, p6 y! D1 W* Y
sbit LOAD = P1^7;
+ }: L" }3 E& s- D- }void UART_Init()
6 Z* U. ~# l4 D5 J a8 T/ j9 O{' W$ M0 r$ V4 A. F ]# G
SCON = 0x10;7 s& r; ^9 R7 o: C. C; e
ES = 0;8 B$ Z Q; ]! j' B* D
}
2 F$ e$ a. s; S2 d$ F. N& _unsigned char PA()
% ^, Q' ~; p1 o2 B4 ^{
( L) d5 s' y! x, Eunsigned char PA_data;4 K% Z/ f* e. Y3 M; z( Z: H, _2 K
LOAD = 0;//SH/LOAD为低电平,74LS165将并行数据装入寄存器9 O7 I# }- B; j I7 L! |
LOAD = 1;//SH/LOAD为高电平,在时钟信号下进行移位
, h$ m" C L- j4 K$ G MUART_Init();
" q. l0 b# P& \. K* g% N! l& k1 cwhile(RI==0);3 b: j! ], S! X Z/ Z, U
RI==0; Q4 c) w0 p7 J
PA_data == SBUF;
( V) ^3 ]& `& L6 H6 {return PA_data;+ S5 l: F% M, t0 ?% B! w
}
) D6 m$ q; Z/ W- o, Y. u4 D, a( E: N此处,我们同样可以选择使用通用I/O口而不是有串口功能的引脚来接收数据与控制时钟.
: z% b& E [; H# _* T+ d5 A& ^9 M$ }5 @% w# A' Y
2、使用74LS165实现对51单片机并行数据转串口的输入
& k- M: ^3 l. w' h) C% @
1 V/ I& U: b2 K. Q- Q
QA~QH:并行输出口
1 P) ?; t" |" A& u }DSA\DSB :串行输入口% Y1 B& D) f; E- H# Z
CLR :清零位 Z4 ]9 j: ^6 A8 j) _" v3 t. m
CLK :时钟输入3 [2 K& q h( f; c: ~( {$ o
接线说明:
1 i5 i- ^' r) f$ nRXD ------>DSA\DSB
$ m& ~! O5 }" u; aTXD ------>CLK
7 F9 b& q; q- X5 d8 X TP1^7------>CLR
/ O' C+ M6 ? E. N% d( m, R+ T4 a2 f. w7 l% f) V
#include <reg52.h>& P3 |3 w! @/ {5 S0 m
sbit CLR = P1^7;8 j) P2 p) H0 x
void UART_Init()5 c. [6 Q9 u+ c5 X
{
( @- I! p0 r" a& tSCON = 0x00;
( ]: N- ^6 _: v: z/ D) BES = 0;
$ L- H. H6 I0 K$ x}7 a: D* a% I8 T2 P! d- j
PA_out(unsigned char PA_data)1 N6 m! U( |# w, I% U! P
{
v: G' v6 e6 R; W1 a! s& [CLR = 0;% h$ m8 B+ q6 j6 R( a; ]! k
CLR = 1;) \$ |+ ^3 K/ R7 U8 h8 l8 k
UART_Init();
4 F [8 r( x) u. c/ |1 V- @# Dwhile(TI==0);- @. }" E4 S% U0 [0 ?4 a
TI = 0;
1 H. c2 J2 @' |* q! xSBUF = PA_data;
2 x8 e& ]8 ^! [. t7 V}
* {6 x8 L: ^- o( ~这里同样可以使用通用I/O来代替模拟串口通信。
/ s$ I, R5 |8 A: S$ ~% e其实,在51单片机的使用过程中我们会经常使用这种通用I/O来模拟像I2C等各类通信方式。
; L( x3 f2 t' t, i# S8 h1 I: Y今天介绍的这种串并口转换的方式对单片机引脚进行拓展的方式,会经常用于低速率设备中,向我们第一节课讲的LCD1602,就可以增加74LS1604来减少对单片机引脚的占用。
" ?$ J9 @! Q8 I+ ^: ?5 [# d不过,因为串口是按位读取,接收端接收数据后还需要进行重组,因此不适用于对速率要求较高的场景。面对这种情况,我们还可以选择使用并行数据端口拓展I/O的方式,这一部分请大家自行学习了解。
, u6 S: |" y+ C |
|