1、第二级,第三级,第四级,第五级,第,9,章 串行接口技术,第,9,章 串行接口技术,单片机原理、接口及应用,内 容 提 要,RS-485,总线扩展,IIC,总线扩展接口及应用,SPI,总线扩展接口及应用,9.1 RS,485,总线扩展,RS,485,标准接口是单片机系统种常用的一种串行总线之一。与,RS,232C,比较,其性能有许多改进,细节请见表,9.1,所示。,表,9.1 RS,232C,与,RS,485,性能比较,RS,485,接口可连接成半双工和全双工两种通信方式。常见的半双工通信芯片有,MAX481,、,MAX483,、,MAX485,、,MAX487,等,全双工通信芯片有,MAX
2、488,、,MAX489,、,MAX490,、,MAX491,等。,下面以,MAX485,为例来介绍,RS,485,串行接口的应用。,MAX485,的封装有,DIP,、,SO,和,uMAX,三种,其中,DIP,封装的管脚如图,9.1,所示。管脚的功能如下:,RO,:接收器输出端。若,A,比,B,大,200mV,,,RO,为高;反之为低电平。,RE,:接收器输出使能端。,RE,为低时,,RO,有效;为高时,,RO,呈高阻状态。,DE,:驱动器输出使能端。若,DE,1,,驱动器输出,A,和,B,有效;若,DE,0,,则它们呈高阻态。若驱动器输出有效,器件作为线驱动器用,反之作为线接收器用。,DI,
3、驱动器输入端。,DI,0,,有,A,0,,,B,1,;当,DI,1,,则,A,1,,,B,0,。,GND,:接地。,A,:同相接收器输入和同相驱动器输出。,B,:反相接收器输入和反相驱动器输出。,VCC,:电源端,一般接,+5V,。,图,9.1 MAX485,芯片的,DIP,封装管脚图,MAX485,典型的工作电路如图,9.2,所示,其中平衡电阻,Rp,通常取,100,300,欧姆。,MAX485,的收发功能见表,9.3,。,表,9.3 MAX485,的收发功能,89C51,与,MAX485,的接口电路如图,9.4,所示。,P1.7,用来控制,MAX485,的接收或发送,其余操作同串口,。,
4、9.2 I2C,总线扩展接口及应用,9.2.1,原理,I2C(IIC),总线是,Philip,公司推出的芯片间串行传输总线。它用两根线实现了完善的全双工同步数据传送,可以极为方便地构成多机系统和外围器件扩展系统。,IIC,总线采用了器件地址的硬件设置方法,通过软件寻址完全避免了器件的片选线寻址方法,从而使硬件系统具有简单灵活的扩展方法。按照,IIC,总线规范,总线传输中的所有状态都生成相对应的状态码,系统中的主机能够依照这些状态码自动地进行总线管理,用户只要在程序中装入这些标准处理模块,根据数据操作要求完成,IIC,总线的初始化,启动,IIC,总线就能自动完成规定的数据传送操作,。,IIC,总
5、线接口为开漏或开集电极输出,需加上拉电阻。系统中所有的单片机、外围器件都将数据线,SDA,和时钟线,SCL,的同名端相连在一起,总线上的所有节点都由器件和管脚给定地址。系统中可以直接连接具有,IIC,总线接口的单片机,也可以通过总线扩展芯片或,I/O,口的软件仿真与,IIC,总线相连。在,IIC,总线上可以挂接各种类型的外围器件,如,RAM/EEPROM,、日历,/,时钟、,A/D,、,D/A,、以及由,I/O,口、显示驱动器构成的各种模块。,9.2.2,软件,IIC,总线,假设单片机所用晶体振荡器的频率为,6MHz,。用,P1.7,和,P1.6,分别模拟,SDA,和,SCL,,定义如下:,S
6、DAEQUP1.7,SCLEQUP1.6,(1),产生起始位和停止位,如果单片机则每个机器周期为,2us,我们可分别写出产生时钟,SCL,和,SDA,的发送起始条件和停止条件两段子程序如下。若晶振频率并非,6MHz,,则要相应增删各程序段中,NOP,指令的条数,以满足时序的要求。例如,若,fosc=12MHz,,则两条,NOP,指令应增至,4,条。,发送起始条件,START,STA:SETB SDA,SETB SCL,NOP,NOP,CLR SDA,NOP,NOP,CLR SCL,RET,发送停止条件,STOP,STOP,:,CLR SDA,SETB SCL,NOP,NOP,SETB SDA,
7、NOP,NOP,CLR SCL,RET,(2),发送应答位和非应答位子程序,IIC,总线上的第,9,个时钟对应于应答位,相应数据线上“,0”,为“,ACK”,和“,1”,为“”。发送应答位和非应答位的子程序分别如下,。,发送应答位,ACK,MACK,:,CLR SDA,SETB SCL,NOP,NOP,CLR SCL,SETB SDA,RET,发送非应答位,ACK,MNACK,:,SETB SDA,SETB SCL,NOP,NOP,CLR SCL,CLR SDA,RET,(3),应答位检查子程序,在,I2C,总线数据传送中,接收器收到发送器传送来的一个字节后,必须向,SDA,线上返送一个应答位
8、ACK,,表明此字节已经收妥。本子程序使单片机产生一个额外的时钟,(,第九个时钟脉冲,在脉冲的高电平期间读,ACK,应答位,并将它的状态被复制到,F0,标志中以供检查。若有正常,ACK,,则,F0,标志为,0,,否则为,1,。,CACK,:,SETB SDA,;,SDA,作输入,SETB SCL,;第,9,个时钟脉冲开始,NOP,MOV C,,,SDA,;读,SDA,线,MOV F0,,,C,;转存入,F0,中,CLR SCL,;时钟脉冲结束,NOP,RET,(4),字节数据发送子程序,由于是,SDA,接在并行口线,无移位寄存器,因此数据通过指令完成移位再从,SDA,串行输出。遵循时序要求,
9、数据在时钟低电平时变化,高电平时稳定,每一个时钟脉冲传送一位,编写字节数据传送子程序。,该子程序的入口条件是待发送的字节位于累加器,ACC,中。,WRB,:,MOV R7,,,#8,;位计数器初值,WLP,:,RLC A,;欲发送位移入,C,中,JC WR1,;此位为,1,,转,WR1,CLR SDA,;此位为,0,,发送,0,SETB SCL,;时钟脉冲变为高电平,NOP,;延时,NOP,CLR SCL,;时钟脉冲变为低电平,DJNZ R7,,,WLP,;未发完,8,位,转,WLP RET,;,8,位已发完,返回,WR1,:,SETB SDA,;此位为,1,,发送,1,SETB SCL,;时
10、钟脉冲变高电 平,NOP,NOP,;延时,CLR SCL,;时钟脉冲变低电 平,CLR SDA,DJNZ R7,,,WLP,RET,(5),字节数据接收子程序,该子程序的功能是在时钟的高电平时数据已稳定,读入一位,经过,8,个时钟从,SDA,线上读入一个字节数据,并将所读字节存于,A,和,R6,中。,RDB,:,MOV R7,,,#8,;,R7,存放位计数器初值,RLP,:,SETB SDA,;,SDA,输入,SETB SCL,;,SCL,脉冲开始,MOV C,,,SDA,;读,SDA,线,MOV A,,,R6,;取回暂存结果,RLC A,;移入新接收位,MOV R6,,,A,;暂存入,R6,
11、CLR SCL,;,SCL,脉冲结束,DJNZ R7,,,RLP,;未读完,8,位,转,RLP,RET,;,8,位读完,返回,(6)n,个字节数据发送子程序,这段子程序的入口条件:,假定控制字节已存放在片内,RAM,的,SLA,单元中;,待发送数据各字节已位于片内,RAM,以,MTD+1,为起始地址的,n,个连续单元中。,NUMBYT,单元中存有欲发送数据的字节数。,接收到数据的存放首址存放在片内,RAM,的,MTD,单元。,WRNBYT,:,PUSH PSW,;保护现场,WRNBYT1,:,MOV PSW,,,#18H,;改用第,3,组工作寄存器,CALL STA,;发起始条件,MOV A,
12、SLA,;读写控制字节,CALL WRB,;发送写控制字节,CALL CACK,;检查应答位,JB F0,,,WRNBYT,;无应答位,重发,MOV R0,,,#MTD,;有应答位,继而发数据,第一个数据为首址,WRDA,:,MOV A,,,R0,;读一个字节数据,LCALL WRB,;发送此字节,LCALL CACK,;检查,ACK,JB F0,,,WRNBYT1,;无,ACK,,重发,INC R0,;调整指针,DJNZ R5,,,WRDA,;尚未发完,n,个字节,继续,LCALL STOP,;全部数据发完,停止,POP PSW,;恢复现场,RET,;返回,(7),读、存数据程序,假设数
13、据接受缓冲区为片内,RAM,以,MRD,为首址的,n,个单元。,这段子程序的入口条件:,片内,RAM,中的,SLA,单元存有读控制字节;,NUMBYT,单元中存有欲接收数据的字节数。,出口条件:,所读出的数据将存入片内,RAM,以,MRD,为首地址的,n,个连续单元内。,RDNBYT,:,PUSH PSW ,RDNBYT1:MOV PSW,,,#18H,LCALL STA,;发送起始条件,MOV A,,,SLA,;读入读控制字节,LCALL WRB,;发送读控制字节,LCALL CACK,;检查,ACK,JB F0,,,RDNBYT1,;无,ACK,,重新开始,MOV R1,,,#MRD,;接
14、收数据缓冲区指针,GO_ON,:,LCALL RDB,;读一个字节,MOV R1,,,A,;存入接收数据缓冲区;,DJNZ NUMBYT,,,ACK,;未全接收完,转,ACK,LCALL MNACK,;已读完所有字节,发,LCALL STOP,;发停止条件,POP PSW,RET,ACK,:,LCALL MACK,;发,ACK,INC R1,;调整指针,SJMP GO_ON,;继续接收,9.2.3,典型,IIC,串行存储器的扩展,9.2.3.1,串行,IIC,总线,EEPROM AT24CXX,的扩展,1,)基本原理,AT24CXX,的特点是:单电源供电,工作电压范围宽,1.8V,5.5V,;
15、低功耗,CMOS,技术,(100KHz(2.5 V),和,400KHz(5V),兼容,),,自定时写周期,(,包含自动擦除,),、页面写周期的典型值为,2ms,,具有硬件写保护。,图,9.6 AT24CXX,的结构和引脚。,(a),内部结构图;,(b),引脚图。,器件型号为,AT24CXX,的结构和引脚如图,9.6,所示,其中,SCL,串行时钟端,。,SDA,串行数据端,。,WP,为写保护,当,WP,为高电平时存贮器只读;当,WP,为低电平时存贮器可读可写。,A0,、,A1,、,A2,片选或块选。,SDA,为漏极开路端,需接上拉电阻到,Vcc,。数据的结构为,8,位。信号为电平触发,而非边沿触
16、发。输入端内接有滤波器,能有效抑制噪声。自动擦除,(,逻辑“,1”),在每一个写周期内完成。,AT24CXX,采用,IIC,规程,运用主,/,从双向通讯。器件发送数据到总线上,则定义为发送器,器件接收数据则定义为接收器。主器件,(,通常为微控制器,),和从器件可工作于接收器和发送器状态。总线必须由主器件控制,主器件产生串行时钟,(SCL),,控制总线的传送方向,并产生开始和停止条件。串行,EEPROM,为从器件。无论主控器件,还是从控器件,接收一个字节后必须发出一个确认信号,ACK,。,2,)控制字节要求,开始位以后,主器件送出,8,位控制字节。控制字节的结构,(,不包括开始位,),如下所示:
17、说明:,控制字节的第,1,4,位为从器件地址位,(,存贮器为,1010),。控制字节中的前,4,位码确认器件的类型。此四位码由飞利浦公司的,IIC,规程所决定。,1010,码即为从器件为串行,EEPROM,的情况。串行,EEPROM,将一直处于等待状态,直到,1010,码发送到总线上为止。当,1010,码发送到总线上,其它非串行,EEPROM,从器件将不会响应。,控制字节的第,5,7,位为,1,8,片的片选或存贮器内的块地址选择位。此三个控制位用于选片或者内部块选择。标准的,IIC,规程允许选择,16K,位的存贮器。通过对几片器件或一个器件内的几个块的存取,可完成对,16K,位存贮器的选择,
18、如表,9-6,所示。,表,9-6 AT24CXX,的,A2A1A0,控制字节的,A2,、,A1,、,A0,的选择必须与外部,A2,、,A1,、,A0,引脚的硬件连接或者内部块选择匹配,,A2,、,A1,、,A0,引脚无内部连接的,则这三位无关紧要;作器件选择的,可接高电平或低电平。,AT24CXX,的存贮矩阵内部分为若干块,每一块有若干页面,每一页面有若干个字节。内部页缓冲器只能写入一页字节数据,对,24LC32,和,24LC64,一次可以存,8,页,(,每页,8,个字节,),。,控制字节第,8,位为读、写操作控制码。如果此位为,1,,下一字节进行读操作,(R),;此位为,0,,下一字节进行写
19、操作(,W,)。,当串行,EEPROM,产生控制字节确认位以后,主器件总线上将传送相应的字地址或数据信息。,3,)确认要求,在每一个字节接收后,接收器件必须产生一个确认信号位,ACK,。主器件必须产生一个与此确 认位相应的额外时钟脉冲。在此时钟脉冲的高电平期间拉,SDA,线为稳定的低电平,为确认信号,(ACK),。若不在从器件输出的最后一个字节中产生确认位,主器件必须发一个数据结束信 号给从器件。在这种情况下,从器件必须保持数据线为高电平,(,用表示,),,使 得主器件能产生停止条件。,注意,:如果内部编程周期,(,烧写,),正在进行,,AT24CXX,不产生任何确认位。,4,)写操作,字节写
20、在主器件发出开始信号以后,主器件发送写控制字节即,1010A2A1A00,(其中,R/W,读写控制位为低电平“,0”,)。这指示从接收器被寻址,由主器件发送的下一个字节为字地址,将被写入到,AT24CXX,的地址指针。主器件接收来自,AT24CXX,的另一个确认信号以后,将发送数据字节,并写入到寻址的存贮器地址。,AT24CXX,再次发出确认信号,同时主器件产生 停止条件,P,。启动内部写周期,在内部写周期内,AT24CXX,将不产生确认信号,(,见图,9.7),。,图,9.7 AT24CXX,字节写,页面写,如同字节写方式,先将写控制字节、字地址发送到,AT24CXX,,接着发,n,个数据
21、字节,主器件发送不多于一个页面字节的数据字节到,AT24CXX,,这些数据字节暂存在片内页面缓存器中,在主器件发送停止信号以后写入到存贮器。接收每一字节以后,低位顺序地址指针在内部加,1,。高位顺序字地址保持为常数。如果主器件在产生停止条件以前要发送多于一页字的数据,地址计数器将会循环,并且先接收到的数据将被覆盖。象字节写操作一样,一旦停止条件被接收到,则内部写周期将开始,(,见图,9.8),。,图,9.8 AT24CXX,页面写,写保护,当,WP,端连接到,Vcc,,,AT24CXX,可被用作串行,ROM,,编程将被禁止,并且整个存贮器写保护。,5,)读操作,当从器件地址的,R/W,位被置为
22、1”,,启动读操作。存在三种基本读操作类型:读当前地址内容,读随机地址内容,读顺序地址内容。,读当前地址内容,AT24CXX,片内包含一个地址计数器,此计数器保持被存取的最后一个字的地址,并在片内自动加,1,。因此,如果以前存取,(,读或者写操作均可,),的地址为,n,,下一个读操作从,n+1,地址中读出数据。在接收到从器件的地址中,R/W,位为,1,的情况下,,AT24CXX,发送一个确认位并且送出,8,位数据字。主器件将不产生确认位,(,相当于产生,ACK),,但产生一个停止条件。,AT24CXX,不再继续发送,(,见图,9.9),。,图,9.9 AT24CXX,读当前地址内容,读随机
23、地址内容,这种方式允许主器件读存贮器任意地址的内容,操作如图,9.10,所示。,图,9.10 AT24CXX,读随意地址的内容,主器件发,1010A2A1A0,后发,0,位,再发读的存贮器地址,在收到从器件的确认位,ACK,后 产生一个开始条件,S,,以结束上述写过程,再发一个读控制字节,从器件,AT24CXX,在发,ACK,信号后发出,8,位数据,主器件发后,发一个停止位,,AT24CXX,不再发后续字节。,读顺序地址的内容,读顺序地址内容的方式与读随意地址内容的方式相同,只是在,AT24CXX,发送第一个字节以后,主器件不发和,STOP,,而是发,ACK,确认信号,控制,AT24CXX,发
24、送下一个顺序地址的,8,位数据字,直到,x,个数据读完,(,见图,9.11),。,图,9.11 AT24CXX,读顺序地址的内容,防止噪声,AT24CXX,使用了一个,Vcc,门限检测器电路。在一般条件下,如果,Vcc,低于,1.5V,,门限检测器对内部擦,/,写逻辑不使能。,SCL,和,SDA,输入端接有施密特触发器和滤波器电路,即使在总线上有噪声存在的情况下,它们也能抑制噪声峰值以保证器件正常工作。,6,)串行,EEPROM,和,AT89C51,接口,图,9.12,为,8XX51,微控制器与,4K,位的,AT24C04,串行,EEPROM,的典型连接。图中,P1.6,、,P1.7,提供,A
25、T24C04,的时钟,SCL,、,SDA,和,AT24C04,进行数据传送,,A2,、,A1,、,A0,内部无连接,为无关位。,WP,为,EEPROM,的写保护信号,高电平有效。因为我们要进行写入操作,所以只能把它接低电平。,利用上面的子程序,将,8XX51,单片机内部,RAM 60,67H,存放的“,1”,“,8”LED,显示器的字形 码写入,24C04,存贮器的,20,27H,单元,为检查写入效果,再将,24C04,的,20,27H,单元的内容读出 存入,8XX51,内部,RAM,的,40H,47H,单元,同时送,LED,显示器显示。,9.2.4 IIC,总线接口的串行,A/D,、,D/A
26、扩展,PCF8591,是一款典型的,IIC,总线接口的串行,8,位,A/D,、,D/A,转换器,该器件为单一电源供电(,2.5,6V,),,CMOS,工艺。,PCF8591,有,4,路,8,位,A/D,输入,属逐次比较型,内含采样保持电路;,1,路,8,位,D/A,输出,内含有,DAC,的数据寄存器。,A/D,、,D/A,的最大转换速率约为,11kHz,,转换的基准电源需由外部提供。,PCF8591,的内部结构和外部引脚分别如图,9.18,所示。,图,9.18 PCF8591,的内部结构(,a,)的外部引脚(,b,),PCF8591,引脚功能描述见表,9.7,。表,9.7 PCF8591,的
27、引脚功能表,PCF8591,的工作字有两个,地址选择字和转换控制字。地址选择字的格式如表,9.8,所示。,表,9.8 PCF8591,的地址选择字格式,PCF8591,的转换控制字存放在控制寄存器中,用于实现器件的各种功能。总线操作时,为主发送的第二个字节。其格式如表,9.9,所示。,表,9.9 PCF8591,的转换控制字格式,PCF8591,的包括,D/A,转换和,A/D,转换两个部分,下面分别介绍之。,1,),PCF8591,的,D/A,转换,D/A,转换器是,PCF8591,的关键单元,除作为,D/A,转换使用外,还用于,A/D,转换中。,D/A,转换使用,IIC,总线的写入操作完成的
28、其数据操作格式如下:,其中,data 1data n,为待转换的二进制数字。,CONBYT,为,PCF8591,的控制字节。图中灰底位由主机发出,白底位由,PCF8591,产生。,D/A,转换时,控制字中的输出允许位(,D6,)应为,1,,写入,PCF8591,的数据字节存放在,DAC,数据寄存器中,通过,D/A,转换器转换成相应的模拟电压通过,AOUT,引脚输出,并保持到输入新的数据为止。,由于片内,DAC,单元还用于,A/D,转换,在,A/D,转换周期里释放,DAC,单元供,A/D,转换用,而,DAC,输出缓冲放大器的采样、保持电路在这期间将保持,D/A,转换的输出电压。,2,),PCF
29、8591,的,A/D,转换,PCF8591,的,A/D,转换为逐次比较型,ADC,,在,A/D,转换周期中借用,DAC,及高增益比较器。,A/D,转换的时序如图,9.21,所示,对,PCF8591,进行读写操作便立即启动,A/D,转换,并读出,A/D,转换结果。在每个应答位的后沿触发,A/D,转换周期,采样模拟电压并读出当前一个转换结果。,A/D,转换中,一旦,A/D,采样周期被触发,所选择通道的采样电压便保存在采样、保持电路中,并转换成,8,位二进制码(单端输入)或,8,位二进制补码(差分输入)存放在,ADC,数据寄存器中等待主器件读出。如果控制字节中自动增量选择位置,1,,则一次,A/D,
30、转换完毕后自动选择下一通道。读周期中读出的第一个字节为前一个周期的转换结果。上电复位后读出的第一字节为,80H,。,PCF8591,的,A/D,转换使用,IIC,总线的读操作,其数据格式如下:,其中,data 0data n,为,A/D,的转换结果,分别对应于前一个数据读取期间所采样的模拟电压。上电复位后控制字节状态为,00H,,如果,A/D,转换时须设置控制字,须在读操作之前进行控制字节的写入操作。,PCF8591,一个典型的应用电路如图,9.20,所示。假设从,A/D,的通道,0,采样数据送至,D/A,转换输出,利用前面所给出的,IIC,软件,编程如下,:,图,9.20 PCF8591,的
31、典型应用电路,LCALL STA,;启动,IIC,总线操作,MOV A,#10010001B,;访问,PCF8591,的,A/D,LCALL WRB,LCALL RDB,;读上次采样数据,结果存放在,R6,中,LCALL STOP,;停止,IIC,总线操作,LCALL STA,;启动,IIC,总线操作,MOV A,#10010000B,;访问,PCF8591,的,D/A,LCALL WRB,MOV A,#01000000H,;设置控制字,LCALL WRB,MOV A,R6,;从,D/A,输出采样值,LCALL WRB,LCALL STOP,;停止,IIC,总线操作,9.3 SPI,总线扩展接
32、口及应用,9.3.1 SPI,的原理,SPI,(,Serial Peripheral Interface,串行外设接口)总线系统是,Motorola,公司提出的一种同步串行外设接口,允许,MCU,与各种外围设备以同步串行方式进行通信来交换信息。其外围设备种类繁多,从最简单的,TTL,移位寄存器到复杂的,LCD,显示驱动器、网络控制器等,可谓应有尽有。,SPI,总线可直接与各厂家生产的多种标准外围器件直接接口,该接口一般使用,4,根线:串行时钟线,SCK,、主机输入,/,从机输出数据线,MISO,、主机输出,/,从机输出数据线,MISO,和低电平有效的从机选择线,SS,。由于,SPI,系统总线只
33、需,3,根公共的时钟数据线和若干位独立的从机选择线(依据从机数目而定),在,SPI,从设备较少而没有总线扩展能力的单片机系统中使用特别方便。即使在有总线扩展能力的系统中采用,SPI,设备也可以简化电路设计,省掉很多常规电路中的接口器件,从而提高了设计的可靠性。,图,9.21,一个典型的,SPI,总线系统结构示意图,一个典型的,SPI,总线系统结构如图,9.21,所示。在这个系统中,只允许有,1,个做主,SPI,设备的主,MCU,和若干做,SPI,从设备的,I/O,外围器件。,MCU,控制着数据向,1,个或多个从外围器件的传送。从器件只能在主机发命令时才能接收或向主机传送数据,其数据的传输格式是
34、高位(,MSB,)在前,低位(,LSB,)在后。当有多个不同的串行,I/O,器件若要连至,SPI,上作为从设备,必须注意两点:一是其必须有片选端;二是其接,MISO,线的输出脚必须有三态,片选无效时输出高阻态,以不影响其它,SPI,设备的正常工作。,9.3.2 SPI,总线的软件模拟及串并扩展应用,9.3.2.1 SPI,总线的软件模拟,对于大多的,51,单片机而言,没有提供,SPI,接口,通常可使用软件的办法来模拟,SPI,的总线操作,包括串行时钟、数据输入和输出。值得注意的是,对于不同的串行接口外围芯片,它们的时钟时序有可能不同,按,SPI,数据和时钟的相位关系来看通常有,4,种情况,它是
35、由片选信号有效前的电平和数据传送时的有效沿来区分的,传送,8,位数据的时序种类具体如图,9.22,所示,。,现在用软件来模拟一下图,9.22,中最上面的一种情况。我们假定图,9.21,中的,MCU,为,51,单片机,系统接有两个从器件,用,P1.7,模拟,SCK,,,P1.6,模拟,MOSI,,,P1.5,模拟,MISO,线,,P1.4,模拟,SS1,,,P1.3,模拟,SS2,。其模拟的程序如下。,图,9.22 SPI,总线的,4,种数据,/,时钟时序图,SCK BIT P1.7,MOSI BIT P1.6,MISO BIT P1.5,SS DB 0,;分配片选扩展字单元,PF0 BIT 0
36、分配片选有效前电平标志位,PF1 BIT 1,;分配数据传送有效沿标志位,CLR PF0,;初始化电平标志位,PF0,CLR PF1,;初始化沿标志位,PF1,MOV SS,#11101111B,;初始化从器件选择字,数据发送程序,:,MOV R0,#DATA8,;待发送的数据放在,R0,中,MOV C,PF0,MOV SCK,C,;欲设置有效电平,NOP,;延时,均可调整,为匹配时序要求,MOV A,SS,ANL P1,A,;选中从器件,NOP,XCH A,R0,MOV R0,#08H,;置循环次数,SPIOUT:MOV C,PF1,MOV SCK,C,;准备有效触发沿,CPL PF1,
37、RLC A,;发送下一位数据(从最高位开始),MOV MOSI,C,NOP,MOV C,PF1,MOV SCK,C,;产生有效沿,以便从器件锁存数据,CPL PF1,NOP,DJNZ R0,SPIOUT,;,8,位数据发送未完成,则继续发送下一位,MOV C,PF0,MOV SCK,C,MOV A,SS,CPL A,ORL P1,A,;结束,SPI,总线操作,关闭从器件,RET,数据接收程序:,SPIR:MOV C,PF0,MOV SCK,C,;欲设置有效电平,NOP,;延时,均可调整,为匹配时序要求,MOV A,SS,ANL P1,A,;选中从器件,NOP,MOV R0,#08H,;置循环次
38、数,SPIIN:MOV C,PF1,MOV SCK,C,;准备有效触发沿,CPL PF1,NOP,MOV C,PF1,MOV SCK,C,;产生有效沿,以便从器件锁存数据,MOV MOSI,C,;接收下一位数据(从最高位开始),RRC A,;接收到的数据依次存入,A,CPL PF1,NOP,DJNZ R0,SPIIN,;,8,位数据未接收完,则继续接收下一位,MOV C,PF0,MOV SCK,C,MOV A,SS,CPL A,ORL P1,A,;结束,SPI,总线操作,关闭从器件,RET,其它三种情况只需改变初始相位条件即可模拟实现,。,9.3.3 10,位串行,D/A TLC5615,的扩
39、展,TLC5615,是带有缓冲基准输入的,10,位电压输出型,D/A,转换器。器件可在单,5V,电源下工作,且具有上电复位功能。,TLC5615,的控制是通过三线串行总线进行,可使用的数字通信协议包括,SPI,、,QSPI,以及,Microwire,标准。低功耗,在,5V,供电时功耗仅,1.75mW,,数据更新速率为,1.2MHz,,典型的建立时间为,12.5us,。,TLC5615,广泛应用于电池供电测试仪表、数字增益调整、电池远程工业控制和移动电话等领域。,9.3.3.1 TLC5615,的内部结构和外部引脚,TLC5615,的内部结构如图,9.24,所示,其主要由,16,位移位寄存器、,
40、10,位,D/A,寄存器、,D/A,转换权电阻、基准缓冲器、控制逻辑和,2,倍程放大器等电路组成。,图,9.24 TLC5615,的内部结构,TLC5615,的管脚与,Maxim,公司的,MAX515,完全兼容,如图,9.25,所示。各管脚的功能介绍如下。,DIN,:串行数据输入脚,SCLK,:串行时钟输入脚,CS,:片选端,低电平有效,DOUT,:用于菊花链的串行数据,输出端,AGND,:模拟地,REFIN,:基准输入端,一般接,2V,到,VCC,2V,VCC,:电源端,一般接,+5V,图,9.18 TLC5615,的引脚图,9.3.3.2 TLC5615,的接口及应用,TLC5615,与,
41、AT89C52,的典型接口电路如图,9.26,所示。,TLC5615,通过固定增益为,2,的运放缓冲电阻网络,把,10,位数字数据转换为模拟电压。上电时,内部电路把,D/A,寄存器复位为,0,。其输出具有与基准输入相同的极性,表达式为,TLC5615,最大的串行时钟速率不超过,14MHz,,,10,位,DAC,的建立时间为,12.5us,,通常更新速率限制至,80kHz,以内。,TLC5615,的,16,位移位寄存器在,SCLK,的控制下从,DIN,引脚输入数据,高位在前,低位在后。,16,位移位寄存器中间的,10,位数据在上升沿的作用下打入,10,位的,D/A,寄存器供给,D/A,转换。其输
42、入的数据格式位为:,SPI,和,AT89C52,的接口传送,8,位字节形式的数据。因此,要把数据输入到,D/A,转换器需要两个写周期。,QSPI,接口具有从,8,位至,16,位的可变输入数据长度,可以在一个写周期之内装入好转换数据代码。当系统不使用,D/A,转换器时,最好把,D/A,寄存器设置为全,0,,这样可以使基准电阻阵列和输出负载的功耗降为最小。依据图,9.16,,,TLC5615,的一个简单的应用编程见下。,DIN BIT P1.4,;定义,I/O,口,SCLK BIT P1.7,CS5615 BIT P1.5,DataH EQU 30H,DataL EQU 31H,TLC5615:C
43、LR SCLK,;准备操作,TLC5615,CLR CS5615,;选中,TLC5615,MOV R7,#08H,MOV A,DataH,;装入高,8,位数据,LOOPH:LCALL DELAY,;延时,RLC A,;最高位移向,5615,MOV DIN,C,SETB SCLK,;产生上升沿,移入一位数据,LCALL DELAY,CLR SCLK,DJNZ R7,LOOPH,MOV R7,#08H,MOV A,DataL,;装入低,8,位数据,LOOPL:LCALL DELAY,;延时,RLC A,;最高位移向,5615,MOV DIN,C,SETB SCLK,;产生上升沿,移入一位数据,LC
44、ALL DELAY,CLR SCLK,DJNZ R7,LOOPL,SETB CS5615,;结束,5615,的操作,同时将转换数据代码存入,10,位,DA,寄存器,启动新一轮的,DA,转换,RET,9.3.4 AD549 8,位串行,A/D,的扩展,TLC549,是以,8,位开关电容逐次逼近,A/D,转换器为基础而构造的,CMOS A/D,转换器。它能通过三态数据输出和模拟输入与微处理器或外围设备串行接口。,TLC549,仅用输入,/,输出时钟(,CLK,)和芯片选择(,CS,)输入作数据控制,其最高,CLK,输入频率为,1.1MHz,。,TLC549,的内部提供了片内系统时钟,它通常工作在,
45、4MHz,且不需要外部元件。片内系统时钟使内部器件的操作独立于串行输入输出的操作,这种独立性使得控制硬件和软件只需关心利用,I/O,时钟读出先前转换结果和启动转换。,TLC549,片内有采样保持电路,其转换速率可达,40kHz,。,TLC549,的电源范围为,3,6V,,功耗小于,15mW,,总的不可调整误差为,0.5LSB,,能理想地应用于包括电池供电地便携式仪表的低成本、高性能系统中。,9.3.4.1,器件引脚及等效输入电路,(a),引脚;,(b),采样期间等效电路;,(c),保持期间等效电路,图,9.28 TLC549,的器件引脚与等效输入电路,TLC549,的管脚与,TLC540 8,
46、位,A/D,转换器以及,TLC1540 10,位,A/D,转换器兼容,如图,9.28a,所示。其中,基准端(,REF,,,REF,)为差分输入,可以将,REF,接地,,REF,接,Vcc,端,但要加滤波电容。,AIN,为模拟信号输入端,大于,REF,电压时转换为全“,1”,,小于,REF,电压时转换为全“,0”,。通常为保证器件工作良好,,REF,电压应高,REF,电压至少,1V,。,TLC549,在采样期间和保持期间的等效输入电路分别如图,9.28b,和图,9.28c,所示。对于采样方式,输入电阻约,1k,,采样电容约,60pF,;对于保持方式,输入电阻约,5M,。,9.3.4.3 TLC5
47、49,的接口及应用,TLC549,与,51,单片机的接口电路很简单,只要将,TLC549,的,DO,、,CLK,和,51,单片机的,I/O,口相接即可,图,9.30,给出了一种由,TLC549,和,89C51,构成的典型的数据采集电路。其中,,N1,、,R1,、,R2,、,C2,组成一阶低通滤波器;,C1,、,R3,可滤除直流;,R4,、,R5,是将双极性的模拟输入信号变成,0,5V,以适应,TLC549,的单极性要求。,图,9.30 TLC549,典型的数据采集电路,利用前面第,2,节所给出的,SPI,的模拟子程序,编程如下。,SCK BIT P1.6,;初始化时钟线,MISO BIT P1.5,;初始化数据线,CLR PF0,;初始时钟电平为,0,CLR PF1,;设定上升沿有效,MOV SS,#01111111B,;初始化片选线,LCALL SPIR,;调用,SPI,总线的模拟读子程序,MOV Buff,A,;保存采样数据,






