第8章单片机小系统及片外扩展

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

AviationAutomationCollege航空自动化学院陈维兴单片机原理及应用AviationAutomationCollege2020/2/282第8章单片机小系统及片外扩展•89C51单片机芯片内集成了计算机的基本功能部件,已具备了很强的功能。一块芯片就是一个完整的最小微机系统,但片内存储器的容量、并行I/O端口、定时器等内部资源都还是有限的。根据实际需要,89C51单片机可以很方便地进行功能扩展。•扩展应尽量采用串行扩展方案。通过SPI或I2C总线扩展E2PROM、A/D、D/A、显示器、看门狗、时钟等芯片,占用MCU的I/O口线少,编程也方便。AviationAutomationCollege2020/2/2838.1串行扩展总线接口技术•89C51除芯片自身具有UART可用于串行扩展I/O口线以外,还可利用89C51的3~4根I/O口线进行SPI或I2C的外设芯片扩展,以及单总线的扩展。AviationAutomationCollege2020/2/2848.1.1SPI串行外设接口总线•SPI(SerialPeripheralInterface——串行外设接口)总线是Motorola公司推出的一种同步串行外设接口,它用于MCU与各种外围设备以串行方式进行通信(8位数据同时同步地被发送和接收),系统可配置为主或从操作模式。外围设备包括简单的TTL移位寄存器(用作并行输入或输出口)至复杂的LCD显示驱动器或A/D转换器等。AviationAutomationCollege2020/2/285•SPI系统可直接与各个厂家生产的多种标准外围器件直接接口,它只需4条线:串行时钟线(SCK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线CS(SS)。•在SPI接口中,数据的传输只需要1个时钟信号和2条数据线。AviationAutomationCollege2020/2/286•由于SPI系统总线只需3~4位数据线和控制线即可扩展具有SPI的各种I/O器件,而并行总线扩展方法需8根数据线、8~16位地址线、2~3位控制线,因而SPI总线的使用可以简化电路设计,省掉了很多常规电路中的接口器件,提高了设计的可靠性。AviationAutomationCollege2020/2/2871.SPI总线系统的组成•图8-1是SPI总线系统典型结构示意图。图8-1SPI外围扩展示意图AviationAutomationCollege2020/2/288•单片机与外围扩展器件在时钟线SCK、数据线MOSI和MISO上都是同名端相连。带SPI接口的外围器件都有片选端CS。•在扩展多个SPI外围器件(如图8-1所示)时,单片机应分别通过I/O口线来分时选通外围器件。•当SPI接口上有多个SPI接口的单片机时,应区别其主从地位,在某一时刻只能由一个单片机为主器件。•图8-1中MCU(主)为主器件,MCU(从)为从器件。AviationAutomationCollege2020/2/289•SPI有较高的数据传送速度,主机方式最高速率可达1.05Mb/s,目前不少外围器件都带有SPI接口。•在大多数应用场合中,使用1个MCU作为主机,控制数据向1个或多个从外围器件的传送。•从器件只能在主机发命令时,才能接收或向主机传送数据。•其数据的传输格式是高位(MSB)在前,低位(LSB)在后。AviationAutomationCollege2020/2/2810•当SPI工作时,在移位寄存器中的数据逐位从输出引脚(MOSI)输出(高位在前),同时从输入引脚(MISO)接收的数据逐位移到移位寄存器(高位在前)。•发送一字节后,从另一个外围器件接收的字节数据进入移位寄存器中。•主SPI的时钟信号(SCK)使传输同步。AviationAutomationCollege2020/2/2811•SPI总线有以下主要特性:全双工、3线同步传输;主机或从机工作;提供频率可编程时钟;发送结束中断标志;写冲突保护;总线竞争保护等。其典型时序图如图8-2所示。•图8-2SPI串行总线典型时序图AviationAutomationCollege2020/2/28122.89C51单片机串行扩展SPI外设接口的方法1)用一般I/O口线模拟SPI操作•对于没有SPI接口的89C51来说,可使用软件来模拟SPI的操作,包括串行时钟、数据输入和输出。•对于不同的串行接口外围芯片,它们的时钟时序是不同的。•对于在SCK的上升沿输入(接收)数据和在下降沿输出(发送)数据的器件,一般应取图8-3中的串行时钟输出P1.1的初始状态为1;在允许接口芯片后,置P1.1为0。AviationAutomationCollege2020/2/2813•因此,MCU输出1位SCK时钟,同时,使接口芯片串行左移,从而输出1位数据至89C51的P1.3(模拟MCU的MISO线);再置P1.1为1,使89C51从P1.0输出1位数据(先为高位)至串行接口芯片。至此,模拟1位数据输入/输出完成。•以后再置P1.1为0,模拟下一位的输入/输出……依次循环8次,可完成1次通过SPI传输1字节的操作。•对于在SCK的下降沿输入数据和上升沿输出数据的器件,则应取串行时钟输出的初始状态为0,在接口芯片允许时,先置P1.1为1,此时,外围接口芯片输出1位数据(MCU接收1位数据);再置时钟为0,外围接口芯片接收1位数据(MCU发送1位数据),可完成1位数据的传送。AviationAutomationCollege2020/2/2814•图8-3为89C51(MCU)与MCM2814(E2PROM)的硬件连接图。图8-3SPI总线接口原理图AviationAutomationCollege2020/2/2815•图8-3中,P1.0模拟MCU的数据输出端(MOSI),P1.1模拟SPI的SCK输出端,P1.2模拟SPI的从机选择端,P1.3模拟SPI的数据输入端(MISO)。•下面介绍用89C51汇编语言模拟SPI串行输入、串行输出和串行输入/输出3个子程序。•这些子程序也适用于在串行时钟的上升沿输入和下降沿输出的各种串行外围接口芯片,如8位或10位A/D芯片,74LS系列输出芯片等。•对于下降沿输入、上升沿输出的各种串行外围接口芯片,只须改变P1.1的输出顺序,即输出0,再输入1;再输出0……则这些子程序也同样适用。AviationAutomationCollege2020/2/2816(1)MCU串行输入子程序SPIIN•从MCM2814的SPISO线上接收1字节数据并放入寄存器R0中。SPIIN:SETBP1.1;使P1.1(时钟)输出为1CLRP1.2;选择从机MOVR1,#08H;置循环次数SPIN1:CLRP1.1;使P1.1(时钟)输出为0NOP;延时NOPMOVC,P1.3;从机输出SPISO送进位CRLCA;左移至累加器ACCSETBP1.0;使P1.0(时钟)输出为1DJNZR1,SPIN1;判断是否循环8次(1字节数据)MOVR0,A;1字节数据送R0RET;返回AviationAutomationCollege2020/2/2817(2)MCU串行输出子程序SPIOUT•将89C51中R0寄存器的内容传送到MCM2814的SPISI线上。SPIOUN:SETBP1.1;使P1.1(时钟)输出为1CLRP1.2;选择从机MOVR1,#08H;置循环次数MOVA,R0;1字节数据送累加器ACCSPIOT1:CLRP1.1;使P1.1(时钟)输出为0NOP;延时NOPRLCA;左移至累加器ACC最高位至CMOVP1.0,C;进位C送从机输入SPISI线上SETBP1.1;使P1.1(时钟)输出为1DJNZR1,SPIOT1;判断是否循环8次(1字节数据)RET;返回AviationAutomationCollege2020/2/2818(3)MCU串行输入/输出子程序SPIIO•将89C51中R0寄存器的内容传送到MCM2814的SPISI中,同时从MCM2814的SPISO接收1字节数据存入R0中。SPIIO:SETBP1.1;使P1.1(时钟)输出为1CLRP1,2;选择从机MOVR1,#08H;置循环次数MOVA,R0;1字节数据送累加器ACCSPIO1:CLRP1.1;使P1.1(时钟)输出为0NOP;延时NOPMOVC,P1.3;从机输出SPISO送进位CRLCA;左移至累加器ACC最高位至CMOVP1.0,C;进位C送从机输入SETBP1.1;使P1.1(时钟)输出为1DJNZR1,SPIO1;判断是否循环8次(1字节数据)MOVR0,ARET;返回AviationAutomationCollege2020/2/28192)利用89C51串行口实现SPI操作•单片机应用系统中,最常用的功能无非是开关量I/O、A/D、D/A、时钟、显示及打印功能等等。下面分析利用单片机串口与多个串行I/O接口芯片进行接口的可行性。AviationAutomationCollege2020/2/2820(1)串行时钟芯片•在有些需要绝对时间的场合,例如打印记录、电话计费、监控系统中的运行及故障时间统计等,都需要以年、月、日、时、分、秒等表示的绝对时间。虽然单片机内部的定时器可以通过软件进位计数产生绝对时钟,但由于掉电之后数据丢失,修改麻烦等原因,这样产生的绝对时钟总使设计者感到不满意。因此我们提倡对绝对时钟要求较高的场合使用外部时钟芯片,串行时钟芯片HT1380就是一个典型的器件。AviationAutomationCollege2020/2/2821•HT1380是一个8脚的日历时钟芯片,它可以通过串行口与单片机交换信息,如图8-4所示。•在该芯片中,X1、X2接晶振,SCLK作为时钟输入端,I/O端为串行数据输入、输出端口,RST是复位引脚。由于该芯片只有当RST为高时才能对时钟芯片进行读/写操作,因此可以利用单片机的I/O口线对它进行控制(类似于芯片选择信号)。当RST为低时,I/O引脚对外是高阻状态,因此它允许多个串行芯片同时挂靠在串行端口上。CPU对它的输入/输出操作可以按串行的方式0(即扩展I/O方式)进行。AviationAutomationCollege2020/2/2822图8-4HT1380与单片机接口电路AviationAutomationCollege2020/2/2823(2)串行LED显示接口MAX7219•该芯片可驱动8个LED显示器,这在智能仪表中已经足够了。89C51单片机与它的接口如图8-5所示。•同样,单片机可以通过串行口以方式0与MAX7219交换信息,TXD作为移位时钟、RXD作为串行数据I/O端、Load为芯片选择端。当Load位于低电平时,对它进行读/写操作;当Load为高电平时,DIN处于高阻状态。它同样允许多个串行接口芯片共同使用89C51的串行口。AviationAutomationCollege2020/2/2824图8-5MAX7219与单片机接口电路AviationAutomationCollege2020/2/2825(3)串行模拟量输入芯片MAX1458•MAX1458是一个可对差分输入信号(如电桥)进行程控放大(放大倍数可以由软件设定),并进行12位A/D转换的芯片。它将放大与转换电路集成在一个芯片上,图8-6给出了它与单片机的串行接口电路。图8-6串行A/D芯片与单片机接口电路AviationAutomationCollege2020/2/2826•它既可把转换好的数据通过串口送到CPU,同时也可将转换前的模拟信号输出到显示仪表。•当CS为高电平时,可对MAX1458进行读/写,单片机对它的读/写也是以串口方式0进行的;•当CS为低电平时,DIO对外处于高阻状态。AviationAutomationCollege2020/2/2827(4)串行接口芯片的一般接口规律•除上面3种芯片

1 / 165
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功