串行A/D转换器TLC2543与80C196的接口及编程
[复制链接]
摘 要:本文以Intel公司的80C196单片机与11通道12位模/数转换芯片TLC2543为例,介绍该类ADC与单片机的接口与编程,并给出具体的C语言程序,这种方法对于其它具有SPI接口的器件一样适用。 关键字:80C196;A/D转换器;C语言;TLC2543 1 概述 80C196是Intel公司继8096BH之后推出的高性能CHMOS16位单片微型计算机。它的CPU中的算术逻辑单元采用寄存器-寄存器结构,CPU的操作直接面向256字节的寄存器,消除了一般CPU接口中存在的累加器的瓶颈效应,提高了操作速度和数据吞吐能力。而且它还有一套效率高,执行速度快的指令系统。 TLC2543是TI(TEXAS INSTRUMENT)公司的产品,使用开关电容逐次逼近技术完成12位A/D转换过程。TLC2543与外围电路的连线简单,有三个控制输入端为CS(片选)、输入/输出时钟(I/O CLOCK)以及串行数据输入端(DATA INPUT)。片内的14通道多路器可以选择11个输入中的任何一个或3个内部自测试电压中的一个,片内设有采样保持电路,用"转换结束"信号EOC指示转换完成。系统时钟由片内产生并由I/O CLOCK同步。正、负基准电压(REF+,REF-)由外部提供,通常为VCC和地,两者差值决定输入范围。片内转换器使器件有高速、高精度和低噪声等特点。TLC2543的外部引脚排列如图1所示,采用20脚DIP封装。
图1 TLC2543引脚图 2 硬件设计 由于MCS-96系列单片机不具有SPI或相同能力的接口,为了便于与TLC2543接口,采用软件合成SPI操作。80C196片内有一个CAM(Content Addressable Memory),它是HSO的核心控制部分,由8个23位寄存器组成。每个寄存器的16位用于存放触发某一事件的时间,7位用于存储命令。每一个状态周期,来自定时器的时间与CAM中一个预定的时间进行比较,比较结果相符,说明触发某一事件的时间已到,就读出CAM中这一项的内容,产生该事件的触发信号。 HSO的命令格式如图2所示。其中低4位产生的16种代码规定16个通道被触发事件的性质。位4决定是否产生中断。位5决定输出的事件触发信号的性质,但它对通道08-0FH是不起作用的。位6决定采用哪个定时器作为时间基准。 把命令和预定触发时间写入CAM阵列的步骤如下:先把命令写入HSO命令寄存器,然后把时间写入HSO时间寄存器,在执行后一操作后时,会自动地把命令和时间同时装入到HSO保持寄存器。
图2 HSO命令格式 TLC2543的工作过程可以分为I/O周期和实际转换周期。I/O周期由外部提供的I/O CLOCK定义,延续8、12或16个时钟周期,决定于选定的输出数据长度,接口时序如图3所示。 在I/O CLOCK的前8个脉冲的上升沿,以MSB前导方式从DATA INPUT端输入8个数据流到输入寄存器,其中前4位是模拟通道地址,控制14通道模拟多路开关从11个模拟输入和3个内部自测电压中选通一路送到采用保持电路,该电路从第4个I/O CLOCK脉冲的下降沿开始对所选信号进行采样,直到最后一个I/O CLOCK脉冲的下降沿。IO周期的时钟脉冲个数和输出数据长度同时由输入数据的D3,D2位选择8、12或16。当工作于12位和1位时,在前8个时钟之后,DATA INPUT无效。
图3 TLC2543时序图(MSB FIRST) 在I/O CLOCK端输入脉冲的同时,DATA OUT端串行输出8、12或16位数据。TLC2543在每次I/O周期读取的数据都是上次转换的结果,当前的转换结果在下一个I/O周期中被串行移出。 在I/O周期的最后一个I/O CLOCK下降沿之后,EOC变低,采样值保持不变,转换周期开始,片内转换器对采样值进行逐次逼近式A/D转换,其工作过程由与I/O CLOCK同步的内部时钟控制。转换完成后EOC变高,转换结果锁存在输出数据寄存器中,待下一个I/O周期输出。I/O周期和转换周期交替进行,从而减少外部的数字噪声对转换精度的影响。 这里用80C196的HSO口模拟SPI和TLC2543接口,接口电路如图4所示。
图4 80C196和TLC2543的硬件接口电路 由HSO0产生时钟信号,输入通道选择和输入数据长度选择由HSO1输出,HSO2则输出片选信号,A/D转换结果由P1.0读入。80C196的P1口是一个准双向口,它由输出缓冲器、内部口锁存器、内部口寄存器和输出缓冲器构成。 3 软件设计 以下给出用C语言编写的通信程序。C语言作为一种通用的高级语言,大幅度提高了单片机系统开发的工作效率,使之能够充分发挥出单片机处理器的日益提高的性能,缩短产品进入市场的时间。区别于一般计算机中的C语言编译器,单片机中的C语言编译器要专门进行优化,以提供高编译效率。优秀的单片机系统C编译器代码长度和执行时间仅比汇编语言编写的同样功能程序长20%。 其中Delay()为延时子程序。Hso_con()控制HSO子程序。output()输出16位串行数据,前4位是伪数据,后12位送入DAC寄存器。一个片选( )脉冲要插到每次转换的开始处,或是在转换时序的开始处变化一次后保持 为低,直到时序结束。为了能够可靠传送数据,在程序中采用了输出延迟的方法,使SCLK信号恢复正常。 #define set_sclk 0x20 #define clr_sclk 0x00 #define set_din 0x21 #define clr_din 0x01 #define set_cs 0x22 #define clr_cs 0x02 #define mode 0x08 //选择0通道,输出数据长度为12位,高位导前 void Delay(unsigned int CNT) //延时程序 { while (CNT) CNT--; } void Hso_con(unsigned char com) //控制HSO { hso_command =com; hso_time = timer1 + 2; } void read_dout() { //略 } void tlc2543(int mode) { unsigned char j; Hso_con(clr_sclk); Hso_con(set_cs); Hso_con(clr_cs); delay(10); for(j=0;j<8;j++,mode<<=1) { read_dout(); if(mode&0x80) { Hso_con(set_din); } else { Hso_con(clr_din); } delay(100); Hso_con(set_clk); Hso_con(clr_clk); } for(j=0;j<4;j++) { read_dout(); Hso_con(set_clk); Hso_con(clr_clk); } Hso_con(set_cs); } 4 结束语 由于MCS-96系列单片机不具有SPI或相同能力的接口,为了便于与TLC2543接口,采用软件合成SPI操作,本文给出了用单片机HSO口模拟SPI接口时序的方法,对程序稍加改动就可适用于其它带SPI接口的器件。由于TLC2543是串行输入结构,能够节省单片机I/O资源,且价格适中,应用广泛。
|