微机原理课程设计利用DAC0832实现正弦波输出.
6、DA0832(幅频可调正弦波发生器)实验
实验六D/A0832(幅频可调正弦波发生器)实验1.实验目的(1)了解D/A转换与单片机的接口方法;掌握D/A转换芯片DA0832的性能及编程方法。
(2)掌握通过DA0832数字合成正弦波形信号的方法。
(3)掌握正弦波形信号幅度、频率调节的软件处理方法。
2.实验内容单片机P1口与4个按键连接,用于信号幅度和频率调节操作键。
单片机P0、P2.7、P3.6(-WR)与DA0832、2个741(运放)连接构成波形信号输出电路。
编程使波形信号输出电路输出正弦波信号,并且可通过操作键调节信号的幅度和频率。
幅度和频率调节级别从0~10,共11个等级。
3.实验器材(1)Proteus仿真软件(2)keil C51开发环境软件4.实验原理(1)外扩模拟输出口——利用单片机总线功能,通过单片机的P0、P2.7、P3.6(-WR)与DA0832、1个741(运放)连接,可外扩一个模拟输出口;该口在经过1个741(运放)的单到双信号变换处理,可输出双极性波形信号。
(2)通过“正弦表.exe”软件产生8位量化级数和36个采样点数的正弦波信号波表数组数据。
通过DA0832双极性波形信号电路顺序输出波表数组数据中的数据,可实现数字合成的正弦波信号。
(3)通过调节(键操作)顺序输出波表数据的时间间隔延时,可改变正弦信号的频率。
时间间隔延时控制参数TC=0~10,共有11个等级。
(4)通过调节(键操作)比例系数,将比例系数乘于波表中各个数据,可改变正弦信号的幅度。
幅度调整的计算公式解释如下:y=x×K+(1-K)×128 公式(1)其中:x原波表数据;y调整后的波表数据;K比例系数;(1-K)×128用于双极性信号输出位移调整。
为了提高计算速度,所有参与运算参数采用整型变量,比例系数K可变换成如下形式:K=RC÷10 公式(2)其中:R C幅度控制参数。
R C=0~10(11个等级),K=0~1。
波形发生器实验---微机原理
L03:
;写 0FH,输出高电平
L04:
UP1:
INC AL CMP AL,DANUM JNE UP1 DOWN1: MOV DX,DA0832 OUT DX,AL CALL DALLY DEC CMP JNE JMP AL AL,00H DOWN1 LOOP1
SAWTOOTH: MOV FLAG,3 MOV AL,00H L01: MOV DX,DA0832 OUT DX,AL CALL DALLY
正弦波 Y=ASIN(X):首先利用正弦函数算出各个点,一共取了 64 个点,存放在内存(SIN) 中,用 AL 指向内存首址,取第一个数,然后输出,接着内存地址加 1,延时一段时间,再取下 一个数,这样一直下去,直到读完 64 个数,并依次输出每一个点,就可得到正弦波。利用键盘
菜单选择,按键 4 就有正弦波产生。最后按键 5 可退出程序。
参考程序如下所示: IOY0 EQU 0DA00H ;片选 IOY0 对应的端 口始地址 DA0832 EQU IOY0+00H*4 ;DA0832 的端口地址 DANUM EQU 0FFH STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS DATA SEGMENT STR1 DB '1. Triangle Square Wave ',0ah,0dh,'$' ;定义显示的 字符串 方波 STR2 DB '2. Triangle Delta Wave ',0ah,0dh,'$' ;定义显示的 字符串 三角波 STR3 DB '3. Triangle Sawtooth Wave ',0ah,0dh,'$' ;定义显示的 字符串 锯齿波 STR4 DB '4. Triangle Sine Wave ',0ah,0dh,'$' ;定义显示的 字符串 正弦波 STR5 DB '5. Exit ',0ah,0dh,'$' ;定义显示的字符串 正弦波 FLAG DB 0 SIN DB 00H,02H,05H,09H,0FH,15H,1DH,25H DB 2EH,38H,43H,4FH,5AH,67H,73H,7FH DB 80H,8CH,98H,0A5H,0B0H,0BCH,0C7H,0D1H DB 0DAH,0E2H,0EAH,0F0H,0F6H,0FAH,0FDH,0FFH DB 0FFH,0FDH,0FAH,0F6H,0F0H,0EAH,0E2H,0DAH DB 0D1H,0C7H,0BCH,0B0H,0A5H,98H,8CH,80H DB 7FH,73H,67H,5AH,4FH,43H,38H,2EH DB 25H,1DH,15H,0Fh,09H,05H,02H,00H DATA ENDS CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA,SS:STACK1 START: MOV MOV MOV MOV AX,DATA DS,AX AX,STACK1 SS,AX ;显示字符串 1
用dac0832产生正弦波的设计
摘要:DAC转换器是一种将数字量转换成模拟量的器件,本论文简要介绍模数转换器DAC0832的工作原理和芯片结构,并利用模数转换器DAC0832输出正弦波进一步分析输出波形的模拟失真度。
关键词:模数转换器DAC0832,正弦数据区,模拟失真度,FFT变换。
引言:1.DAC1us D0~D7ILECSWR1、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存;XFER:数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ns)有效;WR2:DAC寄存器选通输入线,负脉冲(脉宽应大于500ns)有效。
由WR1、XFER的逻辑组合产生LE2,当LE2为高电平时,DAC寄存器的输出随寄存器的输入而变化,LE2的负跳变时将数据锁存器的内容打入DAC寄存器并开始D/A转换。
IOUT1:电流输出端1,其值随DAC寄存器的内容线性变化;IOUT2:电流输出端2,其值与IOUT1值之和为一常数;Rfb:反馈信号输入线,改变Rfb端外接电阻值可调整转换满量程精度;VccVREFAGNDDGND1数据只通过一级缓冲器送入D/A转换器。
通常的做法是将和XFER均接地,使DAC寄存器处于直通方式,而把ILE接高电平,接端口地址译码信号,WR1接CPU系统总线的IOW信号,使输入寄存器处于锁存方式。
单缓冲方式只需执行一次写操作即可完成D/A转换。
一般不需要多个模拟量同时输出时,可采用单缓冲方式。
3.单缓冲方式单缓冲方式就是使两个寄存器均处于锁存方式,数据要经过两级锁存(即两级缓冲)后再送入D/A转换器,这就是说,要执行两次写操作才能完成一次D/A转换。
只要将ILE接高电平,WR1和WR2接CPU的IOW,CS和XFER分别接两个不同的I/O地址译码信号即可。
图中的+10V2利用2.12.21)START:JMPDACONTORLDACONTORL:CALLFORMATCALLLEDDISPMOVDX,DAPORTSS2:MOVAL,80H;初始值MOVBX,0HDACON1:OUTDX,ALMOVCX,0008H;INCBXCMPBX,32;比较一个周期是否结束JZSS2OUTDX,AL ADDBYTEPTRDS:[0600H],01H JNZLED1LED2:RETFORMAT:MOVBX,0MOVWORDPTRDS:[BX+0500H],4006HADDBX,2MOVWORDPTRDS:[BX+0500H],4040HADDBX,2MOVWORDPTRDS:[BX+0500H],4F5BHRET2时,通过3计算模拟失真度3.1模拟失真度的定义模拟失真度一般由基波剔除法和频谱分析法来计算,本论文采用频谱分析法来计算。
51-单片机和DAC0832输出方波、矩形波和正弦波由液晶1602显示的C语言程序
显示频率,幅度可调,可产生四种波形,正弦波,方波,锯齿波,三角波,希望你能喜欢,给你发了一张效果图,喜欢的话别忘了采纳我的回答啊#include<reg52.h>#define uchar unsigned char#define uint unsigned int#define DAdata P0 //DA数据端口sbit DA_S1= P2^0; // 控制DAC0832的8位输入寄存器,仅当都为0时,可以输出数据(处于直通状态),否则,输出将被锁存sbit DA_S2= P2^1; // 控制DAC0832的8位DAC寄存器,仅当都为0时,可以输出数据(处于直通状态),否则,输出将被锁存sbit key= P3^2;uchar wavecount; //'抽点'计数uchar THtemp,TLtemp;//传递频率的中间变量uchar judge=1; //在方波输出函数中用于简单判别作用uchar waveform; //当其为0、1、2时,分别代表三种波uchar code freq_unit[3]={10,50,200}; //三种波的频率单位uchar idata wavefreq[3]={1,1,1}; //给每种波定义一个数组单元,用于存放单位频率的个数uchar code lcd_hang1[]={"Sine Wave " "Triangle Wave " "Square Wave " "Select Wave: " "press No.1 key! "};uchar idata lcd_hang2[16]={"f= Hz "};uchar code waveTH[]={0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xec,0xf6,0xf9,0xfb,0xfc,0xfc,0xfd,0xfd,0xfd,0xfe};uchar code waveTL[]={0x06,0x8a,0x10,0x4e,0x78,0x93,0xa8,0xb3,0xbe,0xc6, //正弦波频率调整中间值0xac,0xde,0x48,0x7a,0x99,0xaf,0xbb,0xc8,0xd0,0xde, //三角波频率调整中间值0x88,0x50,0x90,0x32,0x34,0xbe,0x4a,0xa3,0xe5,0x2c};/**************************************************************************************** *********/uchar code triangle_tab[]={ //每隔数字8,采取一次0x00,0x08,0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48,0x50,0x58,0x 60,0x68,0x70,0x78,0x80,0x88,0x90,0x98,0xa0,0xa8,0xb0,0xb8,0xc0,0xc8,0xd0,0xd8,0x e0,0xe8,0xf0,0xf8,0xff,0xf8,0xf0,0xe8,0xe0,0xd8,0xd0,0xc8,0xc0,0xb8,0xb0,0xa8,0xa0,0x9 8,0x90,0x88,0x80,0x78,0x70,0x68,0x60,0x58,0x50,0x48,0x40,0x38,0x30,0x28,0x20,0x 18,0x10,0x08,0x00};uchar code sine_tab[256]={//输出电压从0到最大值(正弦波1/4部分)0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa 5,0xa8,0xab,0xae,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,//输出电压从最大值到0(正弦波1/4部分)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,0x d6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9 c,0x99 ,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,//输出电压从0到最小值(正弦波1/4部分)0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5 a,0x57,0x55,0x51,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x 22,0x20,0x1e,0x1c,0x1a,0x18,0x16 ,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x 03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,//输出电压从最小值到0(正弦波1/4部分)0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02 ,0x02,0x03,0x04,0x05,0x 06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15 ,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x 29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x 63,0x66 ,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80};void delay(uchar z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void triangle_out() //三角波输出{DAdata=triangle_tab[wavecount++];if(wavecount>64) wavecount=0;DA_S1=0; //打开8位输入寄存器DA_S1=1; //关闭8位输入寄存器void sine_out() //正弦波输出{DAdata=sine_tab[wavecount++];DA_S1=0; //打开8位输入寄存器DA_S1=1; //关闭8位输入寄存器}void square_out() //方波输出{judge=~judge;if(judge==1) DAdata=0xff;else DAdata=0x00;DA_S1=0; //打开8位输入寄存器DA_S1=1; //关闭8位输入寄存器}/************1602液晶的相关函数*************/#define lcd_ports P1sbit rs=P2^2;sbit rw=P2^3;sbit lcden=P2^4;void write_com(uchar com){rs=0; //置零,表示写指令lcden=0;lcd_ports=com;delay(5);lcden=1;delay(5);lcden=0;}void write_date(uchar date){rs=1; //置1,表示写数据(在指令所指的地方写数据)lcden=0;lcd_ports=date;delay(5);lcden=1;delay(5);lcden=0;void disp_lcd(uchar addr,uchar *temp1){uchar num;write_com(addr);delay(1); //延时一会儿???for(num=0;num<16;num++){write_date(temp1[num]);//或者这样写write_date(*(temp1+num));delay(1);}}void init_lcd(){//uchar num;lcden=0; //可有可无???rw=0; //初始化一定要设置为零,表示写数据write_com(0x38); //使液晶显示点阵,为下面做准备write_com(0x0c); //初始设置write_com(0x06); //初始设置write_com(0x01); //清零write_com(0x80); //使指针指向第一行第一格disp_lcd(0x80,&lcd_hang1[3*16]); //在第一行显示disp_lcd(0xc0,&lcd_hang1[4*16]); //在第二行显示}/********************1602液晶函数声明结束*********************/ void main(){uchar i=0;DA_S2=0; //使DAC寄存器处于直通状态DAdata=0;DA_S1=1; //关闭8位输入寄存器init_lcd();waveform=0;TMOD=0x01; //设置定时器0为16位工作方式IT0=1; //设置外部中断0为下降沿触发ET0=1; //开定时器中断EX0=1;EA=1;while(1){//DAout(0xff); //可输出TTL波形//DAout(0x80);//T_temp=32;}}void timer0() interrupt 1{TH0=THtemp;TL0=TLtemp;if(waveform==0) sine_out();else if(waveform==1) triangle_out();else if(waveform==2) square_out();}void key_int0() interrupt 0{uchar keytemp;uint total_freq; //总频率EA=0; TR0=0; //关总中断与定时器delay(5); //延时够吗???if(key==0) //确实有按键按下而引发中断{keytemp=P3&0xf0; //获取P3口高四位的值switch(keytemp){case 0xe0: //选择波形waveform++;if(waveform>2) waveform=0;break;case 0xd0: //频率按规定单位依次增加wavefreq[waveform]++;if(wavefreq[waveform]>10) wavefreq[waveform]=1; // /*这边要用“>10”,因为它比“=11”可靠break;case 0xb0: //频率按规定单位依次衰减wavefreq[waveform]--;if(wavefreq[waveform]<1) wavefreq[waveform]=10; //这边要用“<1”,因为它比“=0”可靠性更高break;case 0x70: //TTL输出DA_S2=1; //使DAC寄存器关闭break;}THtemp=waveTH[waveform*10+(wavefreq[waveform]-1)]; //方括号中选取第几个数后,并把该值赋给T_tempTLtemp=waveTL[waveform*10+(wavefreq[waveform]-1)];total_freq= wavefreq[waveform] * freq_unit[waveform]; //求输出频率(个数*单位)lcd_hang2[5]=total_freq%10+0x30; //在液晶中显示个位,(0x30 在液晶显示中表示数字0)total_freq/=10; lcd_hang2[4]=total_freq%10+0x30; //在液晶中显示时十位total_freq/=10; lcd_hang2[3]=total_freq%10+0x30; //在液晶中显示时百位total_freq/=10; lcd_hang2[2]=total_freq%10+0x30; //在液晶中显示时千位disp_lcd(0x80,&lcd_hang1[waveform*16]); //在第一行显示disp_lcd(0xc0,lcd_hang2); //在第二行显示}wavecount=0; //'抽点'计数清零while(!key);EA=1; TR0=1; //开启总中断与定时器}。
单片机实验DA转换器DAC0832的应用的报告
单片机应用技术课程报告实验名称D/A转换器DAC0832的应用实验时间2020年6月30 日学生姓名实验地点钉钉群线上同组人员专业班级1、实验目的(1)了解D/A转换与单片机的接口方法;(2)了解D/A转换芯片DAC0832的性能及编程方法(3)掌握D/A转换的程序设计方法。
2、任务设计要求(1)掌握实验原理,读懂实验线路图,了解所用到的元器件特性。
(2)会绘制电路原理图,会连接电路原理图。
(3)将编制的锯齿波、方波程序运行,用示波器观察波形。
使用STC89C51单片机、DAC0832芯片,设计一个波形发生器,能产生正弦波、方波、三角波、锯齿波,梯形波,要求通过编程实现不同波型的产生,通过按键实现不同波形输出的切换。
3、总体设计方案4、硬件电路设计5、软件程序设计#include<absacc.h>#include<reg51.h>#define DAC0832 XBYTE[0x7fff]sbit k1=P1^0;sbit k2=P1^1;sbit k3=P1^2;sbit k4=P1^3;sbit k5=P1^4;int flag1=0;int flag2=0;int flag3=0;int flag4=0;int flag5=0;unsigned char code zhengxian[256]={0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,0x98,0x9c,0x9f,0xa2,0xa5, 0xa8,0xab,0xae,0xb0,0xb3,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4,0xc7,0xc9, 0xcc,0xce,0xd1,0xd3,0xd5,0xd8,0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6, 0xe8,0xea,0xec,0xed,0xef,0xf0,0xf2,0xf3,0xf4,0xf6,0xf7,0xf8,0xf9, 0xfa,0xfb,0xfc,0xfc,0xfd,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfd,0xfc,0xfc,0xfb,0xfa,0xf9, 0xf8,0xf7,0xf6,0xf4,0xf3,0xf2,0xf0,0xef,0xed,0xec,0xea,0xe8,0xe6,0xe4,0xe2,0xe0,0xde,0xdc,0xda,0xd8,0xd6,0xd3,0xd1,0xce,0xcc,0xc9, 0xc7,0xc4,0xc1,0xbf,0xbc,0xb9,0xb6,0xb4,0xb1,0xae,0xab,0xa8,0xa5, 0xa2,0x9f,0x9c,0x99,0x96,0x92,0x8f,0x8c,0x89,0x86,0x83,0x80,0x7d, 0x7a,0x76,0x73,0x70,0x6d,0x6a,0x67,0x64,0x61,0x5e,0x5b,0x58,0x55, 0x52,0x4f,0x4c,0x49,0x46,0x43,0x41,0x3e,0x3b,0x39,0x36,0x33,0x31, 0x2e,0x2c,0x2a,0x27,0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x17,0x15, 0x14,0x12,0x10,0x0f,0x0d,0x0c,0x0b,0x09,0x08,0x07,0x06,0x05,0x04, 0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08, 0x09,0x0a,0x0c,0x0d,0x0e,0x10,0x12,0x13,0x15,0x17,0x18,0x1a,0x1c, 0x1e,0x20,0x23,0x25,0x27,0x29,0x2c,0x2e,0x30,0x33,0x35,0x38,0x3b, 0x3d,0x40,0x43,0x46,0x48,0x4b,0x4e,0x51,0x54,0x57,0x5a,0x5d,0x60, 0x63,0x66,0x69,0x6c,0x6f,0x73,0x76,0x79,0x7c};void delay()//延时程序{int i;for(i=0;i<1000;i++);}void panduan (void)//函数panduan用于扫描按键状态判断输出波形{if (k1==0){//按键消抖delay();if (k1==0)//通过赋值flag选择波形flag1=1;flag2=0;flag3=0;flag4=0;flag5=0;}if(k2==0){delay();if (k2==0)flag1=0;flag2=1;flag3=0;flag4=0;flag5=0;}if (k3==0){//补充程序flag1=0;flag2=0;flag3=1;flag4=0;flag5=0;。
DAC0832波形发生器课程设计实验报告
DAC0832波形发生器课程设计实验报告目录第1章系统设计方案 (2)1.1 设计思路 (2)1.2 方案比较与选择 (2)第2章系统硬件设计..................................................................................2. 2.1 主控制器电路 (2)2.2 数模转换电路 (3)第3章系统软件设计................................................................................ .6 3.1 系统整体流程...................................................................................... .6 3.2 数模转换程序...................................................................................... .6 第4章系统调试 (8)4.1 proteus的调试 (8)第5章结论与总结 (11)5.1 结论 (11)(系统总体设计与完成做一个总结,是客观的,主要包括:设计思路,设计过程,测试结果及完善改进的方向。
)5.2 总结 (11)(这是一个主观的总结,谈谈自己收获和不足等方面的内容。
)第1章系统设计方案1.1 设计思路(一)、课设需要各个波形的基本输出。
如输出矩形波、锯齿波,正弦波。
这些波形的实现的具体步骤:正弦波的实现是非常麻烦的。
它的实现过程是通过定义一些数据,然后执行时直接输出定义的数据就可以了。
然而为了实现100HZ的频率,终于发现,将总时间除了总步数,根据每步执行时间,算出延时时间,最终达到要求,然后建一个表通过查表来进行输出,这样主要工作任务就落到了建表的过程中。
dac0832正弦波转换为交流输出
正弦波是一种最基本的周期性波形,它在电子技术中有着广泛的应用。
在许多电子设备中,我们常常需要将正弦波转换为交流输出。
这篇文章将从以下几个方面来探讨如何实现将正弦波转换为交流输出。
1. 正弦波的特点正弦波是一种周期性波形,具有周期性、对称性和稳定性等特点。
它的数学表达式为y = A*sin(ωt+φ),其中A为振幅,ω为角频率,φ为初相位。
在实际应用中,我们常常需要根据具体的需求来调节正弦波的振幅、频率和相位等参数。
2. 正弦波的生成要将正弦波转换为交流输出,首先需要生成一个符合要求的正弦波信号。
常见的方法有两种:一种是使用集成波形发生器芯片,例如AD9833,它可以通过SPI接口直接控制生成正弦波的频率和相位;另一种是使用数字信号处理器(DSP)来计算出相应的离散数值,然后通过数模转换器(DAC)输出相应的模拟正弦波信号。
3. 正弦波的滤波处理由于数字信号处理器生成的正弦波信号往往带有一定的谐波成分,为了得到纯净的正弦波信号,需要进行滤波处理。
常见的滤波器有低通滤波器和带通滤波器,它们可以滤除非基波成分,从而使输出的正弦波更加纯净。
4. 正弦波的放大经过滤波处理后的正弦波信号往往比较微弱,需要经过放大器进行放大。
放大器的设计需要考虑到输出功率、失真度和带宽等因素,以确保输出的交流信号具有足够的幅度和稳定性。
5. 交流输出的实现经过以上步骤处理得到的正弦波信号即可作为交流输出。
交流输出的用途非常广泛,可以用于驱动声音设备、实现调制解调等功能,因此电子工程师在设计电子设备时需要充分考虑如何有效地将正弦波转换为交流输出。
通过以上几个步骤,我们可以实现将正弦波转换为交流输出。
这需要综合运用信号处理、滤波技术和放大技术等知识,才能确保输出的交流信号符合要求。
希望这篇文章能够帮助大家更好地理解正弦波转换为交流输出的原理和方法,为电子技术工作者在实际工作中提供一些参考和启发。
在实际工程应用中,将正弦波转换为交流输出是非常常见的需求,同时也是非常重要的一环。
EDA课程报告-正弦波信号发生器的设计
《EDA》课程设计报告——正弦波信号发生器的设计一、设计目的:进一步熟悉QuartusII及其LPM_ROM与FPGA 硬件资源的使用方法。
培养动手能力以及合作能力。
二、设计要求:1、clk为12MHz。
2、通过DAC0832输出正弦波电压信号,电压范围0~-5V。
3、通过示波器观察波形。
三、设计内容:在QUARTUSII上完成正弦波信号发生器的设计,包括仿真和资源利用情况了解(假设利用Cyclone器件)。
最后在实验系统上实测,包括FPGA中ROM的在系统数据读写测试和利用示波器测试。
信号输出的D/A使用实验系统上的ADC0832。
四、设计原理:图1所示的正弦波信号发生器的结构由四部分组成:1、计数器或地址发生器(这里选择10位)。
2、正弦信号数据ROM(10位地址线,8位数据线),含有1024个8位数据(一个周期)。
3、VHDL顶层设计。
4、8位D/A(实验中可用ADC0832代替)。
图1所示的信号发生器结构图中,顶层文件singt.vhd在FPGA中实现,包含两个部分:ROM的地址信号发生器,由10位计数器担任;一个正弦数据ROM,由LPM_ROM模块构成。
LPM_ROM底层是FPGA 中的EAB、ESB或M4K等模块。
地址发生器的时钟clk的输入频率fo与每周期的波形数据点数(在此选择1024点),以及D/A输出的频率f的关系是:f=fo/1024图1 正弦信号发生器结构框图图2 正弦波信号发生器的设计图五、设计步骤:1、建立.mif格式文件首先,mif文件可用C语言程序生成,产生正弦波数值的C程序如下:#include<stdio.h>#include<math.h>main(){int i;float s;for(i=0;i<1024;i++){s=sin(atan(1)*8*i/256);printf("%d :%d;\n",i,(int)((s+1)*255/2)) }}其次,把上述程序编译后,在DOS命令行下执行命令:romgen > sdata.mif;将生成的sdata.mif 文件,再加上.mif文件的头部说明即可。
数模转换器DAC0832的应用
实训报告十一实训目的:通过DAC0832作为D/A转换器,在虚拟显示正弦波或三角波,从而了解DAC0832的工作方式,把数字量转化为模拟量,学会利用c语言编程实现输出正弦波、三角波等波形。
实训原理图:实训步骤:1.在ptoteus平台找出所需的元器件2.理解该实验的原理,按照原理图画出仿真图;3.根据实验要求写出如下程序:#include <reg51.H>#include<absacc.h>#define DAC0832 XBYTE[0X12ef]unsigned char sindot[64]={0x80,0x8c,0x98,0xa5,0xb0,0xbc,0xc7,0xd1,0xda,0xe2,0xea,0xf0,0xf6,0xfa,0xfd,0xff,0xff,0xff,0xfd,0xfa,0xf6,0xf0,0xea,0xe3,0xda,0xd1,0xc7,0xbc,0xb1,0xa5,0x99,0x8c,0x80,0x73,0x67,0x5b,0x4f,0x43,0x39,0x2e,0x25,0x1d,0x15,0xf,0x9,0x5,0x2,0x0,0x0,0x0,0x2,0x5,0x9,0xe,0x15,0x1c,0x25,0x2e,0x38,0x43,0x4e,0x5a,0x66,0x73};//正弦代码表sbit K1=P2^7;//控制开关,void delay(unsigned char m)//延时{ unsigned char i;for(i=0;i<m;i++);}void main(void){unsigned char k;while(1){ if (K1==0)//K1为1时,输出三角波,K1为0时,输出为正弦波{for(k=0;k<64;){ DAC0832=sindot[k];//取正弦代码并输出k++;delay(10);}}else{ for(k=0;k<255;){ DAC0832=k;k+=5;delay(1);}for(k=255;k>0;){ DAC0832=k;k-=5;delay(1);}}}}总结:经过此次的实验,通过DAC0832作为D/A转换器,在虚拟显示正弦波或三角波,深刻地理解了DAC0832的结构以及工作方式。
用dac产生正弦波的设计
摘要:DAC 转换器是一种将数字量转换成模拟量的器件,本论文简要介绍模数转换器DAC0832 的工作原理和芯片结构,并利用模数转换器DAC0832 输出正弦波进一步分析输出波形的模拟失真度。
关键词:模数转换器DAC0832 ,正弦数据区,模拟失真度,FFT 变换。
引言:1 . 简要模数转换器DAC0832 的介绍DAC 转换器是一种将数字量转换成模拟量的器件,其特点是接收、保持和转换的是数字信息,不存在随温度和时间的漂移问题,因此电路的抗干扰性能较好。
DAC0832 是8 位分辨率的D/A 转换集成芯片,它具有价格低廉、接口简单及转换控制容易等特点。
它由8 位输入锁存器、8 位DAC 寄存器、8 位DIA 转换电路及转换控制电路组成,能和CPU 数据总线直接相连,属中速转换器,大约在1u s内将一个数字量转换成模拟量输出。
1.1 DAC0832 的结构如下:D0 ~D7 :8 位数据输入线,TTL 电平,有效时间应大于90ns( 否则锁存器的数据会出错) ;ILE :数据锁存允许控制信号输入线,高电平有效;CS :片选信号输入线(选通数据锁存器),低电平有效;WR1 :数据锁存器写选通输入线,负脉冲(脉宽应大于500ns )有效。
由ILE 、CS 、WR1 的逻辑组合产生LE1 ,当LE1 为高电平时,数据锁存器状态随输入数据线变换,LE1 的负跳变时将输入数据锁存;XFER :数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ns )有效;WR2 :DAC 寄存器选通输入线,负脉冲(脉宽应大于500ns )有效。
由WR1 、X FER的逻辑组合产生LE2 ,当LE2 为高电平时,DAC 寄存器的输出随寄存器的输入而变化,LE2 的负跳变时将数据锁存器的内容打入DAC 寄存器并开始D/A 转换。
IOUT1 :电流输出端 1 ,其值随DAC 寄存器的内容线性变化;IOUT2 :电流输出端2 ,其值与IOUT1 值之和为一常数;Rfb :反馈信号输入线,改变Rfb 端外接电阻值可调整转换满量程精度;Vcc :电源输入端,Vcc 的范围为+5V ~+15V ;VREF :基准电压输入线,VREF 的范围为-10V ~+10V ;AGND :模拟信号地DGND :数字信号地1.2 DAC0832 的引脚图和内部结构1.3 DAC0832 的三种工作方式1 .直通方式直通方式就是使DAC0832 内部的两个寄存器(输入寄存器和DAC 寄存器)处于不锁存状态,数据一旦到达输入端DI7 ~DI0, 就直接送入D/A 转换器,被转换成模拟量。
微机原理与接口技术课程设计(报告)
湖南科技大学潇湘学院信息与电气工程系《微机原理与接口技术》课程设计报告题目:基于D/A转换器DAC0832的波形发生器设计专业:通信工程班级:通信002班姓名:刘黎辉学号:0954040217指导老师:欧青立陈君宋芳课程设计任务书目录一、课程设计的目的及意义 (1)1.设计目的 (1)2.设计意义 (1)二、方案论证 (1)1.设计要求 (1)2.方案论证 (1)三、硬件电路设计 (2)1.波形产生电路 (2)2.按键控制电路 (4)3.地址译码电路 (6)四、程序设计 (7)1.波形发生原理 (7)2.程序流程图 (7)五、硬件连接及调试 (8)1.硬件连接 (8)2.电路调试 (8)六、体会与心得 (8)七、参考书目: (9)八、附录 (9)1.电路原理图............................................................................................ 错误!未定义书签。
2.程序源码................................................................................................ 错误!未定义书签。
一、课程设计的目的及意义1.设计目的(1)掌握计算机应用系统特别是微机接口系统的设计。
(2)掌握接口电路设计技术,初步掌握电子设计软件Protel99使用。
(3)掌握微机接口程序的编制与调试技术。
(4)掌握DAC0832芯片的使用方法。
(5)利用所学微机的理论知识进行软硬件整体设计,提高综合应用能力。
2.设计意义波形发生器作为一种常用的信号源,是现代测试领域内应用最为广泛的通用仪器之一。
在研制、生产、测试和维修各种电子元件、部件以及整机设备时,都需要有信号源,由它产生不同频率不同波形的电压、电流信号并加到被测器件或设备上,用其他仪器观察、测量被测仪器的输出响应,以分析确定它们的性能参数。
dac0832波形发生器的设计
课程设计课程名称:低频信号源的设计专业年级:电子信息工程082班学生姓名:学号: 200805070211实习时间: 2011年6月30至7月1日指导教师:填写时间:2011年7 月3日一、设计任务及意义本系统是基于AT89C52单片机的数字式简易低频信号发生器。
用程序实现方波、锯齿波、三角波等信号,并在Protues电子设计平台上对方案进行了仿真。
消除了传统信号发生器存在元器件分散性造成波形失真的弊端。
系统采用AT89C52单片机作为控制核心,外围采用数字/模拟转换电路(DAC0832)、按键电路。
通过按键控制可产生方波、锯齿波、正弦波。
波形的频率和幅度在一定范围内可任意改变,其设计简单、性能优良,可用于多种需要低频信号源的场所,具有一定的实用性。
二、设计方案选择及论证系统方案比较方案一:采用函数信号发生器ICL8038集成模拟芯片,(如图2-1)它是一种可以同时产生方波、三角波、正弦波的专用集成电路。
但是这种模块产生的波形都不是纯净的波形,会寄生一些高次谐波分量,采用其他的措施虽可滤除一些,但不能完全滤除掉。
方案二:采用分立元件实现非稳态的多谐振振荡器,然后根据需要加入积分电路等构成正弦、矩形、三角等波形发生器。
这种信号发生器输出频率范围窄,而且电路参数设定较繁琐,其频率大小的测量往往需要通过硬件电路的切换来实现,操作不方便。
方案三:采用单片机和DAC0832数模转换器生成波形,由于是软件滤波,所以不会有寄生的高次谐波分量,生成的波形比较纯净。
它的特点是价格低、性能高,在低频范围内稳定性好、操作方便、体积小、耗电少。
经比较,方案三既可满足课程设计的基本要求又能充分发挥其优势,电路简单,易控制,性价比较高,所以采用该方案。
三、硬件设计系统总体框图设计本系统是以单片机AT89C51和8位D/A 转换芯片DAC0832共同实现正弦波,方波,锯齿波这三种常见波形的产生及显示相互切换的功能。
图3-1 系统总体框图 3.1单片机晶振电路对于MCS-51一般的晶振可以在1.2MHZ —12MHZ 之间选择,这是电容C 可以对应的选择10pf-30Pf 。
单片机的DA 接口应用 用0832单片机控制生成正弦波,频率和幅值可调
桂林电子科技大学单片机最小应用系统设计报告指导老师:吴兆华学生:刘毅学号: 082011119桂林电子科技大学机电工程学院单片机最小应用系统设计报告一、设计题目 (3)二、设计目的 (3)三、系统硬件图 (4)3.1系统的硬件电路原理图 (4)3.2 最小系统原理电路图 (4)3.3 电压放大电路 (6)四、程序流程图 (6)五、系统说明与分析 (8)5.1设计步骤 (8)5.2 D/A转换器与MCS-51单片机接口 (8)5.3 D/A转换器选择要点及辅助电路 (9)5.4典型的D/A转换器芯片DAC0832性能介绍 (10)5.5 8051单片机简要介绍 (13)5.6 数码显示部分 (16)六、源程序 (17)七、总结 (24)八、参考文献 (24)单片机最小应用系统设计报告一、设计题目单片机的D/A 接口应用:用0832单片机控制生成正弦波,频率和幅值可调。
二、设计目的设计目的:1.了解单片微机系统中实现D/A(数字/模拟)转换的原理及方法;2.详细了解D/A转换芯片0832的性能及编程方法;3.了解单片机系统中扩展D/A转换的基本原理,了解单片机如何进行数据采集;4.掌握DAC0832,AT89C51输入/输出接口电路设计方法;5.掌握DAC0832转换实现的程序控制方法;6.掌握单片机汇编编程技术中的设计和分析方法;7.学会使用并熟练掌握电路绘制软件Protel99SE(或DXP);8.掌握电路图绘制及PCB图布线技巧。
设计要求:1、在系统掌握单片机相应基础知识的前提下,熟悉单片机最小应用系统的设计方法及系统设计的基本步骤。
2、完成所需单片机最小应用系统原理图设计绘制的基础上完成系统的电路图设计。
3、完成系统所需的硬件设计制作,在提高实际动手能力的基础上进一步巩固所学知识。
4、进行题目要求功能基础上的软件程序编程,会用相应软件进行程序调试和测试工作。
5、用AT89C51,DAC0832设计出题目所要求的正弦波实现频率和幅值可调输出,并针对实际设计过程中软、硬件设计方面出现的问题提出相应解决办法。
微机原理课程设计—dac0832波形发生器
二○一四~二○一五学年第一学期信息科学与工程学院自动化系课程设计报告课程名称:微机原理及应用课程设计班级:自动化1204班*名:**学号:************指导教师:***时间:2014.12.28题目:函数发生器1的设计1.设计任务用8086做控制器,利用DAC0832设计一个函数发生器,能分别产生方波、阶梯波(每阶梯1V)、锯齿波(正向或负向)和三角波,并利用按键选择(自行定义)输出波形同时将当前输出波形代号显示在LED上:0为方波、1为阶梯波、2为锯齿波、3为三角波。
2.设计要求波形输出幅值和频率不限(可根据需要考虑增加调频调幅功能),通过8255A 进行按键选择。
3.设计内容3.1系统方案的设计与选择:(1)数字按键的实现可以通过8255的输入输出端口,定义方式0工作方式,C 口低四位输入信号,B口输出信号,通过按键改变C口电平信号,使输入信号改变,并在在B口输出不同信号,在数码管上显示不同数字;(2)波形的产生则使用8086与DAC0832连接,通过8086给DAC0832输入不同数字信号,在DAC0832的输出端输出波形,波形的观察使用一个放大器连接模拟示波器显示。
3.2系统框图:3.3系统基本介绍:此方案是通过并行接口芯片8255A和8086计算机的硬件连接,并通过8086控制DAC0832产生波形相应波形,通过8255A输出信号控制数码管显示不同数字。
8255A的C端口有四个按键,按下相应的按键,使输入低电平。
①按下第一个按键显示数字0,在示波器上产生方波;②按下第二个按键显示数字1,产生阶梯波;③按下第三个按键显示数字3,产生锯齿波;④按下第四个按键显示数字4,产生三角波。
3.4模块功能介绍:8255A:D0~D7口与8086数据端连接,PB0~PB6与七段共阴极数码管相连接以显示数字,PC0~PC4连接四个按键,实现输入电平的改变。
A0、A1接地址线A1、A2,CS端连接74ls138的片选端。
0832产生频率可调正弦波
0832产生频率可调正弦波2008-01-01 21:06 分类:我的学习字号:大中小头文件SINX.h#define uchar unsigned charuchar codeSINX[]={ 0x7F,0x82,0x85,0x88,0x8B,0x8F,0x92,0x95,0x98,0x9B,0x9E,0xA 1,0xA4,0xA7,0xAA,0xAD,0xB0,0xB3,0xB6,0xB8,0xBB,0xBE,0xC1,0xC3,0xC6,0xC8,0xCB,0xCD ,0xD0,0xD2,0xD5,0xD7,0xD9,0xDB,0xDD,0xE0,0xE2,0xE4,0xE5,0xE7,0xE9,0xEB,0xEC ,0xEE,0xEF,0xF1,0xF2,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFB,0xFC,0xFD ,0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFD,0xFD,0xFC, 0xFB,0xFB,0xFA,0xF9,0xF8,0xF7,0xF6,0xF5,0xF4,0xF2,0xF1,0xEF,0xEE,0xEC,0xEB, 0xE9,0xE7,0xE5,0xE4,0xE2,0xE0,0xDD,0xDB,0xD9,0xD7,0xD5,0xD2,0xD0,0xCD,0xCB,0x C8,0xC6,0xC3,0xC1,0xBE,0xBB,0xB8,0xB6,0xB3,0xB0,0xAD,0xAA,0xA7,0xA4,0xA1,0x 9E,0x9B,0x98,0x95,0x92,0x8F,0x8B,0x88,0x85,0x82,0x7F,0x7C,0x79,0x76,0x73,0x 6F,0x6C,0x69,0x66,0x63,0x60,0x5D,0x5A,0x57,0x54,0x51,0x4E,0x4B,0x48,0x46,0x43, 0x40,0x3D,0x3B,0x38,0x36,0x33,0x31,0x2E,0x2C,0x29,0x27,0x25,0x23,0x21,0x1E,0x1C ,0x1A,0x19,0x17,0x15,0x13,0x12,0x10,0x0F,0x0D,0x0C,0x0A,0x09,0x08,0x07,0x06,0x 05,0x04 ,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0C,0x0D,0x 0F,0x10 ,0x12,0x13,0x15,0x17,0x19,0x1A,0x1C,0x1E,0x21,0x23,0x25,0x27,0x2 9,0x2C,0x2E,0x31,0x33,0x36,0x38,0x3B,0x3D,0x40,0x43,0x46,0x48,0x4B,0x4E,0x51,0x54,0x57, 0x5A,0x 5D,0x60,0x63,0x66,0x69,0x6C,0x6F,0x73,0x76,0x79,0x7C};//将SINX数组写入程序存储器中,不占用RAM空间,写入后不可更改主程序://-----------------------------------------------------------------------------------//程序功能简介:本程序产生频率可一改变的正弦波,频率改变步长为1HZ,初始化频率为50HZ;//程序思路:本程序用到一个定时器------定时器0,定时器0工作在定时方式下,// 定时向DAC0832送数据打点;//制作人:陈卓;//制作人单位:武汉理工大学信息工程学院电信0504班;//制作时间: 2007年12月28日;//------------------------------------------------------------------------------------#include "reg52.h"//51芯片管脚定义头文件#include "stdio.h"#include "SINX.h"#define uchar unsigned char#define uint unsigned int#define Fosc 12000000 //晶振频率12M;#define ALL 65536 //定时器0处于工作方式1,最大基数长度65536;uchar LED0_BUF=0xff,LED1_BUF=0xff,LED2_BUF=0xff,LED3_BUF=0xff;//数码管显示缓冲变量;uchar TIMER0_H,TIMER0_L; //定时器0的初值设置;uchar NUM=0; //计数变量;uchar FREQ=50; //初始频率;bit FLAG=0; //频率调节标志;//------------------------------------------------------------------------------------// 各端口定义;//------------------------------------------------------------------------------------sbit F_UP=P1^0; //频率上调按钮;sbit F_DOWN=P1^1; //频率下调按钮;// sbit CS=P1^6; //片选端口;// sbit _WR=P1^7; //写端口;//----------------------------------------------------------------------------------- //函数声明;//----------------------------------------------------------------------------------- void delay(uchar t); //延时函数,用于按键去抖;void display(); //显示函数;void calculate_F(); //频率变化,计算定时初值;void discrete(); //分离频率,用于显示;void key_scan(); //键盘扫描函数;void init(); //初始化函数;void timer0(); //定时器0终端服务函数;//----------------------------------------------------------------------------------- //函数名称:delay();//入口参数:uchar t;//出口参数:无;//函数功能:延时;//------------------------------------------------------------------------------------ void delay(uchar t){uchar i,j;while(t--){for(i=0;i<10;i++)for(j=0;j<10;j++);}}//----------------------------------------------------------------------------------- //函数名称:calculate_F();//入口参数:无;//出口参数:无;//函数功能:频率计算函数,当频率变化,计算出定时器0初值; //------------------------------------------------------------------------------------ void calculate_F(){float temp;temp=ALL-Fosc/12.0/256/FREQ;//ALL-65536 Fosc-晶振频率-12MHZ FREQ-初始频率(50HZ)TIMER0_H=(uint)temp/256;//定时器0的初始值的高8位TIMER0_L=(uint)temp%256;//定时器0的初始值的低8位}//----------------------------------------------------------------------------------- //函数名称:key_scan();//入口参数:无;//出口参数:无;//函数功能:按键扫描函数;//------------------------------------------------------------------------------------ void key_scan(){display();if(!F_UP) {while(!F_UP) display() ; FREQ++;FLAG=1;}else if(!F_DOWN) {while(!F_DOWN) display(); FREQ--;FLAG=1;}else ;}//-----------------------------------------------------------------------------------//函数名称 init();//入口参数:无;//出口参数:无;//函数功能:定时器初始化函数;//------------------------------------------------------------------------------------void init(){TMOD=0x01;//TMOD-定时/计数器方式寄存器,不能位寻址calculate_F();//根据频率,来计算定时器初值discrete();//分解频率值,并显示TH0=TIMER0_H;//设置定时器T0的初值TL0=TIMER0_L;ET0=1;//中断允许寄存器IE ET0-定时器0终端允许位1时允许中断EA=1;// 中断允许寄存器IE EA-总中断允许位,1时每个中断源是允许还是禁止由各自的允许位决定TR0=1;// TCON-定时器控制寄存器,可以位寻址TR0-运行控制位,1时启动T0,此时定时器T0开始启动计时}//----------------------------------------------------------------------------------- //函数名称 discrete();//入口参数:无;//出口参数:无;//函数功能:参数分离函数;//------------------------------------------------------------------------------------ void discrete()//将频率值分解成为百、十、个位{LED0_BUF=0xff;LED1_BUF=FREQ/100;LED2_BUF=FREQ%100/10;LED3_BUF=FREQ%10;//LED3_BUF=(10*FREQ)%10;}//----------------------------------------------------------------------------------- //函数名称 display();//入口参数:无;//出口参数:无;//函数功能:数码管显示函数;//------------------------------------------------------------------------------------ void display(){P0=LED0_BUF|0xe0;delay(6);P0=0xff;P0=LED1_BUF|0xd0;delay(6);P0=0xff;P0=LED2_BUF|0xb0;delay(6);P0=0xff;P0=LED3_BUF|0x70;delay(6);P0=0xff;}//----------------------------------------------------------------------------------- //函数名称 timer0();//入口参数:无;//出口参数:无;//函数功能:定时器0中断函数;//------------------------------------------------------------------------------------ void timer0() interrupt 1{TR0=0;//关闭定时器T0TH0=TIMER0_H;TL0=TIMER0_L;// CS=0;// _WR=0;P2=SINX[NUM];NUM++;//计数变量,初始值为0// CS=1;// _WR=1;TR0=1;//启动定时器T0}//----------------------------------------------------------------------------------- //函数名称 mai n();//入口参数:无;//出口参数:无;//函数功能:主函数入口;//------------------------------------------------------------------------------------ main(){ init();//初始化定时器0while(1){display();//用数码管显示当前的频率值key_scan();//扫描键盘是否有按键输入if(FLAG){calculate_F(); discrete(); display(); FLAG=0;}}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微机原理与接口技术课程设计题目:利用DAC0832实现正弦波输出.班级:.姓名:.学号:.日期:2011年12月15日目录1、引言 ........................................................................................................... 错误!未定义书签。
1.1背景和编写目的..................................................................................... 错误!未定义书签。
1.2 术语和缩写................................................................................................ 错误!未定义书签。
2.系统组成........................................................................................................ 错误!未定义书签。
3.硬件设计........................................................................................................ 错误!未定义书签。
3.1 8259A模块:............................................................................................. 错误!未定义书签。
3.2 DAC0832模块 ........................................................................................... 错误!未定义书签。
3.3 8086CPU模块............................................................................................ 错误!未定义书签。
4.软件编程........................................................................................................ 错误!未定义书签。
4.1 正弦波产生的框图:............................................................................... 错误!未定义书签。
4. 2 源程序设计及程序代码........................................................................... 错误!未定义书签。
5.系统调试与仿真结果............................................................................... 错误!未定义书签。
6.仿真结果分析 (14)7.设计日程........................................................................................................ 错误!未定义书签。
8.课程设计体会................................................................................................ 错误!未定义书签。
9.参考文献........................................................................................................ 错误!未定义书签。
10.总电路图:.................................................................................................. 错误!未定义书签。
1、引言1.1背景和编写目的微机原理与接口技术是一门很有趣的课程,任何一个计算机系统都是一个复杂的整体,学习计算机原理是要涉及到整体的每一部分。
讨论某一部分原理时又要涉及到其它部分的工作原理。
这样一来,不仅不能在短时间内较深入理解计算机的工作原理,而且也很难孤立地理解某一部分的工作原理。
所以,在循序渐进的课堂教学过程中,我总是处于“学会了一些新知识,弄清了一些原来保留的问题,又出现了一些新问题”的循环中,直到课程结束时,才把保留的问题基本搞清楚。
微机应用系统设计与综合实验是对所学课程内容全面、系统的总结、巩固和提高的一项课程实践活动。
学习该门课程知识时,其思维方法也和其它课程不同,该课程偏重于工程思维,其创造性劳动在于如何用计算机的有关技术和厂家提供的各种芯片,设计实用的电路和系统,再配上相应的应用程序,完成各种实际应用项目。
应用内容主要包括微型计算机体系结构、8086微处理器和指令系统、汇编语言设计以及微型计算机各个组成部分介绍等,通过这些设计以便使我们对微机原理中的基本概念有较深入的了解,能够系统地掌握微型计算机的结构、8086微处理器和指令系统、汇编语言程序设计方法、微机系统的接口电路设计及编程方法等,并提高综合运用所学知识分析问题和解决问题的能力。
在设计时必须用模数转换器即A/D转换器将模拟信号变成数字量后才能送入计算机进行处理。
而计算机处理后的结果也必须通过数模转换器即D/A转换器转换成模拟量后,结果在用proteus 7.6 SP4软件仿真时显示波形和记录下来。
可见模数或数模转换在构成一个控制系统中起着非常重要的作用。
可以使我们加深对该转换过程的认识和理解,有利于以后的学习及设计一个控制系统。
1.2 术语和缩写优先权判别器PR:用于管理和识别各中断源的优先级别。
通常,IR0优先权最高,IR7优先权最低。
级联缓冲器/比较器:实现多个8259A的级联。
主要信号CAS0-CAS2和CAS0-CAS2:级联信号,级联方式时,一个8259A为主片,最多能带动8个8259A从片,控制64个中断级。
具有双重功能:当8259A工作于非缓冲方式时,它作为输入信号,规定该芯片是主片(SP=1)还是从片(SP=0);当工作于缓冲方式时,它作为输出信号EN控制缓冲器的传送方向。
DAC0832:DAC0832是8分辨率的D/A转换集成芯片。
与微处理器完全兼容。
这个DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。
2、系统组成3.硬件设计1.8259A 模块:8259A 的主要功能如下:①一片8259A 可以接受并管理8级可屏蔽中断请求,通过9片8259A 级联可扩展至64级可屏蔽中 断优先控制。
②对每一级中断都可以通过程序来屏蔽或允许。
③在中断响应周期,8259A 可为CPU 提供相应的中断类型码。
④具有多种工作方式,并可通过编程来加以选择。
8259A 芯片可以接最多8个中断源,但由于可以将2个或多个8259A 芯片级连,并且最多可以级连到9个,所以最多可以接64个中断源。
通过8259A 可以对单个中断源进行屏蔽。
8253 定时器定时电路8259中断电路D/A转换器8086 CPU 键盘示波器译码器图 8-7 8259 功能框图在一个8259A芯片有如下几个内部寄存器:中断屏蔽寄存器(IMR):8位寄存器,存放CPU发出的按位屏蔽信号,置1的位将使相应中断级被屏蔽,8259A对其中断请求不予理睬,用户可以编程实现中断服务寄存器(ISR):8位寄存器,用来存放当前正在处理的所有中断级. 如CPU正在处理IR1的中断请求,则IR1被置1. 当系统中只有一个8259A芯片时,ISR 中1的位数表示多重中断的数量.中断请求寄存器(IRR):8位寄存器,接收来自IR0—IR7的中断请求信号,每级对应一位,有中断请求时对应位置1.2. DAC0832模块D/A0832引脚图及逻辑结构图如下所示:DAC0832引脚功能说明:DI0~DI7:数据输入线,TLL电平。
ILE:数据锁存允许控制信号输入线,高电平有效。
CS:片选信号输入线,低电平有效。
WR1:为输入寄存器的写选通信号。
XFER:数据传送控制信号输入线,低电平有效。
WR2:为DAC寄存器写选通输入线。
Iout1:电流输出线。
当输入全为1时Iout1最大。
Iout2: 电流输出线。
其值与Iout1之和为一常数。
Rfb:反馈信号输入线,芯片内部有反馈电阻。
Vcc:电源输入线(+5v~+15v)。
Vref:基准电压输入线(-10v~+10v)。
AGND:模拟地,摸拟信号和基准电源的参考地。
DGND:数字地,两种地线在基准电源处共地比较好。
DAC 0832由两个8位寄存器和一个8位的D/A转换器组成,使用两个寄存器的好处是可以进行两次缓冲操作,以至能简化某些应用系统中的硬件接口电路设计。
D/A转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成。
DAC0832的工作方式:根据对DAC0832的数据锁存器和DAC寄存器的不同的控制方式,DAC0832有三种工作方式:直通方式、单缓冲方式和双缓冲方式。
DAC0832引脚功能电路应用原理图DAC0832是采样频率为八位的D/A转换芯片,集成电路内有两级输入寄存器,使DAC0832芯片具备双缓冲、单缓冲和直通三种输入方式,以便适于各种电路的需要。
所以这个芯片的应用很广泛,关于DAC0832应用的一些重要资料见下图:D/A转换结果采用电流形式输出。
若需要相应的模拟电压信号,可通过一个高输入阻抗的线性运算放大器实现。
运放的反馈电阻可通过RFB端引用片内固有电阻,也可外接。
DAC0832逻辑输入满足TTL电平,可直接与TTL电路或微机电路连接。
3.8086CPU模块两种工作方式功能相同的引脚(1)AD15 ~AD0:地址/数据总线,双向,三态。
(2)A19/S6~A16/S3:地址/状态信号,输出,三态。
(3)BHE(低)/S7:允许总线高8位数据传送/状态信号,输出,三态。
(4)READ:读信号,输出,三态,低电平有效。