- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
实验一模拟量输入输出通道实验(C51)
一、实验目的:
1、了解A/D、D/A转换的基本原理。
2、了解A/D转换芯片ADC0809、D/A转换芯片DAC0832的性能及编程方法。
3、掌握过程通道中A/D转换与D/A转换与计算机的接口方法。
4、了解计算机如何进行数据采集及输出控制。
二、实验设备
计算机1台;
缔造者系统1套:CPU挂箱、8031CPU模块;
万用表1块;
示波器1台。
三、实验内容
一)、A/D转换实验
利用实验台上的ADC0809做A/D转换器,实验箱上的电位器提供模拟电压信号输入,编制程序,实现每隔2秒进行一次将模拟量转换成数字量,用数码管显示模拟量转换的结果。
1、实验电路:如图1
图1
2、实验接线:
1)0809的片选信号CS0809接CS0。
2)电位器的输出信号AN0接0809的ADIN1。
3、实验参考程序
#includereg51.h
#includeabsacc.h
#defineINT8Uunsignedchar
#defineINT16Uunsignedint
#defineValDBYTE[0x35]
#defineRAM8279XBYTE[0X0CFE9]
#defineDATA8279XBYTE[0X0CFE8]
#defineADC0809XBYTE[0X0CFA0]
INT8UcodeSEG_CODE[]={0x3f,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
voiddelay1_ms(INT8Ux)
{INT8Ut;while(x--)for(t=0;t120;t++);}
voidmain()
{
INT8UADvalue,AD1,AD2,AD3;
while(1)
{ADC0809=1;//startAD
delay1_ms(10);//delay
ADvalue=ADC0809;
Val=ADvalue;
AD1=ADvalue/100; //baiwei
AD2=ADvalue%100/10;//shiwei
AD3=ADvalue%10;//gewei
RAM8279=0x90;
DATA8279=SEG_CODE[AD1];
delay1_ms(10);
DATA8279=SEG_CODE[AD2];
delay1_ms(10);
DATA8279=SEG_CODE[AD3];
delay1_ms(10);
}
}
4、实验步骤
1)从系统“开始”菜单进入“所有程序”,在“所有程序”中选择“WindowsVirtualPC”,点击“WindowsXPMode”进入虚拟机系统。
2)根据接线图接线,并运行EL型(8051)教学实验环境,建立上位计算机与缔造者系统的通信连接。(串口选择COM2;波特率选择9600;点击屏幕中对话框确定后立刻按下设备上的复位键RST,若设备上的数码管显示C则表示通信成功。)
3)新建一个汇编文件(点击工具栏上的字母A,若程序用单片机C语言编写,则点击工具栏上的字母C),输入C51源程序,编译成功后,选择调试-运行。
4)用万用表测量电位器电压,依次调节电位器旋钮,并使数码管从一个较小的数开始变化。记录表格1。
表1A/D转换实验数据表
序号
电位器电压(V)
理论计算的AD转换结果数字量(十进制)
数码管显示值(十进制)
理论计算与实际显示值相对误差
1
2
3
4
5
6
7
8
9
10
二)、D/A转换实验
利用DAC0832,编制程序产生波形信号。
循环产生锯齿波、三角波各10周期;
波形的VP-P峰峰值为4V。
要求DAC0832工作方式为单缓冲方式。
1、实验电路:如图2
图2
2、实验接线
DAC0832的片选CS0832接CS1,输出端OUT接示波器探头信号表笔,接地端GND接示波器地线夹子。DS2.3脚用跳线冒短接(单缓冲方式).DS1.2脚用跳线冒短接(双缓冲方式)。
3、实验参考程序
1)产生锯齿波程序:
#includereg51.h
#includeabsacc.h
#defineINT8Uunsignedchar
#defineINT16Uunsignedint
#defineDAC0832XBYTE[0X0CFA8]
voiddelay_ms(INT8Ux)
{INT8Ut;while(x--)for(t=0;t1;t++);}
voidmain()
{INT8U
文档评论(0)