- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
AD转换实验,南京理工大学紫金学院单片机实验报告
单片机实验报告
实验名称: A/D转换实验
姓 名: 学 号: 班 级: 通信 时 间: 2013.12
南京理工大学紫金学院电光系
实验目的
理解A/D转换工作原理。
学习掌握ADC0809的A/D转换原理和并行A/D转换接口的编程方法。
学习使用并行模数转换芯片ADC0809进行电压信号的采样和数据处理。
实验原理
单片机给ADC提供一个启动转换信号后,ADC转换开始,当A/D转换结束时,ADC输出一个转换转换结束标志信号,通知单片机读取转换结果。单片机检验判断A/D转换结果的方法一般有中断和查询俩种。整个A/D转换都是在一定的时钟作用下完成的,其频率是决定芯片转换速度的基础。
实验内容
1.开始试验前应做好准备工作:?
(1)阅读ADC0809的数据手册,熟悉ADC0809功能及A/D转换工作原理;?
(2)认真阅读2.2节内容,熟悉利用DP-51PROC进行调试仿真的基本操作流程。?
2、了解本次实验涉及的各功能模块电路结构,其中,D2区有两个独立电位器,部分的电路原理图如图所示;A2区的PARK2区是ADC0809的工作区,如图所示
电位器电路原理图
?ADC0809芯片部分电路原理图
3、?系统板硬件连线?
(1)将ADC809PACK模块(选配件)插入PARK2区;?
(2)将D2区1KΩ电位器和10KΩ电位器的左端金属孔通过导线连接到的该区GND金属孔,而右端金属孔通过导线连接到该区的VCC金属孔;?
(3)将D2区的1KΩ电位器的中间金属孔连接到A7区的P2-IO2金属孔,而D2区10KΩ电位器的中间金属孔连接到A7区的P2-IO1金属孔;?
(4)将A7区的P2-IO3-P2-IO5分别连接到A2区的A2-A0;?
(5)将A7区的P2-CS连接到A2区的A15;?
(6)运行编写好的软件程序,每次跑到断点就会停止,此时观察转换得结果与数字万用表测量的结果相比较是否正确(所需观察的存储单元或者变量在程序中依照注释执行)
(7)改变1KΩ电位器和/或10KΩ电位器的旋转位置,用数字万用表测量中间金属孔的电压,再次运行程序至断点处,观察转换的结果是否正确。
4.程序设计
程序流程图
思考题
采用中断方法等待ADC0809转换结束
1.C语言程序
#includereg51.h
#includeabsacc.h
#define adc0 XBYTE[0X7FF0]
#define uint unsigned int
#define uchar unsigned char
uchar num,cnt,flag;
float dat;
uint voltmeter,m,n,p;
uchar dis_dat[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void inint()
{
TMOD=0x10;
TH1=(65536-46083)/256;
TL1=(65536-46083)%256;
TR1=1;
EA=1;
ET1=1;
EX0=1;
cnt=20;
adc0=0;
num=0;
}
void delay(uint n)
{
uint i;
for(i=0;in;i++);
}
void display(uchar a,b,c)
{
P2=0x01;
P1=dis_dat[a];
delay(100);
P2=0x02;
P1=dis_dat[b];
delay(100);
P2=0x04;
P1=dis_dat[c];
delay(100);
P2=0x08;
P1=0xc1;
delay(100);
P2=0x01;
P1=0x7f;
delay(100);
}
void main()
{
inint();
while(1)
{
if(flag==1)
{
flag=0;
dat= num/255.0*5.0;
}
EX0=0;
voltmeter=(uint)(dat*100);
m=voltmeter/100;
n=voltmeter/10%10;
p=voltmeter%10;
display(m,n,p);
EX0=1;
}
}
void time_1()interrupt 3
{
TH1=(65536-46083)/256;
TL1=(65536-46083)%256;
cnt--;
if(cnt==0)
{
cnt=20;
flag=
原创力文档


文档评论(0)