1.03k likes | 1.1k Views
I/O 接口的作用. 实现和不同外设的速度匹配 改变数据传送方式 改变信号的性质和电平. 外部设备的编址. 对外设端口单独编址 IN A,(N) ;N 端口中的地址数据 OUT (N),A 外设端口和存储器统一编址 将一部分地址空间让给外设端口,存储器不再使用。. 优点: ( 1 )一切指令均适用于 I/O 端口的访问,增强了 CPU 对外围设备的处理能力。 ( 2 ) CPU 本身不需要专门的 I/O 指令。 ( 3 )外设地址安排灵活,数量不限。.
E N D
I/O 接口的作用 • 实现和不同外设的速度匹配 • 改变数据传送方式 • 改变信号的性质和电平
外部设备的编址 • 对外设端口单独编址 IN A,(N) ;N端口中的地址数据 OUT (N),A • 外设端口和存储器统一编址 • 将一部分地址空间让给外设端口,存储器不再使用。
优点: • (1)一切指令均适用于I/O端口的访问,增强了CPU对外围设备的处理能力。 • (2)CPU本身不需要专门的I/O指令。 • (3)外设地址安排灵活,数量不限。
端口:常指I/O接口中带有端口地址的寄存器或缓冲器, CPU通过端口地址就可以对端口中信息进行读写。 • 接口:指CPU与外设间的I/O接口芯片,一个外设通常需要一个I/O接口,但一个I/O接口可以有多个I/O端口,传送数据字的端口称数据口,传送命令字的称命令口,传送状态字的称为状态字。 端口与接口
四个8位并行I/O端口:P0、P1、P2和P3。 • 每个端口都是8位准双向口,包含一个锁存器(即特殊功能寄存器P0~P3)、一个输出驱动器和一个输入缓冲器。 • 这四个并行I/O口都可以作准双向通用I/O口,既可以作输入口,又可以作输出口,还可以作双向口。输出有锁存功能;输入有三态缓冲但无锁存功能。它们既可以以字节寻址,也可以按位独立输入/输出。 4.1 并行I/O口
数据输出方式(写端口) 通过一条指令将数据写入P0-P3的数据锁存器,然后通过输出驱动器送到端口引脚。 MOV P0,A ;累加器A中内容送P0口 • 读端口 对端口锁存器数据进行读入,这个数据并非端口引脚上的数据 MOV A,P1 ;P1锁存器中数据送A 三种I/O端口操作方式
读引脚 从端口引脚上读数据,先使对应端口锁存器置位,使T管截止,然后打开数据缓冲器,使引脚数据输入数据总线。 MOV P1,#0FH ;使P1口低四位锁存器置位 MOV A,P1 ;读P1口低四位引脚线信号
控制 Vcc AD0 读锁存器 地址/数据 P0R1 内部总线 P0.x D0 D Q 写锁存器 锁存器 Q C P0W BUF2 读引脚 P0R2 P0口内部结构 多路开关 BUF1 4.1.1 P0口 1、 P0口的结构 • 输入锁存器 • 两个输入缓冲器(BUF1和BUF2) • 推拉式I/O驱动器 1 0
说明: • 当控制信号为0时,P0口做双向I/O口,为漏极开路(三态) • 控制信号为1时,P0口为地址/数据复用总线(用于口扩展) • P0W为端口输出写信号,用于锁存输出状态 • P0R1为读锁存器信号,执行“ANL P0,#0FH”时该信号有效 • P0R2为读引脚信号,执行“MOV A,P0”时该信号有效 • 读引脚(端口)时,输出锁存器应为“1”
2. P0口的总线方式(系统使用外存储器时) 控制电路的“控制”=1,此时与门打开,MUX接向“地址/数据”信号.在这种情况下,输出极的两个FET都处于正常的工作状态 。 访问外部存储器的指令movx、movc ,就是使用P0口来输出外部存储器的低八位地址和输入、输出存储器的数据。 如果单片机使用了外部存储器(或使用movx指令来访问外部接口电路)时,P0口成为整个系统的地址/数据复用总线。换句话,P0口不能再作为通用的I/O端口的形式直接与外部连接。
Vcc Vcc 读锁存器 控制(=0时) 地址/数据 1/0 内部总线 P0.x 引脚 D Q 锁存器 CL /Q 写锁存器 MUX (控制=0时) 读引脚 上拉电阻 P0口作为通用数据I/O端口
3. P0口的I/O操作(通用I/O接口功能) 由于与门的一个输入端为“0”,所以它使上端的FET截止.这就是P0口在做I/O口时输出为“漏极开路”的结构原因。 在P0口作为通用I/O端口时,控制电路中的“控制”为“0”电平,多路开关MUX接入下方的锁存器的/Q端。 P0口作为通用I/O口
输出操作 在执行以口为目标的指令时,数据送到锁存器的“D”端,经“/Q”端送场效管应输出极.如:送“1”时,/Q=“0”,使下端的FET截止.这样出现输出极的两个FET全部截止.在这种情况下必须在端口线上外加上拉电阻.这样在上拉电阻的作用下,使端口为高电平.同理,若总线向口送“0”时,锁存器的/Q=1,使下端的FET导通(上面的FET仍然截止),这样端口呈现“0”电平。
输入操作(读引脚,读锁存,输入前写1) 读引脚:读外部送到端口引脚的电平,即通常所说的输入操作(如:MOV A,P0).此时,单片机控制“读引脚”的三态门,使引脚处的外部电平经三态门送入内部总线. • 读锁存器:将进行读锁存器并进行处理,最后再写回锁存器的操作称之为: “读—修改—写”操作,如“ANL P0,#0FH” 。在这种情况下, 读入的数据不是来自引脚,而是端口内部锁存器的内容。 • 输入(读引脚)时应先写“1”: 在端口电路中,可以发现一个问题:端口在输入(读
引脚)时,原来锁存器的状态可能要影响引脚电平的输入.例如:原来锁存器引脚)时,原来锁存器的状态可能要影响引脚电平的输入.例如:原来锁存器 的状态为“0”态,既输出极的下端FET是饱和状态,这样如果外电路向引脚输入高电平时,电路将不能正确读入.要解决的方法就是让下端的FET截止,既事先向端口写一个“1”。 向端口写一个“1”
“通用数据I/O端口”和“地址、数据复用总线”“通用数据I/O端口”和“地址、数据复用总线” a. 在作为通用数据I/O端口时,具有较强的驱动能力(8个TTL负载),与MOS负载连接时,需要外接一个上拉电阻。 b. 作为“地址、数据复用总线”使用时,P0口首先输出外部存储器的低八位地址,然后再变为数据总线进行数据的输入或输出.此时,P0口不能再作为通用I/O口。 P0口特点小结: 返回 返回前一次
做通用数据I/O端口时,输出级上端的FET处于截止状态,所以与MOS器件连接时,必须接“上拉电阻”,否则不能正确的输出高电平;做通用数据I/O端口时,输出级上端的FET处于截止状态,所以与MOS器件连接时,必须接“上拉电阻”,否则不能正确的输出高电平; 在输入操作前,为了保证输入正确,必须先向端口“写1”; “读引脚”与“读锁存器”是不同的两个数据通道。凡是“读—修改—写” 的操作,CPU读的都是端口锁存器中的数据。 为了提高电路的可靠性,端口引脚不要直接与三极管一类的器件直接连接,应加隔离电路或与三极管之间加一个电阻.
特点:单纯的通用I/O端口,负载能力为3个TTL输入。特点:单纯的通用I/O端口,负载能力为3个TTL输入。 4.1.2 P1口 Vcc 读锁存器 内部上拉电阻 P1.x 引脚 D Q 锁存器 CL /Q 内部总线 写锁存器 读引脚 三态门 上拉电阻
4.1.3 P2口特点:“通用数据I/O端口”和“高八位地址总线”端口。 地址/数据 1/0 Vcc 控制 读锁存器 内部上拉电阻 内部总线 P2.x 引脚 D Q 锁存器 CL /Q MUX (地址/数据=0) 写锁存器 读引脚 高8位地址总线使用时,控制信号使转换开关接向上侧
P2口在系统使用外部存储器时,做高八位的地址总线。 P2口在系统使用外部存储器时,做高八位的地址总线。 应当注意的是:仅使用外部数据存储器时,P2口分两种情况: 仅仅使用256B的外部RAM时,既使用movx a,@r0指令访问外部RAM,此时用8位的寄存器R0或R1作间址寄存器,这时P2口无用,所以在这种情况下,P2口仍然可以做通用I/O端口。 如果访问外部ROM或使用大于256B(多于8位地址)RAM时,P2口必须作为外存储器的高八位地址总线。 如:movx a,@dptr ;访问外部数据存储器 movc a,@a+dptr ;访问外部程序存储器 这里使用了16位的寄存器DPTR
4.1.4 P3口特点:通用I/O端口、多用途端口 Vcc 读锁存器 第二功能输出 P3.x 引脚 内部总线 D Q 锁存器 CL /Q 写锁存器 MUX (地址/数据=0) 读引脚 上拉电阻 第二功能输入
4.1.4 P3口 1 1 输出I/O口 读I/O口 1 1 • 说明: • 做普通端口使用时,第二功能应为“1” • 使用第二功能时,输出端口锁存器应为“1”。
第二功能() • P3.0 TXD • P3.4 T0 • P3.1 RXD • P3.5 T1 • P3.2 INT0 • P3.6 WR • P3.3 INT1 • P3.7 RD
4.1.5 P0~P3端口功能总结 使用中应注意的问题: P0~P3口都是并行I/O口,但P0口和P2口还可用来构建数据总线和地址总线,所以电路中有一个MUX,进行转换。 而P1口和P3口无构建系统的数据总线和地址总线的功能,因此,无需转接开关MUX。
只有P0口是一个真正的双向口,P1~P3口都是准双向口。原因:P0口作数据总线使用时,为保证数据正确传送,需解决芯片内外的隔离问题,即只有在数据传送时芯片内外才接通;否则应处于隔离状态。为此,P0口的输出缓冲器应为三态门。只有P0口是一个真正的双向口,P1~P3口都是准双向口。原因:P0口作数据总线使用时,为保证数据正确传送,需解决芯片内外的隔离问题,即只有在数据传送时芯片内外才接通;否则应处于隔离状态。为此,P0口的输出缓冲器应为三态门。 • P3口具有第二功能。因此在P3口电路增加了第二功能控制逻辑。这是P3口与其它各口的不同之处。
P1口的应用 • 通用I/O口 • 可以采用字节操作也可以采用位操作,CPU既可以把它们看作数据口也可以看作状态口。 • CPU复位后,口锁存器为“1”,对于作为输入的口脚(读引脚),相应位的口锁存器不能写入“0”。
例4-1 读P1.4~P1.7口状态送指示灯显示。 • 字节操作参考程序: • ORL P1,#0F0H ;P1.4~P1.7口锁存器置1 • MOV A,P1 ;读P1.4~P1.7引脚状态 • SWAP A ; • MOV P1,A ; • RET
P2口作通用I/O口应用 • 例4-3 • XRL P2,#01H ;P2.0取反 • CPL P2.0 ;P2.0取反 • P2口作地址总线 • (1)若片外数据存储器的容量≤256B • 这时P2口不输出地址,仍可作为I/O口使用
例4-4 将56H写入外部RAM的38H单元,CPU • 执行下面的程序段不影响P2口状态: • MOV R0, #38H • MOV A, #56H • MOVX @R0, A • (2)若片外数据存储器的容量≥256B • MOVX A,@DPTR • MOVX @DPTR,A
4.2 定时器/计数器 • MCS-51内部具有两个定时/计数器,可用于定时控制,分频器和事故处理来用。 • 内部是一个二进制加1计数器,当计数器计满回零时能自动产生溢出中断请求,表示定时时间已到或计数已中止。
2个可独立控制的16位定时器/计数器:T0、T1 • 原理: • 定时模式 • 每一个机器周期计数器加1,直至计满溢出产生中断请求。对于一个N位的加1计数器,若计数时钟的频率f是已知的,则从初值a开始加1计数至溢出所占用的时间为: • 当N=8、a=0、t=1/f时,最大的定时时间为: T=256t
计数模式 • 外部输入信号是加到T0(P3.4)或T1(P3.5)端,CPU每个机器周期对T0(或T1)检测一次,只有在前一次检测为1后一次检测为0时才使计数器加1。所以,对外部输入信号的最高计数速率是晶振的1/24。
T0 T1 一 、 定时器控制、状态寄存器 1.TMOD定时器方式寄存器(89H) • 功能选择位C/T: • =0,定时功能,计数内部机器周期脉冲; • =1,计数功能,计数引脚T0(T1)输入的脉冲下降沿。 • 方式选择位M1、M0:4种工作方式:13/16/8位
门控方式选择位GATE :=0,非门控方式(内部启动):TRx=1,启动定时器工作;TRx=0,停止定时器工作。=1,门控方式(外部启动):TRx=1且引脚INTx=1才启动。
MOV TMOD,#1101 0010B • 或 MOV TMOD,#0D2H 确定定时器工作方式指令:MOV TMOD,#方式字 例:设T0用方式2非门控定时,T1用方式1门控计数。
2.TCON定时器控制/状态寄存器(88H) • 启动控制位TR0、TR1 =0,停止定时器工作; =1,启动定时器工作。 例:启动T0: SETB TR0 • 溢出中断标志位TF0、TF1 定时器溢出使TFx=1。 中断方式: TFx=1引起中断请求,CPU响应Tx中断后,自动对TFx清0 。
软件查询方式: • 可用软件检测TFx,必须软件清0。 • WAIT:JBC TF0,NEXT;检测T0是否溢出 • SJMP WAIT ;未溢出,继续检测 • NEXT: … ;溢出,TF0清0,处理溢出 • 3.可预置初值的16位加1定时计数器 • 属于SFR中的一种,T0由TH0、TL0组成, T1由TH1、TL1组成。通过预设初值来定时。 • 预置T0初值指令: MOV TH0,#XH • MOV TL0,#XL
振荡器 ÷12 8位 5位 中断 申请 C/T=0 C/T=1 THx TLx TFx Tx脚 启动控制 TRx & GATE 1 INTx 二、定时器工作方式由方式选择位M1、M0设定
1.方式0 13位定时/计数器。 THx 高8位和TLx 低5位组成13位加1计数器 计数外部脉冲个数:1~8192(213) 定时时间(12MHz,即:T=1s):1s ~8.192ms
例:计算得初值为7692,13位定时器T0应装初值多少?例:计算得初值为7692,13位定时器T0应装初值多少? • 7692化为16进制数1E0CH,则 • TH0=0FOH,TL0=0CH • 2.方式1 • 16位定时/计数器。 THx8位和TLx8位组成16位加1计数器 • 计数外部脉冲个数:1~65536(216) • 定时时间(T=1s):1s ~ 65536×T= 65.54ms
振荡器 ÷12 8位 8位 中断 申请 C/T=0 C/T=1 THx TLx TFx Tx脚 启动控制 TRx & GATE 1 INTx
3.方式2 自动恢复初值8位定时/计数器。 TLx为8位加1计数器,THx为8位初值暂存器。 无需重装初值,用于需要重复定时 和计数的场合。 最大计数值:256 (28) 最大定时时间(T=1s): 256s
振荡器 ÷12 8位 中断 申请 C/T=0 C/T=1 TLx TFx Tx脚 启动控制 重 装 TRx & THx GATE 1 INTx
4.方式3(只适用T0) • T0分成2个独立的8位定时器:TL0定时/计数器和TH0定时器 • TL0占用T0控制位:C/T,TR0,GATE;TH0占用T1控制位。 • T1不能使用方式3工作,一般当T1作为波特率发生器时,T0选方式3。 • 方式2下,当定时器计满回零时,一方面向CPU发出溢出中断请求,另一方面从TH中重新获得初值并启动计数。 • 而方式0、1、3下,定时器必须通过重装初值来重新启动计数。
振荡器 ÷12 8位 中断 申请 C/T=0 C/T=1 TL0 TF0 T0脚 启动控制 TR0 & GATE 1 INT0 8位 中断 申请 振荡器 ÷12 TH0 TF1 启动控制 TR1 方式3下定时器的逻辑功能图
4.2.3 定时器/计数器的初始化 • 1.初始化步骤 • 给定时器方式寄存器TMOD送一个方式控制字,以设定定时器/计数器的相应工作方式。 • 确定需要定时的时间和需要计数的初值,给定时器/计数器送定时器初值或计数器初值。 • 给中断允许寄存器IE选送中断控制字和中断优先级寄存器IP选送中断优先级字,以开放相应中断和设定中断优先级。