数模模数转换实验报告
8位数模转换器ADC0809实验报告

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
单片机原理与接口技术
课程设计说明书
8位数模转换器ADC0809项目设计
专业
电气工程及其自动化
学生姓名
林雯雯
班级
D电气122
学号
1220601220
指导教师
周云龙
完成日期
2015年12月12日
一 理论部分
1
8位数模转换器ADC0809实验
(1)、设计一个0-5V可调的直流模拟电压信号
(2)、扩展2位静态显示的数码管
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:来自反向振荡器的输出。
特性概述:
AT89C51 提供以下标准功能:4k 字节Flash 闪速存储器,128字节内部RAM,32 个I/O 口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。
单片机数模转换器DAC0832设计实验报告(附程序)

实验名称:数模转换器DAC0832设计实验学生姓名:xx 学号:xx 班级:测控xx班时间:课程名称:微机机原理及应用教师:成绩:一、实验目的1)了解DAC0832芯片引脚、内部结构及工作原理;2)掌握应用单片机I/O端口控制DAC0832实现数模转换的方法;二、实验内容1. 通过单片机I/O端口控制DAC0832实现数模转换,控制方式采用单缓冲方式,通过按键TRI/SIN选择输出,分别产生锯齿波、方波、正弦波。
1)绘制DAC0832与单片机接口电路原理图;2)参考PPT课件内容,设计程序,实现信号选择输出功能;2. 扩展功能:增加按键,通过按键控制调节输出信号的频率变化。
接口电路图设计参考下图所示:三、设计参考:正弦信号数据表:uchar code sine_tab[256]={0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0 xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6, 0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4, 0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5, 0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,0xd8, 0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xa e,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99 ,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80, 0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x 51,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29 ,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16 ,0x15,0x13,0x11,0x10,0x0e,0x0d,0 x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x 00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02 ,0x02,0x03,0x04,0x05,0x0 6,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15 ,0x16,0x18,0x1a,0x1c, 0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x 43,0x45,0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66 ,0x69,0x6c,0x6 f,0x72,0x76,0x79,0x7c,0x80};四.实验报告①实现调频功能的中断程序:void int0() interrupt 0//外部中断0,用以控制调节延时程序次数,达到调节频率的作用{counter++; //外部中断0触发一次,延时程序调用次数加1}②延时程序:void delay(){int i;for(i=0;i<10;i++){}} //延时子程序③锯齿波程序:#include<reg51.h>sbit MR=P2^7;void main (void){int num;int j;MR=0;while(1){for(num =0; num <=255; num++){ P1=num;for(j=0;j<counter;j++)delay(); //调用延时子程序}}}运行截图:调频前:调频后:④正弦波程序#include<reg51.h>sbit MR=P2^7;void main (void){unsigned char code sine_tab[256]= //正弦波字表{0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0 xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6, 0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4, 0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5, 0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,0xd8, 0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xa e,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99 ,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80, 0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x 51,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29 ,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0d,0 x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x 00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x0 6,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16,0x18,0x1a,0x1c, 0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x 43,0x45,0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80};int num;int j;MR=0;while(1){for(num =0; num <=255; num++){ P1=sine_tab[num];for(j=0;j<counter;j++)delay(); //调用延时子程序}}}运行截图:调频前:调频后:⑤方波程序:#include<reg51.h>sbit MR=P2^7;void main (void){ int num;int j;MR=0;while(1){int b;for(num=0;num<=255;b++){if(num<128){ P1=0x00;for(j=0;j<counter;j++)//当counter小于128时,P1输出0x00对应低电平delay();}else{P1=0xFF;//当num大于或等于128时,P1输出0xFF对应高电平for(j=0;j<counter;j++)delay();}}}调频前:调频后:主程序#include<reg51.h>sbit MR=P2^7;sbit P2_0=P2^0;sbit P2_1=P2^1;int counter=0;//设置延时程序次数变量counter,调节频率unsigned char code sine_tab[256]= //正弦波字表{0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0 xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6, 0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4, 0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5, 0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,0xd8, 0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xa e,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0 x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x5 1,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29, 0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0d,0x 0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06, 0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16,0x18,0x1a,0x1c,0x 1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43 ,0x45,0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x6f,0 x72,0x76,0x79,0x7c,0x80}; //正弦转换字符void delay(){int i;for(i=0;i<10;i++){}}//延时子程序void int0() interrupt 0//外部中断0,用以控制调节延时程序次数,达到调节频率的作用{counter++;//外部中断0触发一次,延时程序调用次数加1}void main(){int num;int j;EA=1;//中断总允许使能EX0=1;//外部中断0使能IT0=1;//外部中断0下降沿触发MR=0;//P2^7输出低电平,芯片正常工作while(1){if(P2_0==0&&P2_1==1) //P2_1为高电平,P2_0为低电平输出锯齿波{for(num=0;num<256;num++){P1=num; //P1直接输出numfor(j=0;j<counter;j++)delay(); //调用延时子程序}}if(P2_0==1&&P2_1==0)//P2_1为低电平,P2_0为高电平输出正弦波{P1=sine_tab[num];//P1端口输出正弦波字符数组for(j=0;j<counter;j++)delay(); //调用延时子程序}}if((P2_0==0&&P2_1==0)||(P2_0==1&&P2_1==1))//P2_1为低电平P2_0为低电平以及P2_1为高电平P2_0为高电平时输出矩形波for(num=0;num<256;num++){if(num<128)//当num小于128时,P1输出0x00对应低电平{P1=0x00;for(j=0;j<counter;j++)delay();}else{P1=0xFF;//当num大于或等于128时,P1输出0xFF对应低电平for(j=0;j<counter;j++)delay();}}}}五.总结在该实验的设计过程中,首先单独写出锯齿波、正弦波以及方波的程序,并写出延时程序以及外部中断0程序。
实验6 数模转换

实验6 数模转换(DAC)实验一、实验目的1.掌握数模转换芯片TLC7528的原理及使用方法;2.掌握ICETEK-DM6437-A板扩展的DAC模块的原理和具体实现方式;3.掌握数模转换的程序设计。
二、实验设备1.PC 兼容机;2.WIN7 操作系统;3.Code Composer Studio v5;4.ICETEK-DM6437-A实验箱(如选择脱离实验箱测试,则配备ICETEK-XDS100v2+仿真器和ICETEK-DM6437-A,+5V电源);5.标准USB A口转Mini口电缆一条;6.示波器一台(20M或以上)。
三、实验原理1. 数模(D/A)转换数模(D/A)转换:将数字信号转换为相应的模拟信号。
实现数模转换的电子器件称为数模转换器件(DAC)。
数模转换用途:数模转换可以帮助计算机更好地与受控对象进行接口,按照受控对象的特点来控制它们。
可以应用于电脑控制电子乐曲(实现各种音高音色)、照明(均匀缓慢变化)、温度调节(逐渐升温和降温)、电机控制等。
举例来说:通过我们前面实验的学习,我们了解了DM6437控制发光二极管,可以实现其点亮或者熄灭,对于发光二极管这种设备来说,点亮/熄灭正好对应计算机的数字量输出,因此可以不需要DAC器件辅助,也能完成。
当我们需要调节发光二极管的亮度时,就会遇到一些困难,发光二极管无法实现半开半闭的中间状态,于是我们让计算机以很快的频率输出开和关,实现类似于中间状态的半明半暗的效果,由于LED这种器件可以适合于高速的开关操作,所以这种效果还是可以接受的,人眼分辨不了非常高速的闪烁,但仍然会造成一定困扰,比如发光二极管台灯闪烁的速率相对较低时会使眼睛在不知不觉中出现视疲劳,因此市场上还出现了提供更高频率的“护眼”台灯。
如果使用DAC器件,能控制流过发光二极管的电流稳定(而不是时开时断),这样产生的照明效果将也是稳定的,不会闪烁。
2. AD转换芯片-TLC7528TLC7528可以将收到的8位数字信号转换成相应的模拟输出,每次转换最高速率是0.1微秒,可以支持两路模拟量输出。
PCF8591模数与数模转换实验

源程序:#include <reg52.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned char#define Delay4us() {_nop_();_nop_();_nop_();_nop_();}sbit LCD_RS = P2^0;sbit LCD_RW = P2^1;sbit LCD_EN = P2^2;sbit SCL = P1^0;sbit SDA = P1^1;uchar Recv_Buffer[4];uint V oltage[]={'0','0','0','0'};bit bdata IIC_ERROR;uchar LCD_Line_1[] = {"1- . V 2- . V"}; uchar LCD_Line_2[] = {"3- . V 4- . V"};void Delay(uint ms){uchar i;while(ms--){for(i=0;i<120;i++)Delay4us();}}bit LCD_Busy_Check(){bit Result;LCD_RS = 0;LCD_RW = 1;LCD_EN = 1;Delay4us();Result = (bit)(P0&0x80);LCD_EN = 0;return Result;}void LCD_Write_Command(uchar cmd) {while(LCD_Busy_Check());LCD_RS = 0;LCD_RW = 0;LCD_EN = 0;_nop_();_nop_();P0 = cmd;Delay4us();LCD_EN = 1;Delay4us();LCD_EN = 0;}void LCD_Write_Data(uchar dat){while(LCD_Busy_Check());LCD_RS = 1;LCD_RW = 0;LCD_EN = 0;P0 = dat;Delay4us();LCD_EN = 1;Delay4us();LCD_EN = 0;}void LCD_Initialise(){LCD_Write_Command(0x38);Delay(5);LCD_Write_Command(0x0c);Delay(5);LCD_Write_Command(0x06);Delay(5);LCD_Write_Command(0x01);Delay(5);}void LCD_Set_Position(uchar pos){LCD_Write_Command(pos | 0x80);}void LCD_Display_A_Line(uchar Line_Addr,uchar s[]){uchar i;LCD_Set_Position(Line_Addr);for(i=0;i<16;i++){LCD_Write_Data(s[i]);}}// 将模数转换后得到的值分解存入缓存void Convert_To_V oltage(uchar val){uchar Tmp; //最大值为255,对应5V,255/5=51 V oltage[2] = val/51+'0'; //整数部分Tmp = val%51*10; //第一位小数V oltage[1] = Tmp/51+'0';Tmp = Tmp%51*10;V oltage[0] = Tmp/51+'0';}void IIC_Start() {SDA = 1;SCL = 1;Delay4us();SDA = 0;Delay4us();SCL = 0;}void IIC_Stop() {SDA = 0;SCL = 1;Delay4us();SDA = 1;Delay4us();SCL = 0;}void Slave_ACK() {SDA = 0;SCL = 1;Delay4us();SCL = 0;SDA = 1;}void Slave_NOACK(){SDA = 1;SCL = 1;Delay4us();SCL = 0;SDA = 0;}void IIC_SendByte(uchar wd){uchar i;for(i=0;i<8;i++){SDA=(bit)(wd&0x80);_nop_();_nop_();SCL = 1;Delay4us();SCL=0;wd<<=1;}Delay4us();SDA = 1;SCL = 1;Delay4us();IIC_ERROR = SDA; //IIC_ERROR=1表示无应答SCL = 0;Delay4us();}uchar IIC_ReceiveByte(){uchar i,rd = 0x00;for(i=0;i<8;i++){SCL = 1;rd <<= 1;rd |= SDA;Delay4us();SCL = 0;Delay4us();}SCL = 0;Delay4us();return rd;}//连续读入4路通道的A/D转换结果并保存到Recv_Buffer void ADC_PCF8591(uchar CtrlByte){uchar i;IIC_Start();//PCF8591地址定义1001****,高四位固定1001//第3,2,1位对应A2,A1,A0第0位为读写标志位,1为读0为写//下面代码中0x90,0x91分别为10010000,10010001 IIC_SendByte(0x90);if(IIC_ERROR == 1) return;IIC_SendByte(CtrlByte);if(IIC_ERROR == 1) return;IIC_Start();IIC_SendByte(0x91);if(IIC_ERROR == 1) return;IIC_ReceiveByte();Slave_ACK();for(i=0;i<4;i++){Recv_Buffer[i] = IIC_ReceiveByte();Slave_ACK();}Slave_NOACK();IIC_Stop();}void DAC_PCF8591(uchar CtrlByte,uchar dat){IIC_Start();Delay4us();IIC_SendByte(0x90);//发送地址字节if(IIC_ERROR == 1) return;IIC_SendByte(CtrlByte);//发送控制字节if(IIC_ERROR == 1) return;IIC_SendByte(dat);//发送待转换为模拟量的数值if(IIC_ERROR == 1) return;IIC_Stop();Delay4us();Delay4us();}/*PCF8591控制字节定义:0***0***,第3,7位固定为0 第6位取0时为模拟输入,取1时为模拟输出第4,5位为00表示4路单端的模拟输入第二位为自动递增标志,取1时自动递增第0,1位取值为00,01,10,11分别表示通道0,1,2,3 调用ADC_PCF8591时参数为00000100,即0x04调用DAC_PCF8591时参数为01000000,即0x40*/void main(){LCD_Initialise();while(1){ADC_PCF8591(0x04);Convert_To_V oltage(Recv_Buffer[0]);LCD_Line_1[2]=V oltage[2];LCD_Line_1[4]=V oltage[1];LCD_Line_1[5]=V oltage[0];Convert_To_V oltage(Recv_Buffer[1]);LCD_Line_1[10]=V oltage[2];LCD_Line_1[12]=V oltage[1];LCD_Line_1[13]=V oltage[0];Convert_To_V oltage(Recv_Buffer[2]);LCD_Line_2[2]=V oltage[2];LCD_Line_2[4]=V oltage[1];LCD_Line_2[5]=V oltage[0];Convert_To_V oltage(Recv_Buffer[3]);LCD_Line_2[10]=V oltage[2];LCD_Line_2[12]=V oltage[1];LCD_Line_2[13]=V oltage[0];LCD_Display_A_Line(0x00, LCD_Line_1);LCD_Display_A_Line(0x40, LCD_Line_2);DAC_PCF8591(0x40,Recv_Buffer[0]);}}。
数模转换电路测量实验报告

数模转换电路测量一、实验目的1、熟悉D / A转换器的基本工作原理;2、加深岁数模转换的理解;3、学会在实验中处理问题。
二、实验仪器数字万用表、模拟电路实验箱(AEDK-AEC)、导线、电阻、面包板等。
三、实验概述1、实验原理所谓数模(D / A)转换,就是把数字量信号转换成模拟量信号,且输出电压与输入的数字量成一定的比例关系。
图47为D / A 转换器的原理图,它是由恒流源(或恒压源)、模拟开关、以及数字量代码所控制的电阻网络、运放等组成的四位D/ A转换器。
四个开关S0 ~ S3由各位代码控制,若“S”代码为1,则意味着接VREF ,代码“S”= 0,则意味着接地。
由于运放的输出值为V0= -I∑Rf ,而I∑为I0、I1、I2、I3的和,而I0 ~ I3的值分别为(“S”代码全为1):I0 =,I1 =,I2 =,I3 =若选R0 =,R1 =,R2 =,R3 =则I0 ==*2^0 ,I1 =*21 ,I2 =*2^2 ,I3 =*2^3若开关S0 ~ S3不全合上,则“S”代码有些为0,有些为1(设4位“S”代码为D3D2DlD0),则I∑ =D3I3 + D2I2 + D l I l + D0I0 =(D323 + D222 + D121 + D020)= B所以,V0 = -R f B,B为二进制数,即模拟电压输出正比于输入数字量B ,从而实现了数字量的转换。
2、电路图:3、实验步骤1)按照电路图在面包板上连接电路;U0UR2)将UR接电压为1V的直流电源,将开关d0、d1、d2、d3依次以二进制个、十、百、千位调节出0~15的表示,低电平(接地)代表0,高电平(UR)代表1;3)测量运放器放大后的电压大小,并且记入下表:十进制0 1 2 3 4 5 6 7二进制0000 0001 0010 0011 0100 0101 0110 0111 电压/V 0.005 0.199 0.381 0.574 0.729 0.915 1.078 1.254 十进制8 9 10 11 12 13 14 15二进制1000 1001 1010 1011 1100 1101 1110 1111 电压/V 1.333 1.522 1.652 1.847 1.949 2.121 2.267 2.422四、实验数据分析我们通过预习可以知道实验中输出电压U0应该呈现如图1-1的情况:图1-1而真实实验中数据呈现图1-2情况:图1-2由图1-2可以看出当数字(二进制)增加时,电压呈现等比例增加趋势,即数字模拟基本实现。
微机实验及课程设计——数模与模数转换

东南大学《微机实验及课程设计》实验报告实验八数模与模数转换姓名:学号:专业:实验室:计算机硬件技术实验时间:2010年06月1日报告时间:2010年06月2日评定成绩:审阅教师:一. 实验目的与内容1)了解数/模转换器的基本原理,掌握DAC0832 芯片的使用方法;2)了解模/数转换器的基本原理,掌握ADC0809 芯片的使用方法。
二. 基本实验原理(1)D/A 转换① 8 位D/A 转换器DAC0832 的口位置为290H,输入数据与输出电压的关系为:(UREF 表示参考电压,N 表示数数据),这里的参考电压为PC 机的+5V 电源。
②产生锯齿波只须将输出到DAC0832 的数据由0 循环递增,产生正弦波可根据正弦函数建一个下弦数字量表,取值范围为一个周期,表中数据个数在16 个以上。
电路连接如下图所示:图1产生锯齿波和正弦波的程序流程图如下所示:(2)A/D 转换① ADC0809 的IN0 口位置为298H,IN1 口位置为299H。
② IN0 单极性输入电压与转换后数字的关系为:其中Ui 为输入电压,UREF 为参考电压,这里的参考电压为PC 机的+5V 电源。
③一次A/D 转换的程序可以为:MOV DX,口位置OUT DX,AL ;启动转换;延时IN AL,DX ;读取转换结果放在AL 中电路连接如下图所示:图2 程序流程图(含子程序流程图)如下所示:(3)A/D转换曲线绘制流程图如下所示:三. 方案实现与测试(一)、获取TPC 扩展卡 I/O 和存储基位置直接在windows 下利用控制面板查看占用的存储和中断资源,可知:TPC设备内存范围: FDDFF000—FDDFF0FF接口芯片输入输出范围: BC00—BCFFTPC设备输入输出范围: B800—B87F接口芯片内存范围: FDC00000—FDCFFFFF(二)、DAC 实验电路原理如图1所示,DAC0832 采用单缓冲方式,具有单双极性输入端(图中的Ua、Ub)。
实验十六、数模转换器

实验目的: 一、 实验目的: 1.熟悉D/A转换器的基本工作原理。 熟悉D/A转换器的基本工作原理。 D/A转换器的基本工作原理 掌握D/A转换集成芯片DAC 0832的性能及其 D/A转换集成芯片 2 . 掌握 D/A 转换集成芯片 DAC 0832 的性能及其 使用方法。 使用方法。
D1 0 0 1 0 0 0 0 0 0 1
D0 0 1 0 0 0 0 0 0 0 1
六实验报告内容 1.整理所测实验数据,画出实验电路。 2.分析理论值和实际值的误差。 3.绘出所测得的电压波形,并进行比较、分析。
各引脚功能为:
D7~D0:八位数字量输入端,D7为最高位,D0为最低位。 Io1:模拟电流输出1端,当DAC寄存器为1时,Io1最大;全0时,Io1 最小。 Io2:模拟电流输出2端,Io1+Io2=常数=VREF/R,一般接地。 Rf:为外接运放提供的反馈电阻引出端。 VREF:是基准电压参考端,其电压范围为-10~+10V。 Vcc:电源电压,一般为+5V~+15V。 DGND:数字电路接地端。 AGND:模拟电路接地端,通常与DGND相连。
由于运放的输出值为vo不全合上则s代码有些为0有些为1设4位s代码为d3d2d1d0则vrefrbvrefr所以vorfbvrefrb为二进制数即模拟电压输出正比于输入数字量b从而实现了数字量的转随着集成技术的发展中大规模的da转换集成块相继出现它们将转换的电阻网络和受数码控制的电子开关都集在同一芯片上所以用起来很方便
输入数字量 D4 D3 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1
输出模拟量V0(V) VCC=+5V
D7 0 0 0 0 0 0 0 0 1 1
试验一模数数模转换试验

实验一模/数、数/模转换试验一、实验目的1、加深理解模/数、数/模转换的工作原理,熟练使用和掌握ADC0809和DAC0832。
2、了解掌握A/D、D/A转换流程以及计算机分时控制模/数、数/模转换器的情况。
[试验1.1](试验线路图见图1.1-1)8088CPU的OPCLK信号与ADC0809单元电路的CLOCK相连作为ADC0809的时钟信号。
ADC0809芯片输入选通地址码A、B、C为“1”状态,选通输给A/D转换器输入-5V~+5V的模拟电压。
8253入通道IN7。
通过电位器W141的2#口用于5ms定时输出OUT2信号启动A/D转换器。
由8255口A为输入方式,A/D转换器的数据通过A口采入计算机,送到显示器上显示,并由数据总线送到D/A转换器0832的输入端。
选用8088CPU的地址输入信号IOY0为片选信号(CS), XIOW信号为写入信号(WR),D/A转换器的口地址为00H。
调节W即可改变输入电压,可从显示器上看A/D转换器对应输出的数141码,同时这个数码也是D/A转换器的输入数码。
图1.1-1A/D、D/A转换程序流程(见图1.1-2)对应下面的流程,程序已编好放在8088的监控中,可用U(反汇编)命令查看。
图1.1-2[试验1.2](试验线路图见图1.2-1)设置8253为定时方式,OUT2信号为采样脉冲,采样周期为5ms。
8255的A口为输入方式,用于采入数据。
8255的B口为输出方式,用于选择控制双路输入输出通道。
A/D转换单元可对多路模拟量进行转换,这里用6、7两路分别接入图1.2-2所示信号。
计算机控制A/D变换器分时对这两路模拟信号进行A/D转换。
将转换的数字量送至D/A变换器还原成模拟量,并送至两个采样保持器。
由8255B 口分别控制两个采样保持器的采样开关,以保证采样保持器单元电路中的OUT1输出信号与A/D变换单元U12的IN6输入信号一致;采样保持器单元电路的OUT2输出信号与A/D变换单元U12的IN7输入信号一致。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
精品文档
数模模数转换实验报告
一、 实验目的
1、 了解数模和模数转换电路的接口方法及相应程序设计方法。
2、 了解数模和模数转换电路芯片的性能和工作时序。
二、 实验条件
1、 DOS操作系统平台
2、 数模转换芯片DAC0832和模数转换器ADC08095片。
三、 实验原理
1 、 数模转换:
(1) 微机处理的数据都是数字信号, 而实际的执行电路很多都是模拟的。 因此 微
机的处理结果又常常需要转换为模拟信号去驱动相应的执行单元, 实现 对被控
对象的控制。这种把数字量转换为模拟量的设备称为数模转换器
(DAC,简称 D/A。
(2) 实验中所用的数模转换芯片是DAC0832它是由输入寄存器、DAC寄存器 和
D/A转换器组成的CMOS器件。其特点是片内包含两个独立的 8位寄 存器,因
而具有二次缓冲功能,可以将被转换的数据预先存在 DAC 寄存 器中,同时又
采集下一组数据,这就可以根据需要快速修改 DAC0832 的 输出。
2、模数转换:
( 1)在工程实时控制中,经常要把检测到的连续变化的模拟信号,如温度、压 力、
速度等转换为离散的数字量, 才能输入计算机进行处理。 实现模拟量到数字 量转换
的设备就是模数转换器(ADC,简称A/D。
(2) 模数转换芯片的工作过程大体分为三个阶段: 首先要启动模数转换过程。 其 次,
由于转换过程需要时间,不能立即得到结果,所以需要等待一段时间。一般 模数转换
芯片会有一条专门的信号线表示转换是否结束。 微机可以将这条信号线 作为中断请求
信号, 用中断的方式得到转换结束的消息, 也可以对这条信号线进 行查询,还可以
采用固定延时进行等待 (因为这类芯片转换时间是固定的, 事先 可以知道)。最后,
当判断转换已经结束的时候,微机就可以从模数转换芯片中 读出转换结果。
(3) 实验采用的是8路8位模数转换器ADC0809芯片。ADC0809采用逐次比 较
的方式进行 A/D 转换,其主要原理为:将一待转换的模拟信号与一个推测信 号进行比
较,根据推测信号是大于还是小于输入信号来决定增大还是减少该推测 信号,以便向
模拟输入逼近。推测信号由 D/A 转换器的输出获得,当推测信号 与模拟信号相等时,
向 D/A 转换器输入的数字就是对应模拟信号的数字量。 ADC0809的转换时间为64个
时钟周期(时钟频率500K时为128S)。分辨率为 8位,转换精度为土 LSB/2,单电源
+5V供电时输入模拟电压范围为04.98V。
四、实验内容
1、 把DAC0832的片选接偏移为10H的地址,使用debug命令来测试DAC0832
的输出,通过设置不同的输出值,使用万用表测量Ua和Ub的模拟电压,
精品文档
检验DAC0832的功能。选取典型(最低、最高和半量程等)的二进制值进 行检验,记
录测得的结果。实验结果记录如下:
输入
??? ??
?
00 0.001 4.959
08 0.145 4.636
20 0.588 3.730
40 1.177 2.522
6F 2.043 0.742
AB 3.150 1.530
CD 3.779 2.816
FF 4.702 4.712
2、 ADC0809功能检测:将实验箱的直流信号输出接到 ADC0809的IN-0端口,
编程不断将模数转换的结果输出到屏幕上,设置一定的延时让数据每秒钟 更新一次,
以免屏幕更新太快无法读取数据。实验代码如下:
STACK SEGMENT PARA STACK DW 128H DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS: CODE, SS:STACK
START:
MOV AX,CS
MOV DS,AX
RE:
MOV DX,0E498H
OUT DX,AL
CALL DELAY
PUSH AX
PUSH CX
IN AL,DX
MOV CL,4
SHR AL,CL
CALL DISP
精品文档
POP CX
POP AX IN AL,DX CALL DISP
MOV DL,0DH INT 21H
MOV DL,0AH INT 21H MOV AH,1 INT 16H JNZ EXIT JMP RE
EXIT:
MOV AH,4CH
INT 21H
DELAY PROC NEAR
PUSH AX
PUSH CX
PUSH DX MOV AH,86H
MOV CX,0FH
MOV DX,4240H
INT 15H
POP DX
POP CX
POP AX
RET DELAY ENDP DISP PROC NEAR
PUSH DX
AND AL,0FH MOV DL,AL
CMP DL,9 JLE NUM
ADD DL,7 NUM:
ADD DL,30H MOV AH,02H INT 21H
POP DX
RET DISP ENDP
CODE ENDS
END START
3、编写一个简单的电子琴程序, 通过键盘输入 17,控制扬声器的输出为 C 调的 do 到
si 。按其它键程序退出。实验代码如下:
STACK SEGMENT PARA STACK
DW 128H DUP(0)
STACK ENDS
DATA SEGMENT
SIN DB 080H,096H,0AEH,0C5H,0D8H,0E9H,0F5H,0FDH DB
0FFH,0FDH,0F5H,0E9H,0D8H,0C5H,0AEH,096H DB
080H,066H,04EH,038H,025H,015H,009H,004H DB
000H,004H,009H,015H,025H,038H,04EH,066H
TIME DB 077H,06AH,05FH,059H,050H,047H,03FH
NUM DB (?)
DATA ENDS
精品文档
CODE SEGMENT
ASSUME CS: CODE, DS: DATA, SS:STACK START:
MOV AX,DATA
MOV DS,AX
RE:
MOV AH,07H
INT 21H
SUB AL,31H
CMP AL,0 JL EXIT CMP AL,6 JG EXIT MOV NUM,AL
MOV CX, 60
LP:
MOV SI,0
LP1:
MOV AL,SIN[SI]
MOV DX,0E490H
OUT DX,AL CALL DELAY INC SI
CMP SI,20H
JL LP1
LOOP LP
JMP RE
EXIT:
MOV AH,4CH
INT 21H
DELAY PROC NEAR
PUSH AX
PUSH DX
PUSH DI
MOV AL,10H
MOV DX,0E483H
OUT DX,AL
MOV BL,NUM
AND BX,00FFH
MOV DI,BX
MOV AL,TIME[DI]
MOV DX,0E480H
OUT DX,AL
RSRT:
MOV DX,0E488H
IN AL,DX
AND AL,01H
CMP AL,0
JZ RSRT
POP DI
POP DX
POP AX
RET
DELAY ENDP
CODE ENDS
精品文档
END START
五、实验体会
1、 掌握了数模和模数转换电路芯片的使用方法
2、 掌握了数模和模数转换电路的接口方法及相应的程序设计方法