《单片机嵌入式系统原理及应用8051单片机系统扩展与接口技术》由会员分享,可在线阅读,更多相关《单片机嵌入式系统原理及应用8051单片机系统扩展与接口技术(222页珍藏版)》请在金锄头文库上搜索。
1、第第9章章8051单片机系片机系统扩展与接口技展与接口技术1单片机应用系统必然包含合适的外围器件。外围器件与单片机的接口是单片机应用系统至关重要的环节。本章主要讲述8051单片机与常见的程序存储器、数据存储器、数字I/O通道的接口技术,模拟输入输出通道和单片机的接口技术。2本章内容9.18051程序存储器的扩展9.28051数据存储器扩展9.38051的I/O接口扩展9.4键盘与显示器接口9.58051单片机和A/D及D/A的接口9.6单总线1-Wire接口的温度传感器DS18B20及其应用39.18051程序存储器的扩展存储器分类:只读存储器(ROM):ROM中的信息一旦写入之后,就不能随意
2、更改,特别是不能在程序运行的过程中写入新的内容,故称之为只读存储器。ROM又分 为 : 掩 膜 ROM、 可 编 程 ROM、 EPROM、E2PROM、FlashROM等。随机存储器(RAM):RAM在程序运行过程中可根据需要随时更改其中的内容,断电后不能保存数据。E2PROM(EEPROM):是一种用电信号编程、电信号擦除的ROM芯片,写入的速度比较慢,但断电后能够保存信息。4FlashROM:又称闪烁存储器,是非易失性、电擦除型存储器。其特点是可快速在线修改其存储单元中的数据,标准改写次数可达1万次。与E2PROM相比,FlashROM的读写速度都很快。由于其性能比E2PROM要好,所以
3、目前大有取代E2PROM的趋势。MCS-51系列单片机具有64KB的程序存储器空间,其中8051、8751型单片机含有4KB的片内程序存储器,而8031型单片机则无片内程序存储器。当采用8051、8751型单片机而程序超过4KB,或采用8031型单片机时,就需要进行程序存储器的扩展。59.1.18051外部程序存储器的操作时序图9-1是与访问外部程序存储器有关的时序图。其中a)是没有访问外部数据存储器,即没有执行MOVX类指令情况下的时序;b)是访问外部数据存储器操作时的时序。CPU由外部程序存储器取指时,16位地址的低8位PCL由P0输出,高8位PCH由P2输出,而指令由P0输入。678在不
4、执行MOVX指令时,P2口专用于输出PCH,P2有输出锁存功能,可直接接至外部存储器的地址端,无需再加锁存。P0口则作分时复用的双向总线,输出PCL,输入指令。在这种情况下,每一个机器周期中,允许地址锁存信号ALE两次有效,在ALE由高变低时,有效地址PCL出现在P0总线上,低8位地址锁存器应在此时把地址锁存起来。同时也是每个机器周期两次有效,用于选通外部程序存储器,使指令送到P0总线上,由CPU取入。9当系统中接有外部数据存储器,执行MOVX指令时,时序有些变化,见图b)若执行的是MOVXDPTR指令,则此地址就是DPL值(数据指针的低8位),同时,在P2口出现有效的DPH值(数据指针的高8
5、位);若执行的是MOVXRi指令,则此地址就是Ri的内容,同时在P2口线上出现的将是专用寄存器P2(即口内锁存器)的内容。109.1.2并行EEPROM及其扩展AT28C64B是ATMEL公司生产的高速并行EEPROM,存储容量8k8bit;读取时间70ns,最大页写入时间10ms;工作电流为40mA,待机电流100A;硬件和软件数据保护;数据轮询和触发位用于写结束检测;可靠性高:100000次擦写,数据可保存10年;单电源供电,其引脚和内部框图如图9-2:11a)引脚图b)内部结构框图图9-2 AT28C64的引脚和内部结构框图A0A12:地址线;I/O0-I/O7:数据的输入输出;:芯片使
6、能,低电平有效;:输出使能,低电平有效;:写使能,低电平有效。12对AT28C64的读写对AT28C64的读写和SRAM相同,无非是写入时间略长。在写入命令发出后,需要判断写入过程是否结束。工程上常采取延时的方法或查询I/O7,也就是所谓的轮询功能。轮询功能是指在28C64写入期间,如果读取I/O7上的数据,则得到最后一次写入数据的补码,即如果在I/O7写入的数据为逻辑“1”,则读出的数据为“0”;反之,如果在I/O7写入的数据为逻辑“0”,则读出的数据为“1”。当写入过程结束,则从I/O7引脚读出的数据是真实的写入数据。1328C64和89S52的连接28C64既可作为外部程序存储器,又可作
7、为数据存储器。在写入期间,单片机通过查询I/O7引脚状态,来判断写入过程是否结束。28C64的片选信号由P2.7提供。因28C64可作为外部程序存储器和外部数据存储器合并使用,故将信号和加到与门74HC08上,并将其输出与28C64的数据输出允许信号相连。14图9-3AT89S52单片机和AT28C64的接口15例9-1 根据AT89S52单片机和AT28C64的接口电路,编写对AT28C64进行写操作的字程序。要写入的数据区取自源数据区。子程序的入口参数如下:R0:写入的字节计数器R1:28C64的低8位地址寄存器R2:AT28C64的高8位地址寄存器R3:源数据区首地址的低8位寄存器R4:
8、源数据区首地址的高8位寄存器R5:写入的数据16解:程序清单如下:WR1:MOV DP0L,R3MOV DP0H,R4;源数据区16位地址传输到;DPTR0中MOVXA,DPTR;取数据MOV R5,AINCDPTRMOV R3,DP0LMOV R4,DP0HMOV DP0L,R1MOV DP0H,R2;28C64地址传输到DPTR0中MOVXDPTR,A;将A的内容写入28C64H17 NOPNOPNOPWAIT:MOVXA,DPTR;读取最后一次写入的数据XRLA,R5JNZWAIT;写入的I/O7和读出的I/O7不相等;写入没有结束,等待INCDPTRMOVR1,DP0LMOVR2,DP
9、0HDJNZR0,WR1;未完成,循环RET189.1.3并行Flash存储器FM16W08及其扩展性能特点存储容量为64Kbit(即8k8byte);读写寿命为100亿次;掉电数据可保存38年;写数据无延时;读取时间为70ns;读周期约为130ns;低功耗,工作电流为12mA,待机电流仅为20;宽电压范围供电,2.7V5.5V;工作温度范围为-40+85;具有特别优良的防潮湿、防电击及抗震性能;与并行SRAM或E2PROM管脚兼容。19引脚定义A0A12:地址线,在的下降沿被锁定;DQ0DQ7 :数据输入输出线;:片选信号线,为低电平时,芯片被选中;:输出使能,低电平时,FM16W08把数据
10、送到总线;为高电平时,数据线为高阻态;:写使能,低电平时,总线的数据写入由A0A12确定的地址中。20图9-4FM16W08的引脚和内部结构框图21(1)读操作FW16W08的读操作一般在下降沿开始,这时地址位被锁存,存储器读周期开始,一旦开始,应使保持不变,一个完整的存储器周期可在内部完成,在访问时间结束后,总线上的数据变为有效。当地址被锁存后,地址值可在满足保持时间参数的基础上发生改变,这一点不象SRAM,地址被锁存后改变地址值不会影响存储器的操作。22符号VDD2.7Vto3.0VMinMaxVDD3.0Vto5.5VMinMax单位tCE8070nstCA8070nstRC145130
11、nstPC6560nstAS00nstAH1515nstOE1512nstHZ1515nstOHZ1515ns图9-5FM16W08的读时序和参数23(2)写操作FW16W08的写操作由和控制,地址在的下降沿锁存。控制写操作时,在开始写周期之前置0,即当有效时,应先为低电平。FRAM没有写延时,读与写访问时间是一致的,整个存储器操作一般在一个总线周期出现。因此,任何操作都能在一个写操作后立即进行,而不象E2PROM需要通过判断来确定写操作是否完成。24符号VDD2.7Vto3.0VMinMaxVDD3.0Vto5.5VMinMax单位tCA80807070nstPC6560nstWC14513
12、0nstAS00nstAH1515nstWS00nstWH015012nstDS40153015nstDH015015ns图9-6FM16W08的写时序和参数25(3)充电操作预充电操作是准备一次新访问存储器的一个内部条件,所有存储器周期包括一个存储器访问和一个预充电,预充电在脚为高电平或无效时开始,它必须保持高电平至少为最小的预充电时间,由于预充电在上升沿开始,这使得用户可决定操作的开始,同时该器件有一个为低电平必须满足的最大时间规范。26FlashFlash存储器存储器FM16W08FM16W08和和SRAMSRAM时序的区别:时序的区别:FRAM、SRAM外部引脚虽然相同,但读写时序有所
13、不同,编写对应的读写程序时,需要考虑其不同之处。图9-7FRAM和SRAM的选通信号274.FRAM和8051单片机的接口8051单片机的ALE引脚为地址锁存允许信号,访问单片机外部存储器时,该脚将输出一个负跳沿的脉冲以用于锁存16位地址的低8位。要保证对FM16W08的正确访问,必须注意两点:第一,FRAM的访问时间必须大于70ns;第二,ALE的高电平宽度必须大于60ns。28 图9-8AT89S52单片机和FM16W08的接口299.28051数据存储器扩展数据存贮器的扩展方法可分为:并行扩展:数据存储器的数据口和单片机的数据口P0相连,8051单片机每次可读入或输出8位数据。常见的数据
14、存储器芯片有6116、6264、62128等SRAM。串行扩展:串口数据存储器和单片机的接口方式为SPI总线或I2C总线,存储器的类型主要是EEPROM和Flash,主要用于保存一些数据或常数。309.2.1并行接口外部数据存贮器的操作时序31读并行接口外部数据存贮器的时序在第一个机器周期的S1,允许地址锁存信号ALE由低变高,开始了读周期。在S2状态,CPU把低8位地址送上P0总线,把高8位地址送上P2口(采用MOVXDPTR指令)。ALE的下降沿用来把低8位地址信息锁存到外部锁存器内。而高8位地址信息此后一直锁存在P2口上,无需再加外部锁存。在S3状态,P0总线驱动器进入高阻状态。在S4状
15、态,读控制信号变为有效,它使得被寻址的并行接口数据存贮器略过片刻后把有效的数据送上总线,当回到高电平后,被寻址的并行接口存贮器把其本身的总线驱动器悬浮起来,使P0总线又进入高阻状态。3233写并行接口外部数据存贮器的时序与上述类同。但写的过程是CPU主动把数据送上总线,故在时序上,CPU向P0总线送完被寻址存贮器的低8位地址后,在S3状态,就由送地址直接改为送数据上总线,其间总线上不出现高阻悬浮状态。在S4状态,写控制信号有效,选通被寻址的存贮器,稍过片刻,P0上的数据就写到被寻址的存贮器内了。349.2.28051单片机扩展并行接口外部数据存贮器SRAM扩展容量小于256B,用MOVXRi指
16、令访问外部SRAM,只用P0口传送8位地址;扩展容量大于256B,用MOVXDTPR指令访问外部SRAM,同时用P0和P2口传送16位地址,P0口传送低8位,P2口传送高8位。1.6264的引脚和操作方式6264是8k8位的静态随机存储器芯片,采用CMOS工艺制作,由单一+5V供电,额定功耗200mW,典型存取时间为200ns。为28脚双列直插式封装,其管脚如图9-10所示。35引脚操作方式(20)(2626)(2222)(2727)IO0IO7(1113),(1519)未选中(掉电)VIH任意任意任意高阻未选中(掉电)任意VIL任意任意高阻输出禁止VILVIHVIHVIH高阻读VILVIHV
17、ILVIHDOUT写VILVIHVIHVILDIN写VILVIHVILVILDIN图9-106264引脚排列和操作方式36图9-11扩展单片6264静态数据存储器电路37注意:扩展单片程序存储器时,片选端直接接地即可,因为系统中不会再有其它程序存储器芯片。但是扩展单片数据存储器时,其片选端能否直接接地则还须考虑应用系统中有无I/O口及外围设备扩展,如果有,则要统一进行片选选择。389.2.38051扩展SPI接口外部Flash数据存贮器FM25040B1.FM25040B的特点存储容量5128bits读写次数1012数据可保存38年写入无延迟总线频率最高可达20Mhz硬件可直接替代EEPROM
18、可运行在SPI的模式0和模式3硬件写保护和软件写保护待机电流4A,工作电流250A8引脚SOIC封装39引脚功能描述芯片选择SCK串行时钟输入挂起写保护SI串行数据输入SO串行数据输出2.FM25040B的结构和引脚图9-12FM25040B的内部结构和引脚排列40图9-12FM25040B的内部结构和引脚排列413.FM25040B的操作命令和操作时序命令操作码说明WREN0000_0110B置位写使能锁存(SetWriteEnableLatch)WRDI0000_0100B写禁止(WriteDisable)RDSR0000_0101B读状态寄存器(ReadStatusRegister)WR
19、SR0000_0001B写状态寄存器(WriteStatusRegister)READ0000_A011B读存储器数据(ReadMemoryData)WRITE0000_A010B写存储器数据(WriteMemoryData)42(1)置位写使能锁存器命令WRENFM25040B上电时禁止写操作。在任何写操作之前,必须发出WREN命令。在WREN命令发出之后允许发出写操作代码,包括写状态寄存器和写存储器命令。WREN操作使内部写使能锁存器被置位。状态寄存器的WEL表示锁存器的状态。WEL=1表示写允许。任何写操作的完成将自动清除写使能锁存器,如果没有新的WREN命令,则写操作无法进行。图9-1
20、3是WREN命令的时序图。43图9-13WREN命令的时序图44(2)写禁止命令WRDIWRDI命令禁止所有的写操作。在写操作被禁止的情况下,状态寄存器的WEL=0。图9-14是WRDI命令时序图。图9-14WRDI命令的时序图45(3)读状态寄存器命令RDSR读状态寄存器命令RDSR允许主器件校验状态寄存器的内容。状态寄存器提供了写保护当前状态。在RDSR命令之后,FM25040B返回单字节的状态寄存器内容。状态寄存器详细描述见“状态寄存器和写保护”。图9-15是RDSR命令时序图图9-15RDSR命令时序图46(4)写状态寄存器命令WRSRWRSR命令允许用户向单字节的状态寄存器做写操作而
21、确定写保护作用的范围或者不起保护作用。在发出WRSR命令之前,必须为高或者无效。在发出WRSR命令之前,WREN命令必须先发出。注意,WRSR命令是写操作,且执行完毕后将清除写使能锁存器,WRSR对应的总线时序图如图9-16所示。47图9-16WRSR命令的时序图48(5)状态寄存器和写保护FM25040B的写保护特点是多层次的。首先,在任何写操作之前,WREN命令必须发出。如果写命令已经发出,引脚和状态寄存器控制存储器的操作。如果为低,全部存储器被写保护;如果为高,存储器的写保护由状态寄存器决定。状态寄存器结构如表9-3所示。49其中,位4-7和位0为“0”,且不能被修改。注意,因为FRAM
22、存储器没有写延迟,存储器不会出向“忙”现象,因此将位0设为逻辑“0”,而在EEPROM中,位0的意义为。非易失的BP1和BP0表示写保护的区域。WEL表示写使能锁存器的状态,由WREN命令置位,由WRDI命令或写周期结束时(变高)清除。BP1和BP0是存储器模块写保护位,不同的BP1、BP0保护不同的存储器模块,表9-4为对应的保护范围。表9-3FM25040B的状态寄存器位位6543210名称名称000BP1BP0 WEL 050表9-4FM25040B的存储器写保护范围BP1BP0保护范围保护范围00无无01180H1FFH(高高1/4)10100H1FFH(高高1/2)11000H1FF
23、H(全部全部)表9-5FM25040B的写保护WEL被保护的存储器模块没保护的存储器模块状 态 寄存器0X被保护被保护被保护10被保护被保护被保护11被保护不保护不保护51(6)存储器的写操作和SPI总线的EEPROM不同,FM25040B能够以总线速度执行一系列的写操作,且不需要页寄存器,可执行任意数量的写操作。所有的存储器写操作均以操作命令WREN开始。然后,主器件发出写命令操作码。写命令操作码包括存储器地址的高位,操作码的位3对应于字节地址的A8;下一字节是存储器地址的低8位A7-A0。这样,9位地址确定了要写入数据的第一字节的地址。紧接着的字节是要写入的数据。数据的内部地址随主器件不断
24、发出的时钟增加而增加。如果最后一个地址达到1FFH,计数器将回归到0。写操作时首先发送数据的MSB。和EEPROM不同,FM25040B可以连续写入多个字节的数据,且每个字节在输入8个时钟后立即写入。在片选信号的上升沿结束一次写操作。图9-17是存储器写的时序图。52图9-17FM25040B的存储器写时序图53(7)存储器的读操作在片选信号的下降沿,主器件可以发出读操作指令码。操作码包括存储器地址的高位,紧接着的是存储器地址的低8位。这样,9位地址确定了要读出数据的第一字节的地址。在主器件输出完整地读操作码之后,SI被忽略。然后,主器件发出8个时钟脉冲,每个时钟脉冲对应于一位数据输出,数据的
25、内部地址随主器件不断发出的时钟增加而增加。如果地址到达1FFH,计数器回归000H。读首先读MSB。在片选信号的上升沿结束一次读操作。图9-18是存储器读的时序图。54图9-18FM25040B的存储器读时序图55(8)总线挂起命令HOLD引脚用于中断串行操作而不终止。若SCK=0,主器件将拉低,则当前操作暂停;若SCK=0,主器件将拉高,则恢复操作。必须在SCK=0时变化,而SCK则可在挂起状态器件变化。FM25040B和AT89S52的接口AT89S52没有SPI接口,可以用普通I/O口模拟SPI口,如图9-19所示。56图9-19AT89S52和FM25040B的接口579.38051的
26、I/O接口扩展9.3.1I/O接口的功能8051扩展的I/O接口电路主要应满足以下几项功能要求:1.实现和不同外设的速度匹配2.输出数据锁存和输入数据三态缓冲3.CPU的负载能力和外围设备端口选择问题589.3.2端口的编址1.独立编址方式独立编址就是把I/O地址空间和数据存储器地址空间分开进行编址。2.统一编址方式这种编址方式是把I/O端口的寄存器与数据存储器单元同等对待,统一进行编址。统一编址方式的优点是不需要专门的I/O指令,直接使用访问数据存储器的指令进行I/O操作,简单、方便且功能强。598051单片机使用的是统一编址方式,即I/O和外部数据存储器RAM是统一编址的,用户可以把外部6
27、4K字节的数据存储器RAM空间的一部分作为扩展的I/O接口的地址空间,每一个接口芯片中的一个功能寄存器(端口)的地址就相当于一个RAM存储单元,CPU可以象访问外部存储器RAM那样访问I/O接口芯片,对其功能寄存器进行读、写操作。609.3.3I/O数据的几种传送方式1.无条件传送无条件传送类似于单片机和外部数据存储器之间的数据传送,比较简单。当外设速度能和单片机的速度相比拟时,常常采用无条件传送方式。另外,当外设的工作速度非常慢,以致人们任何时候都认为它已处于“准备好”的状态时,也可以采用无条件传送方式。612.查询状态传送查询传送方式下,单片机需要I/O接口为外设提供状态和数据两个端口,单
28、片机通过状态口查询外设“准备好”后就进行数据传送。查询式传送的优点是通用性好,硬件连线和查询程序十分简单,但是效率不是很高。为了提高单片机对外设的工作效率,通常采用中断传送I/O数据的方式。623.中断传送方式中断传送方式是利用单片机本身的中断功能和I/O接口的中断功能来实现I/O数据的传送。采用中断方式可使单片机和外设并行工作。单片机只有在外设准备好后才中断主程序,而进入外设的中断服务程序,中断服务完成后又返回主程序继续执行。因此,采用中断方式可以大大提高单片机的工作效率。639.3.4可编程并行I/O芯片8255A8255A具有3个8位并行I/O口,称为PA口、PB口和PC口。其中PC口又
29、分为高4位和低4位,通过控制字设定可以选择三种工作方式:基本输入/输出;选通输入/输出;PA口为双向总线。 64D7D0:三态双向数据线,与单片机数据总线连接,用来传送数据信息;:片选信号线,低电平有效,表示芯片被选中;:读出信号线,低电平有效,控制数据的读出;:写入信号线,低电平有效,控制数据的写入;VCC:+5V电源;PA7PA0:A口输入/输出线;PB7PB0:B口输入/输出线;PC7PC0:C口输入/输出线;RESET:复位信号线。A1A0:地址线,用来选择8255A内部端口。1.8255A的引脚652.内部结构 包括三个并行数据输入/ /输出端口,两个工作方式控制电路,一个读/ /写
30、控制逻辑电路和8 8位数据总线缓冲器。(1)8255A的三个8位并行口 PAPA口:8 8位数据输出锁存器和缓冲器;一个8 8位数据输入锁存器。PBPB口:8 8位数据输出锁存器和缓冲器;一个8 8位数据输入缓冲器( (输入不锁存) )。 PCPC口:8 8位数据输出锁存器;一个8 8位数据输入缓冲器( (输入不锁存) )。 通常PAPA口、PBPB口作为输入输出口,PCPC口既可作为输入输出口,也可在软件的控制下,分为两个4 4位的端口,作为端口A A、B B选通方式操作时的状态控制信号。66图图9-21 8255A9-21 8255A的内部的内部的内部的内部结结构构构构图图9-20 825
31、5A9-20 8255A的引脚的引脚的引脚的引脚 67(2 2)工作方式控制 工作方式控制电路有两个, , 一个是A A组控制电路, , 另一个是B B组控制电路。 这两组控制电路共有一个控制命令寄存器, , 用来接收中央处理器发来的控制字。 A A组控制电路用来控制A A口和C C口的上半部分(PC7PC7PC4PC4)。B B组控制电路用来控制B B口和C C口的下半部分(PC3 PC3 PC0 PC0)。68(3 3)总线数据缓冲器总线数据缓冲器是一个三态双向8 8位缓冲器, , 作为 8255A 8255A 与系统总线之间的接口, , 用来传送数据、指令、控制命令以及外部状态信息。 (
32、4 4)读/ /写控制逻辑电路 读/ /写控制逻辑电路接收CPUCPU发来的控制信号 、 、 、RESETRESET、地址信号A1A1A0A0等, , 然后根据控制信号的要求, , 将端口数据读出, , 送送往往CPU或或将将CPU送送来来的的数数据据写写入入端端口口。各各端端口口的的工工作作状状态与与控制信号的关系如表9-6所示。69A1A0工作状态00010A口数据数据总线(读端口A)01010B口数据数据总线(读端口B)10010C口数据数据总线(读端口C)00100数据总线A口(写端口A)01100数据总线B口(写端口B)10100数据总线C口(写端口C)11100数据总线控制字寄存器
33、(写控制字)1数据总线为三态11010非法状态110数据总线为三态表9-6 8255A端口工作状态选择表708255A的工作方式(方式0,方式1,方式2)方式0:基本输入/输出方式这种方式不需选通信号。PA,PB和PC中任一端口都可以通过方式控制字设定为输入或输出。71方式1:选通输入/输出方式共有3个口,被分为两组。A组包括A口和PC7PC4,A口可由编程设定为输入或输出,PC7PC4作为输入/输出操作的选通信 号 和 应 答 信 号 。 B组 包 括 B口 和PC3PC0,这时C口作为8255A和外设或CPU之间传送某些状态信息及中断请求信号。72方式2:双向传送方式。只有A口有方式2,此
34、时,A口为8位双向传送数据口,C口的高5位PC7PC3用来作为指定A口输入/输出的控制联络线。733.工作方式选择控制字及C口置位/复位控制字(1)三种工作方式由写入控制字寄存器的方式控制字来决定。方式控制字的格式如图9-22所示。三个端口中C口被分为两个部分,上半部分随A口称为A组,下半部分随B口称为B组。其中A口可工作于方式0,1和2,而B口只能工作在方式0和1。例如,写入工作方式控制字95H,可将8255A编程为:A口方式0输入,B口方式1输出,C口的上半部分(PC7PC4)输出,C口的下半部分(PC3PC0)输入。74图9-228255A的方式控制字75(2)C口8位中的任一位,可用一
35、个写入控制口的置位/复位控制字来对C口按位置“1”或清“0”。这个功能主要用于位控。C口按位置位/复位控制字的格式如图9-23所示。例如,07H写入控制口,是PC3置1,08H写入控制口,PC4清0。76图9-23C口按位置位/复位控制字格式774.8255A的三种工作方式:方式0、方式1、方式2(1)8255A方式0,是基本的输入/输出工作方式。在这种方式下,三个端口都可以由程序设置为输入或者输出,没有固定的用于应答的联络信号。方式0基本功能如下:具有两个8位端口(A,B)和两个4位端口(C口的上半部分和下半部分);任何一个端口都可以设定为输入或者输出。各端口的输入、输出可构成16种组合;数
36、据输出时锁存,输入时不锁存;788255A的A口、B口和C口均可设定为方式0,并可根据需要规定各端口为输入方式或输出方式。例如,设8255A的控制字寄存器地址为0FF7FH(见图9-29),则令A口和C口高4位工作在方式0输出以及B口和C口低4位工作于方式0输入,初始化的程序为:MOVDPTR,#0FF7FH;控制字寄存器地址送DPTRMOVA,#83H;方式控制字83H送(A)MOVXDPTR,A;83H送控制字寄存器。79在方式0下,8051可对8255A进行I/O数据的无条件传送,例如,读一组开关的状态,控制一组指示灯的亮、灭。实现这些操作,并不需要应答联络信号。外设的I/O数据可在82
37、55A的各端口得到锁存和缓冲,也可以把其中的某几位指定为外设的状态输入位,CPU对状态位查询便可实现I/O数据的查询方式传送。因此,8255A的方式0属于基本输入/输出方式。80(2)8255A方式1,选通式输入/输出工作方式。A口和B口皆可独立地设置成这种工作方式。在方式1下,8255A的A口和B口通常用于传送和它们相连外设的I/O数据,C口用作A口和B口的应答联络线,以实现中断方式传送I/O数据。C口的PC7PC0应答联络线是在设计8255A时规定的,其各位分配见图9-24和图9-26,图中,标有I/O各位仍可用作基本输入/输出,不作应答联络线用。811)方式1输入当任何一个端口按照工作方
38、式1输入时,应答联络信号如图9-24所示,各应答联络信号的功能如下:选通输入,低电平有效。是由输入设备送来的输入信号。IBF:输入缓冲器满,高电平有效。表示数据已送入输入锁存器,它由信号的下降沿置位,由信号的上升沿复位。INTR:中断请求信号,高电平有效,由8255A输出,向CPU发中断请求。INTEA:口中断允许信号,由PC4的置位/复位来控制,INTEB由PC2的置位/复位来控制。82图9-248255A方式1输入联络信号83图9-25A口方式1输入工作示意图每个信号的发出者和承受者弄清各信号之间的因果关系8485下面以A A口口的的方方式式1 1输输入入为例(A口方式1输入工作示意图见图
39、9-25),介绍方式1输入的工作过程以及各控制联络信号的功能。当输入设备输入一个数据并送到PA7PA0上时,输入设备自动在选通输入线上发送一个低电平选通信号。8255A收到 上负脉冲后自动做两件事:一是把PA7PA0上输入数据存入A口的输入数据缓冲/锁存器;二是使输入缓冲器输出线IBFA变为高电平,以通知输入设备8255A的A口已收到它送来的输入数据。8255A同时检测到变为高电平、IBFA为高电平时使INTRA变为高电平,向CPU发出中断请求。CPU响应中断后,可以通过中断服务程序从A口的“输入数据缓冲/锁存器”读取输入设备送来的输入数据。当输入数据被CPU读走后,8255A撤消INTRA上
40、中断请求,并使IBFA变为低电平,以通知输入设备可以送下一个输入数据。862)当任何一个端口按照工作方式1输出时,应答联络信号如图9-26所示,各联络信号的功能如下:输出缓冲器满信号,低电平有效,是8255A输出给输出设备的联络信号。表示CPU已把输出数据送到指定端口,外设可以将数据取走。它由信号的上升沿置“0”(有效),由信号的下降沿置“1”(无效)。:外设响应信号,低电平有效。表示CPU输出给8255A的数据已由输出设备取走。87INTR:中断请求信号,高电平有效。表示数据已被外设取走,请求CPU继续输出数据。中断请求的条件是、和INTE(中断允许)为高电平,中断请求信号由的下降沿复位。I
41、NTEA:由PC6的置位/复位来控制。INTEB:由PC2的置位/复位来控制。图9-27为B口工作于方式1输出下的工作示意图88图9-26 方式方式1输出出联络信号信号89图9-27方式1选通输出示意图903)方式2只有A口才能设定。图9-28为方式2下的工作过程示意图。在方式2下,PA7PA0为双向I/O总线。当作为输入总线使用时,PA7PA0受和IBFA控制,其工作过程和方式1输入时相同;当作为输出总线使用时,PA7PA0受和控制,其工作过程和方式1输出时相同。只适用于A口,且C口提供固定的联络信号;当A口工作在方式2,B口可工作在方式0或1;C口没有被指定为联络信号的其他位可以工作在方式
42、0,可选择输入/输出。91图9-28A口在方式2下的工作示意图925.8051单片机和8255A的接口图9-29 AT89S52与与8255A 接口接口电路路93例例题1:要要求求8255A工工作作在在方方式式0,且且A口口作作为输入入,B口、口、C口作口作为输出,出,则样例程序如下:例程序如下:MOV A,#90H ;A口方式口方式0输入入,B口口,C口口输出的方式控制出的方式控制;字字AMOV DPTR,#0FF7FH ;控制寄存器地址控制寄存器地址DPTRMOVX DPTR,A ;方式控制字方式控制字控制寄存器控制寄存器MOV DPTR, #0FF7CH ;A口地址口地址DPTRMOVX
43、 A, DPTR ;从从A口口读数据数据MOV DPTR, #0FF7DH ;B口地址口地址DPTRMOV A, #DATA1 ;要要输出的数据出的数据DATA1AMOVX DPTR, A ;将将DATA1送送B口口输出出MOV DPTR, #0FF7EH ;C口地址口地址DPTR MOV A, #DATA2 ;DATA2AMOVX DPTR, A ;将将DATA2送送C口口输出出948255A的C口8位中的任一位,均可用指令来置位或复位。1)如果想把C口的PC5置1,相应的控制字为00001011B=0BH,程序如下:MOVDPTR,#FF7FH;控制口地址DPTRMOVA,#0BH;控制字
44、AMOVXDPTR,A;控制字控制口,PC5=12)如果想把C口的第6位PC5复位,相应的控制字为00001010B=0AH,程序如下:MOVDPTR,#0FF7FH;控制口地址DPTRMOVA,#0AH;控制字AMOVXDPTR,A;控制字送到控制口PC5=095例题9-2:图9-30是AT89S52扩展8255A与打印机接口的电路。8255A的片选线为P0.7,打印机与AT89S52采用查询方式交换数据。打印机的状态信号输入给PC7,打印机忙时BUSY=1,打印机的数据输入采用选通控制,当出现负跳变时数据被打入,要求编写向打印机输出80个数据的程序。设8255A的A、B、C和控制寄存器的口
45、地址分别为:7CH、7DH、7EH和7FH。8255A的方式1中为低电平有效,而打印机要求下降沿选通。所以8255A采用方式0,由PC0模拟产生信号。因PC7输入,PC0输出,则方式选择命令字为:10001110B=8EH。 96图9-30AT89S52扩展8255A与打印机接口的电路97自内部RAM20H单元开始向打印机输出80个数据的程序如下:MOVR0,#7FH;R0指向控制口MOVA,#8EH;方式控制字为8EHMOVXR0,A;送方式控制字MOVR1,#20H;送内部RAM数据块首地址至指针R1MOVR2,#50H;置数据块长度LP:MOVR0,#7EH;R0指向C口LP1:MOVX
46、A,R0;读PC7连接BUSY状态JBACC.7,LP1;查询等待打印机MOVR0,#7CH;指向A口MOVA,R1;取RAM数据MOVXR0,A;数据输出到8255A口锁存INCR1;RAM地址加198MOVR0,#7FH;R0指向控制口 MOVA,#00H ;PC复位控制字 MOVXR0,A;PC00,产生下降沿 MOVA,#01H;PC0置位控制字 MOVXR0,A;PC0=1,产生上升沿 DJNZR2,LP;未完,则反复999.3.5用串行口扩展并行I/O口74LS165是 8位 并 行 置 入 移 位 寄 存 器 ,TXD(P3.1)作为移位脉冲输出端与所有74LS165的移位脉冲输
47、入端CLK相连;RXD(P3.0)作为串行输入端作74LS165的串行输出端QH相连;P1.0用来控制74LS165的移位与置入而同相连;74LS165的时钟禁止端(15脚)接地,表示允许时钟输入。当扩展多个8位输入口时,两芯片的首尾(QH与SIN)相连。100图9-31 9-31 利用串行口扩展输入口101下面的程序是从16位扩展口读入5组数据(每组二个字节),并把它们转存到内部RAM20H开始的单元中。MOVR7,#05H;设置读入组数MOVR0,#20H;设置内部RAM数据区首址START:CLRP1.0;并行置入数据=0SETBP1.0;允许串行移位,=1MOVR1,#02H;设置每组
48、字节数,即外扩;74LS165的个数RXDATA:MOVSCON,#00010000B;设串行口方式0,;允许接收;启动接收过程102WAIT:JNBRI,WAIT ;未接收完一帧,循环等待CLRRI ;清RI标志,准备下次接收MOVA,SBUF ;读入数据MOVR0,A;送至RAM缓冲区INCR0;指向下一个地址DJNZR1,RXDATA;未读完一组数据,继续DJNZR7,START;5组数据未读完重新并行置入;对数据进行处理1039.4键盘与显示器接口9.4.1键盘接口键盘实际上是由排列成矩阵形式的一系列按键开关组成,用户通过键盘可以向CPU输入数据、地址和命令。键盘按其结构形式可分为:编
49、码式键盘和非编码式键盘两类。单片机系统中普遍使用非编码式键盘,这类键盘主要解决以下几个问题:键的识别;如何消除键的抖动;键的保护。1041.1.非编码式键盘工作原理 非编码式键盘识别按键的方法有两种: : 一是行扫描法, , 二是线反转法。1)1)行扫描法通过行线发出低电平信号, , 如果该行线所连接的键没有按下的话, , 则列线所接的端口得到的是全“1 1“信号, , 如果有键按下的话, , 则得到非全“1 1“信号。为了防止双键或多键同时按下, , 往往从第0 0行一直扫描到最后1 1行, , 若只发现1 1个闭合键, , 则为有效键, , 否则全部作废。 找到闭合键后, , 读入相应的键
50、值, , 再转至相应的键处理程序。1052)线反转法 线反转法也是识别闭合键的一种常用方法, , 该法比行扫描速度快, , 但在硬件上要求行线与列线外接上拉电阻。 先将行线作为输出线, , 列线作为输入线, , 行线输出全“0”0”信号, , 读入列线的值, , 然后将行线和列线的输入输出关系互换, , 并且将刚才读到的列线值从列线所接的端口输出, , 再读取行线的输入值。那么在闭合键所在的行线上值必为 0 0。这样, , 当一个键被按下时, , 必定可读到一对唯一的行列值。106图9-328255A扩展的I/O口组成的行列式键盘107;键盘接口汇编语言子程序:若键闭合,键值存入(A)中,键值
51、的计算公式是:键值=行首键号列号;若无键闭合,则(A)=0FFHPA8255EQU7FFCH ;8255A的A口地址PB8255EQU7FFDH ;8255A的B口地址PC8255EQU7FFEH ;8255A的C口地址CC8255EQU7FFCH ;8255A的控制口地址KEY1:ACALLKS1 ;调用判断有无键按下子程序JNZLK1;有键按下时,(A)0转消颤延时AJMPKEY1;无键按下返回LK1:ACALLT12ms;调12ms延时子程序ACALLKS1;查有无键按下,若有则为键真实按JNZ LK2;键按下(A)0转逐列扫描AJMPKEY1;不是键按下返回LK2:MOVR2,#0FE
52、H;首列扫描字入R2MOVR4,#00H;首列号入R4108LK4:MOVDPTR,#PB8255;列扫描字送至8255PB口MOVA,R2MOVXDPTR,AINCDPTR;指向8255PC口MOVXA,DPTR;8255PC口读入行状态JBACC.0,LONE;第0行无键按下,转查第1行MOVA,#00H;第0行有键按下,该行首键号;#00H(A)AJMPLKP;转求键号LONE:JBACC.1,LTWO;第1行无键按下,转查第2行MOVA,#08H;第1行有键按下,该行首键号;#08H(A)AJMPLKP109LTWO:JBACC.2,LTHR;第2行无键按下,转查第3行MOVA,#10
53、H;第2行有键按下,该行首键号;#10H(A)AJMPLKPLTHR:JBACC.3,NEXT;第3行无键按下,改查下一列MOVA,#18H;第3行有键按下该行首键号;#18H(A)LKP:ADDA,R4;求键号=行首键号列号PUSHACC;键号进栈保护LK3:ACALLKS1;等待键释放JNZLK3;未释放,等待POPACC;键释放,键号ARET;键扫描结束,出口状态(A)=键号110NEXT:INCR4;指向下一列,列号加1MOVA,R2;判断8列扫描完没有?JNBACC.7,KND;8列扫描完,返回RLA;扫描字左移一位,转变为下一列扫描字MOVR2,A;扫描字入R2AJMPLK4;转下
54、一列扫KND: AJMPKEY1;判断有没有键按下111;KS1KS1为判键闭合的子程序,有键闭合时(A)0(A)0KS1:MOVDPTR,#PB8255;指向PB口MOVA,#00H;全扫描字#0HMOVXDPTR,A;全扫描字入PB口INCDPTR;指向PC口MOVXA,DPTR;读入PC口行状态CPLA;变正逻辑,以高电平表示有键按下ANLA,#0FH;屏蔽高4位RET;出口状态,(A)0时有键按;T12msT12ms延时子程序,执行一遍的时间约12ms12msT12ms:MOVR7,#18H;延迟12ms子程序TM:MOVR6,#0FFHDJNZR6,$DJNZR7,TMRET1129
55、.4.2七段式LED显示器接口1.LED显示器结构与原理图9-337段LED数码显示器113代码位D7D6D5D4D3D2D1D0显示段dpgfedcba7段LED显示器各段码位的对应关系如下:114字型共阳极编码共阴极编码字型共阳极编码共阴极编码0C0H3FH990H6FH1F9H06HA88H77H2A4H5BHB83H7CH3B0H4FHCC6H39H499H66HDA1H5EH592H6DHE86H79H682H7DHF84H71H7F8H07H灭FFH00H880H7FHBFH40H表9-7七段LEDLED字形编码表1152.七段式LED显示器接口电路图9-328255A扩展的I/O
56、口组成的行列式键盘显示器接口电路11689S52RAM中有6个显示缓冲单元79H-7EH,分别存放6位显示器的显示数据。8255A的A口扫描输出总有一位为高电平,8255A的B口输出相应位的显示数据的段数据,使某位显示出一个字符,其余位为暗,依次改变A口输出的高电平位及B口输出对应的段数据,6位显示器就显示出缓冲器的显示字符。显示程序流程如右图所示:图9-34动态显示汇编语言子程序流程图117和图9-33对应的动态显示程序清单如下:DIR:MOVR0,#79H;显示缓冲区首址送R0MOVR3,#01H;使显示器最右边位亮MOVA,R3LD0:MOVDPTR,#7FFCH;扫描值送PA口MOVX
57、DPTR,AINCDPTR;指向PB口MOVA,R0;取显示数据ADDA,#0DH;加上偏移量118MOVCA,A+PC ;取出字形MOVXDPTR,A;送出显示ACALLDL1;延时INCR0;缓冲区地址加1MOVA,R3JB ACC.5,LD1 ;扫到第6个显示位了吗?RL A;没有,R3左环移一位,扫描下一个显示位MOVR3,AAJMPLD0LD1:RETRET119;显示段码表DSEG0:DB3FH,06H,5BH,4FH,66H,6DHDSEG1:DB7DH,07H,7FH,6FH,77H,7CHDSEG2:DB39H,5EH,79H,71H,00H,73HDL1: MOVR7,#0
58、2H;延时子程序DL:MOVR6,#0FFHDLA:DJNZR6,DLADJNZR7,DLRET1209.4.3LED点阵接口发光二极管点阵(LEDdotmatrix)用于显示复杂的字符、图形、汉字。通过单片机控制点阵的引脚来实现特定圆点的点亮。图图9-35 9-35 发发光二极管点光二极管点光二极管点光二极管点阵阵图9-36LED点阵的显示1211.发光二极管点阵的结构 (a) (a)共阳型 (b)(b)共阴型图9-378888发光二级管点阵内部结构图122设使用的是共阳型点阵,对字母T进行编码,用高电平1代表点亮的LED,低电平0代表熄灭的,则可以得到字母T在“横向上”的编码,转换成十六进
59、制之后为 0FFH、10H、10H、10H、10H、10H、10H和10H。这些编码就是字母T的十六进制编码,如果向LED点阵的P0口输入0FFH并向P2.0口输入低电平,则LED点阵上将显示出图9-38中字母T的最上一行数据。接着,向LED点阵的P0口输入10H,而向P2.1口输入低电平,则显示的是图9-38中字母T的第二行数据。按照这种方法,在LED点阵的P0口输入数据的同时,在P2口的某一位输入低电平,这样扫描一遍之后就可以在点阵上看到字母T。123 图9-38共阳极显示字母T T的点阵示意图1242.单个88的LED点阵与单片机的连接图9-39共阳型共阳型88发光二极管点光二极管点阵与
60、与单片机的片机的连接接1259.4.4字符LCD接口1.字符LCD 液晶显示屏(LCD)(LCD)是智能仪器仪表、智能设备常用的另外一种显示设备,消耗电流小,控制简单,在便携式仪器和设备如移动电话、计算器、台式/ /笔记本计算机显示器等场合得到广泛应用。字符LCDLCD根据所能显示的字符的个数多少而提供不同的器件以供开发时选用。126图9-40为字符162液晶屏,162表示该LCD能显示两行字符,每行能显示16个字符,包括英文大写字母、小写字母、标点符号和常用符号等。图9-40162的字符液晶屏127字符液晶屏是由一个一个的小显示点阵构成的,如图9-41所示,162字符液晶屏有32个小显示点阵
61、,分布成2行,每行16个,图9-41显示了字母J和S的小显示点阵的放大图。每一个小显示点阵由57的点阵组成,小显示点阵之间在显示屏上有一定的距离,如果不留这一个小的空隙,那字符与字符之间会因为贴得太紧而影响美观。128图9-41162字符液晶屏中的小显示点阵1292.单片机与字符LCD的硬件连接图9-42字符液晶屏与单片机的接口电路图130162的字符LCD有16个引脚,其功能描述如下:VCC、VSS、Vee(第2、1、3引脚):电源端。VCC与VSS分别与+5V和GND相连,为LCD工作电源。Vee是LCD对比度调节引脚,其电位由一个电位器控制,调节电位器调整Vee引脚的电压,从而调节了LC
62、D的对比度。RS(第4引脚):命令/数据选择线。当RS=0时,从DB0DB7进入LCD的信号为命令;当RS=1时,从DB0DB7进入LCD的信号为显示数据。131R/(第5引脚):读/写控制线。R/=0时,写数据;R/=1时,读数据。E(第6引脚):LCD使能端。该引脚控制LCD从数据线上将数据读入LCD。当该引脚上的电位由1向0变化时,DB0DB7的数据被读入LCD。DB0DB7(第714引脚):数据线。132+LED、-LED(第15、16引脚):背光供电端。给+LED通过一个2030的电阻供+5V,-LED接GND,液晶屏的背光点亮,这样在光线很暗的情况下也能看到液晶屏的显示内容。当然,
63、点亮背光会提高系统功耗。如果不需要背光可以将这两个管脚悬空。图9-43 LCD背光的控制方法1333.“Hello,world!”字符LCD的程序控制下面通过在162的LCD上显示“Hello,world!”,学习字符LCD的程序控制方法。LCD的RS引脚是命令/数据选择线,从DB0DB7向LCD送入命令之前,需要将RS引脚接低电平,此时出现在DB0DB7上的信号被当成是命令。同时,R/引脚也接低电平,LCD接受命令的写入。表9-8为字符液晶屏命令集。图9-44162162的LCDLCD上显示“HelloHello,world!”world!”13406H光标右移光标向右移动1位05H画面右移
64、显示画面向右移动07H画面左移显示画面向左移动08H关闭显示显示、光标、闪烁关闭0AH打开光标只打开光标,显示、闪烁关闭0CH打开显示只打开显示,光标、闪烁关闭0EH光标不闪烁打开光标,光标不闪烁0FH光标闪烁打开显示和光标,光标闪烁10H光标位置左移光标位置向左移动14H光标位置右移光标位置向右移动18H整个画面左移整个显示画面左移1位1CH整个画面右移整个显示画面右移1位80H光标回到第1行开头强制光标回到第1行开头C0H光标回到第2行开头强制光标回到第2行开头38H显示设定设定显示为2行,57点阵DB0DB7命令命令解释01H清屏清除液晶屏显示的数据02H归位光标、画面回到起始位置04H
65、光标左移光标向左移动1位表9-8 字符液晶屏命令集135162液晶屏系统显示数据“Hello,world”之前,需要向DB0DB7,也就是单片机的P1口发布如下命令:MOVP1,#01H;清屏MOVP1,#38H;显示设定,显示两行字符MOVP1,#0FH;打开显示和光标,光标闪烁MOVP1,#06H;光标右移MOVP1,#80H;光标回到第1行的开头MOVP1,#0C0H;光标回到第2行的开头136;创建常量RS、RW、E,提高程序的可读性RSBIT P3.3;RS=P3.3RWBITP3.4;RW=P3.4EBITP3.5;E=P3.5ORG0000H;起始地址00H;主程序段,进行显示前
66、的设置,调用显示子程序START:MOVP1, #01H;清屏LCALLLOAD;调用命令装载子程序MOVP1,#38H;显示设定,显示两行LCALLLOAD137MOVP1,#0FH;打开显示和光标,光标闪烁LCALLLOADMOVP1,#06H;光标右移LCALLLOADMOVP1,#80H;光标会到第1行的开头LCALLLOADMOVDPTR,#TABLE_1;DPTR指向TABLE_1LCALLDISPLAY;调用液晶屏显示字程序MOVP1,#0C0H;光标会到第2行的开头LCALLLOAD138MOVDPTR,#TABLE_2;DPTR指向TABLE_2CALLDISPLAY ;调用
67、液晶屏显示字程序JMP$;停机LOAD:;命令装载子程序,对液晶屏下命令CLRRS;(RS)=0,DB0DB7上的信号作为命令使用CLRRW ;(RW)=0,写数据CLRE;(E)=0,E引脚电平由1变0,数据被读入LCALLDELAY;延时SETBE;E置1,屏蔽DB0DB7的数据RET;返回139;显示子程序,对液晶屏进行数据显示DISPLAY:MOVR0,#00H;取数据表时,用R0为指针REFETCH:MOVA,R0;(ACC)=(R0)MOVCA,A+DPTR;ACC装载数据表中;的数据LCALLSEND_DATA;调用显示数据发送子程序INCR0;R0增加1CJNEA,#88H,R
68、EFETCHRET140SEND_DATA:;显示数据发送子程序MOVP1,A;显示数据从P1口送出SETBRS;(RS)=1,DB0DB7上的信号作显示为;数据使用CLRRW;(RW)=0,写数据;(E)0,E引脚电平由1变0,DB0DB7数据被读入CLRELCALLDELAY;延时SETBE;E置1,屏蔽DB0B7的数据RET;返回DELAY:(略)TABLE_1:DBHello,88H;数据表TABLE_2:DBWorld!,88H;数据表1419.58051单片机和A/D及D/A的接口实现模拟量转换成数字量的器件称为模数转换器(ADC),数字量转换成模拟量的器件称为数模转换器(DAC)
69、。A/D、D/A转换器件按位数分类主要有8位、10位、12位、16位以及更高的位数;按总线接口方式分类有并行总线接口、串行总线(I2C、SPI、1Wire)。1429.5.18051与DAC0832的接口1.DAC0832引脚和逻辑结构各引脚功能如下:DI0DI7为8位数字信号输入端,与CPU数据总线相连,用于输入CPU送来的待转换数字量,DI7为最高位。:片选端,低电平有效。ILE:数据锁存允许控制端,高电平有效。:第一级输入寄存器写选通控制,低电平有效,当=0,ILE1、=0时,数据信号被锁存到第一级8位输入寄存器中。143:数据传送控制,低电平有效。:DAC寄存器写选通控制端,低电平有效
70、,当 =0,=0时,输入寄存器状态传入8位DAC寄存器中。Iout1:D/A转换器电流输出1端,输入数字量全“1”时,Iout1最大,输入数字量全为“0”,时,Iout1最小。Iout2:电流输出2端,Iout1+Iout2=常数。Rfb:外部反馈信号输入端,内部已有反馈电阻,根据需要也可外接反馈电阻。144图9-45DAC0832的引脚图9-469-46DAC0832原理框图VCC:电源输入端,可在+5+15V范围内。VREF:参考电压(也称基准电压)输入端,电压范围(-10+10V)之间。DGND:数字信号接地端。AGND:模拟信号接地端,最好与参考电压共地。1452.DAC0832的应用
71、 (1)(1)DACDAC用作单极性电压输出(2)(2)DACDAC用作双极性电压输出(3)(3)DACDAC用作程控放大器3.8051与DAC0832的接口电路 80518051与DAC0832DAC0832接口时,可以有三种连接方式:单缓冲方式双缓冲方式直通方式146单缓冲方式:此方式适用于只有一路模拟量输出,或有几路模拟量输出但并不要求同步的系统。 图9-47单极性的DAC0832(单缓冲方式)147三角波程序:ORG2000HSTART:MOVR0,#0FEHMOVA,#00HUP:MOVXR0,AINCA JNZUPDOWN:DECA MOVXR0,A JNZDOWNSJMPUP14
72、8矩形波程序:ORG2000HSTART:MOVR0,#0FEHLP:MOVA,#data1MOVXR0,A;置矩形波上限电平LCALLDELAY1;调用高电平延时程序MOVA,#data2MOVXR0,A;置矩形波下限电平LCALLDELAY2;调用低电平延时程序SJMPLP;重复149锯齿波程序:ORG2000H START: MOVR0,#0FEH;D/A地址R0MOVA,#00H ;数字量A LP:MOVXR0,A;数字量送D/A转换器INCA;数字量逐次加1AJMPLP150双缓冲同步方式:对于多路D/A转换,要求同步进行D/A转换输出时,必须采用此种同步方式。完成两路D/A同步输出
73、的程序如下:MOVDPTR,#0DFFFH;指向0832()输入锁存器MOVA,#data1MOVXDPTR,A;data1送入0832()输入锁存器MOVDPTR,#0BFFFH;指向DAC0832()输入锁存器MOVA,#data2MOVXDPTR,A;data2送入0832(2)输入锁存器MOVDPTR,#7FFFH;同时启动0832(1)、0832(2)MOVXDPTR,A;完成D/A转换输出151 图9-508051和两片DAC0832的接口(双缓冲)152设8051内部RAM中有两个长度为20的数据块,其起始地址分别为Addr1和Addr2,下面的程序把 Addr1和 Addr2中
74、 数 据 分 别 从 1#和2#DAC0832输出。其中,0区工作寄存器,区的R1指向Addr1;1区工作寄存器区R1指向Addr2;0区工作寄存器区的R2存放数据块长度;0#和1#工作寄存器区的R0指向DAC端口地址。153相应程序为:ORG2000HDTOUT:MOVR1,#Addr1;0区R1指向Addr1MOVR2,#20;数据块长度送0区R2SETBRS0;转入1工作寄存器区MOVR1,#Addr2 ;1区R1指向Addr2CLRRS0;返回0区工作寄存器区NEXT:MOVR0,#0FDH;0区R0指向1#;DAC0832数字量口MOVA,R1;Addr1中数据送MOVXR0,A ;
75、Addr1中数据送1#;DAC0832INCR1;修改Addr1指针0区R1SETBRS0;转入1区154MOVR0,#0FEH;1区R0指向2#DAC0832数字量口MOVA,R1;Addr2中数据送AMOVXR0,A;Addr2中数据送2#DAC0832INCR1;修改Addr2指针1区R1INCR0;1区R0指向DAC的启动D/A口MOVXR0,A;启动DAC工作CLR RS0;返回0区DJNZR2,NEXT;若未完,则跳NEXTSJMPDTOUT;若送完,则循环END1559.5.28051和ADC器件接口A/D转换器用以实现模拟量向数字量的转换。按转换原理可分为4种:计数式、双积分式
76、、逐次逼近式以及并行式A/D转换器。1.ADC0809ADC0809是典型的8位8通道逐次逼近式A/D转换器,采用CMOS工艺制造。其芯片为28引脚双列直插式封装,引脚功能如下:156(1)IN7IN0:模拟量输入通道。(2)ADDA、ADDB、ADDC:模拟通道地址线。(3)ALE:地址锁存信号。(4)START:转换启动信号。(5)D7D0:数据输出线。(6)OE:输出允许信号。(7)CLK:时钟信号。(8)EOC:转换结束状态信号。(9)VCC:+5V电源。157(10)REF()、REF(-):参考电压。通常,REF()和电源VCC一起接到基准电压5.12V(或5V)上,REF(-)接
77、在地端GND上。此时最低位所表示的输入电压值为:REF(+)和REF(-)也不一定要分别接在VCC和GND上,但要满足下列条件158a)ADC0809引脚b)ADC0809在系统中的典型连接方法图9-51ADC0809引脚及其在系统中的典型连接方法159对应通路通路地址地址ADDCADDBADDAIN0IN1IN2IN3IN4IN5IN6IN7000011110011001101010101表表9-9ADC0809输入通道入通道选通地指表通地指表1602.ADC0809与8051的接口图9-52ADC0809与8051的接口161 电路连接主要涉及两个问题, ,一个是8 8路模拟信号的通道选择
78、, ,另一个是A/DA/D转换完成后转换数据的传送。(1)8路模拟通道选择 ADDAADDA、ADDBADDB、ADDCADDC分别接系统地址锁存器提供的末3 3位地址, ,只要把3 3位地址写入08090809中的地址锁存器, ,就实现了模拟通道选择。162启动A/D转换只需使用1条MOVX指令。在此之前,要将P2.0清0并将末3位与所选择的通道号相对应的口地址送入数据指针DPTR中。例如要选择IN0通道时,可采用如下两条指令,即可启动A/D转换:MOVDPTR,0FE00H;送入0809的口地址MOVXDPTR,A;启动A/D转换(IN0)1632.转换数据的传送 A/D转换后得到的数据为
79、数字量,这些数据应传送给单片机进行处理。数据传送的关键问题是如何确认A/D转换的完成,只有确认数据转换完成后,才能进行传送。通常可采用下述3种方式。1)定时传送方式对于一种A/D转换器来说,转换时间作为一项技术指标是已知的和固定的。2)查询方式A/D转换芯片有表示转换结束的状态信号,例如ADC0809的EOC端。3)中断方式如果把表示转换结束的状态信号(EOC)作为中断请求信号,那么,便可以中断方式进行数据传送。164A/DA/D转换应用举例:转换应用举例:对图9-52的接口,可编出相应的程序。在主程序中要对外部中断0进行预置,然后启动ADC0809进行A/D转换。设由IN0路开始,8路模拟量
80、轮流输入。转换结束后,转入中断服务子程序,把转换结果读入8051的累加器,并存入相应缓冲存储单元50H-57H,再由主程序对这些数据进行处理或移入外部RAM各自的缓冲区中。转换程序如下:165ORG2000H SETBIT0;置为降沿触发SETBEA;总中断开放SETBEX0;开放中断;启动ADC0809MOVDPTR,#4100H;ADC0809口地址MOVR0,#50H;R0作存数缓冲器指针MOVR1,#00H;R1作通道数指针MOVA,R1;从IN0路开始MOVXDPTR,A;启动转换;继续主程序,等待中断166ORG0003H;中断向量地址AJMPRDDAT;转移至读入数据处RDDAT
81、:MOVXA,DPTR;读入数据MOVR0,A;存入缓冲器INCR0;增量缓冲器指针INCR1;指向下一通道REPEAT:MOVA,R1MOVXDPTR,A;启动下一路转换CJNEA,#07H,EXIT_INTR;所有路都转换过吗?MOVR1,#00H;是,重新从IN0路开始SJMPREPEATEXIT_INTR:RETI;否,返回主程序1679.5.3应用SPI串行总线扩展12位模数转换器TLC25431.TLC2543简介TLC2543是采用开关电容逐次逼近技术、SPI串行接口的12位模数转换器。(1)引脚排列引脚功能介绍如下:AIN0AIN10:模拟量输入端。11路模拟信号输入,由内部多
82、路器选择。对于4.1MHz的I/OCLOCK,驱动源阻抗必须小于或等于50,而且用60pF电容来限制模拟输入电压的斜率。168图9-53TLC2543的引脚排列169:片选端。在端由高变低时,复位内部计数器和控制,使能DATAOUT,DATAINPUT和I/OCLOCK。由低变高时,在设定时间内禁止DATAINPUT和I/OCLOCK。DATAINPUT:串行数据输入端。由4位的串行地址输入来选择模拟量输入通道。DATAOUT:A/D转换结果的三态串行输出端。为高时处于高阻抗状态,为低时处于激活状态。EOC:转换结束端。在最后的I/OCLOCK下降沿之后,EOC从高电平变为低电平并保持到转换完
83、和数据准备传输为止。170GND:接地端I/OCLOCK:输入、输出时钟端。I/OCLOCK接收串行输入信号并完成以下四个功能:I/OCLOCK的前8个上升沿,8位输入数据存入输入数据寄存器;在I/OCLOCK的第4个下降沿,被选通的模拟输入电压开始向电容器充电,直到I/OCLOCK的最后一个下降沿为止;将前一次转换数据的其余11位输出到DATAOUT端;I/OCLOCK的最后一个下降沿,将转换的控制信号传送到内部状态控制位。REF+:正基准电压端。REF-:负基准电压端。VCC:电源。171(2)工作原理开始时,芯片选择为高电平,I/OCLOCK和DATAINPUT是无效的,DATAOUT呈
84、高阻态。当变低,使能I/OCLOCK和DATAINPUT,开始转换,且DATAOUT退出高阻抗状态。输入数据是8位数据流,由4位模拟通道地址(D7-D4)、2位数据长度选择(D3-D2)、输出MSB或LSB前位(Dl)和单极或双极输出选择位(D0)组成。该数据流在DATAINPUT端加入。I/OCLOCK序列加在I/OCLOCK端,以传输这个数据至输入数据寄存器。172在传送期间,I/OCLOCK序列也将先前转换的结果从输出数据寄存器移至DATA OUT端。I/OCLOCK接收输入的8、12或16个时钟周期序列,其周期长度取决于输入数据寄存器中的数据长度选择。在输入I/OCLOCK序列的第4个
85、下降沿开始对模拟输入进行采样,并且在I/OCLOCK序列的最后一个下降沿之后把采样结果保持。I/OCLOCK序列的最后一个下降沿也将EOC变低并开始转换。173(3)I/O周期和实际转换周期该转换器的工作由两种不同的周期组成:I/O周期和实际转换周期。I/O周期:I/O周期由外部提供的I/OCLOCK定义。根据选定的输出数据长度持续8、12或16个时钟周期。实际转换周期:实际转换周期对用户来说是透明的。它是由一个内部时钟同步至I/OCLOCK控制的。174(4)数据输入输入端在内部被连接到一个8位的串行输入地址控制寄存器。该寄存器规定了转换器的工作和输出数据长度。主机提供的数据字是以MSB为前
86、导的。每个数据位都是在I/OCLOCK序列的上升沿被输入的。控制字寄存器中各位的定义如表9-10所列。地址位输出数据长度输出数据顺序极性选择D7(MSB)D6D5D4D3D2D1D0表9-10控制字寄存器中各位的定义175数据输入地址位:数据寄存器的前4位(D7D4)是地址位,它决定了或从11个输入通道中选一,或从3个基准测试电压中选一,或选软件断电。这些地址位影响紧跟在当前I/O周期后面的当前转换。基准电压的额定值等于Vref+、Vref-。数据输入地址位如表9-11所列。176地 址 位功能D7(MSB)D7(MSB)D6D6D5D5D4D40 00 00 00 0选择通道0 00 00
87、00 01 1选择通道1 11 10 01 10 0选择通道10101 10 01 11 1选择(Vref+-Vref-)/2(Vref+-Vref-)/2作为测试电压1 11 10 00 0Vref+Vref+1 11 10 01 1Vref-Vref-1 11 11 10 0软件关闭电源表9-11数据输入地址位表177数据输出长度:数据寄存器的随后2位(D3和D2)选择输出数据的长度。数据长度选择对当前I/O周期有效(在该周期中数据被读出)。已经对当前I/O周期有效的数据长度选择,允许在不同时区I/O同步的条件下启动器件。可以选择8、12或16位的数据长度。由于转换器的分辨率为12位,因而
88、建议用12位数据长度。数据输出长度如表9-12所列。D3D3D2D2输出数据长度 D3D3D2D2输出数据长度0 01 18 8位1 11 11616位X X0 01212位表9-12数据输出长度表178数据寄存器,LSB导前。在输入数据寄存器中的D1位,控制输入的二进制数的传送,输出格式如表9-13所示。数据寄存器,双极性格式。在输入数据寄存器中的D0位(BIP),控制用来表示转换结果的二进制数据格式,极性选择如表9-14所列。D1D10 01 1功能输出数据高位在前(MSB)(MSB)输出数据低位在前(LSB)(LSB)表9-13输出数据格式表 D0D00 01 1功能单极性二进制数双极性
89、二进制数表9-14极性选择表179程序将经TLC2543TLC2543转换后的高8 8位数据存入41H41H中,而低4 4位存入40H40H的高4 4位字节中。后面调用了一个将3 3字节二进制转换成BCDBCD码的程序,转换成BCDBCD码以便显示出来。程序流程图如图9-54:图9-54AT89C52和TLC2543接口的主程序流程图1802.8051单片机和TLC2543接口的实现8051单片机没有SPI口,故,用P1.0P1.3模拟TLC2543的SPI接口。其中,P1.0模拟SDO(MISO),P1.1模拟SDI(MOSI),P1.2模拟,P1.3模拟SCK。P1.4接受转换结束的EOC
90、信号,接口电路如图9-55所示。下面给出8051单片机和TLC2543接口C51的源程序及在Proteus的仿真结果。181图9-55AT89C52与TLC2543接口的Proteus仿真电路图182(1)8051单片机和TLC2543接口的C语言源程序#include#defineuintunsignedint#defineucharunsignedcharsbitSDO=P10;/定义端口sbitSDI=P11;sbitCS=P12;sbitCLK=P13;sbitEOC=P14;sbitP2_0=P20;sbitP2_1=P21;sbitP2_2=P22;sbitP2_3=P23;183
91、unsignedcharcodexiao=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;/共阳极数码管09的段码voiddelay(unsignedcharn)/延时程序unsignedchari,j;for(i=0;in;i+) for(j=0;j125;j+);184unsignedintread2543(unsignedcharcon_word)/向TLC2543写命令及读转换后的数据unsignedintad=0,i;CLK=0;/时钟首先置低EOC=1;CS=0;/片选为0,芯片工作for(i=0;i12;i+)if(SDO)/首
92、先读TLC2543的l位数ad=ad|0x01;/向TLC2543写1位数据SDI=(bit)(con_word&0x80);/时钟上升沿,TLC2543输出使能CLK=1; 185delay(3);CLK=0;/时钟下降沿,TLC2543输入使能delay(3);con_word=1;ad=1;return(ad);186voidmain()uintad;while(1)ad=read2543(0x00);P0=xiaoad/1000;/显示千位P2_0=1;delay(10);P2_0=0;P0=xiao(ad%1000)/100;/显示佰位187P2_1=1;delay(10);P2_1
93、=0;P0=xiao(ad%100)/10;/显示十位P2_2=1;delay(10);P2_2=0;P0=xiaoad%10;/显示个位P1=P0;P2_3=1;delay(10);P2_3=0;188图9-56SDI-CLK-SDO时序图189图9-57SDI-CLK-EOC时序图1909.6单总线1-Wire接口的温度传感器DS18B20及其应用9.6.1单总线1-Wire1.概述 1-Wire总线技术是美国DALLAS半导体公司推出的新技术,是一种特殊串行数据通信方式。它将地址线、数据线、控制线合并为1根信号线,允许在这根信号线上挂接多个1-Wire总线器件。具有节省I/OI/O资源、
94、结构简单、成本低廉、便于总线扩展和维护等优点。1911-Wire总线由一个总线主节点、一个或多个从节点组成系统,通过一根信号线对从芯片进行数据的读取。每个1-Wire单总线器件在制作时都激光刻录一个64位的二进制ROM代码,标志着器件的ID号,是唯一的芯片序列号。每一个符合1-Wire协议的从芯片都有一个唯一的地址。1-Wire总线利用一根线实现双向通信。家族代码(8位)序列号(48位)CRC代码(8位)1-Wire总线器件的64位ROM代码1922.单总线1-Wire的硬件结构1-Wire单总线器件内部结构示意图1931-Wire单总线适用于单个主机系统,能够控制一个或多个从机设备,它们之间
95、的数据交换只通过一条信号线。1-Wire单总线器件存在248个序列号码总量,为了不引起逻辑上的冲突,所有从器件的1-Wire总线接口都是漏极开路的,外接一个4.7K的上拉电阻以确保单总线的闲置状态为高电平,并要求主机或从机通过一个漏极开路或三态端口连接至该单总线,这样可允许设备在不发送数据时释放单总线,以便总线被其他设备使用。1941-Wire单总线硬件接口示意图1953.单总线1-Wire供电方式因为单总线器件采用CMOS技术,耗电量很小,所以不用单独供电。可采用寄生方式供电,这样在单总线空闲时给电容充电就可以工作。在寄生方式供电时,为了保证单总线器件在温度转换期间、EEPROM写入等工作状
96、态下具有足够的电源电流,必须在总线上提供MOSFET强上拉。1964.单总线1-Wire通信流程1-Wire总线是一种简单的信号交换架构,通过一条线路在主机与外围器件之间进行双向通信。一旦器件的序列号已知,通过寻址该序列号,就可以唯一地选出该器件进行通信。主机对1-Wire总线的基本操作分为复位、读和写三种。典型的1-Wire通信流程1975.单总线1-Wire中的时序图复位、读和写是1-Wire总线通信的基础,1-Wire协议定义了复位脉冲、应答脉冲、写1、写0、读0和读1时序等几种信号类型。所有的单总线命令序列都是由这些基本的信号类型组成的。198初始化(复位)、写、读时序图1999.6.
97、2.数字温度传感器DS18B201.DS18B20性能特点只要求一个端口即可实现通信。在DS18B20中,每个器件上都有独一无二的序列号,可实现多点组网。实际应用中不需要外部任何器件即可实现温度测量。测量温度范围在-55+125之间。可通过数据线的寄生电源供电,电压范围3.05.5V。数字温度计的分辨率用户可以从9位到12位选择。用户可定义的非易失温度报警设置。2002.DS18B20表面封装及内部结构GND为电源地VDD为外接供电电源输入端(在寄生电源接线方式时接地)DQ为单总线端口(即I/O端口),无论是外接电源供电还是寄生电源供电,DQ口线都要接5k左右的上拉电阻。图9-58DS18B2
98、0的封装形式201DS18B20内部结构主要由四部分组成:(1)64位光刻ROM;(2)温度感应元件;(3)非挥发的温度上限报警触发器TH和下限报警触发器TL(4)配置寄存器图9-59DS18B20内部结构图2023.DS18B20中的温度感应元件对温度的测量DS18B20中的温度感应元件(即温度传感器)可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625/LSB形式表达,其中S为符号位。表9-15DS18B20温度格式表203表9-15是12位转化后得到的12位数据,存储在DS18B20的两个8位的RAM中;其中前面5位是符号位,如果测得的温度大于0
99、,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再 乘 以 0.0625即 可 得 到 实 际 温 度 。 例 如 ,+125的数字输出为07D0H,+25.0625的数字输出为0191H,-25.0625的数字输出为0FF6FH,-55的数字输出为-FC90H。表9-16是DS18B20温度数据表204表9-16DS18B20温度数据表2054.DS18B20中的存储器在DS18B20中共有三种存储器,分别是ROM、RAM(高速暂存)、EEPROM(存放高温度/低温度触发器TH/TL等),每种存储器都有其特定的功能。另外还有配
100、置寄存器,格式如下表:低五位一直都是“1”,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动。R1和R0用来设置分辨率(00、01、10、11分别为9、10、11、12位),DS18B20出厂时被设置为12位。TMR1R011111表9-17配置寄存器2065.DS18B20器件功能命令有通用性功能命令和专用性功能命令两种。通用性功能命令:ROM功能命令,具有通用性,不仅适用于DS18B20也适用于其它具有1-Wire总线接口的器件,主要用于器件的识别与寻址;如表9-18所示。专用性功能命令:器件功能命令,具有专用性,它们与
101、器件的具体功能紧密相关。如表9-19所示。207表9-18通用性功能命令(ROM指令)序号指令代码操作说明1读ROM33H读DS18B20温度传感器ROM中的编码(即64位地址)2匹配ROM55H发出此命令之后,接着发出64位ROM编码,访问单总线上与该编码相对应的DS18B20,使之做出响应,为下一步对该DS18B0的读写做准备。3搜索ROM0F0H用于确定挂接在同一总线上DS18B20的个数和识别64位ROM地址,为操作各器件做准备。4跳过ROM0CCH忽略64位ROM地址,直接向DS18B20发温度变换命令,适用于单片工作。5告警搜索命令0ECH执行后只有温度超过设定值上限或下限的片子才
102、做出响应。2083写暂存器4EH发出向内部RAM的3,4字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。4复制暂存器48H将RAM中第3、4字节的内容复制到EEPROM中。5重调EEPROM0B8H将EEPROM中内容恢复到RAM中的第3,4字节。6读供电方式0B4H寄生供电时发送“0”,外接电源供电时发送“1”。序号指令约定代码操作说明1温度转换44H启动DS1820进行温度转换,结果存入内部9字节RAM中2读暂存器0BEH读内部RAM中9字节的内容表9-19DS18B20的器件功能(RAM指令)2096.主机与DS18B20的通信流程主机对DS18B20的访问流程是:先对D
103、S18B20初始化(即复位操作),再进行ROM操作命令,最后才能做存储器操作、数据操作。对总线上的DS18B20来说,复位信号意味着又一次通信的开始,器件对此的响应是拉低总线以告知主机自身的 存 在 , 然 后 准 备 接 收 ROM功 能 命 令 。DS18B20每一步操作都要遵循严格的工作时序和通信协议。如主机控制DS18B20完成温度转换这一过程,根据DS18B20的通讯协议,须经三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。2107.DS18B20数字温度传感器的供电DS18B20寄生电源
104、供电方式图9-60DS18B20寄生电源供电方式(无强上拉)211优点:电路简洁,仅用一根I/O线实现测温;可以在没有常规电源的条件下读取ROM;进行远距离测温时,无需本地电源。缺点:当几个温度传感器挂在同一根I/O线上进行多点测温时,只靠4.7K上拉电阻就无法提供足够的能量,会造成无法转换温度或温度误差极大。适用范围:在传感器数量方面,适应于数量较少的温度传感器测温情况下使用,最好是一个;在电源要求方面,不适宜采用电池供电系统中。212DS18B20寄生电源强上拉供电方式图9-61DS18B20寄生电源供电方式(有强上拉)213DS18B20的外部电源供电方式图9-62DS18B20外部电源
105、供电方式(单点测温)电路214在外部电源供电方式下,DS18B20工作电源VCC由VDD引脚接入,此时I/O线不需要强上拉,不存在电源电流不足的问题,可以保证转换精度,同时在总线上理论可以挂接任意多个DS18B20传感器,组成多点测温系统。外部电源供电方式是DS18B20最佳的工作方式,工作稳定可靠,抗干扰能力强,而且电路也比较简单,可以开发出稳定可靠的多点温度监控系统。215图9-63DS18B20外部电源供电方式(多点测温)电路2168.DS18B20使用中注意事项在对DS1820进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。在进行多点测温系统设计时,当DS1820单总线
106、上所挂DS1820数量较多时(一般大于8个),就需要解决微处理器的总线驱动问题。在用DS1820进行长距离测温系统设计时,要充分考虑总线分布电容和阻抗匹配问题。最好采用带屏蔽电缆的双绞线。测温电缆线最好采用屏蔽4芯双绞线,其中一对线接地线与信号线,另一组接VDD和地线,屏蔽层在源端单点接地。2179.6.3应用举例如图9-64所示,温度测量装置由DS18B20温度传感器、AT89C52、显示模块(四位一体的共阳数码管)、驱动电路(4个三极管和4个电阻)组成。温度传感器DS18B20输出脚直接与单片机的P1.7相连,R5为上拉电阻,传感器采用外部电源供电。系统程序分传感器控制程序和显示器程序两部
107、分,传感器控制程序是按照DS18B20的通信协议编制。系统的工作是在程序控制下,完成对传感器的读写和对温度的显示。218图9-64DS18B20应用电路电气原理图219主程序DATA_LINEEQUP3.6FLAG1EQU20H.0FLAG2EQU20H.1ORG0000HMAIN:MOVSP,#30HLCALLB20_INIT;复位与检测DS18B20JNBFLAG1,MAIN1 ;FLAG1=0,DS18B20不存在JMPSTARTMAIN1:LCALLB20_INITJBFLAG1,STARTJMPMAIN1START:MOVA,#0CCH;跳过ROM匹配LCALLWRITE220MOVA,#044H ;发出温度转换命令LCALLWRITELCALLB20_INITMOVA,#0CCH;跳过ROM匹配LCALLWRITEMOVA,#0BEH;发出读温度命令LCALLWRITELCALLREAD;读温度数据LCALLCTEMP;计算温度值LCALLDISPBCD;转换为BCD码LCALLDISP1;显示JMPMAIN1221本章到此结束,请继续学习第10章!222