当前位置:文档之家› 八位模拟信号转换成数字信号

八位模拟信号转换成数字信号

八位模拟信号转换成数字信号的实验设计报告
一、实验目的
1、了解A/D转换的基本知识及ADC0804的工作原理。

2、掌握基本的编程方法。

3、熟练掌握protel画电路原理图及PCB板的方法。

4、掌握运用keil软件编写单片机C语言。

二、基本原理
1、所谓A/D转换此就是模拟/数字转换器(ADC),是将输入的模拟信号转换
成数字信号。

信号输入端可以使传感器或转换器的输出,而ADC输出的数字信号可以提供给微处理器,以便更广泛地应用。

2、AT89S52的基本介绍:
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可
编程Flash 存储器,与工业80C51 产品指令和引脚完全兼容,此实验中
采用AT89S52芯片。

3、ADC0804的主要技术指标:
(1) 高阻抗状态输出(2) 分辨率:8 位(0~255)
(3) 存取/转换时间:135 ms/100 ms (4) 模拟输入电压范围:0V~5V
(5) 参考电压:2.5V (6) 工作电压:5V
3、ADC0804电压输入与数字输出关系
三、电路原理图
四、原理图接线分析
1、ADC0804芯片主要端口接线原理:
(1) (CS ):片选端。

与RD、WR 接脚的输入电压高低一起判断读取或写入
与否,此实验直接接地让其处于选通状态。

(2) ( RD ):当CS 、RD 皆为低位准(low) 时,ADC0804 会将转换后的数字
讯号经由DB7 ~ DB0 输出至其它处理单元。

(3) (WR ):启动转换的控制讯号。

当CS 、WR 皆为低位准(low) 时,ADC0804
做清除的动作,系统重置。

当WR 由0→1且CS =0 时,ADC0804会开始转换信号,此时INTR 设定为高位准(high)。

(4) (CLK IN、CLKR):频率输入/输出。

频率输入可连接处理单元的讯号频率
范围为100 kHz 至800 kHz。

而频率输出频率最大值无法大于640KHz,一般可选用外部或内部来提供频率。

在CLK R 及CLK IN 加上电阻及电容,构成RC振荡电路,则可产生ADC 工作所需的时序,其频率约为:f=1/1.1RC ≈640KHz,
(5) ( INTR ):中断请求。

转换期间为高位准(high),等到转换完毕时INTR 会
变为低位准(low)告知其它的处理单元已转换完成,可读取数字数据,此实验不用中断控制,接去MCU其中某个引脚。

(6) (VIN(+)、VIN(-)):差动模拟讯号的输入端。

输入电压VIN=VIN(+) -VIN(-),
此图使用单端输入,而将VIN(-)接地,VIN(+)由电位器R1控制其电压从0~5V 变化,产生了模拟量。

(7) (A GND):模拟电压的接地端。

(8) (VREF/2):滑动变阻器R2和R3利用分压原理提供ADC芯片的基准电压。

2、AT89S52芯片主要端口接线原理:
(1) XTAL2、XTAL1:晶振电路中电容C2、C3选取30pF。

(2) REST:复位电路中电容C4隔直作用,Urest=R6/(R5+R6),因为高电平有
效,故R5取小阻值1K, R6取小阻值10K.
(3) P0:内部无上拉电阻,故接上1K的上拉排阻。

(3)P1:流水灯采用共阳极接法。

五、控制原理及实验内容
控制原理
根据ADC0804芯片主要端口接线原理部分的介绍,工作控制过程可简单描述如下:调节电位器R4产生连续变化的电压值,ADC0804启动转换,产生与之对应的信号送到单片机中,其高低电平从而控制D1~D8发光二级管的亮灭,这就实现了模拟信号(连续的电压值)到数字信号(高低电平1、0)的转换。

实验内容
1、ADC0804将输入模拟信号转换成数字值输出到P1,使对应的LED亮。

如输入3V,ADC0804的输出应为96H=10010110B,此数字信号送入MCU 的累加器,然后累加器再送至P1,使对应的LED亮。

2、先将ADC0804的参考电压VREF调整为2.56V。

3、从ADC0804的VIN接一个可变电阻器,由0V调到5V,根据其关系表观察P1的LED亮灭变化情况和明暗程度。

六、编写程序
注:ADC0804的片选端直接接地,一直处于选通状态,编程时可无需操作
汇编程序:
ORG 00H
START: MOVX @R0,A ;使P0为高阻抗,并使ADC0804开始转换,/WR=0 JB P2.0,$ ;检测ADC0804的INTR=0?若是,则转换完成
MOVX A,@R0 ;将转换好的数据载入累加器
CPL A ;将累加器的值反相,
MOV P1,A ;输出至P1显示
CALL DELAY ;延时50ms
JMP START
DELAY: MOV R6,#100 ;延时50ms的子程序
D1: MOV R5,#248
DJNZ R5,$
DJNZ R6,D1
RET
END
C程序:
#include<reg52.h> //头文件
#define uchar unsigned char //宏定义
#define uint unsigned int
sbit wr=P3^6; //对AD的WR端口的位定义
sbit rd=P3^7; //对AD的RD端口的位定义
void delay(uint z) //声明延时子函数
{
uint t1,y; //定义t1,y数据类型
for(t1=z;t1>0;t1--)
for(y=110;y>0;y--);
}
void init(); //声明初始化子函数
void start(); //声明启动子函数
void main() //主函数
{
init(); //先初始化
while(1) //进入死循环
{
start(); //启动
delay(20); //延时
rd=0; //启动AD转换
P0=p1; //将P0信号送给P1口(流水灯接在P1)
delay(10); //AD工作频率较低,启动转换后多留点时间rd=1;
delay(10); //延长转换时间
}
}
void init()
{
P0=0; //选通片选及P0口
}
void start()
{
wr=1; //启动转换过程WR先后是1、0、1
wr=0;
wr=1;
}
七、实验总结
实验在极少情况下,亮灭状况有可能会出错。

因为AT89C52与ADC0804芯片的时钟频率不一致,而亮灭在极短时间内完成的。

若进行微调,可调节CLK IN、CLKR端口的R4;若想得到最佳效果,可在ADC0804的DB0~DB7与AT89C52的P0.0~P0.7之间接一个缓冲器,如74LS373等。

相关主题