[讨论] 串行A/D转换器TLC2543与80C196的接口及编程

rain   2006-7-11 15:48 楼主

摘 要:本文以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资源,且价格适中,应用广泛。

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复