计算机控制技术
实验报告
题目:专业:姓名:学号:指导老师:
一.实验目的实验一A/D转换实验
1.学习掌握模/数信号转换的基本原理;
2.掌握ADC0809芯片的使用方法。
二.实验设备
PC机一台。
三.实验内容及步骤
(一)ADC0809在8086计算机系统中的应用
XXX芯片介绍略
2.接口实验单元中的ADC0809芯片线路
图1-2系统中的ADC0809线路
3.实验接线和实验要求
(1).实验按下图1-3实验线路连线
图1-3ADC0809应用实验线路
(2).一般在实际应用系统中应该接精确+5V,以提高转换精度,ADC0809片选信号0809CS和/IOW、/IOR经逻辑组合后,去控制ADC0809的ALE、START、ENABLE信号。ADC0809的转换结束信号EOC未接,如果以中断方式实现数据采集,需将EOC信号线接至中断控制器8259A的中断源输入通道。本实验以延时方式等待A/D转换结束,ADC0809的通道号选择线ADD-A、ADD-B、ADD-C接系统数据线的低3位,因此ADC0809的8个通道值地址分别为00H、01H、02H、03H、04H、05H、06H、07H。
(3).启动本A/D转换只需如下三条命令:
MOVD_,ADPORT;ADPORT为ADC0809端口地址。
MOVAL,DATA;DATA为通道值。
MOVD_,AL;通道值送端口。
读取A/D转换结果用下面二条指令:
MOVD_,ADPORT
INAL,D_
(4).实验软件原理框图
(5).试验程序如下:
CODESEGMENT
ASSUMECS:CODE
ADPORTEQU0010h
ORG1000H
START:JMPADCONTORLADCONTORL:CALLFORMATADCON:MOVA_,00
MOVD_,ADPORT
OUTD_,AL
MOVC_,0500H
DELAY:LOOPDELAYMOVD_,ADPORTINAL,D_
CALLCONVERS
CALLDISP
JMPADCON
CONVERS:MOVAH,AL
ANDAL,0FHMOVB_,077AHMOVDS:[B_],ALINCB_
MOVAL,AHANDAL,0F0HMOVCL,04HSHRAL,CLMOVDS:[B_],AL
disp:movd_,077Fh
movah,20hdisp0:movc_,00ffh
movb_,d_movbl,ds:[b_]movbh,0hpushd_
movd_,0ff22h
moval,cs:[b_+1060h]OUTD_,ALmovd_,0ff21hmoval,ahOUTD_,ALdisp1:loopdisp1
popd_
decd_
shrah,01hjnzdisp0
movd_,0ff22h
moval,0ffh
OUTD_,AL
data1:db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0ah
db86h,8eh,0ffh,0ch,h,0deh,0c7h,8ch,0f3h,0bfh
FORMAT:MOVB_,0
MOVWORDPTRDS:[B_+077AH],0000H
ADDB_,2
MOVWORDPTRDS:[B_+077AH],0009H
ADDB_,2
MOVWORDPTRDS:[B_+077AH],0008H
CODEENDS
ENDSTART
(二)掌握ADC0809在51系列单片机中的使用方法
1.系统内部ADC0809的线路同图1-2。实验线路如下图1-4所示,图中采用部分译码法,地址为7FF8H~7FFFH,分别对应着8个模拟输入通道。
图1-451单片机实验ADC0809应用实验线路
2.实验接线和实验要求
(1).实验按图1-4实验线路连线
(2).由图1-4实现连线电路可知,主要由AD转换器AD0809,频率发生器SUN7474,单片机ATS51及显示用数码管组成。
AD0809的启动方式为脉冲启动方式,启动信号START启动后开始转换,EOC信号在START的下降沿10us后才变为无效的低电平。这要求查询程序待EOC无效后再开始查询,转换完成后,EOC输出高电平,再由OE变为高电平来输出转换数据。我们在设计程序时可以利用EOC信号来通知单片机(查询法或中断法)读入已转换的数据,也可以在启动AD0809后经适当的延时再读入已转换的数据。ATS51的输出频为晶振频的1/6(2MHZ),ATS1与SUN7474连接经与7474的ST脚提供AD0809的工作时钟。AD0809的工作频范围为
10KHZ-1280KHZ,当频率范围为500KHZ时,其转换速度为128us。AD0809的数据输出公式为:Dout=Vin255/5=Vin51,其中Vin为输入模拟电压,Vout为输出数据。
当输入电压为5V时,读得的数据为255再乘以2,得510。我们用51098%得499,再将百位数码管的小数点点亮,显示为4.99V,显示值与输入值基本吻合。
(3).软件设计思路及程序流程:
编程思路:
①向AD0809写入通道号并启动转换
②延时1ms后等待EOC出现高电平(JNBEOC,$)
③给OE置高并读入转换数据存入数据地址或数组中。
(3).程序流程图如下所示:
(4)、由流程图可编写程序如下:
include
defineucharunsignedchar
defineuintunsignedint
sbitst=P3^2;
sbitoe=P3^1;
sbiteoc=P3^0;
ucharcodetab[]={0_03,0_9f,0_25,0_0d,0_99,0_49,0_41,0_1f,0_01,0_09};/数码管显示段码ucharcodetd[]={0_00,0_10,0_20,0_30,0_40,0_50,0_60,0_70};/通道先择数组
uintad_0809,ad_data1,ad_data2,ad_data3,ad_data0;
ucharm,number;
uchar_[8];/八通道数据待存数组
voiddelaynms(uint_);/nms延时程序
voiddisplay();/显示程序
voidad0809();/芯片启动程序
voidkey();/键扫描程序
main()
number=1;
P1=0_00;
while(1)
ad0809();/调AD0809启动子程序
key();/调按键子程序
ad_0809=_[number];/把相关通道数据给ad_0809
display();/调显示
/nms延时程序
voiddelaynms(uint_)
uchari;
while(_-->0)
for(i=0;i<125;i++)
{;}}}
voiddisplay()
uchara;
ad_data1=(ad_080949/25)/100;/读得的数据乘以2再乘以98%除以100得百位ad_data2=((ad_080949/25)%100)/10;/读得的数据乘以2再乘以98%再分出十位ad_data3=(((ad_080949/25)%100)%10);/读得的数据乘以2再乘以98%再分出个位for(a=0;a<10;a++)
P0=tab[ad_data3];/送小数点后第二位显示
P2=0_07;/选通第一个数码管
delaynms(3);
P0=tab[ad_data2];/送小数点后第一位显示
P2=0_0b;/选通第二个数码管
delaynms(3);
P0=tab[ad_data1];/送整数显示
P0_7=0;/点亮第三个数码管小数点
P2=0_0d;/选通第三个数码管
delaynms(3);
P0=tab[number];/送通道号显示
P2=0_0e;
delaynms(3);
voidad0809()
uchari,m=1;
for(i=0;i<8;i++)
P0=td[i];/选通通道
oe=0;/以下三条指令为起动AD0809
st=0;
st=1;
st=0;
delaynms(1);
while(!eoc);/等待转换结束
oe=1;/取出读得的数据
_[m]=P2;/送相关通道数组
oe=0;
m++;
voidkey()
if(!P3_5)/P3.5是否按下
delaynms(20);/延时判误
if(!P3_5)/再一次判断P3。5是否按下
while(!P3_5);/等待P3。5为高电平
number++;/通道号显示加一
if(number>8)number=1;/八通道
四、心得体会
通过本次实验学习和掌握A/D信号转换的基本原理,并熟悉和掌握ADC0809芯片的使用方法,进一步熟悉和掌握了Proteus软件的适用以及利用其画仿真图,并熟悉和掌握了ADC0809芯片在8086上的编程以及使用,以及ADC0809芯片在51系列单片机上的编程以及使用。通过本次试验了解到了自己在模拟仿真软件使用上的不熟练,应多进行联系巩固。