810 likes | 1.07k Views
第 9 章 单片机系统的扩展 主讲:朱兆优. 本章学习要点: (1) 单片机外部扩展和总线构成原理,串行总线、并行总线扩展技术; (2) 采用线选法、译码法扩展单片或多片存储器、 TTL 芯片的方法; (3) 扩展外部存储器或 TTL 芯片的端口地址编址方法; (4) I 2 C 、 SPI 、 1/2/3Wire 总线的接口和编程应用。. 9.1 单片机系统扩展概述 单片机内部资源不够用,需要外部扩展 RAM 、 ROM 或 I/O 口。 1 、传统的扩展办法 采取外部扩展并行器件,如:
E N D
第9章 单片机系统的扩展 主讲:朱兆优
本章学习要点: (1) 单片机外部扩展和总线构成原理,串行总线、并行总线扩展技术; (2) 采用线选法、译码法扩展单片或多片存储器、TTL芯片的方法; (3) 扩展外部存储器或TTL芯片的端口地址编址方法; (4) I2C、SPI、1/2/3Wire总线的接口和编程应用。
9.1 单片机系统扩展概述 单片机内部资源不够用,需要外部扩展RAM、ROM或I/O口。 1、传统的扩展办法 采取外部扩展并行器件,如: ROM---2764、27128、27256、27512等。 RAM---6264、62128、62256、62512或2864等。 I/O口---8255A、8155H等。
通过三总线把单片机与外部器件连接起来,进行数据、地址、控制信号的传输。传统的扩展结构如下: 实际上这些器件已经淘汰,也很不实用。
2、 现代的扩展方法 (1)单片机选型:从外部转到内部,重视单片机选型,根据不同的应用,选择不同性能的单片机芯片。 (2)串行总线扩展:有I2C接口的AT24Cxx系列和SPI接口的W25Xxx系列。 W25X64容量高达8MB, W25Q128容量高达16MB。 因此,今后的片外扩展将以串行总线为主,传统的三总线的应用扩展将出现在以ARM为核心的大系统结构上。
9.2 单片机系统总线的构造 单片机系统扩展出总线,所有器件都挂接在一条总线上。 9.2.1 单片机系统总线 三大总线 数据总线---与外部器件之间传输数据 地址总线---向外发出地址信号 控制总线---是一组控制信号线
9.2.2 单片机系统三总线的构造 单片机的三总线分别由P0口、P2口和控制信号构成。三总线构造 如下图:
9.3 单片机系统的扩展接口 1.片外并行器件的连接方法 (1) 查阅芯片资料 (2) 按引脚功能分类。 (3)同类线相连 (4) 片选信号接地址线。
2.系统扩展要求 (1) 能区分不同的地址空间,每个存储单元或端口都各有一个地址。 (2) 能够控制不同的芯片,读、写操作时不会相互干扰。 (3) 系统的地址编址不重叠,避免发生数据冲突。
3.存储器地址分配方法 (1) 线选法 线选法是指直接利用单片机系统的地址线作为扩展芯片的片选信号。 (2) 译码法 把地址用译码器进行译码,然后将译码器的输出信号作为扩展芯片的片选信号。
9.3.2 扩展的外部单元的编址 编址方法如下: (1) 基本地址计算 (2) 加权地址计算 (3) 空地址线处理 (4) 将加权地址+固定地址,再叠加到基本地址的高位上,得出器件的地址范围。
例如 假定扩展了2个芯片(IC1、IC2),其连接关系如图9-3所示,要求计算这2个芯片的地址范围。 单片机一次只能访问一个芯片。 基本地址线12根,则基本地址为000~FFFH,加权地址线2根和空线2根(在高4位),
9.3.3 单片机扩展存储器的接口设计 1.2764和6264的引脚功能 (1) 双向三态数据线8根:D0~D7。 (2) 地址线13根:A0~A12。 (3) 控制线: OE——输出允许控制端(读选通信号输入线),低电平有效; WE——写允许信号输入线,低电平有效; PGM——编程时,编程脉冲的输入端,低电平有效; ——片选信号,低电平有效; CS——片选信号使能端,高电平有效,即当=0,同时CS=1时,芯片才被有效选中。 (4) 电源和地线:+5 V供电。
确定IC1、IC2和IC3的地址分配如下: IC1:6000H~7FFFH; IC2:A000H~BFFFH; IC3:C000H~DFFFH; 对A100H地址的读操作指令为: MOV DPTR, #0A100H MOVX A,@DPTR 对C200H地址的写操作指令为: MOV A,#Data MOV DPTR, #0C200H MOVX @DPTR,A
3.操作时序 对程序存储器和数据存储器的操作是严格分开的。 假设执行一个2字节、1周期指令“MOV A,#Data”
对外部数据存储器的读操作,如 MOVX A,@DPTR
9.4 I/O端口扩展与设计 传统的I/O端口扩展通常采用8255A/8155H和TTL芯片; 现代的I/O口扩展采取选择片内带有不同端口数量的单片机芯片。 单片机品种多,有5~64个数字I/O引脚
9.4.1 I/O接口概述 串行I/O接口---采用逐位串行移位的方式传输数据,可以满足速度要求不高的串行设备接口要求; 并行I/O接口---采用并行方式传输数据,可以与外设高速传输数据。
1.I/O接口的功能 (1) 数据传输速度匹配。 (2) 输出数据锁存。 (3) 输入数据三态缓冲。 (4) 信号或电平变换。
2.I/O接口与端口的区别 I/O接口(Interface)是CPU与外界的连接电路,是CPU与外界进行数据交换的通道。 I/O端口(Port)是CPU与外设直接通信的地址,通常是把I/O接口电路中能够被CPU直接访问的寄存器或缓冲器称之为端口。
3. I/O端口的编址 独立编址方式---把I/O端口地址空间和存储器地址空间严格分开,地址空间相互独立,编址界限分明。 统一编址方式---每个I/O端口作为一个外部数据存储器RAM地址单元编址。 8051单片机对I/O端口采用统一编址。
3.单片机与外设间的数据传送方式 (1) 同步传送方式 (2) 异步传送方式 (3) 中断传送方式
4.I/O接口电路种类 常用的片外I/O接口芯片: (1)TTL芯片、CMOS器件 (2)可编程并行接口芯片(如8155H、8255A)。 使用可编程I/O接口芯片时,扩展电路繁杂,实际已经很少使用。
9.4.2 TTL电路扩展并行I/O口 采用TTL电路或CMOS电路的锁存器、三态门,使用总线式或非总线式扩展可以实现与单片机连接。 1.用TTL电路扩展并行I/O端口电路
例1按图中,LED灯一一对应按键状态,若K1按下对应L1亮,若没有键按下,则LED灯全灭,要求编程用点亮LED灯表示某按键是否按下。其参考程序段如下:例1按图中,LED灯一一对应按键状态,若K1按下对应L1亮,若没有键按下,则LED灯全灭,要求编程用点亮LED灯表示某按键是否按下。其参考程序段如下: MOV DPTR,#0000H ;I/O端口地址→DPTR MOVX A,@DPTR ;读74LS244端口数据→A,产生RD=0。 MOVX @DPTR,A
2.用串行接口扩展并行输入口 CD4014和74LS165都是具有并行输入和串行移位输出的接口电路,利用这两种芯片可以将单片机的串行接口扩展成为并行输入口,具体接口电路如图
例2按图从扩展的16位输入口中读入6组数据(每组数2字节),读入的数据存放在片内30H开始的单元。例2按图从扩展的16位输入口中读入6组数据(每组数2字节),读入的数据存放在片内30H开始的单元。 RXDAT:MOV R2,#06 ;设置读入的字节数 MOV R0,#30H ;设置读入数据存放指针 SETB P1.0 START: CLR P1.0 SETB P1.0 ;允许串行移位输入 MOV SCON,#00 ;设置串行口为工作方式0 MOV R3,#02 ;设置每组读入的字节数 READAT: JNB RI,$ CLR RI MOV A,SBUF ;读入数据 MOV @R0,A INC R0 DJNZ R3,READAT DJNZ R2,START RET
3.用串行接口扩展并行输出口 CD4094和74LS164都是具有串行移位输入、并行输出的接口芯片,可扩展成并行输出口,电路如下:
例3按照图9-9,把片内30H、31H单元的内容通过串行接口传送到扩展的16位输出口。程序段如下:例3按照图9-9,把片内30H、31H单元的内容通过串行接口传送到扩展的16位输出口。程序段如下: TXDAT:MOV R2,#02 ;设置发送的字节数 MOV R0,#30H ;设置发送数据地址指针 CLR P1.0 ;显示复位清除 START:SETB P1.0 ;禁止复位 MOV SCON,#00 ;设置串行口为工作方式0 MOV A,@R0 MOV SBUF,A ;启动发送数据 JNB RI,$ CLR RI INC R0 ;指针加1 DJNZ R2,START ;判断数据是否发送完毕 RET
9.5 串行总线的扩展应用 串行总线是芯片间串行数据传输总线,串行总线类型: (1)I2C总线:传输速率400 KB/s。 (2)SPI总线 (3)1/2/3Wire总线
9.5.1 I2C总线结构与工作原理 1.I2C总线结构及特点 I2C总线是由数据线SDA和时钟线SCL构成的串行总线,可发送和接收数据,可在主控器与被控器之间、主控器与主控器之间进行双向传输。结构如下图:
2.I2C总线特点 (1) 使用2线传输。 (2) 多主竞争中的仲裁和同步。 (3) I2C总线传输数据采用状态码管理方式。 (4) 采用器件地址与引脚地址相结合的方式进行编址。 (5) I2C总线接口的器件都具有应答功能。 (6) I2C总线电气接口输出端是晶体管漏极开路或集电极开路结构,使用时必须外接上拉电阻。
3.I2C总线的信号及时序定义 (1) 总线上数据的有效性 在时钟线(SCL)为高电平期间,数据线(SDA) 高电平表示传输的数据位为1,低电平表示传输的数据位为0。如图9-11。 (2) 数据传输的起始位和结束位 I2C总线在传送数据过程中有三种类型信号,分别是:起始信号、结束信号和应答信号。如图9-12。
9.5.2 I2C总线的时序 标准模式传输速率100 KB/s,高速模式传输速率400 KB/s。
9.5.3 I2C总线上的数据传输格式 1.数据传输时的总线控制 I2C总线上可以连续以8位(1字节)二进制数的方式传输数据。但每启动一次I2C总线,其后的数据传输字节数没有限制。
2.应答信号 每传送1字节数据后必须跟随等待一个应答信号,表示已收到数据。
3.数据传送格式 (1) 主控器写操作:指主控器向被寻址的被控器写入n字节数据的操作,数据传输格式如下: (2) 主控器读操作 (3) 主控器读/写操作
9.5.4 I2C总线的信号模拟与编程技术 • 启动条件:在SCL为高电平时,SDA出现一个下降沿则启动I2C总线。 • 停止条件:在SCL为高电平时,SDA出现一个上升沿则停止使用I2C总线。 • 稳定状态:除了启动和停止状态,在其余状态下,SCL的高电平都对应SDA的稳定数据状态。 设以89C51的I/O口P1.2、P1.3做模拟I2C总线,则常用的子程序如下:
(1) I2C总线启动子程序STAT SCL bit P1.2 SDA bit P1.3 STAT:SETB SDA ;SDA置高电平 SETB SCL ;SCL置高电平 NOP ;延时 NOP CLR SDA ;在SCL=1使SDA产生下降沿 NOP NOP CLR SCL ;SCL拉低,主控制器等待 RET
2、停止子程序STOP STOP: CLR SDA ;SDA置低电平 SETB SCL ;SCL置高电平 NOP ;延时 NOP SETB SDA ;在SCL=1使SDA产生上升沿 NOP ;延时 NOP CLR SCL ;SCL拉低,主控制器等待 RET
(3) 发送应答位置0子程序MACK MACK: CLR SDA ;SDA置低电平 SETB SCL ;SCL置高电平 NOP ;延时 NOP CLR SCL ;发送0信号,即应答位 SETB SDA RET
(4) 发送非应答位置1子程序NACK NACK: SETB SDA ;SDA置高电平 SETB SCL ;SCL置高电平 NOP NOP CLR SCL ;发送1信号,即非应答位 CLR SDA RET
(5) 应答位检测子程序CACK CACK: SETB SDA ;置SDA为输入方式 SETB SCL ;SCL置1使SDA上数据有效 CLR F0 ;置F0=0 MOV C,SDA ;读SDA信号到C JNC CEND ;若SDA=0为应答,F0=0 SETB F0 ;否则无正常应答,置F0=1 CEND: CLR SCL ;SCL拉低 RET
(6) 发送一字节数据子程序WRBYT WRBYT:MOV R2,#08 ;置一字节8位, WLP: RLC A ;从高位开始逐位移出并发送 JC WR1 ;判断发送1还是0,若发送1则转WR1 AJMP WR0 WLP1: DJNZ R2,WLP ;8位数据未发送完,继续发送 RET WR1: SETB SDA ;置SDA=1,发送1 SETB SCL NOP NOP CLR SCL CLR SDA ;复位SDA AJMP WLP1 WR0: CLR SDA ;置SDA=0,发送0 SETB SCL NOP NOP CLR SCL AJMP WLP1
(7)接收一字节数据子程序RDBYT RDBYT: MOV R0,#08 ;置8位数据长度 RLP: SETB SDA ;置SDA为输入方式 SETB SCL ;置SCL=1,使数据有效 MOV C,SDA ;从数据线上读入一位到C MOV A,R2 RLC A ;把数据位移入到A MOV R2,A CLR SCL ;读一位结束,继续接下一位 DJNZ R0,RLP ;8位数据读完否? RET
9.6 I2C总线器件的接口应用 AT24Cxx、PCF8563/8583等器件都是目前广泛应用的I2C总线接口的器件。 9.6.1 串行E2PROM存储器接口应用 AT24Cxx广泛应用于汽车电子、水表、电表、煤气表和电视机等电子产品中用做数据保存。
1.AT24Cxx存储器的主要特性 • 字节写入方式和页写入方式 • 可用电擦写,功耗很低,电压1.8~5.5 V • 1.8 V供电时最高传输速率达100 KHz • 2.7 V或5 V供电时传输速率达400 KHz • 在5 V供电时最大速率达1 MHz (AT24C128/256/512) • 抗干扰能力强