1、第第1212章章 51 51单片机的总线接口技术单片机的总线接口技术单片机原理及应用2 2第第1212章章 目录目录12.1 I2C总线接口 12.1.1 I2C总线概述 12.1.2 串行EEPROM概述 12.1.3 24C02引脚功能 12.1.4 工作方式 12.1.5 器件寻址、写操作和读操作 12.1.6 24C02芯片与51单片机的接口电路及编程 12.1.7 ZLG7290接口电路及编程12.2 SPI总线接口 12.2.1 SPI总线概述及主要特点 12.2.2 12位串行A/D TLC2543介绍 12.2.3 TLC22543与51单片机的接口设计12.3 单总线串行扩展
2、3 单片机的并行总线扩展(利用三总线DB、AB、CB进行的系统扩展)已不再是单片机应用系统唯一的扩展结构。目前,串行总线扩展技术已得到广泛地应用。例如:DALLAS 公司的单总线(1Wire)接口、Philips公司的I2C串行总线接口、Motorola公司的SPI串行外设接口以及Microwire总线三线同步串行接口。本章介绍上述串行扩展接口总线的工作原理及特点,重点介绍I2C串行扩展技术和SPI 总线接口。单片机的串行扩展技术与并行扩展技术相比具有显著的优点,串行接口器件与单片机接口时需要的I/O口线很少(仅需14条),串行接口器件体积小,因而占用电路板的空间小,约为并行接口器件的10%,
3、明显减少了电路板空间和成本。除上述优点,还有工作电压宽、抗干扰能力强、功耗低、数据不易丢失等特点。串行扩展技术在IC卡、智能仪器仪表以及分布式控制系统等领域得到广泛应用。12.1 I2C总线接口412.1.1 I2C总线概述总线概述 I2C总线使用广泛,是很有发展前途的芯片间串行扩展总线。I2C总线只有两条信号线,一是数据线SDA,二是时钟线SCL。两条信号线都是双向传输的信号线,所有连接到I2C上的器件的数据线都与SDA线连接;各器件时钟线均与SCL线连接。I2C系统的基本结构如图121所示。I2C总线单片机(如PHILIPS公司的8xC552)可以直接与I2C接口的各种扩展器件(如存储器、
4、I/O芯片、A/D、D/A、键盘、显示器、日历/时钟)连接。由于I2C总线的寻址采用纯软件的寻址方法,无需片选线的连接,这样就大大简化了总线数量。5 I2C的运行由主器件(主机)控制。主器件是指启动数据的发送(发出起始信号)、发出时钟信号、传送结束时发出终止信号的器件,主器件通常由单片机来担当。从器件(从机)可以是存储器、LED或LCD驱动器、A/D或D/A转换器、时钟/日历器件等,从器件必须带有I2C串行总线接口。图121 I2C串行总线系统的基本结构 6 当I2C总线空闲时,SDA和SCL两条线均为高电平。由于连接到总线上器件(节点)输出级必须是漏极或集电极开路,只要有一器件任意时刻输出低
5、电平,都将使总线上的信号变低,即各器件的SDA及SCL都是“线与”关系。由于各器件输出端为漏级开路,故必须通过上拉电阻接正电源(见图121中的两个电阻),以保证SDA和SCL在空闲时被上拉为高电平。SCL线上的时钟信号对SDA线上的各器件间的数据传输起同步控制作用。SDA线上的数据起始、终止及数据的有效性均要根据SCL线上的时钟信号来判断。在标准I2C模式中,数据的传输速率为100kbit/s,高速模式下可达400kbit/s。7 总线上扩展的器件数量不是由电流负载决定的,而是由电容负载确定的。I2C总线上每个节点器件的接口都有一定的等效电容,连接的器件越多,等效电容值越大,这会造成信号传输的
6、延迟。总线上允许的器件数以所有器件的等效电容量不超过400pF(通过驱动扩展可达4000pF)为宜,据此可计算出总线长度及连接器件的数量。连到I2C总线上的每个器件有一个唯一的地址,扩展器件时也要受器件地址数目的限制。I2C系统允许多主器件,究竟哪一主器件控制总线要通过总线仲裁来决定。如何仲裁,可查阅I2C仲裁协议。但在实际应用中,经常遇到的是以一个单片机为主机,其它外围接口器件为从机情况,在这种情况下,时钟线SCL为单向传输信号线,由单一主机发出。812.1.2 串行串行EEPROM概述概述 EEPROM(Electrically Erasable Programmable ReadOnly
7、 Memory),电可擦除可编程只读存储器,是一种掉电后数据不丢失的存储芯片。EEPROM可以应用微处理器或专用设备擦除已有信息,重新写入数据,写入的数据在常温下可以保持十年。EEPROM芯片有两类接口:并行接口和串行接口。并行EEPROM相对容量大、速度快、功耗大、价格贵,但读/写方法简单;串行EEPROM体积小、功耗低、价格便宜,使用中占用系统信号线少,但读/写速度相对慢,读/写方法稍复杂一些。对于系统中那些需要较少修改的代码或参数,通常所需要的字节数和写入的次数不会很多,写入速度也没有太高要求,这种情况下采用串行EEPROM是非常合适的。本节以24C02为例介绍二线制串行EEPROM的使
8、用。912.1.3 24C02引脚功能引脚功能 24C02是一块有2048位,即256个8位字节存储容量的串行CMOS EEPROM芯片。该芯片有8个引脚,封装有PDIP、SOIC、TSSOP和MSOP,图122为PDIP封装引脚图。SCL 串行时钟输入引脚,输入发送或接收数据的时钟信号。SDA 串行数据/地址引脚,双向信号传输,用于器件所有数据的发送或接收,SDA是一个开漏输出引脚,可与其它器件的开漏输出或集电极开路输出端进行线或(wire-OR),使用时需要连接一个上拉电阻。图122 24C02引脚图10 A0 A1 A2 器件地址定义输入引脚,输入器件地址,最多可级联8个同类型EEPRO
9、M器件。如果只有一块24C02芯片连接在I2C总线上,A0 A1 A2三个引脚可悬空或连接到Vss。WP 写保护,如果WP 引脚连接到 Vcc,所有的内容都被写保护,只能读。当 WP 管脚连接到Vss或悬空,允许器件进行正常的读/写操作。VCC 电源输入,+1.8V6.0V的工作电压。如果VCC低于3.8V,禁止内部的擦/写操作。VSS 接系统地1112.1.4 工作方式工作方式 24C02的I2C总线协议定义如下:(1)只有在总线空闲时才允许启动数据传送 (2)在数据传送过程中,当时钟线SCL为高电平时,数据线SDA必须保持稳定状态,不允许有跳变。因为SCL为高电平时,SDA的任何电平变化将
10、被看作总线的起始或停止信号。24C02的I2C总线的时序状态定义如图123所示 串行总线状态定义 总线非忙状态(A段)数据线SDA和时钟线SCL都保持为高电平。启动数据传输(B段)当时钟线SCL为高电平状态时,数据线SDA由高电平变为低电平的下降沿被认为是“启动”信号。只有出现“启动”12信号以后,其它的命令才有效。停止数据传输(C段)当时钟线SCL为高电平状态时,数据线SDA由低电平变为高电平的上升沿被认为是“停止”信号。随着“停止”信号的出现,所有的外部操作都结束。图123 串行总线状态定义13 数据有效(D段)出现“启动”信号以后,时钟线为高电平状态时数据线的状态必须是稳定的,这时数据线
11、的状态就表示要传送的有效数据。数据线上数据的改变必须在时钟线为低电平期间完成,每一位数据传输占一个时钟周期脉冲。每组数据的传输都是由“启动”信号开始,结束于“停止”信号。在“启动”与“停止”信号之间传输的每组的数据字节数由微处理器确定,从理论上来说字节数没有限制。14 (3)应答信号 I2C总线数据传送的确认应答时序如图124所示。I2C总线数据传送时,每成功地传送一个8位字节数据后,接收器都必须产生一个应答信号,应答的器件在第9个时钟周期将数据线SDA 拉低,表示其已收到一个8位字节数据。24C02在接收到起始信号和从器件地址,并确认被主器件选中之后,要发出一个应答信号,如果主器件已选择了写
12、操作,则24C02在每接收一个8位字节数据之后发出一个应答信号。如果主器件已选择了读操作,24C02发送一个8位数据后,释放SDA线并监视主器件的应答信号,一旦接收到主器件的应答信号,24C02继续发送数据,如主器件没有发送应答信号,24C02停止传送数据且等待一个停止信号。主器件对24C02发送的最后一个字节数据不产生应答信号,但是发给24C02一个结束信号。图124 确认应答时序图1512.1.5 器件寻址、写操作和读操作器件寻址、写操作和读操作 (1)器件寻址 24C02作为I2 2C总线的从器件有一个从器件地址。24C02是内部有256个字节的存储单元的EEPROM,每个字节存储单元也
13、有一个字节的8位地址。主器件发送一个起始信号启动发送过程,然后发送24C02的控制字节(从器件地址字节),其格式如图125,控制字节包括主器件所要寻址的从器件的地址,高4位固定为 1010,接下来的3位 A2 A1 A0 为主器件选中某一个24C02器件的地址,I2 2C总线能够挂接8个24C02,可单独被主器件寻址,控制字的最低位()为读写控制位,“1”表示对从器件进行读操作,“0”表示对从器件进行写操作。在主器件发送起始信号和从器件地址字节(控制字节)之后,24C02接收从器件地址字节并与本身的从器件地址进行比较,从器件地址相符时发出一个应答信号(通过SDA线),然后24C02再根据读写控
14、制位()的状态进行读或写操作。24C02内部存储单元的地址字节格式为:A7A0,A7为D7位,A0为D0位。图125 24C02控制字节(从器件地址字节)16 (2)写操作 字节写操作:要能够进行字节写操作,24C02的WP引脚应为低电平,或与VSS连接,处于禁止写保护功能状态。字节写操作示意图如图126所示,在字节写模式下,主器件发送起始位、4位控制码1010紧随其后,接下来的 3 位是从器件地址A2、A1、A0,然后是R/W位(写操作该位为低电平),如果A2A1A0符合24C02引脚A2A1A0连接的地址值,A2A1A0就发出应答信号,即在第九个时钟周期产生一个确认位。图126 字节写操作
15、示意图17 主器件在收到24C02发出的确认位的应答信号后,发送的第二个字节是待写入24C02内部存储单元的数据的地址字节,24C02把地址字节锁存到内部的地址计数器,24C02器件再次发出确认信号ACK。主器件在接收到该确认信号后即发送数据字节,24C02接收数据字节写入被选中地址的存储单元中,之后主器件发出停止条件信号,24C02收到停止条件信号后,启动内部擦/写周期,在内部擦/写过程中24C02不再应答主器件的任何请求。如果在WP引脚保持高电平时进行存储器写操作,从器件会确认命令,但不会启动写周期,也不会写入数据,而会立即接受新的命令。写保护:通过把WP引脚连接到VCC,允许用户设置24
16、C02的写保护功能。把WP引脚连接到VSS将禁止写保护功能。对于每个写命令,24C02对WP引脚在停止位之前进行采样,在停止位之后改变WP 引脚电平不会对写周期的执行产生任何影响。18 (3 3)读操作)读操作 除了控制字节(从器件地址字节)的R/W位设置为1外,读操作与写操作基本相同。24C02有三种基本的读操作:当前地址的读操作、随机读操作和连续读操作。当前地址单元内容的读操作:当前地址单元内容读操作的示意图如图127所示,24C02内置一个自动加1地址计数器,该计数器保留最后一次访问的地址。因此,如果先前已对地址n(n 为任意合法地址)的存储单元进行了读或写操作,则下一条读操作命令将自动
17、对地址n+1的存储单元访问。24C02接收到 R/W 位设置为1的控制字节后,24C02发出确认信号,并发送当前地址单元的8位数据字节。主器件不会对数据传输作出确认,但会产生停止条件,24C02即停止数据发送。图127 当前地址读操作示意图19 随机读操作:随机读操作允许主器件以随机方式访问24C02中的任意一个存储单元。随机读操作示意图如图128所示,发送的控制字节R/W 设置为0,执行该指令前还需先设置24C02的内部待读出数据的存储单元的地址字节。主器件接收到24C02发出的字节地址的确认信号再次产生起始条件,主器件再次发送控制字节,而该字节中 R/W 位设置为1,之后24C02发出确认
18、信号,并发送被选中的地址单元的8 位数据字节。主器件不会对数据传输作出确认,但会产生停止条件,24C02即停止数据发送。在随机读取命令执行结束之后,24C02内部地址计数器加1指向下一个存储单元的地址。图128 随机读操作示意图20 连续读操作:连续读操作示意图如图129所示,连续读操作的起动过程和随机读操作相同,只是在24C02发送完第一个数据字节后,主器件发出确认信号。该确认信号指示24C02器件发送下一个连续地址的存储单元的数据字节。在24C02器件向主器件发送完最后一个数据字节后,主器件不再产生确认信号,而是产生停止条件。为了可以进行连续读操作,24C02器件内置了一个地址指针,在每次
19、操作完成后该指针加1。地址指针达到最后一个地址字节FFH后,地址指针将翻转到地址00H。图129 连续读操作示意图2112.1.6 24C02芯片与51单片机的接口电路及编程 一块24C02芯片与51单片机的接口电路如图1210所示。图1210中,24C02的三个地址引脚直接接地,串行时钟SCL引脚与51单片机的P1.0连接,双向串行数据SDA引脚与P1.1连接,SDA和SCL都需要一个上拉电阻和+5V连接,WP写保护引脚直接接地,允许24C02执行一般的读写操作。24C02内部有地址寄存器。读或写 一个字节数据后,该地址寄存器自动加1,实现对下一个存储单元的读/写。为降低总的写入时间,一次操
20、作可连续读/写多达8个字节的数据。图1210 24C02与51单片机的接口电路 22例例121 将程序存储器首地址为1000H的8个数据写到 24C02中去,24C02的首址单元为01H;然后将24C02中的首地址为10H的8个单元读到51单片机内部RAM中的首地址为30H的8个单元中,参考程序如下:ORG 0000H SCL BIT P1.0;定义24C02的串行时钟线 SDA BIT P1.1;定义24C02的串行数据线 LJMP WSTART;ORG 0030H;对从器件24C02写字节操作,参见图123的起始条件,图126的字节写操作 WSTART:MOV R2,#08H ;一串数据有
21、8个字节 MOV DPTR,#1000H ;定义源数据的位置 MOV R1,#01H ;定义存放到24C02中的数据的首址单元位置23 LOOPW:LCALL STAR ;调用启动,参见图123 MOV R3,#10100000B ;写控制字节:1010+器件3位地址(000)+(0)MOV A,R3 ;送控制字节 LCALL SDATA ;调用主器件移位输出(写)8位数据操作子程序 LCALL ACK ;调用确认子程序,参见图126 JC LOOPW ;判断从器件是否已确认,未确认返回再传输一次 MOV A,R1 ;送从器件24C02的首址单元为01H的地址字节,LCALL SDATA ;调
22、用主器件移位输出(写)8位数据操作子程序 LCALL ACK ;调用确认子程序 JC LOOPW MOV A,#00H MOVC A,A+DPTR ;提取51单片机程序存储器存储单元的数据传输 LCALL SDATA ;调用写操作子程序 LCALL ACK ;调用应答子程序 JC LOOPW INC DPTR INC R1 ;存放地址增一 DJNZ R2,LOOPW LCALL STOP ;调用停止子程序 24 /(R7)=欲读数据存放地址指针,(R1)=片内字节地址,(R2)=连续读字节数 /(R3)=10100001(读控制字节:1010+器件3位地址(000)+(1)RSTART:MOV
23、 R2,#08H ;一串数据有8个字节,连续读字节数 MOV R7,#10H ;定义从器件24C02源数据的首地址存储单元 MOV R1,#30H ;定义读入数据存放在51单片机中的首地址存储单元 LOOPR:LCALL STAR ;调用启动,MOV R3,#10100000B ;写控制字节:1010+器件3位地址(000)+(0)MOV A,R3 ;送控制字节 LCALL SDATA ;调用写操作子程序 LCALL ACK ;调用确认子程序,参见图128 JC LOOPR ;判断从器件是否已确认,未确认返回再传输一次 MOV A,R7 ;送地址字节 LCALL SDATA ;调用写操作子程序
24、 LCALL ACK ;调用从器件确认子程序 JC LOOPR ;C=1转移,C=0顺序执行,表示从其器件已确认 MOV R3,#10100001B ;读控制字节:1010+器件3位地址(000)+(1)MOV A,R3 ;送读控制字节 LCALL SDATA ;调用写操作子程序,参见图128 LCALL ACK ;调用确认子程序25 JC LOOPRMORE:ACALL SDATAR ;调用包括应答处理的接收单字节子程序,MOV R1,A ;读入的数据存储在51单片机内部RAM中 INC R1 ;51单片机内部RAM存储单元地址+1 DJNZ R2,MORE LCALL STOP ;调用停止
25、子程序HERE:AJMP HERESDATAR:MOV R4,#08H ;读单字节子程序LOOPR:SETB SCL ACALL DELAY MOV C,SDA RLC A CLR SCL ACALL DELAY DJNZ R4,LOOPR CJNE R2,#01H,LOW SETB SDA ;若是最后一个字节不确认 AJMP SETOK LOW:CLR SDA ;否则主器件发出确认信号26SETOK:ACALL DELAY SETB SCL ACALL DELAY CLR SCL ACALL DELAY SETB SDA ;应答毕,SDA置1,P口回到接收状态 RET STAR:SETB S
26、DA ;启动子程序,参见图123,读/写操作都用该子程序 ACALL DELAY ;延时以满足传输速率要求 SETB SCL ACALL DELAY ;延时以满足传输速率要求 CLR SDA ACALL DELAY ;延时以满足传输速率要求 CLR SCL RET SDATA:MOV R0,#08H ;写单字节操作子程序 LOOP0:RLC A MOV SDA,C ACALL DELAY ;延时以满足传输速率要求 SETB SCL 27 ACALL DELAY ;延时以满足传输速率要求 CLR SCL DJNZ R0,LOOP0 RET ACK:SETB SDA ;SDA与P1.1连接,读SD
27、A首先置P1.1为“1”ACALL DELAY ;延时以满足传输速率要求 SETB SCL ACALL DELAY ;延时以满足传输速率要求 MOV C,SDA ;读从器件的确认信号 CLR SCL RET STOP:CLR SDA ;参见图123 ACALL DELAY ;延时以满足传输速率要求 SETB SCL ACALL DELAY ;延时以满足传输速率要求 SETB SDA ACALL DELAY ;延时以满足传输速率要求 CLR SCL RET28DELAY:NOP NOP RET ORG 1000H DB 0A0H,10H,01H,02H,03H,04H,05H,06H END 程
28、序中多处调用了DELAY子程序,这是为了满足I2C总线上数据传送速率的要求,只有当SDA数据线上的数据稳定下来之后才能进行读写(即SCL线发出正脉冲)。另外,在读最后一个字节数据时,置应答信号为“1”,表示读操作即将完成。2912.1.7 ZLG7290接口电路及编程接口电路及编程 ZLG7290采用I2C串行接口,提供键盘中断信号,方便与微处理器接口。在显示方面,能够直接驱动 8 位共阴数码管或64只独立的LED;控制扫描数码管的位数,控制任一数码管进行闪烁。可以实现数据译码和循环、移位、段寻址等控制。在键盘处理方面,可直接驱动64个按键,有8个功能键,可检测任一按键的连击次数,无需外接元件
29、就可扩展驱动电流和驱动电压。采用PDIP24封装的ZLG7290引脚图如图1211所示,其引脚功能参见表121。图1211 ZLG7290引脚图3031 功能描述功能描述:ZLG7290系统功能框图见图1212,系统功能框图即寄存器映象图。(1)键盘部分 ZLG7290可采样64个按键或传感器,可检测每个按键的连击次数。其基本功能如下:键盘自动去抖动处理,无需编制键盘消抖动的程序。图1212 ZLG7290系统功能框图即寄存器映象图32 双键互锁处理。当有两个以上按键被同时按下时,ZLG7290只采样优先级高的按键(优先顺序为 S1S2S64,例如:同时按下S2 和S18按键时,只能够采样到S
30、2按键被按下)。连击键处理 当某个按键按下时,输出一次键值后,如果该按键还未释放,该键值连续有效,就像连续按压该键一样,这种功能称为连击。ZLG7290的连击次数计数器(RepeatCnt)可区别出单击(某些功能不允许连击,如开/关)或连击。判断连击次数可以检测被按时间,以防止某些功能误操作(如连续按5秒进入参数设置状态)。功能键处理 如图1213所示,ZLG7290B典型应用电路原理图中的按键S57S64是功能键,功能键能够实现2个以上按键同时按下来扩展按键数目或实现特殊功能。类似于 PC机上的“Ctrl”、“Shift”、“Ctrl”、“Alt”键,以及“Ctrl”+“Shift”键构成的
31、组合键等。33 (2)显示部分 在每个显示刷新周期,ZLG7290按照扫描位数寄存器(ScanNum)指定的显示位数N,把显示缓存 DpRam0DpRamN的内容按先后循序送入LED驱动器实现动态显示,减少N 值可提高每位显示扫描时间的占空比,以提高LED亮度,显示缓存中的内容不受影响。修改闪烁控制寄存器(FlashOnOff)可改变闪烁频率和占空比(亮和灭的时间)。ZLG7290提供两种控制方式:寄存器映象控制和命令解释控制。寄存器映象控制是指直接访问底层寄存器,实现基本控制功能,这些寄存器须字节操作。命令解释控制是指通过解释命令缓冲区(CmdBuf0 CmdBuf1)中的指令,间接访问底层
32、寄存器实现扩展控制功能。如实现寄存器的位操作:对显示缓存循环,移位,对操作数译码等操作。寄存器详解和指令详解请参阅相关手册。34 (3)通信接口 ZLG7290作为I2C总线的从器件的接口传输速率可达32kbit/s,其从地址(slave address)为70H(01110000B)。ZLG7290内部可通过I2C总线访问的寄存器地址范围为00H17H,任一寄存器都可按字节直接读写,也可以通过命令接口间接读写或按位读写。支持自动增址功能(访问一寄存器后,寄存器子地址(sub address)自动加一)和地址翻转功能(访问最后一寄存器(子地址 17H)后,寄存器子地址翻转为00H)。ZLG72
33、90 的控制和状态查询全部都是通过读/写寄存器实现的,用户只需象读写24C02内的单元一样,即可实现对LG7290的控制。35 典型应用电路典型应用电路:在图1213中,U1 就是 ZLG7290。为了使电源更加稳定,一般要在 Vcc 到GND之间接入 47470uF 的电解电容 E1。P1是ZLG7290与微控制器的接口,按照 I2C 总线协议的要求,信号线SCL和SDA上必须要分别连接上拉电阻,其典型值是 10K。晶振X1通常取值8MHz,调节电容C1和C2通常取值在 10pF左右。复位信号是低电平有效,一般只需外接简单的RC复位电路,也可以通过直接拉低RST引脚的方法进行复位。数码管必须
34、是共阴结构的LED数码管,L1 和L2 是4位联体式数码管,共同组成8位数码管显示电路。数码管在工作时要消耗较大的电流,R1R8是限流电阻,典型值是 220。64 个按键中,前56 个按键是普通按键S1S56,最后8个S57S64为功能键 F0F7。键盘电阻 R11R118 的典型值是3.3K。数码管扫描线和键盘扫描线是共用的,所以二极管 D1D8 是必须的,有了它们就可以防止按键干扰数码管显示的情况发生。36图1213 ZLG7290B典型应用电路原理图3712.2 SPI总线接口 12.2.1 SPI总线概述及主要特点 SPI(Serial Periperal Interface)是Mot
35、orola公司推出的同步串行外设接口,允许单片机与多个厂家生产的带有标准SPI接口的外围设备直接连接,以串行方式交换信息。图1214为SPI串行总线外围器件扩展结构图。图中,51单片机作为主器件,外围器件1#n#作为从器件。对于每一个从器件使用SPI总线4条线:串行时钟SCK,主器件输入/从器件输出数据线MISO,主器件输出/从器件输入数据线MOSI,每一个从器件的一条选择线。图1214 SPI外围串行扩展结构图38 SPI的典型应用是单主系统,一台主器件,从器件通常是外围接口器件,如存储器、I/O接口、A/D、D/A、键盘、日历/时钟和显示驱动等。扩展多个外围器件时,SPI总线无法通过数据线
36、译码选择外围器件,故外围器件都有片选端。在扩展单个SPI器件时,外围器件的片选端 可以接地或通过I/O口控制;在扩展多个SPI从器件时,单片机通过I/O口线来分时选通外围器件。如果SPI串行总线只扩展一个从器件,该从器件只作输入(如键盘)或只作输出(如显示器),可省去一条数据输出(MISO)或一条数据输入(MOSI)线,构成二线系统,可以接地。SPI总线系统与I2C总线选通比较,每个从器件多两根连接线,从器件扩展比较多时,主器件需要控制较多的从器件 端,连线较多。但由于主器件单片机对从器件的选通是直接控制其 端,省去I2C总线数据传输时的从器件地址字节(控制字节),而且SPI总线应用MISO和
37、MISO线,数据传送软件的编制比I2C总线简单的多。39 SPI总线的8位数据传输时序如图1215所示。图中,主器件单片机将选中的从器件的 信号由“1”“0”,发出SCK时钟信号,启动一次8位数据传输,SCK时钟信号作为从器件的同步时钟,控制数据的输入和输出。传输格式是高位(MSB)在前,低位(LSB)在后。输出数据的变化以及输入数据时的采样,都取决于SCK。但对不同外围芯片的从器件,可能是SCK的上升沿起作用,也可能是SCK的下降沿起作用。SPI总线有较高的数据传输速度,最高可达1.05Mbit/s。Motorola提供了一系列具有SPI接口的单片机和外围接口芯片,如存储器MC2814、显示
38、驱动器MC14499和MC14489等各种芯片。目前已有许多增强型51单片机和其它机型的单片机都带有SPI接口。但对51单片机,由于不带SPI接口,要实现SPI接口,可采用软件控制I/O口来模拟SPI的接口时序。图1215 SPI数据传送格式4012.2.2 12位串行A/D TLC2543介绍 功能特点与引脚功能特点与引脚:TLC2543是美国TI公司的12位串行SPI接口的A/D转换器,使用开关电容逐次逼近技术完成A/D转换过程,转换时间为10s。片内有1个14路模拟开关,用来选择11路模拟输入以及3路内部测试电压中的1路进行采样。由于是串行输入结构,能够节省51单片机I/O资源;且价格适
39、中,分辨率较高,因此在仪器仪表中有较为广泛的应用。TLC2543具有如下特点:(1)12位分辩率A/D转换器;(2)在工作温度范围内10s转换时间;(3)11个模拟输入通道;(4)3路内置自测试方式;(5)采样率为66kbps;图1216 TLC2543引脚图41 (6)线性误差1LSBmax;(7)A/D转换结束输出EOC;(8)具有单、双极性输出;(9)可编程的MSB或LSB前导;(10)可编程输出数据长度。42 工作原理工作原理:TLC2543内部有一个8位控制寄存器、输出数据寄存器、A/D转换器和模拟量采样器。8位控制寄存器规定了 TLC2543 要转换的模拟量通道、转换后的输出数据长
40、度、输出数据的格式,上电后8位控制寄存器初始状态被置为00H。输出数据寄存器锁存A/D转换的结果,模拟量采样器实现对8位控制寄存器所规定的模拟量通道的输入模拟量的采样,A/D转换器完成对采样值的A/D转换。TLC2543完成模拟量通道的选择,模拟量的采样,输出数据寄存器串行输出数据和A/D转换的时间称为一个工作周期,其中,输出数据寄存器串行输出数据的过程和模拟量通道的选择,模拟量的采样过程并行执行。片选 输入端为高电平时,I/O CLOCK、DATA INPUT被禁止,DATA OUT呈高阻状态,EOC端输出为高电平。43 一次工作周期的开始,TLC2543的片选 输入端必须从高电平变换到低低
41、电平,I/O CLOCK、DATA INPUT使能,DATA OUT脱离高阻状态,EOC输出为高电平,8位控制寄存器被置为0。I/O CLOCK输入端依次输入12 或16个时钟信号,随着时钟信号的输入,首先控制字从DATA INPUT一位一位地在时钟信号的上升沿时被送入TLC2543(高位先送入)的8位控制寄存器,同时存放在输出数据寄存器中的上一个工作周期A/D转换数据的结果从DATA OUT一位一位地移出。第4个时钟信号后,TLC2543已收到模拟通道号,此时TLC2543开始对选定的通道模拟量进行采样,并保持到第12或16个时钟的下降沿。在第12或16个时钟下降沿,EOC变为低电平,开始对
42、本次采样的模拟量进行A/D转换,转换时间约需10s,转换结束后EOC变为高电平,转换的数据锁存在输出数据寄存器中,待下一个工作周期输出。44 (1)内部控制寄存器 8位内部控制寄存器各位的基本功能如下:1)高4位D7D4决定模拟量输入通道号。0通道至10通道的地址分别为00001010H,该4位为10111101时,用于对TLC2543的自检,分别测试(VREF+VREF)/2、VREF、VREF+的值,当为1110时,TLC2543 进入休眠状态。2)D3、D2决定输出数据长度。00和10表示输出数据长度为12位(标准位数,12个时钟的工作周期),01为8位(精度较低),11为16位(16个
43、时钟的工作周期,低四位为零,便于16位串行数据传输)。3)D1:决定输出数据是高位先送出,还是低位先送出。0:表示输出数据的最高位导前;1:最低位导前。4)D0:单极性(无符号二进制)还是双极性(有符号的补码二进制)输出控制位。0:单极性;1:双极性。(2)采样过程 TLC2543的工作周期可以分为二个子周期:I/O周期和转换周期t(conv)。1)I/O周期完成对内部控制寄存器的置数、模拟量的采样,并同时完成输出数据寄存器的数据(上一个工作周期A/D转换的结果)从DATA OUT端的串行输出,工作在I/O周期时,EOC输出高电平;I/O周期又可以分为访问周期A和采样周期B。访问周期A:4个时
44、钟脉冲,使得TLC2543接收到模拟量输入通道号,然后进入采样周期B。45 采样周期B:3个并行处理的周期,一是58个时钟脉冲,8位控制寄存器的D3D0的数据输入;二是输出数据寄存器数据的串行输出;三是对选定的模拟量输入通道的输入信号进行采样。采样开始于I/O时钟的第四个下降沿。采样方式按照内部控制寄存器的D3、D2的设置值,01:采样直到第8个I/O CLOCK下降沿;00和10:12个时钟周期的采样;11:16个时钟周期的采样。采样周期B结束,EOC由输出高电平变换为输出低电平,进入转换周期。2)转换周期完成模拟量采样值的A/D转换,是由I/O时钟同步的内部时钟来控制。在转换周期开始时,E
45、OC输出变为低电平;当转换完成时变为高电平,A/D转换的数据结果由输出数据寄存器锁存。上电后的第一个工作周期从输出数据寄存器串行输出的转换结果不准确,应忽略。TLC2543可以用四种传输方法使TLC2543得到12位分辩率,每次转换和数据串行输出可以使用12或16个时钟周期。一个片选()脉冲要插到每次转换的开始处,或是在A/D转换时序的开始处变化一次直到工作周期时序结束。CS46 图1217是使用 ,MSB在前的I/O周期为16个时钟的一个工作周期的时序图,图1218是不使用 ,MSB在前的I/O周期使用16个时钟的一个工作周期的时序图。图1217 I/O周期为16时钟的一个工作周期时序图(使
46、用 ,MSB在前)CSCSCS47图1218 I/O周期为16时钟的一个工作周期时序图(不使用 ,MSB在前)CS4812.2.3 TLC22543与51单片机的接口设计 设计的51单片机与串行A/D转换器TLC2543的SPI接口原理图如图1219所示。TLC2543的I/O CLOCK、DATA INPUT和 端由51单片机的P1.0、P1.1和P1.3来控制。转换结果的输出数据(DATA OUT)由51单片机的P1.2串行接收,51单片机将命令字通过P1.1输入到TLC2543的输入寄存器中。TLC2543的数据采集程序结构可以参照第10章例104的编程方法,应用定时器定时中断采样的方法
47、设计程序结构。主要不同点在于定时中断服务程序。图1219 51单片机与TLC2543的SPI接口49例例122 编写51单片机选择TLC2543的某一通道(例如AIN0通道)进行1次数据采集的子程序,A/D转换结果共12位,分两次读入。先读入TLC2543中的8位转换结果到51单片机中,同时写入下一次转换的命令,然后再读入4位的转换结果到51单片机中。ADCOMD DATA 6FH ;定义命令存储单元ADOUTH DATA 6EH ;定义存储转换结果高4位单元ADOUTL DATA6DH ;定义存储转换结果低8位单元ADCV:CLR P1.0 ;时钟引脚为低电平,P1.0模拟SCK信号CLR
48、P1.3 ;片选 有效,选中TLC2543,P1.3模拟选择信号MOV R2,#08H ;送出下一次8位转换命令和读8位转换结果做准备MOV A,ADCOMD ;下一次转换命令在ADCOMD单元中送ALOOP1:MOV C,P1.2 ;读入1位转换结果;P1.2模拟MOSO信号RRC A ;1位转换结果带进位位右移MOV P1.1,C;送出命令字节中的1位;P1.1模拟MOSI信号SETB P1.0 ;产生1个时钟NOPCLR P1.0NOPDJNZ R2,LOOP1 ;是否完成8次转换结果读入和命令输出,未完则转移50MOV ADOUTL,A;读8位转换结果存入ADOUTL单元MOV A,#
49、00H;A清0MOV R2,#04H;为读入4位转换结果做准备LOOP2:MOV C,P1.2;读入高4位转换结果中的1位 RRC A;带进位位循环右移 SETB P1.0;产生1个时钟 NOP CLR P1.0 NOP DJNZ R2,LOO;是否完成4次读入,未完转移MOV ADOUTH,A;高4位转换结果存入ADOUTH高4位SWAP ADOUTH;ADOUTH中的高4位与低4位互换SETB P1.0;1次数据采集过程结束,时钟无效RET图1220 单片机与TLC2543的8位数据交换示意图51 执行上述程序中的循环程序段8次,执行“RRC A”指令8次,每次读入转换结果1位,然后送出A
50、DCOMD单元中的下一次转换的命令字节“G7 G6 G5 G4 G3 G2 G1 G0”中的1位,进入TLC2543的内部控制寄存器。经8次右移后,8位A/D转换结果数据“”读入累加器ACC中,上述的具体数据交换过程如图1220所示。子程序中的4次循环,只是读入转换结果的4位数据,图中没有给出,读者可自行画出4次移位的过程。由本例见,单片机与TLC2543接口十分简单,只需用软件控制4条I/O引脚按规定时序对TLC2543进行访问即可。5212.3 单总线串行扩展 单总线(也称1Wire bus)只有一条数据输入/输出线DQ,总线上的所有器件都挂在DQ上,电源也通过这条信号线DQ供给,使用一条
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。