具有串行接口的I/O扩展器EM83010及其应用
2009-02-05
作者:曹立进 高敦堂 都思丹 孙宗琪
摘 要: 介绍了具有串行接口的I/O扩展器EM83010的性能和特点,利用EM83010实现了对MCS51单片机的I/O扩展。
关键词: I/O扩展 串行接口 MCS51单片机
单片机I/O口的扩展,过去常常采用门电路或可编程逻辑器件等来实现,比较麻烦。本文介绍具有串行接口的I/O扩展器EM83010及其应用,从而为设计者提供一种新的I/O口扩展方法。使用EM83010进行I/O扩展,不仅非常简便,而且具有强大的功能。
1 EM83010简介
EM83010是EMC公司生产的带串行接口的I/O扩展器,它具有以下功能及特点:
· 14个双向I/O口线
· 2个I/O寄存器,2个I/O控制寄存器
· 144×8bit片内RAM
· 与MCU通过2线串行接口相连
· 2线最多可同时接8片EM83010(此时扩展I/O数量为112个,RAM容量为1152×8bit)
· 工作电压宽:2.5V~5.5V
· 低功耗,工作电流0.5mA,静态电流15μA
· 18DIP/SOIC封装形式
1.1 管脚定义
对于18DIP封装的EM83010而言,其管脚功能如表1所示。
1.2 内部功能框图
EM83010内部功能框图如图1所示。EM83010内部主要包括I/O控制逻辑、存储控制逻辑、地址指针、144字节的RAM、状态及控制寄存器、两个端口及其对应的数据寄存器和控制寄存器。
1.3 2线串行接口
EM83010支持双向2线串行接口,其中由SCK提供串行同步时钟,SDT收发数据,并且最多可以有8个EM83010同时共享该总线。
串行总线上数据传送的时序如图2所示。
数据传输依次为:START、GRP位、DATA(控制字节、数据或地址,高位在前,低位在后)、ACK位、STOP。其中START定义为SCK=“1”时SDT的下降沿;STOP定义为SCK=“1”时SDT的上升沿;若GRP=“0”,表示下面的字节是控制字节,否则表示下面的字节是数据或地址;ACK的产生方法是在ACK周期(回应时钟)的高电平期间将SDT拉低。STOP产生之后,SCK、SDT保持高电平状态。
串行总线上定义了三种数据格式:
(a) 控制字节的传送
(b) 随机地址的数据读写
(c) 连续地址的数据读写
在以上数据格式中,S:开始(START);P:停止(STOP);D:数据(8位);1:(GRP)高电平;0:(GRP)低电平;A:地址(8位);K:读数据时有回应(ACK);C:控制字节(8位);NK:读数据时无回应(No ACK)。
1.4 控制字节
控制字节的位定义如表2所示。
注:(T1 T0 A2 A1 A0)=(1 1 0 0 0)被保留,
用于R-option地址。
1.5 寄存器(I/O端口及RAM)
1.5.1 寄存器(I/O端口、RAM)分配表
寄存器(I/O端口及RAM)分配表如表3所示。
1.5.2 R00~R01(端口0~端口1)
·R00是6位寄存器,对应端口0,读写R00的高2位无意义。
·R01是8位寄存器,对应端口1。
·每个I/O管脚均可定义为输入或输出。
·写入R00和R01时是串行传送的,但数据被刷新到管脚上是同时的;读R00和R01时,管脚数据的采样也是同时的。
1.5.3 R02和R03(IOC0和IOC1)
·IOC0(R02)是6位寄存器,控制端口0数据I/O的方向,读写IOC0的高2位无意义。
·IOC1(R03)是8位寄存器,控制端口1数据I/O的方向。
·IOC0和IOC1中的“1”置对应管脚为高阻,表示输入;“0”置对应管脚为输出状态。
·上电后,IOC0和IOC1各位均为“1”。
·IOC0和IOC1的接收是串行的,但写入寄存器是同时的。
1.5.4 R04~R93(通用寄存器)
·R04~R93为144字节的通用寄存器(SRAM)。
1.6 R-option地址片选
总线上有多个设备时,每个设备应具有不同的地址。如表1所示,P00~P02可作为R-option脚,用于芯片的片选。
每个R-option管脚被内部电路微弱拉为高电平,若外接560kΩ电阻接地则读作“0”,否则读作“1”。
上电后必须在控制字节中发出“读R-option”命令(此时CONTROL byte=11000001,且“STOP”上升沿之前应该延时500μs),将片选地址读入后,P00~P02的R-option地址片选才起作用。
P00~P02可作为双向I/O管脚,由于R-option功能的原因,建议P00~P02用作输出脚。
1.7 EM83010的应用电路举例
EM83010的应用电路如图3所示。R2~R8=560kΩ,R1=10kΩ,此电路有3片EM83010,共用2根总线(MCS51单片机的P10和P11)。由R2~R8的接法可知,3片EM83010的地址分别为000、001、010。
这样,在图3中,2根I/O线(P10、P11)可扩展14×3=42个I/O口,以及144×3=432字节的RAM。
可见EM83010用于I/O扩展时,不仅便于实现,而且功能强大。
2 EM83010用于MCS51的I/O扩展
2.1 硬件电路
利用EM83010对MCS51单片机进行I/O扩展的硬件电路请参照图3。直接将MCS51单片机的2根I/O口线(如P10、P11)连至SDT、SCK即可。
2.2 软件设计
2.2.1 基本考虑
EM83010的SCK时钟频率最高可为500kHz。对于主频12MHz的MCS51单片机而言,其指令周期不小于1μs,由指令产生的SCK时钟周期不小于2μs,完全满足上述条件。
2.2.2 程序编写
下面以发送控制字节(CONTROL byte)子程序为例,说明MCS51系列单片机对EM83010的控制方法。
;发送控制字节子程序
;Control Byte 存放在累加器A中
SDT bit P10 ; P10与EM83010的SDT相连
SCK bit P11 ; P11与EM83010的SCK相连
TransmitControl:
SETB SDT ;
SETB SCK ; 在SCK高电平期间
CLR SDT ; 产生“START”(下降沿)
CLR SCK ;
SETB SCK ; 发送“GRP”(GRP=0)
MOV R0,#08 ;发送8位的Control Byte
OutByte:
CLR SCK ;
RLC A ;带进位标志循环左移位
MOV SDT,C ;发送1位数据
SETB SCK ;
DJNZ R0,OutByte ;
CLR SCK ;
SETB SCK ;
JB SDT,$ ;等待“ACK”
CLR SCK ;
CLR SDT ;
SETB SCK ;在SCK高电平期间
SETB SDT ;产生“STOP”(上升沿)
RET ;子程序返回
以上子程序将存放在累加器A中的控制字节(Control Byte)发送给EM83010,入口地址标号为TransmitControl。该程序在SDT上依次传输了START、GRP、8位Control Byte、ACK、STOP,其中8位Control Byte的串行化主要是由带进位标志循环移位指令(RLC A)实现的。
2.2.3 操作步骤
系统上电后,MCS51单片机应先向EM83010发出“读R-option”命令(与TransmitControl子程序相似,参数A=0C1H,且发送“STOP”上升沿前应延时500μs),将片选地址读入后,P00~P02的R-option地址片选才起作用。
接下来,可根据需要对EM83010的端口0、端口1及RAM进行读写,从而实现了单片机I/O口及RAM的扩展。
参考文献
1 EM83010-I/O EXPANDER. EMC Corp.
2 何立民. MCS-51系列单片机应用系统设计. 北京:北京航空航天大学出版社,1993