【单片机实验九】DA转换实验

合集下载

智能仪器DA转换实验

智能仪器DA转换实验

实验二 D/A转化实验一、实验目的:(1)掌握D/A转换与单片机的接口方法。

(2)了解D/A芯片PCF8591转换性能及编程方法。

(3)了解单片机系统中扩展D/ A转换芯片的基本方法。

二、实验内容利用实验仪上的PCF8591做D/A转换实验,写入DA的数模值,然后累加该值,显示该值到数码管,延时100m后循环写入变化后的DA值,观察LED9的变化。

三、实验说明D/A转换器大致分有三类:一是双积分D/ A转换器,优点是精度高,抗干扰性好,价格便宜,但速度慢;二是逐次逼近式D/A转换器,精度、速度、价格适中;三是并行D/ A转换器,速度快,价格也昂贵。

PCF8591属第二类,PCF8591是一个单片集成、单独供电、低功耗、8-bit CMOS数据获取器件。

PCF8591具有4个模拟输入、1个模拟输出和1个串行I²C总线接口。

PCF8591的3个地址引脚A0, A1和A2可用于硬件地址编程,允许在同个I2C总线上接入8个PCF8591器件,而无需额外的硬件。

在PCF8591器件上输入输出的地址、控制和数据信号都是通过双线双向I2C总线以串行的方式进行传输。

四、硬件原理图与链接:J31与J32用于切换AD输入端口,因为只有两个电位器,但有4个输入端口,所以同时只能使用2个,这两个插针用于切换输入端口。

J33是AD输入模拟LED 灯选择开关,用跳帽跳上后LED起作用。

五、实验步骤(1)单片机P0口与J3相连,用作数码管显示(2)单片机P2.2与J3(B)相连,P2.2与J2(A)相连。

(3)跳帽J50 连接,给数码管供电。

(4)单片机P2.0与J8(SCL)相连,最为时钟输出,单片机P2.1与J8(SDL)相连最为数据输入输出。

(5)J31中DA0与W4用跳帽相连,选择DA通道。

(6)利用keil软件编写程序,并且用STC程序下载工具下载程序。

(7)观察LED9的变化。

链接图:六、实验程序main函数:/*-----------------------------------------------名称:IIC协议 PCF8591 AD/DA转换论坛:编写:shifang修改:无内容:使用DA输入,数码管显示输出数字量,LED显示模拟电压大小------------------------------------------------*/#include <reg52.h>#include "i2c.h"#include "delay.h"#include "display.h"#define AddWr 0x90 //写数据地址#define AddRd 0x91 //读数据地址extern bit ack;unsigned char ReadADC(unsigned char Chl);bit WriteDAC(unsigned char dat);/*------------------------------------------------主程序------------------------------------------------*/main(){unsigned char num=0;unsigned int val=0;Init_Timer0();while (1) //主循环{num=ReadADC(0);WriteDAC(num);//num++;//连续累加,值从0-255反复循环,并显示在数码管上, val=1.963*num;//(5/256*100)TempData[0]=dofly_DuanMa[val/100]|0x80;TempData[1]=dofly_DuanMa[(val%100)/10];TempData[2]=dofly_DuanMa[(val%100)%10];DelayMs(100);}}unsigned char ReadADC(unsigned char Chl){unsigned char Val;Start_I2c(); //启动总线SendByte(AddWr); //发送器件地址if(ack==0)return(0);SendByte(0x40|Chl); //发送器件子地址if(ack==0)return(0);Start_I2c();SendByte(AddWr+1);if(ack==0)return(0);Val=RcvByte();NoAck_I2c(); //发送非应位Stop_I2c(); //结束总线return(Val);}/*------------------------------------------------写入DA转换数值输入参数:dat 表示需要转换的DA数值,范围是0-255------------------------------------------------*/bit WriteDAC(unsigned char dat){Start_I2c(); //启动总线SendByte(AddWr); //发送器件地址if(ack==0)return(0);SendByte(0x40); //发送器件子地址if(ack==0)return(0);SendByte(dat); //发送数据if(ack==0)return(0);Stop_I2c();i2c函数:/*-----------------------------------------------名称:IIC协议论坛:编写:shifang修改:无内容:函数是采用软件延时的方法产生SCL脉冲,固对高晶振频率要作一定的修改....(本例是1us机器周期,即晶振频率要小于12MHZ)------------------------------------------------*/#include "i2c.h"#include "delay.h"#define _Nop() _nop_() //定义空指令bit ack; //应答标志位sbit SDA=P2^1;sbit SCL=P2^0;/*------------------------------------------------启动总线------------------------------------------------*/void Start_I2c(){SDA=1; //发送起始条件的数据信号_Nop();SCL=1;_Nop(); //起始条件建立时间大于4.7us,延时_Nop();_Nop();_Nop();_Nop();SDA=0; //发送起始信号_Nop(); //起始条件锁定时间大于4μ_Nop();_Nop();_Nop();_Nop();SCL=0; //钳住I2C总线,准备发送或接收数据_Nop();_Nop();}/*------------------------------------------------结束总线------------------------------------------------*/void Stop_I2c(){SDA=0; //发送结束条件的数据信号_Nop(); //发送结束条件的时钟信号SCL=1; //结束条件建立时间大于4μ_Nop();_Nop();_Nop();_Nop();_Nop();SDA=1; //发送I2C总线结束信号_Nop();_Nop();_Nop();_Nop();}/*----------------------------------------------------------------字节数据传送函数函数原型: void SendByte(unsigned char c);功能: 将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对此状态位进行操作.(不应答或非应答都使ack=0 假)发送数据正常,ack=1; ack=0表示被控器无应答或损坏。

DA转换实验

DA转换实验
unsigned char idata ss=0,thh0=0,tll0=0;
unsigned long int Yx;//显示全局变量
unsigned char idata xb=0,CKx[20]={0};
#define jz 11.0592
sbit LED_D1=P4^3;
sbit LED_D2=P4^4;
{
ES=0;
xb=0;
z=0;
for(j=0;j<9;j++)
{
send(CKx[j]);
}
ES=1;
for(j=1;j<9;j++)
{
z=z*10;
z=z+(CKx[j] & 0x0f);
}
DA_conver(z);
Yx=z;
}
//Yx=Yx+1;
LED_D1=~LED_D1;
delay(0xf000);
2.2 D/A转换器
数字量是用代码按数位组合起来表示的,对于有权码,每位代码都有一定的权。为了将数字量转换成模拟量,必须将每一位的代码按其权的大小转换成相应的模拟量,然后将这些模拟量相加,即可得与数字量成正比的模拟量,从而实现了数字—模拟转换。
D/A转换器通常是由数码寄存器、模拟电子开关电路、解码网络、求和电路及基准电压几部分。
CK1_T2_9600_10bit();//在11.0592MHz,is9.6k
T0_csh();
ET0=1;
ES=1;
EA=1;
ctr_S1=0;
ctr_FG=0;
s2fg=0;
// send(0xaa);
// send(0xbb);

DA转换实验

DA转换实验

基础实验部分实验1 P1口实验一一、实验目的:1.学习P1口的使用方法。

2.学习延时子程序的编写和使用。

二、实验设备:CPU挂箱、8031CPU模块三、实验内容:1.P1口做输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。

2.P1口做输入口,接八个按纽开关,以实验箱上74LS273做输出口,编写程序读取开关状态,在发光二极管上显示出来。

四、实验原理:P1口为准双向口,P1口的每一位都能独立地定义为输入位或输出位。

作为输入位时,必须向锁存器相应位写入“1”,该位才能作为输入。

8031中所有口锁存器在复位时均置为“1”,如果后来在口锁存器写过“0”,在需要时应写入一个“1”,使它成为一个输入。

可以用第二个实验做一下实验。

先按要求编好程序并调试成功后,可将P1口锁存器中置“0”,此时将P1做输入口,会有什么结果。

再来看一下延时程序的实现。

现常用的有两种方法,一是用定时器中断来实现,一是用指令循环来实现。

在系统时间允许的情况下可以采用后一种方法。

本实验系统晶振为6.144MHZ,则一个机器周期为12÷6.144us即1÷0.512us。

现要写一个延时0.1s的程序,可大致写出如下:MOV R7,#X (1)DEL1:MOV R6,#200 (2)DEL2:DJNZ R6,DEL2 (3)DJNZ R7,DEL1 (4)上面MOV、DJNZ指令均需两个机器周期,所以每执行一条指令需要1÷0.256us,现求出X值:1÷0.256+X(1÷0.256+200×1÷0.256+1÷0.256)=0.1×10⁶指令(1)指令(2)指令(3)指令(4)所需时间所需时间所需时间所需时间X=(0.1×10⁶-1÷0.256)/(1÷0.256+200×1÷0.256+1÷0.256)=127D=7FH经计算得X=127。

DA转换器实验

DA转换器实验

D/A转换器实验06300720040夏晓天电子信息科学与技术【预习报告】一.实验目的1.了解D/A转换的工作原理2.掌握基于MCS-51系统的D/A转换器接口设计方法二.实验内容1.设计基于89C51系统的D/A转换器DAC0832的接口。

利用DAC0832产生一电压,通过P1口输入二进制数的输入电压值,用示波器测试D/A转换器输出电压的正确性。

调整基准电压,仔细观察基准电压对D/A转换器输出电压的影响。

2.设计程序,利用DAC0832产生一三角波信号,试分析波形的线性程度。

试将数据线中的一位二进制数置为固定电平,分析波形的形状。

三.电原理图和程序清单:硬件连接图:CPLD电原理图:9-3-1.程序清单ORG 0000HAJMP MAINORG 0030HMAIN: MOV A,P1 ;读P1口输入二进制数值MOV DPTR,#4000HMOVX @DPTR,A ;P1口输入二进制数送DAC0832转换 SJMP MAINEND9-3-2.程序清单ORG 0000HAJMP MAINORG 0030HMAIN: MOV DPTR,#4000HSAN: MOV A,#00H ;三角波上升沿二进制数值从0开始L1: MOVX @DPTR,A ;送DAC0832转换INC A ;三角波二进制数值加1NOPCJNE A,#00H,L1 ;三角波二进制数值是否到256MOV A,#254 ;三角波下降沿二进制数从254开始L2: MOVX @DPTR,A ;送DAC0832转换DEC A ;三角波二进制数值减1NOPCJNE A,#00H,L2 ;三角波二进制数值是否到0SJMP SANEND【实验报告】一.修改后的电原理图:(硬件的连接图和CPLD电原理图都不需要修改)二.修改后的程序清单和程序流程图:程序清单:ORG 0000HAJMP MAINORG 0030HMAIN: MOV A,P1 ;读P1口输入二进制数值MOV DPTR,#4000HMOVX @DPTR,A ;P1口输入二进制数送DAC0832转换 SJMP MAINEND流程图:9-3-2.程序清单:ORG 0000HAJMP MAINORG 0030HMAIN: MOV DPTR,#4000HSAN: MOV A,#00H ;三角波上升沿二进制数值从0开始L1: MOVX @DPTR,A ;送DAC0832转换INC A ;三角波二进制数值加1NOPCJNE A,#00H,L1 ;三角波二进制数值是否到256MOV A,#254 ;三角波下降沿二进制数从254开始L2: MOVX @DPTR,A ;送DAC0832转换DEC A ;三角波二进制数值减1NOPCJNE A,#00H,L2 ;三角波二进制数值是否到0SJMP SANEND三.实验数据结果和结果分析:9-3-1.①输出电压V OUT=-V REF (P1.7/2+P1.6/4+P1.5/8+……+P1.0/256)=- V REF×V IN/256②V=5.02V,下表列出了实际测得的D/A输出电压值和理论上D/A输出电压值:③输入与输出的Matlab拟合图:其中:横轴代表P1口输入的二进制数值对应的十进制数值,纵轴代表D/A输出电压,带点的线是实际测得的D/A输出电压曲线,带*号的线是理论上D/A输出电压曲线。

DA转换实验

DA转换实验

实验二D/A转换一、实验目的:(1)了解D/A转换与单片机的接口方法;(2)了解D/A转换芯片0832的性能及编程方法;(3)了解单片机系统中扩展D/A转换芯片的基本方法;二、实验内容:利用0832输出一个从0V开始逐渐升至5V再降至0V的可变电压。

三、实验接线图:四、实验程序框图:五、实验步骤:把0832译码线CS5接至FF80H,JX0接JX2,运行程序,数码管上显示不断加大或减小的数字量,用万用表测试D/A输出孔AOUT应也能测出不断加大或减小的电压值。

六、程序清单:ORG 0000HLJMP SE13ORG 05E0HSE13: MOV SP,#53Hmov p2,#0ffhMOV A,#81HMOV DPTR,#0FF23HMOVX @DPTR,AMOV 7EH,#00HMOV 7DH,#08HMOV 7CH,#03HMOV 7BH,#02H ;显示缓冲区初值LO20: MOV R6,#00HLO21: MOV DPTR,#0FF80HMOV A,R6MOVX @DPTR,A ;送0832转换MOV R0,#79HLCALL PTDSLCALL SSEE ;显示MOV R2,#08HLCALL DELYA ;延时INC R6 ;加1CJNE R6,#0FFH,LO21 ;不到FF继续加LO22: MOV DPTR,#0FF80HDEC R6MOV A,R6 ;减1送0832转换MOVX @DPTR,AMOV R0,#79HLCALL PTDSLCALL SSEE ;显示MOV R2,#08HLCALL DELYA ;延时CJNE R6,#00H,LO22 ;不为0继续减SJMP LO20 ;循环;ORG 0620HPTDS: MOV R1,A ;拆送显示缓冲区LCALL PTDS1MOV A,R1SWAP APTDS1: ANL A,#0FHMOV @R0,AINC R0RETORG 0D50HSSEE: SETB RS1 ;换工作区MOV R5,#05HSSE2: MOV 30H,#20HMOV 31H,#7EHMOV R7,#06HSSE1: MOV R1,#20HMOV A,30HCPL AMOVX @R1,A ;字位送入MOV R0,31HMOV A,@R0MOV DPTR,#DDFFMOVC A,@A+DPTR ;取字形代码MOV R1,#21HMOVX @R1,A ;字形送入MOV A,30HRR A ;右移MOV 30H,ADEC 31HMOV A,#0FFHMOVX @R1,A ;关显示DJNZ R7,SSE1 ;六位显示完了吗?DJNZ R5,SSE2 ;五次显示完了吗?CLR RS1RETDDFF: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEH DELYA: PUSH 02HDELYB: PUSH 02HDELYC: PUSH 02HDELYD: DJNZ R2,DELYDLCALL SSEE ;调显示子程序POP 02HDJNZ R2,DELYCPOP 02HDJNZ R2,DELYBPOP 02HDJNZ R2,DELYA ;延时RETEND七、实验结果八、实验分析与结论D/A转换是把数字量转化成模拟量的过程,本实验输出为模拟电压信号,本次实验生成的波形较为简单,也可试编程序生成各种波形,如方波,正弦波等,也可与键盘显示模块结合起来,构成一个简单的波形发生器,通过键盘输入各种参数,如频率,振幅(小于+5V),方波的占空比等。

DA转换实验报告

DA转换实验报告

D/A转换实验报告组员:田亚峰杜亚亚摘要此次设计实验是以AT89C51、DAC0832、741为核心,并加以其他辅助电路来实验D/A转换,其中主要是利用单片机来控制从数字量到模拟量的整个转换。

先是从键盘输入数字量到单片机,再从单片机输出到DAC0832,经D/A转换后输出与该数字量大小对应的模拟电压,并用LED数码管显示出来输入的数字量值。

目录1.方案设计及论证 (2)1.1理论分析 (2)1.2单片机选择 (2)1.3键盘设计 (2)1.4 D/A转换选择 (3)2.硬件设计 (3)2.1单片机模块 (3)2.2 D/A转换模块 (4)3.软件设计 (6)4.仿真验证及调试 (6)4.1调试方法 (6)4.2性能测试仪器 (7)4.3实验数据 (7)4.4误差分析 (8)5.设计总结及体会 (8)附录(一):实物图 (9)附录(二)软件程序 (9)1.方案设计及论证1.1理论分析根据本次设计任务的要求,由单片机模块、D/A转换模块、反相比例加法运算电路构成。

系统框图如下:图1 系统框图1.2单片机选择方案一:选用AT89C51方案二:选用AT89C52论证:1)AT89C52的程序空间为8K 比AT89C51的空间大2)AT89C52多了个T2定时器,所以比89C51多几个寄存器因此选用AT89C52.1.3键盘设计方案一:采用独立式键盘方案二:采用矩阵式键盘论证:由于独立式键盘占用较多的I/O线,因此选用4×4矩阵式键盘输入,以保证10个数全部完整输入,节省I/O端口资源。

1.4 D/A转换选择此次设计选用DAC0832,它是由一个八位输入锁存器、一个8位D/A 锁存器和一个8位D/A转换器三个部分组成。

D/A转换器将输入的数字量转换为模拟量输出,数字量是由若干数位构成的,就是把每一位上的代码按照权值转换为对应的模拟量,再把各位所对应的模拟量相加,所得到各位模拟量的和便是数字量所对应的模拟量。

单片机AD与DA转换实验报告

单片机AD与DA转换实验报告

AD与DA转换实验报告一.实验目的⑴掌握A/D转换与单片机接口的方法;⑵了解A/D芯片0809转换性能及编程方法;⑶通过实验了解单片机如何进行数据采集。

⑷熟悉DAC0832 内部结构及引脚。

⑸掌握D/A转换与接口电路的方法。

⑹通过实验了解单片机如何进行波形输出。

二.实验设备装有proteus的电脑一台三.实验原理及内容1.数据采集_A/D转换(1)原理①ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。

多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。

三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。

②ADC0809引脚结构:D7 ~ D0:8位数字量输出引脚。

IN0 ~ IN7:8位模拟量输入引脚。

VCC:+5V工作电压。

GND:地。

REF(+):参考电压正端。

REF(-):参考电压负端。

START:A/D转换启动信号输入端。

ALE:地址锁存允许信号输入端。

(以上两种信号用于启动A/D转换).EOC:转换结束信号输出引脚,开始转换时为低电平,当转换结束时为高电平。

OE:输出允许控制端,用以打开三态数据输出锁存器。

CLK :时钟信号输入端(一般为500KHz )。

A 、B 、C :地址输入线。

C B A 选择模拟通道0 0 0 IN0 0 0 1 IN1 0 1 0 IN2 0 1 1 IN3 1 0 0 IN4 1 0 1 IN5 1 1 0 IN6 111IN7(2) 内容和步骤1.硬件电路设计: 设计基于单片机控制的AD 转换应用电路。

AD 转换芯片采用ADC0809。

ADC0809的通道IN3输入0-5V 之间的模拟量,通过ADC0809转换成数字量在数码管上以十进制形成显示出来。

ADC0809的VREF 接+5V 电压。

2. 软件设计: 程序设计内容(1) 进行A/D 转换时,采用查询EOC 的标志信号来检测A/D 转换是否完毕,经过数据处理之后在数码管上显示。

DA转换

DA转换

一、实验目的了解ADC 0832的工作原理;掌握单片机与ADC 0832与单片机接口设计方法。

二、实验内容(1)编写并调试出一个方波程序;(2)编写并调试出一个阶波程序;(3)编写并调试出一个三角波的程序;(4)编写并调试出一个锯齿波的程序;(5)编写并调试出一个阶波程序;(6)编写一个驱动直流电机程序。

三、实验步骤打开Keil程序,执行菜单命令“Project”->“Ne w Project”创建“0808AD转换”项目,并选择单片机型号为AT89C51。

执行菜单命令“File” -> “New”创建文件,输入源程序,保存为“0808AD转换.A51”。

在“Project”栏的File项目管理窗口中右击文件组,选择“Add Files to Group ‘Source Group1’”将源程序“0808AD转换.A51”添加到项目中。

执行菜单命令“Project” -> “Options for Target ‘Target1’”,在弹出的对话框中选择“Outpu t”选项卡,选中“Greate HEX File”。

执行菜单命令“Project” -> “Build Target”,编译源程序。

如果编译成功,则在“Output Window”窗口中显示没有错误,并创建了“0808AD转换.HEX”文件。

在proteus仿真平台上建立参考图系统,并将程序上载到虚拟平台上运行。

实验程序:ORG 0000HSTART: LJMP MAINORG 0030HMAIN: MOV DPTR,#7FFFH MOV A,#3FH LOOP: MOVX @DPTR,A JNB P1.0,INCDJNB P1.2,DECDLJMP LOOPINCD: ADD A,#20HCJNE A,#0E0H,LOOPMOV A,#20HLJMP LOOP DECD: CLR CSUBB A,#20H CJNE A,#00H,LOOP MOV A,#20H SJMP LOOPEND四、实验调试及结果五、实验分析通过按下K1、K2两个按键来调用中断控制直流电机的转速。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档