基于51单片机的模数转换(AD)实验设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
HEFEI UNIVERSITY
单片机课程综述报告
主题基于51单片机的模数转换(A/D)实验设计姓名郭丽丽
专业通信工程
学号 1105021006 班级 11级通信(1)班
指导老师汪济洲
2014 年 6 月 2 日
目录
1.实验目的与要求 (1)
1.1实验目的 (1)
1.2实验要求 (1)
2.实验原理 (1)
2.1电路原理图 (1)
2.2 Proteus7.4 软件简介 (2)
3、实验步骤 (6)
4、源程序代码 (6)
5. 实验结果分析 (10)
6.总结 (10)
1.实验目的与要求
1.1实验目的
1.掌握A/D转换与单片机的接口方法
2.了解A/D芯片ADC0809转换性能及编程方法
3.通过实验了解单片机如何进行数据采集
1.2实验要求
1.采用查询法或中断法编程进行A/D采集;
2.采集0~5V范围的电压信号(以电位器模拟被测信号),使用4位串行数码管显示0~5V数值,小数点保留三位,实现简易电压表功能。
2.实验原理
2.1电路原理图
熟悉8051的输入输出端口的使用方法, 本实验的电路连接如图1所示。
图1 连接电路
2.2 Proteus7.4 软件简介
Proteus是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:
①实现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。
②支持主流单片机系统的仿真。目前支持的单片机类型有:ARM7(LPC21xx)、8051/52系列、AVR系列、PIC10/12/16/18系列、HC11系列以及多种外围芯片。
③提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如Keil C51 uVision2、MPLAB等软件。
④具有强大的原理图绘制功能。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。
其操作界面如下图所示:
图2 Proteus操作页面
2.模数转换(A/D)实验设计
ADC0809简介
ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。它是逐次逼近式A/D转换器,可以和单片机直接接口。
图3 ADC0809的内部逻辑结构
图4 ADC0809芯片
ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。
ADC0809的内部逻辑结构:
由下图可知,ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。
图5 ADC0809的内部逻辑结构
ADC0809各脚功能如下:
D7-D0:8位数字量输出引脚。
IN0-IN7:8位模拟量输入引脚。
VCC:+5V工作电压。
GND:地。
REF(+):参考电压正端。
REF(-):参考电压负端。
START:A/D转换启动信号输入端。
ALE:地址锁存允许信号输入端。
(以上两种信号用于启动A/D转换)
EOC:转换结束信号输出引脚,开始转换时为低电平,当转换结束时为高电平。
OE:输出允许控制端,用以打开三态数据输出锁存器。
CLK:时钟信号输入端(一般为500KHz)。
A、B、C:地址输入线。
3、实验步骤
1.Proteus软件中绘制单片机实验电路;
2.在Keil C软件中编制汇编或C程序,软件调试;
3.在Proteus中加载实验程序,观察并记录实验结果。
4、源程序代码
#include
//*******************引脚定义********************//
sbit dis_ab=P3^0;
sbit dis_clk=P3^1;
sbit CLK=P3^4;
sbit ST=P3^5;
sbit EOC=P3^6;
sbit OE=P3^7;
//*****************7SEG-LED段码表****************//
Unsigned char code
LedTab[21]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77, 0x7c,0x39,0x5e,0x79,0x71,0x76,0x73,0x3e,0x00, 0x40};
//************************************************//
unsigned char data num_1; //存储十六进制转化为两个单十六进制数的值
unsigned char data num_2;
unsigned char data num_3;
unsigned char data num_4;
void Delay(unsigned int x);
void DispClk(void);
void DisplaySerial(unsigned char x);
void ClearLed(unsigned char x);
void HexToDec(unsigned int x);
void main()
{
unsigned long num;
ST=0;
OE=0;
while(1)
{
ST=1; //发高脉冲启动采样信号
ST=0;
do{CLK=!CLK;}//提供采样时钟信号,直到采样结束为止
while(!EOC);
OE=1;
num=P1; //读取采样值
num=5000*num/255; //将0~#FFH采样值转化为0~5V数值(0~