实验一 A/D转换实验
【实验目的】
1.熟悉ADC0809与单片机的接口电路连接;
2.掌握ADC0809A/D转换的编程。
【实验内容】
应用ICDE-5208K实验箱上的ADC0809,将电位器提供0-5V的模拟电压转换成数字量,并送数码管的第4位、第5位和第6位显示,显示数值的单位为V,注意小数点的显示。
注:ADC0809是8位A/D转换芯片,分辨力约为0.02V。
【实验原理与设计】
1.硬件电路
A/D转换电路原理图如图1所示。
图1 A/D转换电路原理图
使用电位器电路(D6区),0809转换模块(A3区)及单片机模块(E1区),把相应接口连接,其中ADDA、ADDB、ADDC均接地,CLK接500K时钟(C2区),CS4接E1区的译码地址中的任意一个(例如8000H),读(/RD)、写(/WR)接E1区的/IORD、/IOWR,数据总线接口JX6和JX0(E2区)连接。
显示电路原理图如图2所示。
图2 显示电路原理图
PA口作为位扫描口与数码管显示电路JS接口连接, PB口输出字形码与数码管显示电路JLED接口连接, 8255的数据总线D0-D7、读(/RD)、写(/WR)、端口选择A0、A1和片选/CS已经和单片机接好,各端口地址如下:
PA口:0FF28H;PB口:0FF29H;PC口:0FF2AH;控制口:0FF2BH
2.程序设计
(1)启动0809转换,使用外部数据传送语句:
MOV DPTR, #ADDR0 ; ADDR0为0通道地址
MOV A, #00H ;此句可省略
MOVX @DPTR, A ; 用单片机的/WR信号启动转换
(2)读转换后的数据:
MOV DPTR, #ADDR0 ; ADDR0为0通道地址
MOVX A, @DPTR ;读出转换后的数据
(3)等待0809转换结束,延时等待100us或查询EOC是否为高电平即可。
(4)显示数据调用8255显示程序直接显示数字量。
主程序流程图参见图3。
【实验操作步骤】
1. 按硬件原理图将实验箱连线接好,并将SW3、SW4、SW5拨向“OFF”。
2. 程序调试及记录:
(1)分块调试数据转换、数码管显示;
(2)整体调试:调整电位器,观察数码管显示;
(3)调试过程中出现的问题及解决。
【实验总结】
1.0809工作需要哪些控制信号?
2.0809的IN0通道如何选中的?如果选择IN1通道该如何处理?
【实验报告】
1. 实验题目、姓名、班级、学号、实验时间及实验地点;(5分)
2. 实验内容;(5分)
3. 硬件电路设计不用画原理图,用文字简述下连线过程即可;(10分)
4. 程序设计给出程序流程图及源程序代码;(流程图10分,源程序40分)
5. 实验操作步骤不用详述,给出最后结果说明即可;(10分)
6. 实验总结问题要回答。(20分)
第二篇:实验一 AD转换与数据采集
实验一 A/D转换与数据采集
1、 实验目的
(1) 掌握A/D转换与单片机的接口方法;
(2) 掌握A/D芯片TLC1292的编程方法;
(3) 掌握数据采集程序的设计方法;
2、 实验内容
利用实验开发装置上的TLC1292做A/D转换器,对电位器提供的模拟电压信号进行定时采样,结果在LCD1602上进行显示。
3、 I/O地址·
A/D转换芯片 TLC1292
DAT P1.7 数据位
CLK P1.6 时钟位
CS P1.5 选片位
4、 实验线路
将TLC1292的信号线接单片机的相应的I/O口,将模拟电压输入端连到电位器的电压输出端,并接万用表进行输入电压测量。
5、 实验步骤
在PC机输入源程序并汇编,然后下载到单片机上,进行调试。
调节电位器,电压从0V到5V变化,记录数码管的显示数值。记录到表中。
6、 实验报告
(1) 整理好实验程序和实验记录,进行数据处理分析并做图。
(2) 数据采集中,如何实现精确的定时数据采集?
(3) LCD1602显示程序设计中,显示刷新的时间如何确定?
实验参考程序
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
sbit DAT=P1^7;
sbit CLK=P1^6;
sbit CS=P1^5;
uint LTC1292(void)
{
uint i,x;
CLK=0; DAT=1; CS=0;
for(i=0;i<14;i++)
{
CLK=1;
x<<=1;
if(DAT==1) x++;
CLK=0;
}
CS=1;
return (x&0xfff);
}
void delay(uint t)
{
while(t--);
}
#define uchar unsigned char
#define uint unsigned int
#define LCD_COM 0 // Command
#define LCD_DAT 1 // Data
sbit LcdRS=P2^7;
sbit LcdRW=P2^6;
sbit LcdEN=P2^5;
void time(unsigned int t)
{
unsigned int i;
for(i=0;i<t;i++);
}
void LCD_WRITE(unsigned char x,bit WS)
{
P3=x;
LcdRW=0; LcdRS=WS;
LcdEN=1;
time(50);
LcdEN=0;
}
void LCD_Initial()
{
LCD_WRITE(0x38,LCD_COM); time(120);
LCD_WRITE(0x38,LCD_COM); time(120);
LCD_WRITE(0x01,LCD_COM); time(120);
LCD_WRITE(0x06,LCD_COM); time(120);
LCD_WRITE(0x0c,LCD_COM); time(120);
}
void GotoXY(unsigned char x,unsigned char y)
{
unsigned char code table[4]={0x00,0x40,0x10,0x50};
LCD_WRITE(0x80+table[x]+y, LCD_COM);
}
void PutCh(char m)
{
LCD_WRITE(m,LCD_DAT);
}
void Print(unsigned char *str)
{
while(*str!='\0')
{
PutCh(*str);
str++;
}
}
void main()
{
uint m;
ulong y;
LCD_Initial();
GotoXY(0,0); Print("LTC1292 Test....");
GotoXY(1,0); Print("AD= ");
GotoXY(1,8); Print("V= v");
while(1)
{
delay(2000);
y=LTC1292();
GotoXY(1,3);
PutCh(y/1000+'0');
PutCh((y/100)%10+'0');
PutCh((y/10)%10+'0');
PutCh(y%10+'0');
y=y*500;
m=y/4095;
GotoXY(1,10);
PutCh((m/100)%10+'0');
PutCh('.');
PutCh((m/10)%10+'0');
PutCh(m%10+'0');
}
}
7、 附加要求
要求用LTC1292采集K型热电偶的温度,在LCD1602进行上述实验的结果显示。