实验一 模拟量输入输出通道实验(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转换器,实验箱上的电位器提供模拟电压信号输入,编制程序,将模拟量转换成数字量,用数码管显示模拟量转换的结果。
1、实验电路:如图1
图1
2、实验接线:
1)0809的片选信号CS0809接CS0。
2)电位器的输出信号AN0接0809的ADIN1。
3、实验程序
#include <reg51.h>
#include <absacc.h>
#define INT8U unsigned char
#define INT16U unsigned int
#define Val DBYTE[0x35]
#define RAM8279 XBYTE[0X0CFE9]
#define DATA8279 XBYTE[0X0CFE8]
#define ADC0809 XBYTE[0X0CFA0]
INT8U code SEG_CODE[]={0x3f,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void delay1_ms(INT8U x)
{ INT8U t;while(x–) for(t=0;t<120;t++); }
void main()
{
INT8U ADvalue,AD1,AD2,AD3;
while(1)
{ADC0809=1; //start AD
delay1_ms(10); //delay
ADvalue=ADC0809;
Val=ADvalue;
AD1=ADvalue/100; //baiwei
AD2=ADvalue%100/10; //shi wei
AD3=ADvalue%10; //ge wei
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)从系统“开始”菜单进入“所有程序”,在“所有程序”中选择“Windows Virtual PC”,点击“Windows XP Mode”进入虚拟机系统。
2)根据接线图接线,并运行EL型(8051)教学实验环境,建立上位计算机与缔造者系统的通信连接。(串口选择COM2;波特率选择9600;点击屏幕中对话框确定后立刻按下设备上的复位键RST,若设备上的数码管显示C则表示通信成功。)
3)新建一个汇编文件(点击工具栏上的字母A,若程序用单片机C语言编写,则点击工具栏上的字母C),输入C51源程序,编译成功后,选择调试-运行。
4)用万用表测量电位器电压,依次调节电位器旋钮,并使数码管从一个较小的数开始变化。记录表格1。
表1 A/D转换实验数据表
序号 |
电位器电压(V) |
理论计算的AD转换结果数字量(十进制) |
数码管显示值(十进制) |
理论计算与实际显示值相对误差 |
1 |
0.29 |
14 |
14 |
0 |
2 |
0.68 |
32 |
32 |
0 |
3 |
0.86 |
43 |
42 |
1 |
4 |
1.76 |
89 |
88 |
1 |
5 |
2.40 |
120 |
118 |
2 |
6 |
2.81 |
143 |
140 |
3 |
7 |
3.30 |
168 |
167 |
1 |
8 |
4.03 |
206 |
202 |
4 |
9 |
4.21 |
215 |
210 |
5 |
10 |
4.49 |
229 |
224 |
5 |
二)、D/A转换实验
利用DAC0832,编制程序产生波形信号。
- 循环产生锯齿波、三角波各10周期;
- 波形的VP-P峰峰值为4V。
- 要求DAC0832工作方式为单缓冲方式。
1、实验电路:如图2
图2
2、实验接线
DAC0832的片选CS0832接CS1,输出端OUT接示波器探头信号表笔,接地端GND接示波器地线夹子。DS2.3脚用跳线冒短接(单缓冲方式). DS1.2脚用跳线冒短接(双缓冲方式)。
3、实验程序
1)产生锯齿波程序:
#include <reg51.h>
#include <absacc.h>
#define INT8U unsigned char
#define INT16U unsigned int
#define DAC0832 XBYTE[0X0CFA8]
void delay_ms(INT8U x)
{ INT8U t;while(x–) for(t=0;t<1;t++); }
void main()
{INT8U i;
while(1)
{
for(i=0;i<255;i++) //
{DAC0832=i;
delay_ms(1);
}
}
}
2)产生三角波程序:
#include <reg51.h>
#include <absacc.h>
#define INT8U unsigned char
#define INT16U unsigned int
#define DAC0832 XBYTE[0X0CFA8]
void delay_ms(INT8U x)
{ INT8U t;while(x–) for(t=0;t<1;t++); }
void main()
{INT8U i;
while(1)
{
for(i=0;i<255;i++) //zheng ban zhou
{DAC0832=i;
delay_ms(1);
}
for(i=255;i>0;i–) //fu ban zhou
{DAC0832=i;
delay_ms(1);
}
}
}
4、实验步骤
1)从系统“开始”菜单进入“所有程序”,在“所有程序”中选择“Windows Virtual PC”,点击“Windows XP Mode”进入虚拟机系统。
2)根据接线图接线,并运行EL型(8051)教学实验环境,建立上位计算机与缔造者系统的通信连接。(串口选择COM2;波特率选择9600;点击屏幕中对话框确定后立刻按下设备上的复位键RST,若设备上的数码管显示C则表示通信成功。)3)输入产生锯齿波、三角波的C51源程序,编译连接成功后运行。
4)记录示波器显示的波形曲线,读数,填入表2。
表2波形产生实验数据表
锯齿波 |
周期(ms)\频率(Hz) |
43.55Hz |
峰峰值Vp-p(V) |
536.0mV |
|
三角波 |
周期(ms)\频率(Hz) |
21.74Hz |
峰峰值Vp-p(V) |
512.0mV |
三)、A/D转换结果控制D/A输出信号频率实验
内容及要求:
1)利用实验台上的ADC0809做A/D转换器,实验箱上的电位器提供模拟电压信号输入,编制程序,将模拟量转换成数字量,用数码管显示模拟量转换的结果(十进制)。
2)利用DAC0832,编制程序产生频率受A/D转换结果控制的波形。波形为由锯齿波、三角波各20个周期构成的循环波形。
3)当调节实验箱上的电位器,A/D显示的结果相应发生变化,D/A产生的锯齿波和三角波频率也随之改变。
4)要求单片机判断处理AD转换结束信号采用查询方式。DAC0832工作方式为双缓冲方式。
1、实验电路:如图1及图2
2、实验接线
1)0809的片选信号CS0809接CS0。
- 电位器的输出信号AN0接0809的ADIN0。
3)EOC接P3.2/INT0。
4)DAC0832的片选CS0832接CS1,输出端DAOUT接示波器探头信号表笔,接地端GND接示波器地线夹子。双缓冲工作方式(DS1.2脚用跳线冒短接)
(为保证在显示A/D转换结果时D/A输出波形不变,DAC0832要处于双缓冲工作方式,以保证在写数据到8279的寄存器时,DAC0832数据锁存,不受数据总线上数据的变化而发生变化。)
3、实验程序
1)频率受控锯齿波程序:
#include <reg51.h>
#include <absacc.h>
#define INT8U unsigned char
#define INT16U unsigned int
#define Val DBYTE[0x35]
#define RAM8279 XBYTE[0X0CFE9]
#define DATA8279 XBYTE[0X0CFE8]
#define ADC0809 XBYTE[0X0CFA0]
#define DAC08321 XBYTE[0X0CFA8]
#define DAC08322 XBYTE[0X0CFA9]
INT8U SEG_CODE[]={0x3f,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
sbit EOC=P3^2;
void delay_ms(INT8U x)
{INT8U t;
while(x–)
for(t=0;t<1;t++);
}
INT8U ADvalue=0,AD1=0,AD2=0,AD3=0,i;
main()
{
RAM8279=0x90;
DATA8279=SEG_CODE[AD1];
delay_ms(1);
DATA8279=SEG_CODE[AD2];
delay_ms(1);
DATA8279=SEG_CODE[AD3];
delay_ms(1);
while(1)
{
ADC0809=1; //start AD
while(!EOC); //wait ADC finish
Val=ADC0809; //read AD result
AD1=Val/100; //high
AD2=Val%100/10; //middle
AD3=Val%10; //low
DAC08321=Val; //D/A start
DAC08322=Val; //D/A start
RAM8279=0x90; //display
DATA8279=SEG_CODE[AD1];
delay_ms(1);
DATA8279=SEG_CODE[AD2];
delay_ms(1);
DATA8279=SEG_CODE[AD3];
delay_ms(1);
for(i=Val;i<255;i++) //generate wave
{
DAC08321=i;
DAC08322=i;
delay_ms(1);
}
}
}
2)频率受控三角波程序:
#include <reg51.h>
#include <absacc.h>
#define INT8U unsigned char
#define INT16U unsigned int
#define Val DBYTE[0x35]
#define RAM8279 XBYTE[0X0CFE9] //control register
#define DATA8279 XBYTE[0X0CFE8] //data register
#define ADC0809 XBYTE[0X0CFA0] //ADC address
#define DAC08321 XBYTE[0X0CFA8] //first register address
#define DAC08322 XBYTE[0X0CFA9] //second register address
INT8U SEG_CODE[]={0x3f,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //common cathode
sbit EOC=P3^2;
void delay_ms(INT8U x)
{ INT8U t;while(x–) for(t=0;t<1;t++); }
INT8U ADvalue=0,AD1=0,AD2=0,AD3=0,i;
main()
{
RAM8279=0x90;
DATA8279=SEG_CODE[AD1];
delay_ms(1);
DATA8279=SEG_CODE[AD2];
delay_ms(1);
DATA8279=SEG_CODE[AD3];
delay_ms(1);
while(1)
{
ADC0809=1; //start AD
while(!EOC); //wait ADC finish
Val=ADC0809; //read AD result
AD1=Val/100; //high
AD2=Val%100/10; //middle
AD3=Val%10; //low
DAC08321=Val; //D/A start
DAC08322=Val; //D/A start
RAM8279=0x90; //display
DATA8279=SEG_CODE[AD1];
delay_ms(1);
DATA8279=SEG_CODE[AD2];
delay_ms(1);
DATA8279=SEG_CODE[AD3];
delay_ms(1);
for(i=Val;i<255;i++) //generate wave
{
DAC08321=i;
DAC08322=i;
delay_ms(10);
}
for(i=255;i>Val;i–)
{
DAC08321=i;
DAC08322=i;
delay_ms(1);
}
}
}
4、实验步骤
1)从系统“开始”菜单进入“所有程序”,在“所有程序”中选择“Windows Virtual PC”,点击“Windows XP Mode”进入虚拟机系统。
2)根据接线图接线,并运行EL型(8051)教学实验环境,建立上位计算机与缔造者系统的通信连接。(串口选择COM2;波特率选择9600;点击屏幕中对话框确定后立刻按下设备上的复位键RST,若设备上的数码管显示C则表示通信成功。)3)输入频率受控波形生成的C51源程序,编译连接成功后运行。
4)依次调节电位器旋钮,并使数码管显示为一个较小的值开始。记录数码管显示值,及相应示波器显示的波形曲线,计算锯齿波和三角波曲线的Vp-p电压及显示波形的周期和频率并填入表3。
表3 频率受控波形实验数据表
序号 |
数码管显示值 |
锯齿波的Vp-p(V) |
锯齿波频率值(Hz) |
三角波的Vp-p(V) |
三角波频率值(Hz) |
1 |
0 |
4.96 |
39.97 |
5.04 |
19.34 |
2 |
50 |
4.00 |
49.75 |
4.08 |
24.13 |
3 |
100 |
3.04 |
65.79 |
3.12 |
31.87 |
4 |
150 |
2.24 |
86.84 |
2.08 |
47.01 |
5 |
200 |
1.28 |
105.34 |
1.12 |
58.60 |
今天的文章51单片机输出模拟信号_模拟量输出通道的组成及各部分作用「建议收藏」分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/85756.html