极简51单片机:体系结构、程序设计与案例开发(汇编语言版)课件 向军 第6-8章 51单片机资源的并行扩展- 模拟外设及其与51单片机的接口_第1页
极简51单片机:体系结构、程序设计与案例开发(汇编语言版)课件 向军 第6-8章 51单片机资源的并行扩展- 模拟外设及其与51单片机的接口_第2页
极简51单片机:体系结构、程序设计与案例开发(汇编语言版)课件 向军 第6-8章 51单片机资源的并行扩展- 模拟外设及其与51单片机的接口_第3页
极简51单片机:体系结构、程序设计与案例开发(汇编语言版)课件 向军 第6-8章 51单片机资源的并行扩展- 模拟外设及其与51单片机的接口_第4页
极简51单片机:体系结构、程序设计与案例开发(汇编语言版)课件 向军 第6-8章 51单片机资源的并行扩展- 模拟外设及其与51单片机的接口_第5页
已阅读5页,还剩290页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

6.1磨刀霍霍—预备知识

6.1.1半导体存储器的分类及引脚6.1.2锁存器和缓冲器 6.2小试牛刀—实战案例

动手实践6-1:外部RAM的扩展动手实践6-2:简单并口的扩展第6章

51单片机资源的并行扩展第6章

51单片机资源的并行扩展6.3庖丁解牛—原理剖析6.3.1并行扩展的基本结构和方法6.3.2片选与地址译码6.3.3MOVX指令及其用法动手实践6-3:地址译码电路的设计第6章

51单片机资源的并行扩展6.4牛气冲天——实战进阶(*)6.4.18155的引脚及内部结构6.4.28155的命令字与工作方式6.4.38155的应用动手实践6-4:8155A的应用6.1磨刀霍霍—预备知识

6.1.1半导体存储器的分类和引脚只读存储器ROM:只能进行读操作,不能随意进行写操作。ROM一个主要的特点是断电后保存的信息不会丢失,因此在系统中ROM一般用于存放已经调试好的程序,称为程序存储器。

随机存取存储器RAM:保存的信息在任何时刻都可以由CPU读取或者写入。系统断电后,RAM中保存的所有信息都将不复存在,因此RAM一般用于存放系统运行过程中的一些实时动态数据,称为数据存储器。半导体存储器芯片的分类程序存储器ROM数据存储器RAM内部ROM外部ROM内部RAM外部RAM存储器MROMPROMEPROMEEPROMFlashEEPROMMemorySRAMDRAMNVRAM在单片机系统中,程序存储器通常用EPROM和EEPROM进行实现和扩展,典型的有2716、2732、2764、27128、27256等EPROM芯片。外部数据存储器的扩展一般用SRAM芯片,典型的有6116、6264、62256等。半导体存储器芯片的引脚数据引脚用于传送芯片内部各存储单元的数据,数据线的数量决定了芯片中每个单元存放的二进制数据的位数。上述3个芯片都有8根数据线,说明芯片内部的每个单元都可以保存8位(一个字节)二进制数。地址引脚用于传送芯片内部各单元的地址。访问时,单片机送来的地址通过地址线送入芯片内部,由内部电路选中对应的单元。一般情况下,同一个芯片内部所有单元的地址是连续的,并且各单元的地址各不相同。也就是说,通过地址线送入不同的地址编码,即可确定找到内部唯一的一个单元进行数据的读写访问。以2716为例,当由A10~A0送入的11位地址为全0时,选中第一个单元;当送入的地址为00000000001B时,选中第2个单元;…;当送入的地址为全1时,选中最后一个单元。由于芯片内部各单位的地址是连续并且唯一的,因此地址线的数量n决定了该存储器芯片中集成的存储单元个数M,其关系为M=2n。例如,2716有11根地址线,2764和6264都分别有13根地址线,因此3个芯片内的单元数分别为211=2

210=2K、213=23

210=8K,其中1K=210=1024。控制引脚用于对芯片的读写进行访问控制,例如CE、CS、OE、WE等。其中CE(ChipEnable)和CS(ChipSelect)都称为片选信号引脚,OE(OutputEnable)和WE(WriteEnable)分别为输出允许和写允许引脚。注意:引脚名称上面的短横线代表低电平有效。例如,当从外部通过CE引脚送入一个低电平或者负脉冲时,称为该引脚信号有效,意味着该芯片被选中,可以对其进行读写操作访问。同样的,如果需要对芯片内部的单元进行写操作,必须由外部电路(一般是CPU)通过WE引脚向存储芯片送入一个负脉冲。存储器芯片的容量——也就是芯片内部集成的存储单元个数和每个单元存储的二进制数据的位数,通常表示为“单元数位数”的形式。例如,2716芯片的容量为2K×8,2764和6264的容量为8K×8。由于8位二进制表示一个字节,因此3个芯片的容量又可简单表示为2KB、8KB,其中B表示字节(Byte,代表8位二进制)。6.1.2锁存器和缓冲器锁存器(Latch)一般用于实现并行输出口的扩展。并行输出口用于连接LED、数码管这样的输出设备,这些外部设备的工作速度远低于单片机和CPU以及系统总线的速度,一般需要通过锁存器才能连接到系统总线上,并进一步接收CPU通过子系统总线送来的数据。各种集成锁存器芯片的内部结构和工作原理都是类似的,内部最关键的部件大都是由若干触发器构成。触发器是最基本的时序逻辑电路,能够将数据稳定地保存一段时间。因此,利用触发器实现的锁存器就可以将数据总线上瞬间出现的数据保存下来,等待外部设备慢慢读取,或者控制外部设备稳定地工作。74HC373OE端接地,在LE上升沿作用下,由D7-D0端送来的8位数据打入锁存器并立即由Q7-Q0端输出。只要LE端不重新出现上升沿,锁存器的输出数据就保持不变,从而实现输出数据的锁存。集成缓冲器芯片内部主要由若干三态门构成,另外有一些控制电路。在单片机系统中,缓冲器通常用于扩展并行输入口,或者用作数据总线或其他部件的驱动电路,主要就是利用内部的三态门以增强带负载能力、实现数据的缓冲和时序的匹配、避免出现总线冲突等。6.2小试牛刀—实战案例

动手实践6-1:外部RAM的扩展(ex6_1.pdsprj,p6_1.asm)动手实践6-2:简单并口的扩展(ex6_2.pdsprj,p6_2.asm)动手实践6-1外部RAM的扩展动手实践6-2简单并口的扩展6.3庖丁解牛—原理剖析

6.3.1并行扩展的基本结构和方法在51单片机中,内部存储器、4个并口、定时/计数器和串口等都与CPU一起集成在单片机芯片的内部,这些部件通过单片机的内部总线相互连接。对于在单片机外部扩展的存储器和并行接口,一般通过三组系统总线(地址总线、数据总线和控制总线)连接起来,利用三组系统总线在单片机和扩展芯片之间分别传送所需的各种信号,并相互配合实现外部存储器和扩展并口的读写访问。并行扩展的基本结构与系统总线在51单片机系统中,各种扩展的外部I/O接口、定时/计数器、模拟外设等都与外部RAM采用统一编址方式,即将每个扩展接口部件都视为一个外部RAM存储单元。扩展的各种外围接口器件只要符合总线规范,都可方便地接入系统,并采用相同的方法和程序指令进行读写访问。地址总线(AB,AddressingBus):用于传送外部扩展部件的地址,以便找到当前需要访问的存储器和接口。地址一定是由CPU送往外部各种扩展芯片,因此地址总线是单向的。数据总线(DB,DataBus):用于CPU与外部扩展部件之间的数据传送。数据可以从CPU送往外部存储器和扩展并口(称为写),也可以是从外部存储器和扩展接口送往CPU(称为读),因此数据总线是双向的。控制总线(CB,ControlBus):用于传送读/写所需的联络控制信号,不同的联络控制信号可能是由CPU送往外部扩展芯片,也可能是由外部扩展芯片送入单片机和CPU。系统总线的形成P0口:数据总线,通过地址锁存器得到地址总线的低8位;P2口:地址总线的高8位;P3口:P3.6和P3.7的第二功能分别为WR和RD,和单片机的PSEN、ALE、EA等引脚一起用于提供控制信号,形成控制总线。在单片机访问外部扩展资源的过程中,地址的低8位和数据在时间上错开都通过P0口进行传送,这种技术称为分时复用(Time-SharingMultiplexing)。需要注意的是,P2口只用于形成地址总线的高8位,不会传送数据,因此没有采用分时复用技术,也不需要将其输出的地址进行锁存,而是直接得到地址总线的高8位。ex6_1.pdsprj系统总线与扩展芯片的连接与三组系统总线相对应,每个扩展芯片上都有数据线、地址线和控制信号线引脚。一般来说,将这些引脚分别与系统总线中的三组总线对应连接即可。此外,在任何时刻只能选中其中的一个芯片通过系统总线与单片机进行数据传送,这就要求每个扩展芯片都必须具有片选功能。具体连接时,一般利用某些地址总线和控制总线经过一定的组合逻辑运算后得到扩展芯片上的片选信号。ex6_1.pdsprjex6_2.pdsprj相当于片选信号6.3.2片选与地址译码片选与单元选择选中该存储器芯片,称为芯片选择,简称为片选(ChipSelect),只有被选中的芯片才能被单片机访问,未被选中的芯片不能被访问。每个扩展芯片都有片选引脚,一般情况下,将地址总线的高位直接或者经过译码电路后实现芯片的片选。每个存储器芯片内部都有很多存储单元,扩展的每个并行接口芯片内部也可能会有很多相当于存储单元的端口(Port,又称为寄存器)。因此在片选的基础上还需要对该芯片中需要读写访问的单元或端口进行选择和指定,称为单元选择。扩展芯片上的地址引脚就是用于实现芯片内部单元选择,一般将这些地址引脚与地址总线中的低位相连接。所谓线选法,指的是直接利用单片机地址总线中的某一根高位地址线作为存储器芯片的片选信号,不同的芯片用不同的高位地址线作为片选信号。这种方法电路简单,不需另外增加地址译码器硬件电路,体积小,成本低。但是可寻址芯片数目受限制。另外,地址空间不连续,存储单元地址不唯一,这会给程序设计带来一些不便。线选法适用于外扩芯片数目不多的单片机系统的系统扩展。片选的简单实现——线选法ex6_1.pdsprj当单片机送出16位地址时,只要其中的最高位A15=0,就选中该存储芯片,这就意味着对U3中的所有单元,地址的最高位必须都为0。另一方面,低13位地址总线用于实现片内单元选择,低13位从全0到全1分别选中芯片内部从第一个到最后一个单元。由此得到U3内部8KB个单元的地址范围为:0**0000000000000B~0**1111111111111B

其中A13和A14可任意设为0码或1码,因为对U3来说这两位地址总线未用。地址总线中的A14虽然没有用于控制U3,但是该位地址总线直接送到U4芯片的片选。因此,当A14=0时,应该选中U4芯片中的某个单元。对U3来说,应该将所有单元地址的A14位设为1,以保证不选中U4芯片,只选中U3芯片。最后得到U3内部8KB个单元的基本地址范围(未用的地址位设为0)为4000H~5FFFH,重叠地址范围(未用的地址位设为1)6000H~7FFFH。ex6_2.pdsprj74HC245和74HC273的地址分别为0111111111111111B=7FFFH和1011111111111111B=0BFFFH。上述线选法会造成很多地址空间的浪费,也就是64KB的外部RAM地址无法得到全部利用。例如,在图6-5所示电路中,地址范围0000H~3FFFH、0C000H~0FFFFH内的这些地址将不会选中任何一个单元,这些地址空间范围被浪费掉了。为此,在需要更大容量的单片机系统中,通常采用译码器对高位地址进行译码后作为各芯片的片选信号,称为地址译码。地址译码实现地址译码的电路实际上是一个组合逻辑电路,可以用基本的逻辑门电路实现,也可以采用集成的地址译码器芯片实现。常见的地址译码器芯片有74LS138(3-8译码器)、74LS139(双2-4译码器)与74LS154(4-16译码器)等。对地址译码电路,其输入一般为地址总线中没有与扩展芯片相连接的高位,而输出为各存储芯片所需的片选信号。举例:为案例6-1中的两片6224设计地址译码电路。两片6264内8K个单元的地址范围分别为0000H~1FFFH2000H~3FFFH在该例中,除低13位以外,剩下的高3位全部参与译码,称为全译码法。采用全译码方法,所有存储芯片中的每个单元都有确定的地址,不存在地址重叠。此外,图中的74LS138译码器还有6个输出端,可另外再接6个6264芯片,从而使整个系统可以有8个6264芯片,得到总的存储器容量为8×8KB=64KB。这是51单片机能够管理的最大外部RAM容量。由此可见,采用全译码法,不仅不存在地址重叠,还可以将存储地址空间得到充分利用。在实际系统中,如果所需的存储容量不大,存储芯片的数量和片选信号较少,也可以只将一部分高位地址总线接到译码电路,这种方法相应地称为部分译码法。在这种方法中,没有参与地址译码的高位地址可以任意取为1码或0码,从而使得扩展的每个存储单元将有多个地址,即存在地址重叠。6.3.3MOVX指令与扩展资源的访问MOVX指令及其用法

在51单片机的指令系统中,MOVX指令的用法和书写格式只有如下4种:MOVX

A,@DPTRMOVX A,@RiMOVX

@DPTR,AMOVX @Ri,A

其中,前面两条和后面两条分别用于实现外部RAM单元和扩展并口的读和写操作访问。举例:要从地址为2010H的外部RAM单元读取一个字节数据,可以用如下指令:MOV DPTR,#2010HMOVX A,@DPTR也可以用如下程序段实现:MOV P2,#20H ;地址的高8位到P2MOV R0,#10H ;第8位地址存入R0MOVX A,@R0 ;读取RAM单元注意这条指令采用寄存器间接寻址,但由于是MOV指令,所以访问的是内部RAM单元。51单片机执行MOVX指令访问一次外部RAM,从中读取或写入一个字节的操作又可以分解为很多小步骤,在每个步骤内,单片机和存储器分别需要哪些信号配合和控制,称为时序(TimeSequence),一般用时序图表示。外部RAM的访问时序单片机执行MOVX指令需要2个机器周期,其中第一个机器周期从ROM中将程序中的该条指令取入CPU(取指令),第二个机器周期实现该条指令规定的操作(执行指令)。对MOVX指令来说,执行指令就是访问外部RAM,实现RAM单元的读写操作。图6-12给出了单片机CPU执行MOVX指令实现外部RAM读写时的基本时序。其中P1和P2分别代表一个时钟周期,S1~S6分别都由两个时钟周期构成,称为状态。左侧和右侧的S1~S6分别构成两个机器周期。扩展并口的访问时序动手实践6-3:地址译码电路的设计本案例用4片6264为AT89C52系统扩展32KB的外部RAM,已知各片6264的单元地址从8000H开始连续分配。要求:(1)分别用基本逻辑门电路和集成3-8译码器设计地址译码电路,画出电路原理图;(2)编制程序将1#6264内部的8KB个单元存入常数0AH,1#6264内部的8KB个单元存入常数0BH,3#和4#6264内部的8KB个单元分别存入常数0CH和0DH。解

答:(1)根据已知的起始地址,得到4片6264的单元地址范围(地址分配表)如表6-2所示。ex6_3.pdsprj(2)程序如下:6.4牛气冲天—实战进阶

上述小规模的集成锁存器和缓冲器芯片,每个芯片只能扩展一个8位并口。当系统中需要扩展的并口较多时,所需芯片数也将大为增加,势必导致系统的体积增大,芯片之间相互连接导致的可靠性降低等。利用8155可以为单片机系统扩展2个8位并行接口和一个6位并行接口。8155内部还提供了256字节的SRAM和一个14位的定时/计数器,可以为单片机系统扩展256B的外部RAM,并额外扩展一个14位定时/计数器,因此在单片机系统中得到了广泛应用。本节将对8155及其用法进行简单介绍。6.4.18155的引脚及内部结构(1)PA和PB端口是8位并行接口(端口),对应2组8根引脚PA0~PA7和PB0~PB7,可连接外部8位并行输入或输出设备,但PC接口(端口)只有6位,对应的引脚也只有6根,即PC0~PC5。(2)地址/数据线AD0~AD7采用分时复用技术,一般直接与单片机的P0口相连接,在单片机与8155内部各端口和RAM单元之间传送8位数据和低8位地址。(3)ALE引脚传送地址锁存信号,高电平有效,一般和单片机的ALE端直接相连。当单片机通过P0口送来低8位地址时,同时由ALE引脚送来的脉冲下降沿将低8位地址锁存到8155内部的地址锁存器。因此8155的地址线可以直接与单片机的P0口相连接,无需另外再连接地址锁存器。(4)IO/M为内部RAM和端口选择信号引脚。访问内部RAM单元时,该信号为低电平;当访问片内3个端口以及命令/状态寄存器和定时/计数器时,该信号为高电平。(5)CE为片选信号引脚,当从该引脚送入低电平时,选中该片8155,再由IO/M上的高低电平区分是访问内部的端口还是RAM单元。(6)RD和WR为读和写信号输入引脚,一般直接与单片机的P3.6和P3.7引脚相连接,控制实现内部端口和RAM单元数据的读和写。(7)TI和TO是片内定时/计数器的计数脉冲输入和输出引脚。在TI端送入计数脉冲作用下,内部的14位定时/计数器实现递减计数。当计数值递减到0时,TO引脚输出脉冲或方波,波形形状由计数器的工作方式决定。8155内部除了3个并口、一个计数器和256字节RAM单元以外,还有一个控制寄存器,这些端口和寄存器通过AD7~AD0送入的8位地址进行寻址,各端口的地址分配及访问时所需的控制信号如表6-3所示。6.4.28155的命令字与工作方式当单片机输出16位地址的低3位地址A2A1A0=000时,表示对控制寄存器进行读写访问,再进一步由RD或WR引脚送入的负脉冲决定是读操作还是写操作。如果是写操作,表示向8155写入命令字,以指定8155的工作方式;如果是读操作,则表示读取其中保存的状态字。6.4.28155的命令字与状态字中断请求允许,1:允许;0:禁止PA、PB端口的输入输出,1:输出;0:输入定时器启停控制PA、PB端口输入输出方式,00~11:ALT1~ALT4PB中断允许状态PA有中断请求定时/计数器溢出中断,读状态字后将自动复位PA中断允许状态PB有中断请求PB缓冲器满PA缓冲器满6.4.38155的工作方式当IO/M=0,并且CE=0时,8155工作在存储器方式,单片机可以利用MOVX指令对8155内部的RAM单元进行读写访问。在访问过程中,首先由AD7~AD0输出RAM单元的8位地址,在RD和WR信号的作用下,再通过AD7~AD0传送选中单元的数据。一般情况下,8155的AD7~AD0直接与单片机的P0相连接,则执行MOVX指令时,由DPTR提供的16位地址中,只有低8位能够由AD7~AD0送入8155,用于内部RAM单元的选择。16位地址中的其他位可以直接或者经过译码后作为IO/M或CE信号。存储器方式当IO/M=1,并且CE=0时,8155工作在端口数据输入/输出方式,由PA、PB和PC端口根据命令字中PAB1、PAB2和PA、PB位设置的输入输出方式实现数据的输入或输出。命令字中的PAB1和PAB2位共有4种组合00~11,可分别设置PA和PB端口工作在4种输入/输出工作方式,这种工作方式依次表示为ALT1、ALT2、ALT3和ALT4方式,其中前两种称为基本输入输出方式,后两种称为选通工作方式。输入/输出方式(1)基本输入输出方式如果通过命令字设置8155工作在ALT1或ALT2方式,则内部的3个端口PA、PB和PC都工作在基本输入/输出方式。如果端口连接输入设备,则外部设备准备好数据后,立即存入8155内部的端口寄存器中,等待单片机读取;如果端口连接的是输出设备,则单片机需要输出数据时,将数据送到8155内部的端口寄存器后,立即通过PA或PB端口送到外部设备。具体是输入还是输出,取决于命令字中的最低两位。(2)选通输入输出方式如果通过命令字设置8155工作在ALT3或ALT4方式,则内部的端口PA和PB工作在选通输入/输出方式。所谓选通方式输入/输出,指的是在传输数据的过程中,8155与单片机和外部设备之间需要一些应答联络信号,以配合实现数据的准确可靠传送。在选通输入时,外部设备由PC2或PC5引脚送来STB负脉冲选通信号,将数据打入8155。此时,BF信号变为高电平,通知单片机读取数据。如果中断允许(命令字中的INTEA或INTEB设为1),8155内部会自动将PC0或PC3置为高电平,向单片机发出中断请求。单片机从相应端口读取数据后,BF和INTR恢复为低电平。此后,单片机等待外部设备送来下一个数据,并重复上述过程。在选通输出时,单片机向PA或PB端口输出一个数据,立即使BF信号变为高电平,通知外部设备从8155读取数据。外部设备将数据读取后,STB信号变为低电平。此时,如果中断允许,则8155内部将使INTR信号变为高电平,从而向单片机发出中断请求。单片机检测到STB信号为低电平,或者响应中断后,可以向8155端口输出下一个数据,并重复上述过程。在ALT3方式下,PA口工作在选通输入/输出方式,并由PC0~PC2提供应答联络信号,而PB口和PC口中的PC5~PC3可用作普通的输入输出并口,实现基本输入输出数据传送。ALT4方式:PA和PB端口都为选通输入/输出方式,两个端口一共需要6个应答联络信号,分别由PC口的各位提供。表6-4给出了各种方式下,PC口的作用及提供的应答联络信号。8155的定时/计数器是一个14位递减计数器,计数器的14位计数初值分别放在两个8位寄存器中,其中高6位作为在一个寄存器的低6位,低8位存放在另一个寄存器中。计数器的计数脉冲来自8155的TI引脚。当计数器计数到零时,状态字中的TIM位被置位,可供单片机读取和查询。同时,通过TO引脚输出不同的矩形脉冲波,输出波形决定于存放计数初值高6位的寄存器中的最高两位M2M1。这两位共有4种取值,决定了定时/计数器可以有4种不同的工作方式。定时/计数器方式当M2M1=00时,输出单次方波。在计数前半周输出高电平,后半周输出低电平。如果计数初值为偶数,则输出高电平和低电平的时间宽度相同;否则,高电平比滴定持续的时间多一个计数脉冲周期。当M2M1=01时,输出连续方波。在计数到零时自动装入初值,重新开始计数,并连续不断地输出方波脉冲。当M2M1=10时,输出单次负脉冲。计数到零时输出一个单脉冲,脉冲宽度等于一个计数脉冲周期,之后自动恢复为高电平。当M2M1=11时,输出连续负脉冲。每次计数到零时,自动重装初值,从而连续不断地输出宽度等于一个计数脉冲周期的负脉冲。计数器的启停控制在计数过程中,单片机向8155写入命令字,通过命令字最高两位TM2和TM1控制计数器的启停。当TM2TM1=00时,无读作。当TM2TM1=01时,停止计数。当TM2TM1=10时,计满后停止。若定时器正在运行,则8155收到该命令字后,必须等到计数到零时才停止计数。当TM2TM1=11时,开始计数。若定时器原为停止状态,则收到该命令字立即开始计数;若原来计数器正在计数运行,则在计数到零后立即按新设置的计数初值开始计数。动手实践6-4:8155A的应用(ex6_4.pdsprj,p6_4.asm)利用8155扩展2个并口,用于驱动8位数码管。8个数码管每隔10ms将显示缓冲区中的数据刷新显示一次,显示缓冲区定义在8155内部的RAM中。7.1磨刀霍霍—预备知识

7.1.1I2C总线7.1.2SPI总线7.1.31-Wire总线 7.1.4常用的串行接口总线器件第7章

51单片机资源的串行扩展7.2小试牛刀—实战案例

动手实践7-1:AT24C02与51单片机的接口动手实践7-2:MCP23S08与51单片机的接口动手实践7-3:DS18B20与51单片机的接口第7章

51单片机资源的串行扩展7.3庖丁解牛—原理剖析7.3.1AT24C02与51单片机的接口7.3.2MCP23S08与51单片机的接口7.3.3DS18B20与51单片机的接口第7章

51单片机资源的串行扩展7.4牛气冲天——实战进阶(*)7.4.1DS1302及其与51单片机的接口动手实践7-4:利用DS1302实现实时日历时钟7.4.2TM1637及其应用动手实践7-5:利用TM1637实现数码管和矩阵键盘管理第7章

51单片机资源的串行扩展7.1磨刀霍霍—预备知识

7.1.1I2C总线I2C总线(Inter-ICBus)是Philips公司开发的集成电路间总线,这是一个两线双向串行总线接口标准,采用这种接口标准的集成电路芯片只需要使用两条信号线与单片机进行连接,就可以完成单片机与接口器件之间的同步串行通信。I2C总线采用两线制连接,其中一条是数据线SDA(SerialData),另一条是时钟线SCL(SerialClock),SDA和SCL是双向的。I2C总线上所有器件的数据线都接到SDA线上,时钟线都接到SCL线上,如图7-1所示。I2C器件的分类主器件:控制总线的存取,产生串行时钟SCL信号、启动传送及结束传送信号等。从器件:被主器件寻址的器件,根据主器件的命令来接收和发送数据。由于I2C总线的双向特性,总线上的主器件和从器件都可能成为发送器(Transmitter)和接收器(Receiver),因此主器件和从器件可以有4种工作方式,即

主发送方式、主接收方式、从发送方式、从接收方式对任何一次数据或命令的传送过程来说,可以是主器件发送数据、从器件接收数据,也可以是从器件发送数据、主器件接收数据。I2C总线上的信号时钟信号时钟信号由主器件,并通过SCL线进行传送。在每一个时钟周期,通过SDA线传输一位数据。I2C总线的通信速率受主器件控制,也就是取决于主器件发送时钟信号的频率或周期。由于采用串行数据传输方式,I2C总线的传输速率不是太高,在标准模式、快速模式和高速模式下数据传输速率可分别达到100Kb/s、400KB/s和3.4Mb/s。器件地址挂在总线上的每个从器件都有一个唯一确定的地址,主器件通过该地址实现对从器件的寻址和数据传输。总线控制信号I2C协议规定总线上每传输一字节数据,接收器(可以是主器件或从器件)都必须发送一个应答位,称为应答信号ACK,简称A信号,有时又称为应答位0。A信号是在SDA为低电平期间,SCL信号线上传送一个正脉冲。当主器件作为接收器接收完指定个数的数据后,必须给从器件发一个非应答信号NACK,简称NA信号,有时又称为非应答位1。NACK信号是在SDA为高电平期间,SCL线上传送的一个正脉冲。该信号令从器件释放SDA线,以便主器件发送终止信号来结束数据传输。I2C总线的数据传输过程通过I2C总线进行的每一次数据传送,都是在主器件发送S信号和从器件地址后开始。之后,数据可能是从主器件送往从器件(称为主器件写,即主器件发送、从器件接收)、由从器件送往主器件(称为主器件读,即从器件发送、主器件接收),也可能是主器件对从器件同时进行读写(先写后读)。这几种典型的数据传输过程如图7-5所示。7.1.2SPI总线SPI(SerialPeripheralInterface,串行外设接口)总线是由Motorola公司开发的一种串行外设接口总线,用来实现单片机与各种外围设备(数据存储器、网络控制器、键盘和显示驱动器、A/D和D/A转换器等)之间的串行数据传送。SPI总线采用4线同步串行通信,可以工作在全双工方式下,同时进行数据的发送和接收,最高数据传输速率可达几Mbps。SPI总线结构SPI总线的数据传输过程在SPI总线协议中,同步时钟信号由主机通过SCK线发送到从机,从而控制主从机之间的同步串行数据传送。在任何时刻,SPI总线上只能有一台主机和一台从机可以进行通信。主机通过发出从机选择信号CS(片选信号)来选择与哪个从机进行通信,在从机的CS信号为低电平期间,才能通过MOSI接收指令数据,或者通过MISO发送数据,而其他未被选中的从机不能传送数据,其MISO端处于高阻状态。在SPI串行扩展系统中,主器件单片机在启动一次传送时,便产生8个时钟,传给接口芯片作为同步时钟,控制数据的输入和输出。数据的传送格式是高位(MSB)在前,低位(LSB)在后,如图7-7所示。数据线上输出数据的变化以及输入数据时的采样,都取决于SCK。但对不同的外围芯片,有的可能是SCK的上升沿起作用,有的可能是SCK的下降沿起作用。7.1.31-Wire总线1-Wire总线(单线总线,单总线)是由DALLAS公司推出的微控制器外围设备串行扩展总线,适用于单主机系统,可控制一个或多个从器件。单线总线采用一根数据线来完成从器件的供电和主从设备之间的数据交换,加上地线共需两根线,即可保证器件的全速运行。采用单线总线可最大限度减少系统的连线,降低电路板设计的复杂度。单线总线的总线结构每个单线总线器件内部都有一个唯一的64位器件ROM码序列号,从而允许多个器件同时挂接在同一条1-Wire总线上。通过网络操作命令协议,主机可以对其进行寻址和操控。图7-9是单线总线器件ROM码的格式。主机根据ROM码的前56位来计算CRC(循环冗余码校验)值,并与读取回来的值进行比较,判断接收的ROM码是否正确,以便确定是否寻址到从机器件。注

意——大多数单总线器件都没有电源引脚,而采用寄生供电的方式从总线线路获取电源。因此单线总线通常需要接上拉电阻,如图中的电阻RP。上拉电压越高,各单总线器件所得到的功率就越大,同一根单线总线上可以挂接的器件越多,单线总线完成一位传输后总线的恢复时间也越短。如果距离较远的情况下,需要提供额外的电源。如果采用单片机作为单线总线系统中的主机,要注意所用的I/O口必须是双向的,其输出为漏极开路,且线上具有弱上拉电阻。由于单线总线没有时钟脉冲进行同步,需要严格的时序和协议来保证总线的操作有效性和数据的完整性。单线总线的基本操作及数据传输过程单线总线数据传输的过程(1)对总线上的器件进行初始化和复位;(2)利用ROM操作命令寻找和匹配并指定待操作的器件;(3)发送操作命令,进行具体操作或数据传送。上述所有操作都是通过反复调用基本操作来实现的。单线总线协议针对不同类型的器件规定了详细的命令。命令有两种类型,即ROM命令和器件操作命令。每种ROM命令都是8位,实现从器件寻址或简化总线操作。器件操作命令包括存储器操作、启动转换等,具体的命令与器件相关。常用的EEPROM器件有采用I2C接口的AT24Cxx系列,采用SIP总线接口的AT25xxx系列等,采用1-Wire总线的DS2502等。常用的实时时钟芯片有采用I2C接口的DS1307,采用SPI总线的DS1390、DS1302、DS1305等,采用1-Wire总线的DS1904等。常用的LED显示和键盘接口芯片有采用I2C接口的ZLG7290、MAX6964、TM1637等,采用SPI总线的ZLG7289、MAX6954、CH451等。常用的温度传感器有采用I2C接口的DS1621、MAX6625等,采用SPI总线的MAX31722等,采用1-Wire总线的DS1825,

DS1822,

DS18B20等。7.1.4常用的串行接口总线器件7.2小试牛刀—实战案例

动手实践7-1:AT24C02与51单片机的接口

(ex7_1.pdsprj,p7_1.asm)动手实践7-2:MCP23S08与51单片机的接口

(ex7_2.pdsprj,p7_2.asm)动手实践7-3:DS18B20与51单片机的接口

(ex7_3.pdsprj,p7_3.asm)动手实践7-1动手实践7-2动手实践7-37.3庖丁解牛—原理剖析

7.3.1AT24C02C与51单片机的接口AT24Cxx系列是EEPROM芯片,其中24C02/04/08/16/32/64容量分别为256、512、1024、2048、4096、8192B,采用两线串行接口,一次数据传输可以写入8、16、16、16、32或32字节数据。AT24Cxx系列芯片的电源电压1.8~5.5V,待机电流和工作电流分别为1μA和1mA。在电源电压为5V时,12C时钟频率为1MHz,当电源电压为其他值时,时钟频率为400KHz。AT24Cxx系列芯片具有施密特触发输入噪声抑制能力、硬件数据写保护功能,内部写周期最大为5ms。AT24C02的引脚及内部结构SCL(SerialClock,串行时钟引脚):正边沿时将数据输入,负边沿时将数据输出。SDA(SerialData,串行数据引脚):实现双向串行数据传送,开漏驱动,从而可实现任意个数器件的线与功能。A2,A1,A0:器件地址可编程位,器件地址的高4位固定为1010。WP(WriteProtect,写保护):提供硬件写保护功能。当该引脚接地时,

允许正常的读写操作;当接电源时,实现写保护。需要说明的是,不管是字节写还是页写,在接收到P信号后,AT24C02将进入内部写周期,将数据写入非易失性存储器中。主器件必须等待写周期完成,才能开始对同一片AT24C02的下一次数据读写操作。对AT24C02来说,写周期的时间近似为5ms。在此期间,如果主器件通过发送S信号并写器件地址,AT24C02不会发出应答信号,也就不会开始下一次读写操作。AT24C02与51单片机的接口原理:在SCL正脉冲结束后,检测SDA线是否已被从机复位。7.3.2MCP23S08与51单片机的接口MCP23S08是由MicroChip公司生产的带SPI总线接口的8位通用并行接口扩展芯片,通过配置可以使扩展得到的8位并行接口工作在输入、输出或双向传送方式,还可以采用中断方式进行数据传送。限于篇幅,这里对与中断方式数据传送的相关内容不做介绍,读者可以参看MCP23S08的芯片手册。MCP23S08的引脚及内部结构CS:片选,当该引脚为低电平期间,主机可以与该片进行数据和命令的传送。SCK:串行时钟输入,输入主机发来的SPI总线时钟。SI:串行数据输入,接收主机通过SPI总线送来的串行数据。SO:串行数据输出,向主机发送串行数据。A1~A0:器件地址输入。GP7~0:数据双向I/O,连接外部并行数据输入或输出设备。INT:中断请求输出。MCP23S08的读写时序主机对MCS23S08的每次读写操作都包括3个操作,即器件寻址、寄存器寻址、寄存器数据传送,其时序如图7-23所示。MCP23S08的每次读写操作都必须在片选引脚输入低电平期间进行,读写操作的数据通过SI和SO总线逐位进行传送进行,这两个引脚也就是SPI总线的两根数据线MOSI和MISO。器件地址

器件地址用于选择当前主机需要进行数据传送的MCP23S08芯片。当主机送出的器件地址与某芯片的器件地址匹配时,该芯片被选中。MCP23S08的器件地址格式如图7-24所示。其中最高5位固定为01000,A1和A0决定于芯片上同名引脚的电路连接,读写方向位R/W位取为1和0时,分别对应读操作和写操作。寄存器

每一片MCP23S08内部都有11个寄存器,每个寄存器都有一个唯一的地址编号,主机通过对这些寄存器的访问实现MCP23S08的配置、控制和外部设备数据的并行输入输出。这11个寄存器如表7-3所示,这里主要介绍与芯片配置和控制及数据端口相关的寄存器。

首先需要说明的是,每个寄存器都是8位,大多数寄存器的各位与芯片的I/O端口引脚GP7~0相对应。例如,IODIR中的D5位为IO5,对应芯片的GP5引脚。读写时序字节写操作:每个SCK的下降沿将一位数据按先高位后低位的顺序逐位送到SI线上,在其后的上升沿数据锁存入芯片内,写操作结束时CS恢复为高电平,SCK输出一个负脉冲后恢复并保持为高电平。顺序写操作:每个字节的最高位在SCK第一个上升沿之前(即SCK为低电平期间)送到SI线上,其后的上升沿将数据锁存入芯片内。数据中的其他低位都是在SCK下降沿将一位数据按先高位后低位的顺序逐位送到SI线上,在其后的上升沿数据锁存入芯片内。写入最低位后,CS恢复为高电平,SCK保持为低电平,以便准备写入下一个字节数据。读操作:在SCK的低电平期间,MCP23S08将数据按先高位后低位的顺序送到SO线上。在SCK的上升沿主机读入数据。字节读操作结束时SCK保持为高电平,而顺序读操作结束时SCK变为低电平,以便立即开始读下一个字节数据。数据的输入输出作为并行扩展接口,MCP23S08的8个I/O引脚GP7~0可以分别连接一个8位的输入设备或者输出设备,从而实现主机通过该芯片与外部设备之间的并行数据传送。MCP23S08与输入输出设备和主机之间的连接如图7-26所示。数据传送的方向可以是数据的输入和输出,决定于GP7~0引脚上连接的是输入设备还是输出设备,从而也就决定了GP引脚上数据传送的方向。对数据的输入和输出,在程序中必须对MCP23S08做如下相关配置和操作:配置IODIR寄存器以指定各GP引脚的数据传送方向(输入或输出);对数据的输入,配置IPOL寄存器以确定GPIO寄存器各位与各GP引脚电平的对应关系,配置GPPU寄存器以确定输入引脚是否需要内部上拉电阻,读GPIO寄存器从而读取输入设备送来的数据;对数据的输出,将需要送到外部设备的数据写入GPIO或OLAT寄存器。在上述操作中,各项配置操作都是主机通过SPI总线对MCP23S08内部寄存器进行写操作实现的,因此都需要用到SI信号线。具体实现外部设备数据的输入和输出操作都是通过对GPIO或OLAT的读或写操作实现,其中数据的输入是读取GPIO寄存器,因此需要用到SO数据线;数据的输出是将数据送到GPIO或OLAT寄存器,因此需要用到SI,而不需要SO信号线,在图7-26(b)中用虚线表示。除了上述步骤以外,在进行任何其他读写操作之前,一般都必须先通过写操作配置IOCON寄存器,以决定是否启用硬件地址A1和A0、采用字节读写还是顺序读写模式。实践案例7-2MCP23S08与51单片机的接口在本案例中,两片MCP23S08扩展的两个8位的并口分别用作输入并口和输出并口。MCP23S08的SPI线由单片机P2口的5个引脚提供。7.3.3DS18B20与51单片机的接口DS18B20是DALLAS公司生产的单总线数字温度传感器芯片,温度测量范围为-55℃~+125℃,测温分辨率可达0.0625℃,可编程为9~12位A/D转换精度,被测温度用16位补码方式串行输出,还可由用户设定温度报警的上下限值。DS18B20具有3引脚TO-92小体积封装形式,其工作电源既可在远端引入,也可采用寄生电源方式产生。DS18B20带有1-Wire总线接口,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少。DS18B20的引脚及内部结构DS18B20的命令和工作时序DS18B20采用1-Wire总线接口,主机(单片机)控制DS18B20进行温度转换和温度数据的读取必须经过3个步骤:①对DS18B20进行复位和初始化;②复位成功后发送一条ROM命令;③发送RAM命令。复位成功后,单片机向DS18B20发送的命令有两大类,分别是ROM命令和RAM命令。表7-7给出了常用的命令。初始化和复位时序

读写操作时序DS18B20与51单片机的接口在程序p7_3.asm中,液晶显示器LCD1602相关的代码与前面各案例完全相同,这里主要介绍与DS18B20相关的部分。在程序最前面,用EQU和BIT伪指令定义了相关的常量,其中将获取的温度数据和温度值的整数、小数部分及正负号分别存放到单片机内部RAM的30H~34H单元。主程序实现的主要操作依次是:①控制在LCD1602的第一行显示提示信息;②从DS18B20读取温度数据;③在LCD1602的第二行显示温度值。其中第2、3步是一个死循环,而与DS18B20相关的第2步操作通过调用GET_T子程序实现。DS18B20与51单片机的接口在程序p7_3.asm的主程序中主要实现如下4项操作:①控制在LCD1602的第一行显示提示信息;②调用GET_T子程序从DS18B20读取温度数据;③调用CON_T子程序实现温度值的转换,将其拆分为整数和小数部分;④在LCD1602的第二行显示温度值。在上述操作中,子程序GET_T实现的主要操作流程为:DS18B20复位和初始化、发跳过ROM命令、启动温度转换,DS18B20再次复位、发跳过ROM命令,之后发读暂存器命令,并读温度数据的低字节和高字节分别存入TL和TH单元。这些操作分别进一步调用TINIT、TWRITE、TREAD子程序实现。DS18B20的复位和初始化操作ROM命令的发送和温度转换的启动温度值的读取温度值的转换温度值的显示在主程序中,调用GET_T和CON_T子程序读取温度,并将温度数据转换为整数和小数部分,分别存放到常量TNUM和TPOT所代表的内部RAM的32H和33H单元,在34H单元存放的是“+”、“-”字符的ASCII码。做了上述变换后,即可将温度显示到LCD1602显示器的第二行。在显示温度的整数部分时,一个关键的问题是求得两位十进制形式的温度值中的十位和各位。上述程序中利用DIV指令将温度的整数部分除以10,得到的商即为十位,存放在累加器A中;余数为个位,存放在单片机内部的暂存器B中(指令DIV的功能规定)。之后,将十位和个位十进制数字加上30H,即可得到数字字符的ASCII码,送入LCD1602显示。对于小数部分,在TPOT单元存放的是对应的4位二进制代码。对于12位转换,温度分辨率为0.0625C,4位二进制代码对应的小数部分温度依次为0×0.0625=0C、1×0.0625=0.0625C、2×0.0625=0.125C、3×0.0625=0.1875C、4×0.0625=0.25C、…。这里采用四舍五入的方法只显示一位小数。为此,在程序中将4位二进制对应的一位十进制小数温度值定义为表格,在程序中采用查表的方法得到。在定义表格时,可以将温度值直接定义为一位十进制代码字符的ASCII码,查表得到结果后直接输出显示。7.4牛气冲天——实战进阶

7.4.1DS1302及其与51单片机的接口DS1302是美国DALLAS公司推出的一种高性能、低功耗、带有RAM的实时日历时钟的电路,采用类似于SPI的串行接口总线标准协议与单片机通信。DS1302可对年、月、日、星期、时、分、秒进行实时计时,并具有闰年补偿功能;内部有一个大小为31字节的RAM区,可用于存放临时性数据;采用三线接口与MCU进行同步通信;具有宽电压的工作特点。DS1302的引脚和内部结构DS1302的寄存器与RAM控制寄存器单片机在对DS1302进行读/写之前,都必须向DS1302内部的控制寄存器写入一个8位的命令字,其格式如图7-33所示。工作寄存器

RAM

DS1302内部有31字节的RAM,可以实现单字节或多字节读写操作。当命令字为0C0~0FDH时为单字节操作,每次只能读写一个字节。与上述寄存器操作类似,命令字中的最低位D0用于区分是读操作(1码)还是写操作(0码),D1~D5位用于指定访问的RAM单元。当命令字为0FEH或0FFH时,实现多字节访问,其中0FEH为写操作命令字,0FFH为读操作命令字。在该方式下,对RAM从地址为0的单元中的最低位开始连续读写若干字节数据,但是不一定是读写所有的31个字节。DS1320的读写时序动手实践7-4:利用DS1302实现实时日历时钟ex7_4.pdsprj,p7_4.asm。7.4.2TM1637及其应用TM1647(国内与之兼容的AiP1637)是一块采用I2C接口的数码管和矩阵键盘驱动控制专用集成电路,内置键盘扫描接口,MCU数字接口、数据锁存器、LED高压驱动等电路。该芯片主要应用于电磁炉、微波炉及小家电产品的显示屏驱动,其主要特点如下:采用功率CMOS工艺显示模式:8段6位共阴极数码管输出,也支持共阳极数码管键扫描:2行8列,带增强型抗干扰按键识别电路辉度调节电路,占空比8级可调两线串行接口CLK和DIO内置450kHz±5%RC振荡电路内置上电复位电路和数码管自动消隐电路TM1637的引脚和电路符号7-36所示。其中的主要引脚如下:SG1/KS1~SG8/KS8:数码管字段码输出/矩阵键盘列线连接引脚GRID1~GRID6:数码管位选码输出引脚K1、K2:矩阵键盘行线连接引脚DIO:串行数据输入/输出引脚CLK:时钟输入引脚TM1637的数据命令单片机对TM1637的主要操作包括读取按键编码和送出数码管的字段码,数据传送时序严格按照I2C总线协议进行。单片机向TM1637的每个命令都是一个字节,其中最高两位01、10和11分别用于指定是数据命令、地址命令还是显示控制命令。其中数据命令用于设置TM1637的工作模式、指定写数码管字段码或读取按键编码操作等。数据命令字的格式如图7-37所示。按键的连接和读操作时序TM1637通过K1、K2和KS1~KS8引脚分别连接28矩阵键盘的行线和列线,最多可以管理16个按键。内部电路能够自动对16个按键进行扫描,并保存按键编码等待从DIO引脚读取输出。TM1637读取按键编码的时序如图7-38所示。该时序与I2C总线时序一致,读取一次按键编码的过程从S信号开始,到P信号结束。其中S信号是在CLK信号为高电平期间,DIO信号线上的负跳变;P信号是在CLK信号为高电平期间,DIO信号线上的正跳变。数码管的连接与显示控制TM1637通过SG1~SG8和GRID1~6可以连最多接6个8段共阴极数码管,其中SG1~SG8和GRID1~6分别作为数码管的字段码和位选码输出端。内部电路能够自动对最多6个数码管进行动态扫描显示,动态扫描的时间间隔为0.5ms,即动态扫描显示过程中两个数码管之间的间隔时间。字段码出现在SG1~SG8线上的时间(脉冲宽度)可以通过程序进行设置,数码管显示的亮度越高。地址命令TM1637中6个数码管的字段码依次存放在内部的6个RAM单元中,地址命令用于指定当前送来的字段码对应的RAM单元,也就是对应的数码管。地址命令字的格式如图7-39所示。显示控制命令用于设置字段码脉冲的宽度及控制数码管显示的开关,其格式如图7-40所示,其中1/16、2/16、…为脉冲宽度,分别表示0.5ms的1/16、2/16。显示控制时序(字段码的写入时序)固定地址模式,即每次只写入一个数码管的字段码。每写一个字段码,都必须先向TM1637发送地址命令,以指定字段码存入RAM的单元。在所有字段码发送完毕后,再发送显示控制命令以打开数码管的显示。地址自动递增模式,是在发送数据命令和地址命令后,连续发送N个字节的字段码。发送的地址命令只需要给定第一个字段码所需存入的RAM单元,TM1637每接收到一个字段码,地址会自动递增,从而将后续各字段码依次存入对应的RAM单元。最后,发送一个字节的显示控制命令。动手实践7-5:利用TM1637实现数码管和矩阵键盘管理本案例的电路连接如图7-43所示(参见文件ex7_5.pdsprj)。TM1637的CLK和DIO分别通过上拉电阻和滤波电容连接到电源和地,并作为SCL和SDA线与单片机的P2.2和P2.3相连接。TM1637通过K1和K2引脚分别连接8个按钮,16个按钮分为8列分别与TM1637的SG1~SG8端子相连接,从而构成2行×8列的矩阵键盘。SG1~SG8同时提供6个共阴极数码管的字段码,数码管的6根位选线分别对应与TM1637的GRID1~GRID6相连接。本案例的完整程序代码参见文件p7_5.asm。8.1磨刀霍霍—预备知识

8.1.1数字量和模拟量8.1.2数字量和模拟量之间的相互转换8.1.3DAC和ADC的主要技术指标第8章

模拟外设及其与51单片机的接口8.2小试牛刀—实战案例

动手实践8-1:数字量转换为模拟电压动手实践8-2:简单波形信号的产生动手实践8-3:模拟电压转换为数字量8.3庖丁解牛—原理剖析8.3.1常用DAC和ADC转换器简介8.3.2DAC0832及其与单片机的接口8.3.3ADC0809及其与单片机的接口第8章

模拟外设及其与51单片机的接口8.4牛气冲天——实战进阶(*)8.4.1ADC0809和DAC0832的高级应用动手实践8-4:信号波形重现及数据的采集动手实践8-5:利用两片DAC0832分别输出不同波形动手实践8-6:波形的同步—DAC0832双缓冲方式的应用8.4.2串行总线接口ADC和DAC动手实践8-7:MAX1241与51单片机的接口

动手实践8-8:PCF8591与51单片机的接口第8章

模拟外设及其与51单片机的接口8.1磨刀霍霍—预备知识

8.1.1数字量和模拟量在单片机内部的CPU和集成的各种内部资源中,以及单片机芯片内部的总线和外部的系统总线中,处理和传输的一位或多位二进制代码,称为数字量。数字量中的每一位二进制代码可用于控制一个LED的亮灭,或者代表开关的通断状态、定时/计数器是否溢出等,称为开关量。多个开关量的编码组合可以表示更多的信息,例如8个开关的通断状态可以用8位二进制表示。显然,数字量的位数越多,能够表示的信息种类就越多。一般的对应关系是,假设数字量为n位二进制代码,则最多可以表示2n种不同的信息。在模拟电路系统中,各点电压和电流的幅度大小随时间连续不断地变化。这意味着,在给定的一个变化范围内,幅度可以有很多甚至无穷多个取值。这样的电压和电流幅度取值称为模拟量。如果将模拟量的取值用数字量进行表示,就需要无穷多位二进制代码。显然,这是不现实的。在实际系统中,通常的做法是通过量化(Quantization)和编码(Code),将模拟量所有可能的取值用事先规定的有限个二进制编码组合来表示。这样得到的各种编码组合就成为数字量,而且是位数有限的,就可以用计算机进行处理了。8.1.2数字量和模拟量之间的相互转换数字量到模拟量的转换数字量到模拟量的转换简称为D/A转换,实现DAC的转换电路或器件称为D/A转换器或DAC。目前集成化的DAC芯片种类繁多,设计者只需要合理选用芯片,了解它们的性能、引脚外特性以及与单片机的接口设计方法即可。由于现在部分单片机的芯片中集成了DAC,位数一般在10位左右,且转换速度也很快,所以单片的DAC开始向高的位数和高转换速度上转变。而低端的并行8位DAC,开始面临被淘汰的危险,但是在实验室或涉及某些工业控制方面的应用,低端8位DAC以其优异的性价比还是具有较大的应用空间。(8-1)(8-2)模拟量到数字量的转换模拟量到数字量的转换简称为A/D转换(AnalogtoDigitalConversion),实现ADC的转换电路或器件称为A/D转换器或ADC(AnalogtoDigitalConverter)。ADC按实现的原理可以分为逐次逼近式、双积分式、并行/串行比较式、压频转换式ADC等,根据转换的速度可以分为低速、中断、高速、超高速ADC等,根据转换得到数字量的位数,典型的有8位、12位、14位和16位ADC转换器等。8.1.3DAC和ADC的主要技术指标分辨率对DAC,分辨率指输入单位数字量的变化所引起的输出模拟量幅度的变化,通常描述为输出满刻度(满量程)值与2n之比(n为DAC的二进制位数),或者DAC的最小输出电压,习惯上又常用输入数字量的位数表示。例如,假设满量程输出为5V,则当ADC转换位数为8位时,根据定义得到其分辨率为5/2n=5/256≈19.5mV,即输入的二进制数最低位数字量的变化可引起输出的模拟电压变化19.5mV,该值占满量程的0.39%≈1/28,常用符号1LSB表示,即1LSB=1/28。如果DAC的位数增加为12位,则分辨率为1LSB=1/212≈0.024%。对ADC来说,分辨率表示系统可分辨的最小输入模拟电压表示,一般用1个bit对应的模拟电压大小,或者转换后输出的二进制位数n来描述,通常n=8位、10位、12位、16位等。例如,12位A/D转换器AD1674的最大输入电压为5V,则分辨率为1LSB=5/212≈1.22mV,也就意味着当输入模拟电压变化幅度超过1.22mV时,转换输出数字量有1bit的变化。由此可见,ADC和DAC的分辨率都主要决定于转换位数。二进制位数越多,分辨率越高,转换的灵敏度和精度就越高。转换精度理想情况下,转换精度与分辨率基本一致,位数越多精度越高。但由于在生产和使用ADC和DAC的过程中,电源电压、基准电压、电阻、制造工艺等各种因素的影响,即便是两个相同位数的DAC和ADC,其分辨率则相同,但转换精度也会有区别。因此严格地说,转换精度与分辨率并不完全一致。例如,某种型号的8位DAC精度为±0.19%,而另一种型号的8位DAC精度为±0.05%。转换时间

转换时间又称为建立时间,是描述DAC转换速度的一项重要参数。转换时间指的是将数字量转换为稳定的模拟信号所需的时间,一般表示为从输入数字量到输出达到终值误差的±1/2LSB时所需的时间。一般DAC的转换时间在几十纳秒~几微秒,而逐次逼近型ADC转换时间的典型值为1~200

s。8.2小试牛刀—实战案例

动手实践8-1:数字量转换为模拟电压(ex8_1.pdsprj,p8_1.asm)动手实践8-2:简单波形信号的产生(ex8_2.pdsprj,p8_2_1.asm.p8_2_2.asm)动手实践8-3:模拟电压转换为数字量(ex8_3.pdsprj,p8_3.asm)动手实践8-1动手实践8-1动手实践8-2原理图通案例1,只是在运放输出端接示波器。动手实践8-3注意设置时钟频率为500KHz8.3庖丁解牛—原理剖析

8.3.1常用DAC和ADC转换器简介DAC0832的引脚及内部结构DAC0832是8位T型电阻解码网络D/A转换器芯片,是DAC0830系列的一种。其分辨率为8位,满刻度误差±1LSB,线性误差±0.1%,建立时间为1

s,功耗20mW,采用单一+5V~+15V电源供电。DAC0832的数字输入端具有双重缓冲功能,可以双缓冲、单缓冲或直通方式输入。DAC0832输入数字量与输出模拟电压之间的关系用式(8-2)描述。大多数情况下,参考电压VREF=-5V,因此V0=5/28D

0.0195DV,其中D为输入数字量表示的大小。ADC0809的引脚及内部结构ADC0809/ADC0808都是8位CMOS逐次逼近型A/D转换器,ADC0808的最小转换误差为1/2LSB,而ADC0809的转换误差为1LSB。两个芯片都采有8路模拟量输入通道,带转换起停控制,输入模拟电压范围0V~+5V。ADC0809输入模拟电压VIN与转换输出数字量D之间的关系可以表示为(8-3)大多数情况下,参考电压VREF(+)=5V,VREF(-)=0V,则VIN=5/256D,输出数字量D=256VIN/5=51.2VIN,最后结果按四舍五入取整数。ADC0809的工作时序如图8-10所示,其工作过程可以总结如下:(1)ALE脉冲将地址打入,选择一路模拟量送到比较器。(2)在START端输入脉冲正跳变作用下,使内部的逐次逼近寄存器复位,下降沿启动A/D转换,并使EOC信号为低电平。(3)转换结束时,EOC信号回到高电平,转换结果存入输出锁存器。(4)OE端输入的正脉冲将转换结果数据由D0~D7(ADC0809)或IOUT1~IOUT8(ADC0808)端子输出。(5)上述操作完毕后,如果需要,可以通过再次执行相同的程序,重复上述过程。ADC0809的引脚及内部结构8.3.2DAC0832及其与单片机的接口从单片机的角度,DAC0832相当于输出设备,ADC0809相当于输入设备。两种芯片在与51单片机进行连接和数据传送时,有两种典型的方法,即总线控制方法和并口控制方法。所谓总线控制方式,就是将DAC0832中的输入寄存器和DAC寄存器视为两个可写的外部RAM单元,将ADC0809的8个通道分别视为8个可读的外部RAM单元,从而采用与外部RAM单元的访问一样的方法进行控制和访问。所谓并口控制方式,就是单片机与DAC0832和ADC0809之间数字量的输入和输出通过普通的并口进行,所需的应答联络和控制信号也都通过并口引脚输出或者输入。DAC0832的工作方式所谓直通方式,指的是8位输入寄存器和8位DAC寄存器都直接处于导通状态,数字量由数据线直接输入,并立即启动转换。所谓单缓冲方式,指的是DAC0832内部的输入寄存器和DAC寄存器一个处于直通状态,另一个处于受控制状态,或者两个同时被控制。数字量必须在外部有效的控制信号作用下打入DAC0832内部,并立即启动转换。所谓双缓冲方式,指的是8位输入寄存器和8位DAC寄存器利用两组信号分别进行控制,数字量先送到输入寄存器,再送入DAC寄存器并启动转换。直通方式的硬件连接和程序ex8_4.pdsprjMOV

P1,#0FFH并口控制:通过MOV指令将数字量直接由并口输出,单缓冲方式的硬件连接和程序ex8_1.pdsprj总线控制:通过MOVX指令将数字量由数据总线输出,输入寄存器和DAC寄存器同时打开。ex8_5.pdsprj并口控制:通过MO指令由并口输出数字量,输入寄存器和DAC寄存器的控制信号用位操作指令产生。MOV P1,#0FFHSETB P3.0;产生CS负脉冲CLR P3.0SETB P3.0双缓冲方式的硬件连接和程序ex8_6.pdsprj总线控制:通过MOVX指令将数字量由数据总线输出,输入寄存器和DAC寄存器同时打开。按照上述连接,要将一个数字量送DAC0832进行D/A转换,可以编写如下程序:8.3.3ADC0809及其与单片机的接口一片ADC0809可以通过IN7~IN0引脚同时接入最多8个模拟量,这8个模拟量在芯片内部都是由同一套电路进行ADC转换的。因此在任何一个时刻,只能选择一个通道的模拟量送入并进行ADC转换。在ADC0809的引脚中,通过端子C、B、A或ADDC、ADDB、ADDA送入3位二进制代码,即可确定选择当前需要转换的通道,其中CBA=000~111依次对应IN0~IN7。需要注意的,3位地址必须在ALE端子送来的正脉冲作用下,才能打入芯片内部。这就要求单片机在送出这3位地址的同时,利用相关信号产生正脉冲送入ALE。通道选择与启动控制ex8_3.pdsprj延时方式(无条件传送方式)如果A/D转换的时间是确定不变的,可以让单片机在启动转换后延时对应的时间,再读取转换结果。这种方式不需要ADC转换器向单片机传送专门的应答联络信号,称为延时方式或者条件传送方式。例如,在转换时钟频率为500KHz时,ADC0809的转换时间为128

s,因此在程序中启动转换后,利用软件延时或定时/计数器定时等待128

s再读取转换结果即可。在这种方式下,由于单片机不需要通过专门的信号了解ADC转换是否结束,因此一般将ADC0809的EOC悬空不用。ADC0809的工作方式及其与单片机的连接查询方式

单片机启动ADC转换后,不断查询其状态,将该状态作为条件,当检测到条件满足时,说明转换结束,立即读入转换结果。在ADC0809引脚中,当转换结束时,EOC引脚会自动输出一个由原来的低电平到高电平的正跳变。因此可以将该引脚与单片机的某个并口引脚相连接,单片机利用指令JB或JNB不断检测该引脚的状态,即可知道ADC转换是否结束。中断方式

在这种方式下,单片机不是执行指令主动查询转换是否结束,而是在启动ADC转换后被动等待ADC转换器送来中断请求,响应中断后执行中断服务程序,在中断服务中通过执行相应的指令读取转换结果。显然,在这种方式下,ADC转换器必须在转换结束时能够向单片机发出中断请求。根据工作时序,在转换结束时EOC引脚会自动输出一个正跳变。因此,只需要将ADC0809的EOC信号通过非门反相后,再与单片机的INT0或INT1连接,即可在转换结束时得到一个负跳变,从而向单片机发出外部中断请求。ex8_7.pdsprj在上述3种方式下,单片机都是通过执行MOVX指令,送出地址和读写命令,以选择转换通道,或由P0口数据总线读取ADC转换结果,因此都属于总线控制方式。在并口够用的情况下,ADC0809也能很方便地实现并口控制。图8-15是在查询方式下利用并口进行控制的一种典型电路连接方法(参见文件ex8_8.pdsprj)。ADC0809的并口控制ex8_8.pdsprj在单片机时钟频率为12MHz时,程序中的延时子程序实现约200s的延时,再循环启动下一次A/D转换。注意:这里的延时时间相当于采样间隔,而不是A/D转换所需的时间。8.4牛气冲天—实战进阶

8.4.1ADC0809和DAC0832的高级应用在一个典型的测控系统中,可能同时需要DAC和ADC,其中ADC实现现场数据的采集,而DAC用于将单片机计算得到的控制信号数字量转化为模拟电压或电流,对被控对象进行控制。此外,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论