资源描述
第八章 MCS-51单片机的I/O口扩展设计
8.1 I/O口概述
1. 串行I/O口
一次传送一位信号,字节就要逐位传送,只需一条数据线。
2. 并行I/O口
一次可同时传送多位信号,但需同样多的数据线。
P1.0
+5V
例:用开关来控制指示灯(单点LED)的亮和灭。 8051
程序1: ORG 0000H
LJMP Main P1.1
ORG 100H
Main: SETB P1.1 ;P口作为输入的位,在测试前必须先置为“1”。
JB P1.1,L1 ;测试开关的电平,为“1”则转移到L1。
SETB P1.0 ;输出高电平,点亮
LCALL Delay ;延时
CLR P1.0 ;输出低电平,熄灭
LCALL Delay ; 延时
LJMP Main ;循环测试开关
L1: CLR P1.0 ;输出低电平,熄灭
SJMP Main ;循环测试开关
Delay: MOV R3, #10 ; 延时10ms
De1: MOV R4, #250 ;
De2: DJNZ R4, De2 ; 250*4us=1ms,设 f = 6MHz
DJNZ R3, De1
RET
END
当单片机的I/O口位不够用时,就需进行I/O口的扩展。
MCS-51单片机的外部数据存储器地址可以作为扩展I/O口的地址使用。
8.2 用可编程芯片8155/8156扩展并行I/O口(待)
8.3 用TTL芯片扩展并行I/O口
8.3.1 用74LS377( 373、374 )扩展一个8位并行输出口
1. 利用口位直接扩展的电路图:
对应的控制程序:
8051 E MOV P0,#5AH ;输出的数据。
P0.0 D0 Q0 MOV P2,#7FH ;对CLK 输出一个负电平
P0.1 D1 Q1 NOP ;脉冲锁存信号
P0.2 D2 Q2 MOV P2,#0FFH
P0.3 D3 Q3 或:
P0.4 D4 Q4 MOV P0,#5AH
P0.5 D5 Q5 CLR P2.7
P0.6 D6 Q6 NOP
P0.7 D7 Q7 SETB P2.7
ALE 在这里数据口可以和P0~P3的任一个连接,
P2.7 CLK CLK也可以和任一个口位连接。
WR 74LS377
当E=0时,CLK从‘0’到‘1’的正跳变,D输入的数据被锁存到Q输出。
应用:
8051 CLK Q0~Q7 E CLK Q0~Q7 E CLK Q0~Q7 E 74LS377
P1
P3.0
P3.1
P3.2
2. 利用数据存储器地址扩展的电路图见P204页的图8-11。
对应的控制程序:
8051 E MOV DPTR,#7FFFH
P0.0 D0 Q0 MOV A,#5AH ;输出的数据。
P0.1 D1 Q1 MOVX @DPTR,A
P0.2 D2 Q2 执行:
P0.3 D3 Q3 ①DPL的值送到P0,P0=D=FFH;
P0.4 D4 Q4 DPH的值送到P2,P2.7=E=‘0’;
P0.5 D5 Q5 ALE发出锁存的电平信号(没用到);
P0.6 D6 Q6 ②A的值送到P0,P0=D=5AH;
P0.7 D7 Q7 WR发出“写”的电平信号(脉冲),
ALE D的数据被锁存到Q。
P2.7 CLK
WR 74LS377 这种方法必须把P0口作为数据口,P2口作为选择位。
当E=0时,CLK从‘0’到‘1’的正跳变,D输入的数据被锁存到Q输出。
8.3.2 1.用74LS244扩展一个8位并行输入口
利用数据存储器地址扩展的电路图见P204页的图8-11。
对应的控制程序:
8051 MOV DPTR,#7FFFH
P0.0 1Y1 1A1 MOVX A,@DPTR
P0.1 1Y2 1A2
P0.2 1Y3 1A3 执行:
P0.3 1Y4 1A4 ①DPL的值送到P0,P0=D=FFH;
P0.4 2Y1 2A1 DPH的值送到P2,P2.7=‘0’;
P0.5 2Y2 2A2 (这时的RD=‘1’;)
P0.6 2Y3 2A3 ALE发出锁存的电平信号(没用到);
P0.7 2Y4 2A4 ②RD发出“读”的电平信号,
ALE 1EN RD=‘0’,(P2.7) OR (RD)=‘0’,
P2.7 2EN 1EN=2EN=‘0’,打开A1àY1和A2àY2的通道,
RD 74LS244 外部输入的数据传送到P0ßYi,
OR P0口的值送给累加器A=P0=Yi。
当iEN=0时,打开AiàYi的通道。
2. 用74LS245扩展一个8位并行输入输出口
利用数据存储器地址扩展的电路图:
对应的控制程序
8051 输入:当 DIR= ‘1’
P0.0 A0 B0 MOV DPTR,#FFFFH
P0.1 A1 B1 MOVX A,@DPTR
P0.2 A2 B2
P0.3 A3 B3 输出:当 DIR= ‘0’
P0.4 A4 B4 MOV DPTR,#7FFFH
P0.5 A5 B5 MOV A,#58H ;输出的数据。
P0.6 A6 B6 MOVX @DPTR,A
P0.7 A7 B7
ALE
P2.7 DIR 从这里可看出:利用数据存储器地址扩展,比直接
RD 用P口位扩展要节省口位。
WR G
AND 74LS245
当 DIR= ‘1’且G=‘0’时,打开BiàAi的输入通道;
当 DIR= ‘0’且G=‘0’时,打开AiàBi的输出通道。
8.4 用MSC-51单片机的串行口扩展I/O口
8.4.1扩展并行输入口
用CD4014扩展一个16位并行输入口:
P/S PI1 D0 1 CD4014芯片工作原理:
8051 PI2 D1 2 ① 当P/S=1时,
P3.0 Q8 PI3 D2 3 Di存入内部寄存器PIi;
(RXD) PI4 D3 4 ② 当P/S=0时,
CLK PI5 D4 5 (R3) CLK从‘0’到‘1’的正跳变,
P1.0 PI6 D5 6 内部寄存器PIi左移一位,
SI PI7 D6 7 即:Q8≡PI8ßPI7,
P3.1 VSS PI8 D7 8 PI7ßPI6,… ,PI3ßPI2,
(TXD) CD4014(1) PI2ßPI1,PI1ßSI≡Q8(2);
P/S PI1 D0 9 Q8(2)≡PI8(2)ßPI7(2), …
PI2 D1 10
Q8 PI3 D2 11
PI4 D3 12 (R4)
CLK PI5 D4 13
PI6 D5 14
SI PI7 D6 15
VSS PI8 D7 16
CD4014(2)
对应的控制程序,读入16位数据存入R3、R4中:
RD16:SETB P1.0 ; 置CD4014为并行输入方式
CLR P3.1
SETB P3.1 ; 产生一个脉冲,读入外部并行输入数据
CLR P1.0 ; 允许CD4014串行移位
MOV SCON,#10H ; 设置串行口为方式0,并启动串行接收
KT1: JNB RI,KT1 ; 等待接收
CLR RI ;清除RI
MOV A,SBUF ; 从串行缓冲区中读数
MOV R3,A ; 第一个数存入R3中
MOV SCON,#10H ; 设置串行口为方式0,并启动串行接收
KT2: JNB RI,KT2 ; 等待接收
CLR RI ; 清除RI
MOV A,SBUF ; 从串行缓冲区中读数
MOV R4,A ; 第二个数存入R4中
RET ;
用74LS165扩展一个16位并行输入口:
S/L d0 D0 1 74LS165芯片工作原理:
8051 d1 D1 2 ① 当S/L=0时,
P3.0 QH d2 D2 3 Di存入内部寄存器di;
(RXD) d3 D3 4 ② 当S/L=1时,
CP1 d4 D4 5 (R3) CP1从‘0’到‘1’的正跳变,
P1.0 d5 D5 6 内部寄存器di左移一位,
SI d6 D6 7 即:QH≡d7ßd6,
P3.1 CP2 d7 D7 8 d6ßd5,… ,d2ßd1,
(TXD) 74LS165(1) d1ßd0,d0ßSI≡QH(2);
S/L d0 D0 9 QH(2)≡d7(2)ßD6(2), …
d1 D1 10
QH d2 D2 11
d3 D3 12 (R4)
CP1 d4 D4 13
d5 D5 14
SI d6 D6 15
CP2 d7 D7 16
74LS165(2)
对应的控制程序,读入16位数据存入R3、R4中:
RD16:CLR P1.0 ; 读入外部并行输入数据
SETB P1.0 ; 允许74LS165串行移位
MOV SCON,#10H ; 设置串行口为方式0,并启动串行接收
KT1: JNB RI,KT1 ; 等待接收
CLR RI ; 清除接收标志
MOV A,SBUF ; 从串行缓冲区中读数
MOV R3,A ; 第一个数存入R3中
MOV SCON,#10H ; 设置串行口为方式0,并启动串行接收
KT2: JNB RI,KT2 ; 等待接收
CLR RI ; 清除接收标志
MOV A,SBUF ; 从串行缓冲区中读数
MOV R4,A ; 第二个数存入R4中
RET ;
8.4.2扩展并行输出口
用74LS164扩展两个8位并行输出口:
74LS164(1)
QA D0 1
A QB 2
B QC 3
QD 4
8051 QE 5 R3
CLR QF 6
P1.0 CLK QG 7
QH D7 8
P3.1
(TXD) QA D0 9
A QB 10
P3.0 B QC 11
(RXD) QD 12 R4
QE 13
CLR QF 14
CLK QG 15
QH D7 16
74LS164(2)
对应的控制程序,R3、R4的数据经串行口输出:
WR16:CLR P1.0 ; 清除74LS164中的数据
SETB P1.0 ; 允许74LS164串行移位
MOV SCON,#00H ; 设置串行口为方式0
MOV A,R3 ;
MOV SBUF,A ; 启动串行口发送
WT1: JNB TI,WT1 ; 等待发送完毕
CLR TI
MOV A,R4 ;
MOV SBUF,A ; 启动串行口发送
WT2: JNB TI,WT2 ; 等待发送完毕
CLR TI
RET ;
作业:
(一) P210页的 二、填空题 1. 3. 4. 题。
(二) 请简述74LS374、244、245芯片的工作原理。
(三) 使用8051的串行口和利用一块74LS165扩展一个8位并行输入口,
请画出扩展芯片与CPU的连接示意图,并写出相应的输入程序段。
(四) 使用8051的串行口和利用一块74LS164扩展一个8位并行输出口,
请画出扩展芯片与CPU的连接示意图,并写出相应的输出程序段。
(五) 用74LS245芯片扩展一个8位并行输入输出口,要求利用P1和P3口位直接扩展。
请画出扩展芯片与CPU的连接示意图,并写出相应的输入和输出程序段。
展开阅读全文