单片机课程设计安徽科技学院报告封面Word文档格式.docx
《单片机课程设计安徽科技学院报告封面Word文档格式.docx》由会员分享,可在线阅读,更多相关《单片机课程设计安徽科技学院报告封面Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
评阅人:
安徽科技学院理学院物电系
TLC2543是TI公司的12位串行模数转换器,使用开关电容逐次逼近技术完成A/D转换过程。
由于是串行输入结构,能够节省51系列单片机I/O资源;
且价格适中,分辨率较高,因此在仪器仪表中有较为广泛的应用。
2TLC2543的特点
(1)12位分辩率A/D转换器;
(2)在工作温度范围内10μs转换时间;
(3)11个模拟输入通道;
(4)3路内置自测试方式;
(5)采样率为66kbps;
(6)线性误差±
1LSBmax;
(7)有转换结束输出EOC;
(8)具有单、双极性输出;
(9)可编程的MSB或LSB前导;
(10)可编程输出数据长度。
3TLC2543的引脚排列及说明
TLC2543有两种封装形式:
DB、DW或N封装以及FN封装,这两种封装的引脚排列如图1,引脚说明见表1。
图1TLC2543的封装
表1TLC2543引脚说明
引脚号
名称
I/O
说明
1~9,11,12
AIN0~AIN10
I
模拟量输入端。
11路输入信号由内部多路器选通。
对于4.1MHz的I/OCLOCK,驱动源阻抗必须小于或等于50Ω,而且用60pF电容来限制模拟输入电压的斜率
15
片选端。
在
端由高变低时,内部计数器复位。
由低变高时,在设定时间内禁止DATAINPUT和I/OCLOCK
17
DATAINPUT
串行数据输入端。
由4位的串行地址输入来选择模拟量输入通道
16
DATAOUT
O
A/D转换结果的三态串行输出端。
为高时处于高阻抗状态,
为低时处于激活状态
19
EOC
转换结束端。
在最后的I/OCLOCK下降沿之后,EOC从高电平变为低电平并保持到转换完成和数据准备传输为止
10
GND
地。
GND是内部电路的地回路端。
除另有说明外,所有电压测量都相对GND而言
18
I/OCLOCK
输入/输出时钟端。
I/OCLOCK接收串行输入信号并完成以下四个功能:
(1)在I/OCLOCK的前8个上升沿,8位输入数据存入输入数据寄存器。
(2)在I/OCLOCK的第4个下降沿,被选通的模拟输入电压开始向电容器充电,直到I/OCLOCK的最后一个下降沿为止。
(3)将前一次转换数据的其余11位输出到DATAOUT端,在I/OCLOCK的下降沿时数据开始变化。
(4)I/OCLOCK的最后一个下降沿,将转换的控制信号传送到内部状态控制位
14
REF+
正基准电压端。
基准电压的正端(通常为Vcc)被加到REF+,最大的输入电压范围由加于本端与REF-端的电压差决定
13
REF-
负基准电压端。
基准电压的低端(通常为地)被加到REF-
20
Vcc
电源
4接口时序
可以用四种传输方法使TLC2543得到全12位分辩率,每次转换和数据传递可以使用12或16个时钟周期。
一个片选(
)脉冲要插到每次转换的开始处,或是在转换时序的开始处变化一次后保持
为低,直到时序结束。
图2显示每次转换和数据传递使用16个时钟周期和在每次传递周期之间插入
的时序,图3显示每次转换和数据传递使用16个时钟周期,仅在每次转换序列开始处插入一次
时序。
图216时钟传送时序图(使用
,MSB在前)
图316时钟传送时序图(不使用
TLC2543驱动程序:
#include<
ctype.h>
#definebyteunsignedchar
#defineucharunsignedchar
#definewordunsignedint
#defineuintunsignedint
#defineulongunsignedlong
#defineBYTEunsignedchar
#defineWORDunsignedint
uintread2543(ucharport);
voidCollectADmodule(uint*ad_result);
externvoidtime(unsignedintucMs);
//延时单位:
ms
/**************************************
2543控制引脚宏定义
*************************************/
sbitAD_EOC=P1^0;
/*TLC2543转换完成指示引脚EOC*/
sbitCLOCK=P1^2;
/*2543时钟*/
sbitAD_CS=P1^3;
/*2543片选*/
sbitD_IN=P1^4;
/*2543输入*/
sbitD_OUT=P1^5;
/*2543输出*/
TLC2543驱动程序
名称:
read2543
功能:
TLC2543驱动模块
输入参数:
port通道号
输出参数:
ad转换值
uintread2543(ucharport)
{
uintad=0;
uchari;
P1=0xeb;
CLOCK=0;
AD_CS=0;
port<
<
=4;
for(i=0;
i<
8;
i++)//读高8位
{
if(D_OUT)ad|=0x01;
D_IN=(bit)(port&
0x80);
CLOCK=1;
CLOCK=0;
port<
=1;
ad<
}
for(i=8;
12;
i++)//读低4位
}
AD_CS=1;
ad>
>
return(ad);
}
/**************************************************
*函数说明:
采集实际端口的数据
**************************************************/
voidCollectADmodule(uint*ad_result)
AD_EOC=1;
read2543(0);
//启动0通道转换,第一次转换结果不准确,丢弃
while(!
AD_EOC){}//等待转换完成
time(3);
AD_EOC){}//等待转换完成
11;
i++){
ad_result[i]=read2543(i+1);
//读转换结果,并启动下次转换
while(!
AD_EOC){}//等待转换完成
time(3);
read2543(i+1);
AD_EOC){}//等待转换完成
主程序:
#include"
common.h"
externvoidCollectADmodule(uint*ad_result);
/********main函数*********/
voidmain(void){
uintidataTLC2543[11];
initUart();
/*初始化串口*/
do{
CollectADmodule(TLC2543);
//调用11通道AD转换
for(i=0;
printf("
TLC2543[%bd]=%u\n"
i,TLC2543[i]);
//打印输出结果
}
printf("
\n\n"
);
//回车2次
time(1000);
}while(TRUE);
AT89C51单片机程序:
REG52.H>
/*specialfunctionregisterdeclarations*/
intrins.h>
/*********************************************************
延时5us,晶振改变时只用改变这一个函数!
1、对于11.0592M晶振而言,需要2个_nop_();
2、对于22.1184M晶振而言,需要4个_nop_();
*入口参数:
无
*返回:
无
*********************************************************/
voiddelay_5us(void)//延时5us,晶振改变时只用改变这一个函数!
_nop_();
//_nop_();
/************delay_50us***************/
voiddelay_50us(void)//延时50us
unsignedchari;
4;
i++)
delay_5us();
/********延时100us******************/
voiddelay_100us(void)//延时100us
delay_50us();
/***********延时单位:
ms*******************/
voidtime(unsignedintucMs)//延时单位:
unsignedcharj;
while(ucMs>
0){
for(j=0;
j<
10;
j++)delay_100us();
ucMs--;
/**********初始化串口波特率************/
voidinitUart(void)/*初始化串口波特率,使用定时器2*/
/*Setuptheserialportfor9600baudat11.0592MHz*/
SCON=0x50;
//串口工作在方式1
RCAP2H=(65536-(3456/96))>
RCAP2L=(65536-(3456/96))%256;
T2CON=0x34;
TI=1;
/*置位TI*/
仿真电路图
仿真结果
PCB图: