您好,欢迎访问三七文档
教学案例2基于单片机的多路输入电压表1.教学目的A/D转换器是单片机应用中常见的接口,从事单片机开发的人员通常都会遇到使用AD的要求,该案例通过多路输入电压表来学习常用串行接口AD转换器的用法。2.教学步骤介绍A/D转换相关知识分析基于单片机的多路输入电压表实现方案硬件结构软件设计小结3.详细内容3.1.A/D转换相关知识在工业控制和智能化仪表中,常用单片机进行实时控制及实时数据处理。单片机所加工的信息都是数字量,而被控制或测量对象的有关参量往往是连续变化的模拟量,如温度、压力、流量等,通过传感器将这些信号转换成模拟电信号。单片机要处理这种信号,首先必须将模拟量转换成数字量,这一转换过程就是模—数转换,实现模/数转换的设备称为A/D转换器或ADC。A/D转换电路种类很多,在选择模/数转换器时,主要考虑以下的一些技术指标:转换时间和转换频率、量化误差与分辨率、转换精度、接口形式等。目前,较为流行的AD转换器件有很多都采用了串行接口,这使得这类芯片与单片机的硬件连接非常简单,而软件编程相对要复杂一些,下面,我们以TI公司的TLC1543为例,制作一个多路输入的电压表,了解一下这类芯片的使用特点。TLC1543特性简介:TLC1543是由TI公司开发的开关电容式AD转换器,该芯片具有如下的一些特点:10位精度、11通道、三种内建的自测模式、提供EOC(转换完成)信号等。该芯片与单片机的接口采用串行接口方式,引线很少,与单片机连接简单。图1是TLC1543的引脚示意图,其中A0~A10是11路输入,Vcc和GND分别是电源引脚,REF+和REF-分别是参考电源的正负引脚,使用时一般将REF-接到系统的地,达到一点接地的要求,以减少干扰。其余的引脚是TLC1543与CPU的接口,其中CS为片选端,如不需选片,可直接接地。I/OClock是芯片的时钟端,Adress是地址选择端,DataOut是数据输出端,这三根引脚分别接到CPU的三个I/O端即可。EOC用于指示一次AD转换已完成,CPU可以读取数据,该引脚是低电平有效,根据需要,该引脚可接入CPU的中断引脚,一旦数据转换完成,向CPU提出中断请求;此外,也可将该引脚接入一个普通的I/O引脚,CPU通过查询该引脚的状态来了解当前的状态,甚至该引脚也可以不接,在CPU向TLC1543发出转换命令后,过一段固定的时间去读取数据即可。图1TLC1543的引脚示意图3.2.基于单片机的多路输入电压表实现方案多路输入电压表的实现框图如图2所示。图2基于单片机的多路输入电压表框图3.3.硬件结构单片机与TLC1543芯片的接口如图3,从图中可以看出,这里使用了TLC1543作为基准电压源,将REF-直接接地,P1.0、P1.1、P1.2、P1.3和P1.4分别与EOC、时钟、地址、数据、片选端分别相连。在六位数码管的后四位数码管上轮流显示TLC1543各通道的测量值,同时用十六进制表示的通道号显示在第1位数码管上。AT89S51单片机驱动电路LED显示按键A/D转换器输入电压图3使用TLC1543制作的多路输入电压表电路图3.4.软件设计由于采用串行接口,在硬件电路简单的同时,带来了软件编制的复杂性,初学单片机的入门者很难掌握这类芯片的编程方法,这给此类芯片的应用带来一定的限制。为解决这一问题,我们在实际应用该芯片的基础上写出了该芯片的驱动程序,有了驱动程序,使用者不必再关心TLC1543数据手册中的时序图之类不易懂的部份,只要了解清楚驱动程序的用法,即可使用该芯片。TLC1543共有11条输入通道,这11条通道的编号从0~10,读取时,根据编号来获得想应通道的数据。3.4.1.TLC1543驱动程序;----------------------------------------;以下定义各引脚;-----------------------------------------ADCLKEQUP1.1;时钟ADaddrEQUP1.2;地址引脚ADDoutEQUP1.3;数据端ADCSEQUP1.4;片选端;-----------------------------;子程序名:ADConver;参数:r2通道号,转换前存入转换结后数据在r0r1中,高位在前;资源占用:r0,r1,r7,AADConver:CLRADClkCLRADCSMOVA,R2RLCAMOVR7,#4;送出地址信号C_L1:RLCAMOVADAddr,CSETBADClkNOPNOPCLRADClkDJNZR7,C_L1MOVR7,#6;补6个脉冲C_L2:SETBADClkNOPNOPNOPNOPCLRADClkDJNZR7,C_L2;等待转换结束SETBADCSNOPNOPNOPNOPCLRADCS;取高2位NOPNOPNOPNOPSETBADDoutSETBADClkMOVC,ADDoutMOVACC.1,CCLRADClkNOPNOPNOPNOPSETBADDoutSETBADClkMOVC,ADDoutMOVACC.0,CCLRADClkANLA,#00000011B;清A的高6位MOVR0,A;保存数据MOVR7,#8C_L3:NOPNOPNOPNOPSETBADDoutSETBADClkMOVC,ADDoutMOVACC.0,CRLCACLRADClkDJNZR7,C_L3SETBADCSMOVR1,ARET3.4.2.驱动程序的使用该驱动程序中用到了四个标记符号:ADClk与TLC1543的Clk引脚相连的单片机引脚ADaddr与TLC1543的Address引脚相连的单片机引脚ADDout与TLC1543的AdDout引脚相连的单片机引脚ADCS与TLC1543的CS引脚相连的单片机引脚实际使用时,根据接线的情况定义好ADclk、ADaddr、ADDout、ADCS,将通道号送入R2,调用ADConver,即可从R0、R1中得到转换后的数据,使用非常简单。;**************************************************;ad.asm;功能简介:每隔1s轮流将一个通道的值显示在数码管后4位,首位显示通道号;**************************************************gCounDATA22H;通道计数器CLKbitP1.1;时钟端ADDRbitP1.0;地址端DoutbitP1.4;数据输出端CSbitP1.3;片选端HiddenDATA10H;消隐码CounterDATA57H;显示程序用计数器DISPBUFDATA58H;显示缓冲区首地址ORG0000HJMPSTARTORG000BH;定时中断使用T0JMPDISP;定时中断程序ORG30HSTART:MOVSP,#5FH;初始化MOVP1,#0FFHMOVP0,#0FFHMOVP2,#0FFH;关所有LED及数码管MOVTMOD,#00000001BMOVTH0,#HIGH(65536-3000)MOVTL0,#LOW(65536-3000)SETBTR0SETBEASETBET0MOVCounter,#0;计数器清零MOVDISPBUF+1,#Hidden;第2位显示器消隐MOVgCoun,#0;通道计数器清零,指向通道0LOOP:CALLDelay;延时1sMOVR2,gCoun;送通道号CALLADConverMOVA,R0MOVR6,AMOVA,R1MOVR7,ACALLHB2;----------------------------------------------;调用二-十进制转换程序;入口:待转换的双字节十六进制数在R6和R7中;出口:转换结束的结果在R3、R4和R5中,压缩BCD码方式存储;----------------------------------------------MOVA,R4ANLA,#0F0HSWAPA;高低4位互换MOVDispBuf+2,A;最高位MOVA,R4ANLA,#0FHMOVDispBuf+3,AMOVA,R5ANLA,#0F0HSWAPAMOVDispBuf+4,AMOVA,R5ANLA,#0FHMOVDispBuf+5,A;以上程序段将压缩BCD码转换成非压缩BCD码并送显示缓冲区MOVDispBuf,gCoun;将通道号送第1个显示器的显示缓冲区INCgCoun;通道号加1MOVA,gCounCJNEA,#11,LOOP;判断是否到11了MOVgCoun,#0;到则回零JMPLOOP;主程序到此结束限于篇幅,文中用到的其他程序就不再提供了。3.5.小结案例涉及了A/D转换器的应用,串行接口元件的读写方法。通过本例,大家能对单片机处理模拟量的要点有所了解。本例中没有考虑如何扩展输入电压的范围,这应是实际的电压表需要解决的问题,大家可参考相关资料实现输入电压的范围的扩展,量程的变换。
本文标题:TLC1543
链接地址:https://www.777doc.com/doc-5096709 .html