⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tlc2543.txt

📁 TLC2543是TI公司的12位串行模数转换器
💻 TXT
📖 第 1 页 / 共 2 页
字号:
3 单片机软件设计

    单片机程序主要包括串行数据采集模块“DATA_SAM”和串行数据传输模块“RS232”,调试所用到的显示子程序在此略去。

    TLC2543的通道选择和方式数据为8位,其功能为:D7、D6、D5和D4用来选择要求转换的通道,D7D6D5D4=0000时选择0通道,D7D6D5D4=0001时选择1通道,依次类推;D3和D2用来选择输出数据长度,本程序选择输出数据长度为12位,即D3D2=00或D3D2=10;D1,D0选择输入数据的导前位,D1D0=00选择高位导前。

    TLC2543在每次I/O周期读取的数据都是上次转换的结果,当前的转换结果在下一个I/O周期中被串行移出。第一次读数由于内部调整,读取的转换结果可能不准确,应丢弃。

数据采集程序如下:

DATA_SAM:  
 MOV     R0,#30H ;数据缓冲区首地址30H→R0
 
 MOV     R1,#00000000B ;0通道方式/通道数据 
 ACALL  RD_AD ;第一次读取的转换结果可能不准确,丢弃。 
 MOV     R1,#00010000B ;1通道方式/通道数据 
 ACALL  RD_AD ;送1通道方式/通道数据并读第0通道转换结果 
 MOV     @R0,R2 ;转换结果存放到数据缓冲区,下同 
 INC    R0  
 MOV     @R0,R3  
 INC    R0  
 MOV     R1,#00100000B ;2通道方式/通道数据 
 ACALL  RD_AD ;送2通道方式/通道数据并读第1通道转换结果 
 MOV     @R0,R2  
 INC    R0  
 MOV     @RO,R3  
 INC    R0  
 ………… ;其它通道操作方式类推 
 RET  


    单片机通过编程产生串行时钟,并按时序发送与接收数据位,完成通道方式/通道数据的写入和转换结果的读出,程序如下,供数据采集模块“DATA_SAM” 调用。

 CLK    EQU      P3.3  
 DIN    EQU      P3.4  
 DOUT   EQU      P3.5  
 CS      EQU     P3.7  
RD_AD:  
 CLR    CLK ;清I/O时钟 
 SETB   CS ;设置片选为高 
 CLR    CS ;设置片选为低 
 MOV     R4,#08 ;先读高8位 
 MOV    A, R1 ;把方式/通道控制字放到A 
LOP1:  
     MOV    C,DOUT ;读转换结果 
 RLC    A ;A寄存器左移,移入结果数据位,移出方式/通道控制位 
 MOV     DIN,C ;输出方式/通道位 
 SETB   CLK ;设置I/O时钟为高 
 CLR    CLK ;清I/O时钟 
 DJNZ   R4,LOP1 ;R4不为0,则返回LOP1 
 MOV     R2,A ;转换结果的高8位放到R2中 
 MOV     A,#00H ;复位A寄存器 
 MOV     R4,#04 ;再读低4位 
LOP2:  
 MOV     C,DOUT ;读转换结果 
 RLC    A ;A寄存器左移,移入结果数据位 
 SETB   CLK ;设置I/O时钟为高 
 CLR    CLK ;清I/O时钟 
 DJNZ   R4,LOP2 ;R4不为0,则返回LOP2 
 MOV     R3,A ;转换结果的低4位放到R3中 
 SETB   CS ;设置片选为高 
 RET  


    串行数据传输模块包括串行口初始化子程序和数据传输子程序,各子程序分别如下。其中数据传输采用查询方式,也可以方便地改为中断方式。

INIT_COM:  
 MOV   SCON,#50H ;串口方式1工作,8位数据位,1位停止位,无奇偶校验 
 MOV   PCON,#80H ;SMOD=1,波特率增倍 
 MOV   TMOD,#20H ;波特率设置,fOSC=12MHz,波特率=2* 2400,N=0F3H 
 MOV   TH1,#0F3H  
 MOV   TL1,#0F3H  
 SETB  TR1 ;启动定时器T1 
 RET  
RS232:  
 MOV   R0,#30H ;缓冲区首地址30H→R0 
 MOV   R5,#22 ;发送数据长度→R5,11* 2=22 
LOOP:  
 MOV   A,@R0 ;取数据→A 
 MOV   SBUF,A ;数据→SBUF 
WAIT:   
 JBC   TI,CONT ;判断发送中断标志,是1则转到CONT,并清TI 
 SJMP  WAIT  
CONT:  
 INC   R0  
 DJNZ  R5,LOOP  
 RET  


4 上位机串口接收程序设计

    上位机接收数据所用C语言程序包括初始化子程序和接收子程序。各子程序分别如下:

void init_com1(void) /*初始化子程序*/ 
{ 
outportb(0x3fb,0x80); /*线控制寄存器高位置1,使波特率设置有效*/ 
outportb(0x3f8,0x18); /*波特率设置,与单片机波特率一致为4800bps*/ 
outportb(0x3f9,0x00); 
outportb(0x3fb,0x03); /*线控制寄存器设置,8位数据位,1位停止位,无奇偶校验*/ 
outportb(0x3fc,0x03); /*Modem控制寄存器设置,使DTR和RTS输出有效*/ 
outportb(0x3f9,0x00); /*设置中断允许寄存器,禁止一切中断*/ 
} 
void receive_data(void) /*查询方式接收数据子程序*/ 
{ 
     while(!kbhit()) 
     { 
 while(!(inportb(0x3fd)&0x01));/*若接收寄存器为空,则等待*/ 
 printf("%x ",inportb(0x3f8)); /*读取结果并显示*/ 
     } 
     getch(); 
}    


5 结论

    本文给出的硬件和软件均经过实践检验,并且已经按照PC/104总线制作成数据采集卡,使用很方便,能够满足对数据采样频率要求不是特别高的应用场合。

在设计制作时要注意如下3个问题:
(1) 电源去耦
当使用TLC2543这种12位A/D器件时,每个模拟IC的电源端必须用一个0.1μF的陶瓷电容连接到地,用作去耦电容。在噪声影响较大的环境中,建议每个电源和陶瓷电容端并一个10μF的钽电容,这样能够减小噪声的影响。
(2) 接地
对模拟器件和数字器件,电源的地线回路必须分开,以防止数字部分的噪声电流通过模拟地回路引入,产生噪声电压,从而对模拟信号产生干扰。所有的地线回路都有一定的阻抗,因此地线要尽可能宽或用地线平面,以减小阻抗,连线应当尽可能短,如果使用开关电源,则开关电源要远离模拟器件。
(3) 电路板布线
使用TLC2543时一定要注意电路板的布线,电路板的布线要确保数字信号和模拟信号隔开,模拟线和数字线特别是时钟信号线不能互相平行,也不能在TLC2543芯片下面布数字信号线。
4.2 软件编程
单片机程序主要包括串行数据采集模块“DATA_AD”和串行数据传输模块“RS232”,调试所用到的显示子程序在此略去。 TLC2543的通道选择和方式数据为8位,其功能为:D7、D6、D5和D4用来选择要求转换的通道,D7D6D5D4=0000时选择0通道,D7D6D5D4=0001时选择1通道,依次类推;D3和D2用来选择输出数据长度,本程序选择输出数据长度为12位,即D3D2=00或D3D2=10;D1,D0选择输入数据的导前位,D1D0=00选择高位导前。TLC2543在每次I/O周期读取的数据都是上次转换的结果,当前的转换结果在下一个I/O周期中被串行移出。第一次读数由于内部调整,读取的转换结果可能不准确,应丢弃。(这里只给出A/D程序)
file://TLC2543/ A/D转换用程序用C51编写。
#define uchar unsigned char
#define uint unsigned int
file://==========AD/采样模块============//
sbit CLOCK =P1^1;
sbit D_IN =P1^2;
sbit D_OUT =P1^3;
sbit _CS =P1^4;
uint read2543(uchar port) file://从/TLC2543读取采样值, file://形/参port是采样的通道号
{
uint data ad;uint data i;
uchar data al=0,ah=0;
CLOCK=0;
_CS=0;
for(i=0;i<8;i++) file://前/8个CLOCK
{
D_IN=(bit)(port&0x80);
if(i<4)
{
if (D_OUT) ah|=0x01;
ah<<=1;
}
else
{
if(D_OUT) al|=0x01;
al<<=1;
}
port<<=1;
CLOCK=0;CLOCK=1;
}
for (i=0;i<4;i++) file://填/充4个CLOCK
{
if(D_OUT) al|=0x01;
al<<=1;
CLOCK=0;CLOCK=1;
}
_CS=1;
ad=(uint)ah;ad<<=8;ad|=al; file://得/到AD值
return (ad);
} 

CLK    EQU      P1.1
DIN    EQU      P1.2
DOUT   EQU      P1.3
CS     EQU      P1.0
;**********************************
       ORG     00H
       AJMP    MAIN            ;
       ORG     0030H           ;
;**********************************       
MAIN:
       MOV     SP,#60H         ;

       MOV     R1,#00000000B   ;0通道方式/通道数据
       ACALL   RD_AD           ;第一次读取的转换结果可能不准确,丢弃。
       MOV     R1,#00010000B   ;1通道方式/通道数据
       ACALL   RD_AD           ;送1通道方式/通道数据并读第0通道转换结果
       MOV     30H,40H         ;转换结果存放到数据缓冲区,下同
       MOV     31H,41H         ;
     
       MOV     R1,#00100000B   ;2通道方式/通道数据
       ACALL   RD_AD           ;送2通道方式/通道数据并读第1通道转换结果
       MOV     35H,40H         ;
       MOV     36H,41H         ;
       AJMP    MAIN            ;
;*********************************       

;*************************************
RD_AD:
       CLR     CLK      ;清I/O时钟
       SETB    CS       ;设置片选为高
       CLR     CS       ;设置片选为低
       MOV     R4,#08   ;先读高8位
       MOV     A, R1    ;把方式/通道控制字放到A
LOP1:
       MOV     C,DOUT   ;读转换结果
       RLC     A        ;A寄存器左移,移入结果数据位,移出方式/通道控制位
       MOV     DIN,C    ;输出方式/通道位
       SETB    CLK      ;设置I/O时钟为高
       CLR     CLK      ;清I/O时钟
       DJNZ    R4,LOP1  ;R4不为0,则返回LOP1
       MOV     40H,A    ;转换结果的高8位放到40H中
       MOV     A,#00H   ;复位A寄存器
       MOV     R4,#04   ;再读低4位
LOP2:
       MOV     C,DOUT   ;读转换结果
       RLC     A        ;A寄存器左移,移入结果数据位
       SETB    CLK      ;设置I/O时钟为高
       CLR     CLK      ;清I/O时钟
       DJNZ    R4,LOP2  ;R4不为0,则返回LOP2
       MOV     41H,A    ;转换结果的低4位放到41H中
       SETB    CS       ;设置片选为高
       RET              ;
       END


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -