基于AD转换模块的单片机仿真和C语言开发Word格式.docx
- 文档编号:5060137
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:18
- 大小:109.06KB
基于AD转换模块的单片机仿真和C语言开发Word格式.docx
《基于AD转换模块的单片机仿真和C语言开发Word格式.docx》由会员分享,可在线阅读,更多相关《基于AD转换模块的单片机仿真和C语言开发Word格式.docx(18页珍藏版)》请在冰点文库上搜索。
1.3ADC0809简介
ADC0809是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式AD转换器。
其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。
(1)主要特性:
1)8路输入通道,8位A/D转换器,即分辨率为8位。
2)具有转换起停控制端。
3)转换时间为100μs(时钟为640kHz时),130μs(时钟为500kHz时)。
4)单个+5V电源供电。
5)模拟输入电压范围0~+5V,不需零点和满刻度校准。
6)工作温度范围为-40~+85摄氏度。
7)低功耗,约15mW。
(2)内部结构
ADC0809是CMOS单片型逐次逼近式A/D转换器,内部结构如图1.1所示,它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型A/D转换器、逐次逼近寄存器、逻辑控制和定时电路组成。
图1.1ADC0809
(3)工作过程
首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。
此地址经译码选通8路模拟输入之一到比较器。
START上升沿将逐次逼近寄存器复位。
下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。
直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。
当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。
转换数据的传送A/D转换后得到的数据应及时传送给单片机进行处理。
数据传送的关键问题是如何确认A/D转换的完成,因为只有确认完成后,才能进行传送。
为此可采用下述三种方式。
1)定时传送方式
对于一种A/D转换其来说,转换时间作为一项技术指标是已知的和固定的。
例如ADC0809转换时间为128μs,相当于6MHz的MCS-51单片机共64个机器周期。
可据此设计一个延时子程序,A/D转换启动后即调用此子程序,延迟时间一到,转换肯定已经完成了,接着就可进行数据传送。
2)查询方式
A/D转换芯片由表明转换完成的状态信号,例如ADC0809的EOC端。
因此可以用查询方式,测试EOC的状态,即可确认转换是否完成,并接着进行数据传送。
3)中断方式
把表明转换完成的状态信号(EOC)作为中断请求信号,以中断方式进行数据传送。
不管使用上述哪种方式,只要一旦确定转换完成,即可通过指令进行数据传送。
首先送出口地址并以信号有效时,OE信号即有效,把转换数据送上数据总线,供单片机接受。
2多通道数据采集系统设计
2.1单片机电路
单片机最小系统如下图所示,各个引脚都已经标出。
图2.1单片机最小系统
其中,振荡电路以及复位电路均由单片机系统自带。
2.2ADC采样电路
由于ADC0809是带地址锁存的模数转换器件,ADDA、ADDB、ADDC为模拟通道选择,编码为000~111分别选中IN0~IN7。
ALE为地址锁存信号,其上升沿锁存ADDA、ADDB、ADDC的信号,译码后控制模拟开关,接通八路模拟输入中相应的一路。
CLK为输入时钟,为AD转换器提供转换的时钟信号,典型工作频率为640KHz。
START为AD转换启动信号,正脉冲启动ADDA~ADDC选中的一路模拟信号开始转换。
OE为输出允许信号,高电平时候打开三态输出缓存器,使转换后的数字量从D0~D7输出。
EOC为转换结束信号,启动转换后EOC变为低电平,转换完成后EOC变成高电平。
图2.2ADC模数转换
2.3显示模块
以下是1602液晶引脚的接线图,中间没有接线的为数据控制端口。
1602字符型通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样:
图2.3LCD1602模块
2.4总原理图
图2.4多通道数据采集总原理图
3软件设计
3.1系统总流程图
此次设计的多通道数据采集系统设置了8路模拟电压输入通道。
仿真中为了便于调节输入的模拟电压,在输入模拟信号时采用电阻分压,最终的采样输入电压便可根据测试需要调节,如下为系统总流程图:
图3.1系统流程图
3.2程序代码
#include<
reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
/********************定义LCD1602接口信息********************************/
sbitlcdrs=P3^0;
//数据命令选择位
sbitlcden=P3^1;
//使能位
sbitlcdrw=P3^2;
//LCD1602数据线接P0口
/********************定义ADC0808接口信息********************************/
sbitADA=P2^0;
sbitADB=P2^1;
sbitADC=P2^2;
sbitEOC=P2^3;
sbitCLK=P2^4;
sbitSTART=P2^5;
sbitOE=P2^6;
/*********************定义数据********************************/
ucharstring1[]="
XuzhiqiangADSp"
;
//初始化数据
ucharstring2[]="
Chanfrom1to8"
uchartab[]="
0.00.00.00.0"
//存放AD采集数据
uchartab1[]="
ucharnum,getdata=0;
uinttemp=0;
/*延时函数*/
voiddelay(uchart)
{
ucharx,y;
for(x=t;
x>
0;
x--)
for(y=110;
y>
y--);
}
voiddelayl(ucharltime)
uchari;
for(i=ltime;
i>
i--)
delay(255);
/*写命令函数*/
voidwrite_com(ucharcom)
lcdrs=0;
P0=com;
delay(10);
lcden=1;
lcden=0;
/*写数据函数*/
voidwrite_data(uchardate)
lcdrs=1;
P0=date;
voiddisp(ucharh,l,uchar*p)
write_com(0x80+h*0x40+l);
while(*p!
='
\0'
)
{
write_data(*p);
p++;
}
/*初始化函数*/
voidLcdInit()
lcdrw=0;
delay(5);
//使能位置低电平
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
disp(0,0,&
string1[0]);
disp(1,0,&
string2[0]);
delayl(20);
voidTimeInit()
{
TMOD=0x10;
//定时器1工作于方式1,16位不重装初值
TH1=(65536-200)/256;
//定时200us(5KHz)
TL1=(65536-200)%256;
EA=1;
ET1=1;
TR1=1;
voidAdTr(bitADDA,ADDB,ADDC,ucharchannel)
START=0;
OE=0;
START=1;
START=0;
//A/D转换启动信号,正脉冲启动选中的模拟信号开始转换
ADA=ADDA;
ADB=ADDB;
ADC=ADDC;
delay(5);
while(EOC==0);
//启动转换后EOC变为L,转换结束后变为H
OE=1;
getdata=P1;
temp=getdata*1.0/255*50;
if(channel<
4)
{
tab[4*channel]=temp/10+0x30;
tab[4*channel+2]=temp%10+0x30;
}
if(channel>
=4)
channel=channel-4;
tab1[4*channel]=temp/10+0x30;
tab1[4*channel+2]=temp%10+0x30;
voidmain()
LcdInit();
TimeInit();
while
(1)
AdTr(0,0,0,0);
delay(5);
AdTr(0,0,1,1);
AdTr(0,1,0,2);
AdTr(0,1,1,3);
AdTr(1,0,0,4);
AdTr(1,0,1,5);
AdTr(1,1,0,6);
AdTr(1,1,1,7);
disp(0,0,tab);
disp(1,0,tab1);
}
voidt1(void)interrupt3using0
TH1=(65536-200)/256;
TL1=(65536-200)%256;
CLK=~CLK;
4实验记录与结果分析
4.1仿真基本流程
在Keil软件中编写好C语言程序,编译生成.hex文件。
图4.1Keil软件图
在Protues软件中画好电路元件图,并将连线接好,见图2.4。
添加仿真文件。
单击右键AT89C52,点击属性编辑,出现文件浏览对话框,加入对应的nengliyuozhan.hex文件,点击确定,见下图4.2。
图4.2单片机属性编辑框
点击仿真按键,LCD1602便可显示8路电压采集信号,见图4.3及图4.4。
4.2仿真结果
图4.3电压设置值
图4.4采集显示值
如图14所示,8路模拟通道电压值分别设置为0、0.5V、1.0V、1.5V、2.0V、3.0V、4.0V、5.0V。
经过系统处理,LCD1602显示的采集值分别为0、0.5V、1.0V、1.5V、2.0V、3.0V、4.0V、5.0V。
系统误差为0。
改变8路输入信号的电压值,数据可及时在LCD1602上显示。
4.3结果分析
通过用protues软件的仿真发现此次设计的系统原理图能够实现电压的正确测量,而且电压的误差较小,1602液晶屏能够正确显示出8路电压测量结果。
整个作品能较好的实现基本功能和扩展功能。
5心得体会
通过与同学的讨论与认真计算设计分析所完成的,课程设计的任务是设计一个多通道数据采集系统。
需要我们综合运用单片机等课程的知识,通过查阅资料、方案论证与选定;
设计和选取电路和元器件;
分析指标及讨论,完成设计任务。
在这次课程设计中,我学会了怎样去根据课题的要求去设计电路和调试电路。
动手能力得到很大的提高。
从中我发现自己并不能很好的熟练去使用我所学到的高频电路知识。
在以后学习中我要加强对使用电路的设计和选用能力。
但由于电路比较简单、定型,而不是真实的生产、科研任务,所以我们基本上能有章可循,完成起来并不困难。
把过去熟悉的定型分析、定量计算逐步,元器件选择等手段结合起来,掌握工程设计的步骤和方法,了解科学实验的程序和实施方法。
这对今后从事技术工作无疑是个很好的训练。
通过这种综合训练,我们可以掌握电路设计的基本方法,提高动手组织实验的基本技能,培养分析解决电路问题的实际本领,为以后毕业设计和从事电子实验实际工作打下基础。
同时也让我充分认识到自己的空想与实践的差别,认识莫眼高手低,莫闭门造车,知识都在不断更新和流动之中,而扎实的基础是一切创造的源泉,只有从本质上理解了原理,才能更好的于疑途寻求柳暗花明,实现在科学界的美好畅游和寻得创造的快乐。
还有就是每次在组团做试验都会感觉特别的充实。
最后真心的感谢老师对本次课程设计的建议和帮助,正是因此大家就才得以圆满的完成这次课程设计!
参考文献
[1]李群芳,张士军,黄建.单片微型计算机与接口技术.北京:
电子工业出版社,2008
[2]李群芳.单片机原理接口与应用.北京:
清华大学出版社,2005
[3]张迎新.单片微型计算机原理、应用及接口技术.北京:
国防工业出版社,1999
[4]高峰.单片微机应用系统设计及使用技术.北京:
机械工业出版社,2007
[5]彭伟.单片机C语音程序设计实例基于protues仿真.北京:
电子工业出版社,2007
[6]郭惠.单片机C语言程序设计完全自学手册.北京:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 AD 转换 模块 单片机 仿真 语言 开发
![提示](https://static.bingdoc.com/images/bang_tan.gif)