单片机实验(AD转换)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TLC2543的工作时序如图7.41所示。
3. TLC2543与89C52的接口电路
下图是89C52与TLC2543的接口电路,TLC2543的5条接口线可接到单片机的任何通用双向I/O口上。
(二)并行D/A转换器DAC0832
1.D/A转换是把数字量转换成模拟量的变换,实验台上D/A电路输出的是模拟电压信号。要实现实验要求,比较简单的方法是产生三个波形的表格,然后通过查表来实现波形显示。
sbit AD_EOC = P1^0; /* TLC2543转换完成指示引脚EOC */
sbit CLOCK = P1^2; /*2543时钟*/
sbit AD_CS = P1^3; /wenku.baidu.com2543片选*/
sbit D_IN = P1^4; /*2543输入*/
sbit D_OUT = P1^5; /*2543输出*/
U(0∽-5V)=Uref/256×N
U(-5V∽+5V)=2·Uref/256×N-5V (这里Uref为+5V)
4、DAC0832与89C52的接口电路
四、实验内容
1.按照上图设计仿真电路原理图。
2.编写程序实现采集AI0~AI11十二个输入通道模拟输入,并转换结果从串口送到模拟终端显示。
3.编写程序实现产生方波、三角波和梯形波的程序,并在虚拟示波器上显示波形。
do{
CollectADmodule(TLC2543);//调用11通道AD转换
for(i=0;i<11;i++){
printf("TLC2543[%bd]=%u\n",i,TLC2543[i]);//打印输出结果
}
printf("\n\n");//回车2次
time(1000);
}while(TRUE);
void CollectADmodule(uint *ad_result)
{
uchar i;
AD_EOC=1;
read2543(0); //启动0通道转换,第一次转换结果不准确,丢弃
while(!AD_EOC){}//等待转换完成
time(3);
read2543(0);
Main.c程序
#include "common.h"
extern void CollectADmodule(uint *ad_result);
/******** main函数*********/
void main (void) {
uint idata TLC2543[11];
uchar i;
initUart(); /*初始化串口*/
2、产生锯齿波和三角波的表格只需由数字量的增减来控制,同时要注意三角波要分段来产生。要产生正弦波,较简单的方法是造一张正弦数字量表。即查函数表得到的值转换成十六进制数填表。D/A转换取值范围为一个周期,采样点越多,精度越高些。本例采用的采样点为256点/周期。
3、8位D/A转换器的输入数据与输出电压的关系为
#define ulong unsigned long
#define BYTEunsigned char
#define WORDunsigned int
#define TRUE 1
#define FALSE 0
extern void initUart(void);/*初始化串口*/
extern void time(unsigned int ucMs);//延时单位:ms
TLC2543是TI公司的TLC2543 12位串行A/D转换器,使用开关电容逐次逼近技术完成A/D转换过程。由于是串行输入结构,能够节省80C51系列单片机的I/O资源,而且价格适中。
2. TLC2543的工作过程
TLC2543的工作过程分为两个周期:I/O周期和实际转换周期。
1)I/O周期
I/O周期由外部提供的I/O CLOCK定义,延续8、12或16个时钟周期,决定于选定的输出数据长度。器件进入I/O周期后同时进行两种操作。
/**************************************
TLC2543驱动程序
*************************************/
/**************************************
名称:read2543
功能:TLC2543驱动模块
}
common.h程序
#include <REG52.H> /* special function register declarations */
#include <stdio.h> /* prototype declarations for I/O functions */
#include <intrins.h>
80C51.BUS
总线型AT89C52单片机
U2
74LS373
锁存器
U3
74LS04
反相器
U4 U5
74LS08
二输入与门
U6
DAC0832
并行接口A/D转换器
U7
OPAMP
通用理想运算放大器
OSCILLOSCOPE
虚拟示波器
三、相关知识
(一)串行A/D转换器TLC2543
1. TLC2543的特性与引脚
{
/* Setup the serial port for 9600 baud at 11.0592MHz */
SCON = 0x50; //串口工作在方式1
RCAP2H=(65536-(3456/96))>>8;
RCAP2L=(65536-(3456/96))%256;
T2CON=0x34;
TI = 1; /*置位TI*/
(1)在I/O CLOCK的前8个脉冲的上升沿,以MSB前导方式从DATA INPUT端输入8位数据流到输入寄存器。其中前4位为模拟通道地址,控制14通道模拟多路器从11个模拟输入和3个内部自测电压中,选通一路送到采样保持电路,该电路从第4个I/O CLOCK脉冲的下降沿开始,对所选信号进行采样,直到最后一个I/O CLOCK脉冲的下降沿。I/O周期的时钟脉冲个数与输出数据长度(位数)有关,输出数据长度由输入数据的D3、D2选择为8、12或16位。当工作于12或16位时,在前8个时钟脉冲之后,DATA INPUT无效。
void CollectADmodule(uint *ad_result);
extern void time(unsigned int ucMs);//延时单位:ms
/**************************************
2543控制引脚宏定义
*************************************/
实验三 A/D、D/A转换实验
一、实验目的
1.熟悉DAC0832并行接口数模转换器和TLC2543串行接口模数转换器的基本原理和编程方法。
2.进一步熟悉单片机应用系统开发步骤和方法。
二、实验电路
实验所用元件清单如下表所示:
1.串行A/D转换器TLC2543
元件编号
元器件名称
说明
U1
AT89C52.BUS
void delay_5us(void)//延时5us,晶振改变时只用改变这一个函数!
{
_nop_();
_nop_();
//_nop_();
//_nop_();
}
/************ delay_50us ***************/
void delay_50us(void)//延时50us
ad>>=1;
return(ad);
}
/**************************************************
*函数说明:采集实际端口的数据
*入口参数:
*ad_result存各模拟通道的结果
**************************************************/
{
if(D_OUT) ad|=0x01;
D_IN=(bit)(port&0x80);
CLOCK=1;
CLOCK=0;
port<<=1;
ad<<=1;
}
for(i=8;i<12;i++)//读低4位
{
if(D_OUT) ad|=0x01;
CLOCK=1;
CLOCK=0;
ad<<=1;
}
AD_CS=1;
输入参数:port通道号
输出参数:ad转换值
*************************************/
uint read2543(uchar port)
{
uint ad=0;
uchar i;
P1=0xeb;
CLOCK = 0;
AD_CS = 0;
port<<=4;
for(i=0;i<8;i++)//读高8位
void time(unsigned int ucMs)//延时单位:ms
{
unsigned char j;
while(ucMs>0){
for(j=0;j<10;j++) delay_100us();
ucMs--;
}
}
/**********初始化串口波特率************/
void initUart(void)/*初始化串口波特率,使用定时器2*/
(2)在DATAOUT端串行输出8、12或16位数据。当 保持为低时,第一个数据出现在EOC的上升沿;若转换由 控制,则第一个输出数据发生在 的下降沿。这个数据串是前一次转换的结果,在第一个输出数据位之后的每个后续位均由后续的I/O CLOCK脉冲下降沿输出。
2)转换周期
在I/O周期的最后一个I/O CLOCK脉冲下降沿之后,EOC变低,采样值保持不变,转换周期开始,片内转换器对采样值进行逐次逼近式A/D转换,其工作由与I/O CLOCK同步的内部时钟控制。转换完成后EOC变高,转换结果锁存在输出数据寄存器中,待下一个I/O周期输出。I/O周期和转换周期交替进行,从而可以减小外部的数字噪声对转换精度的影响。
#define word unsigned int
#define uint unsigned int
#define ulong unsigned long
#define BYTEunsigned char
#define WORDunsigned int
uint read2543(uchar port);
{
unsigned char i;
for(i=0;i<4;i++)
{
delay_5us();
}
}
/********延时100us ******************/
void delay_100us(void)//延时100us
{
delay_50us();
delay_50us();
}
/***********延时单位:ms *******************/
}
Tlc2543.c程序
#include <reg52.h>
#include <intrins.h>
#include <Absacc.h>
#include <string.h>
#include <ctype.h>
#define byte unsigned char
#define uchar unsigned char
五、参考程序
1、A/D转换接口实验
COMMON.c程序
#include <REG52.H> /* special function register declarations */
#include <intrins.h>
/*********************************************************
#include <Absacc.h>
#include <string.h>
#include <ctype.h>
#define byte unsigned char
#define uchar unsigned char
#define word unsigned int
#define uint unsigned int
总线型AT89C52单片机
U2
TLC2543
串行接口A/D转换器
U3
OP1P
通用理想运算放大器
R1
POT-HG
中间抽头电位器
VIRTUAL TERMINAL
串口虚拟终端
DC VOLTMETER
直流电压表
DC Generators
直流信号发生器
2.并行D/A转换器DA0832
元件编号
元器件名称
说明
U1
*函数说明:延时5us,晶振改变时只用改变这一个函数!
1、对于11.0592M晶振而言,需要2个_nop_();
2、对于22.1184M晶振而言,需要4个_nop_();
*入口参数:无
*返回:无
*********************************************************/
3. TLC2543与89C52的接口电路
下图是89C52与TLC2543的接口电路,TLC2543的5条接口线可接到单片机的任何通用双向I/O口上。
(二)并行D/A转换器DAC0832
1.D/A转换是把数字量转换成模拟量的变换,实验台上D/A电路输出的是模拟电压信号。要实现实验要求,比较简单的方法是产生三个波形的表格,然后通过查表来实现波形显示。
sbit AD_EOC = P1^0; /* TLC2543转换完成指示引脚EOC */
sbit CLOCK = P1^2; /*2543时钟*/
sbit AD_CS = P1^3; /wenku.baidu.com2543片选*/
sbit D_IN = P1^4; /*2543输入*/
sbit D_OUT = P1^5; /*2543输出*/
U(0∽-5V)=Uref/256×N
U(-5V∽+5V)=2·Uref/256×N-5V (这里Uref为+5V)
4、DAC0832与89C52的接口电路
四、实验内容
1.按照上图设计仿真电路原理图。
2.编写程序实现采集AI0~AI11十二个输入通道模拟输入,并转换结果从串口送到模拟终端显示。
3.编写程序实现产生方波、三角波和梯形波的程序,并在虚拟示波器上显示波形。
do{
CollectADmodule(TLC2543);//调用11通道AD转换
for(i=0;i<11;i++){
printf("TLC2543[%bd]=%u\n",i,TLC2543[i]);//打印输出结果
}
printf("\n\n");//回车2次
time(1000);
}while(TRUE);
void CollectADmodule(uint *ad_result)
{
uchar i;
AD_EOC=1;
read2543(0); //启动0通道转换,第一次转换结果不准确,丢弃
while(!AD_EOC){}//等待转换完成
time(3);
read2543(0);
Main.c程序
#include "common.h"
extern void CollectADmodule(uint *ad_result);
/******** main函数*********/
void main (void) {
uint idata TLC2543[11];
uchar i;
initUart(); /*初始化串口*/
2、产生锯齿波和三角波的表格只需由数字量的增减来控制,同时要注意三角波要分段来产生。要产生正弦波,较简单的方法是造一张正弦数字量表。即查函数表得到的值转换成十六进制数填表。D/A转换取值范围为一个周期,采样点越多,精度越高些。本例采用的采样点为256点/周期。
3、8位D/A转换器的输入数据与输出电压的关系为
#define ulong unsigned long
#define BYTEunsigned char
#define WORDunsigned int
#define TRUE 1
#define FALSE 0
extern void initUart(void);/*初始化串口*/
extern void time(unsigned int ucMs);//延时单位:ms
TLC2543是TI公司的TLC2543 12位串行A/D转换器,使用开关电容逐次逼近技术完成A/D转换过程。由于是串行输入结构,能够节省80C51系列单片机的I/O资源,而且价格适中。
2. TLC2543的工作过程
TLC2543的工作过程分为两个周期:I/O周期和实际转换周期。
1)I/O周期
I/O周期由外部提供的I/O CLOCK定义,延续8、12或16个时钟周期,决定于选定的输出数据长度。器件进入I/O周期后同时进行两种操作。
/**************************************
TLC2543驱动程序
*************************************/
/**************************************
名称:read2543
功能:TLC2543驱动模块
}
common.h程序
#include <REG52.H> /* special function register declarations */
#include <stdio.h> /* prototype declarations for I/O functions */
#include <intrins.h>
80C51.BUS
总线型AT89C52单片机
U2
74LS373
锁存器
U3
74LS04
反相器
U4 U5
74LS08
二输入与门
U6
DAC0832
并行接口A/D转换器
U7
OPAMP
通用理想运算放大器
OSCILLOSCOPE
虚拟示波器
三、相关知识
(一)串行A/D转换器TLC2543
1. TLC2543的特性与引脚
{
/* Setup the serial port for 9600 baud at 11.0592MHz */
SCON = 0x50; //串口工作在方式1
RCAP2H=(65536-(3456/96))>>8;
RCAP2L=(65536-(3456/96))%256;
T2CON=0x34;
TI = 1; /*置位TI*/
(1)在I/O CLOCK的前8个脉冲的上升沿,以MSB前导方式从DATA INPUT端输入8位数据流到输入寄存器。其中前4位为模拟通道地址,控制14通道模拟多路器从11个模拟输入和3个内部自测电压中,选通一路送到采样保持电路,该电路从第4个I/O CLOCK脉冲的下降沿开始,对所选信号进行采样,直到最后一个I/O CLOCK脉冲的下降沿。I/O周期的时钟脉冲个数与输出数据长度(位数)有关,输出数据长度由输入数据的D3、D2选择为8、12或16位。当工作于12或16位时,在前8个时钟脉冲之后,DATA INPUT无效。
void CollectADmodule(uint *ad_result);
extern void time(unsigned int ucMs);//延时单位:ms
/**************************************
2543控制引脚宏定义
*************************************/
实验三 A/D、D/A转换实验
一、实验目的
1.熟悉DAC0832并行接口数模转换器和TLC2543串行接口模数转换器的基本原理和编程方法。
2.进一步熟悉单片机应用系统开发步骤和方法。
二、实验电路
实验所用元件清单如下表所示:
1.串行A/D转换器TLC2543
元件编号
元器件名称
说明
U1
AT89C52.BUS
void delay_5us(void)//延时5us,晶振改变时只用改变这一个函数!
{
_nop_();
_nop_();
//_nop_();
//_nop_();
}
/************ delay_50us ***************/
void delay_50us(void)//延时50us
ad>>=1;
return(ad);
}
/**************************************************
*函数说明:采集实际端口的数据
*入口参数:
*ad_result存各模拟通道的结果
**************************************************/
{
if(D_OUT) ad|=0x01;
D_IN=(bit)(port&0x80);
CLOCK=1;
CLOCK=0;
port<<=1;
ad<<=1;
}
for(i=8;i<12;i++)//读低4位
{
if(D_OUT) ad|=0x01;
CLOCK=1;
CLOCK=0;
ad<<=1;
}
AD_CS=1;
输入参数:port通道号
输出参数:ad转换值
*************************************/
uint read2543(uchar port)
{
uint ad=0;
uchar i;
P1=0xeb;
CLOCK = 0;
AD_CS = 0;
port<<=4;
for(i=0;i<8;i++)//读高8位
void time(unsigned int ucMs)//延时单位:ms
{
unsigned char j;
while(ucMs>0){
for(j=0;j<10;j++) delay_100us();
ucMs--;
}
}
/**********初始化串口波特率************/
void initUart(void)/*初始化串口波特率,使用定时器2*/
(2)在DATAOUT端串行输出8、12或16位数据。当 保持为低时,第一个数据出现在EOC的上升沿;若转换由 控制,则第一个输出数据发生在 的下降沿。这个数据串是前一次转换的结果,在第一个输出数据位之后的每个后续位均由后续的I/O CLOCK脉冲下降沿输出。
2)转换周期
在I/O周期的最后一个I/O CLOCK脉冲下降沿之后,EOC变低,采样值保持不变,转换周期开始,片内转换器对采样值进行逐次逼近式A/D转换,其工作由与I/O CLOCK同步的内部时钟控制。转换完成后EOC变高,转换结果锁存在输出数据寄存器中,待下一个I/O周期输出。I/O周期和转换周期交替进行,从而可以减小外部的数字噪声对转换精度的影响。
#define word unsigned int
#define uint unsigned int
#define ulong unsigned long
#define BYTEunsigned char
#define WORDunsigned int
uint read2543(uchar port);
{
unsigned char i;
for(i=0;i<4;i++)
{
delay_5us();
}
}
/********延时100us ******************/
void delay_100us(void)//延时100us
{
delay_50us();
delay_50us();
}
/***********延时单位:ms *******************/
}
Tlc2543.c程序
#include <reg52.h>
#include <intrins.h>
#include <Absacc.h>
#include <string.h>
#include <ctype.h>
#define byte unsigned char
#define uchar unsigned char
五、参考程序
1、A/D转换接口实验
COMMON.c程序
#include <REG52.H> /* special function register declarations */
#include <intrins.h>
/*********************************************************
#include <Absacc.h>
#include <string.h>
#include <ctype.h>
#define byte unsigned char
#define uchar unsigned char
#define word unsigned int
#define uint unsigned int
总线型AT89C52单片机
U2
TLC2543
串行接口A/D转换器
U3
OP1P
通用理想运算放大器
R1
POT-HG
中间抽头电位器
VIRTUAL TERMINAL
串口虚拟终端
DC VOLTMETER
直流电压表
DC Generators
直流信号发生器
2.并行D/A转换器DA0832
元件编号
元器件名称
说明
U1
*函数说明:延时5us,晶振改变时只用改变这一个函数!
1、对于11.0592M晶振而言,需要2个_nop_();
2、对于22.1184M晶振而言,需要4个_nop_();
*入口参数:无
*返回:无
*********************************************************/