dac0832程序

HDL语言及源代码

6人已加入

描述

  根据对DAC0832的数据锁存器和DAC寄存器的不同的控制方式,DAC0832有三种工作方式:直通方式、单缓冲方式和双缓冲方式。

  1、单缓冲方式。单缓冲方式是控制输入寄存器和DAC寄存器同时接收资料,或者只用输入寄存器而把DAC寄存器接成直通方式。此方式适用只有一路模拟量输出或几路模拟量异步输出的情形。

  2、双缓冲方式。双缓冲方式是先使输入寄存器接收资料,再控制输入寄存器的输出资料到DAC寄存器,即分两次锁存输入资料。此方式适用于多个D/A转换同步输出的情节。

  3、直通方式。直通方式是资料不经两级锁存器锁存,即 CS*,XFER* ,WR1* ,WR2* 均接地,ILE接高电平。此方式适用于连续反馈控制线路和不带微机的控制系统,不过在使用时,必须通过另加I/O接口与CPU连接,以匹配CPU与D/A转换。[1]

  DAC0832引脚功能电路应用原理图DAC0832是采样频率为八位的D/A转换芯片,集成电路内有两级输入寄存器,使DAC0832芯片具备双缓冲、单缓冲和直通三种输入方式,以便适于各种电路的需要(如要求多路D/A异步输入、同步转换等)。

  所以这个芯片的应用很广泛,关于DAC0832应用的一些重要资料: D/A转换结果采用电流形式输出。若需要相应的模拟电压信号,可通过一个高输入阻抗的线性运算放大器实现。运放的反馈电阻可通过RFB端引用片内固有电阻,也可外接。DAC0832逻辑输入满足TTL电平,可直接与TTL电路或微机电路连接。

  dac0832程序

  /*0832各种波型输出演示

  P1.1P1.0 = 00时 正弦波

  P1.1P1.0 = 01时 锯齿波

  P1.1P1.0 = 10时 方波

  P1.1P1.0 = 11时 三角波

  需要连接的导线:(1)译码器Y0接DAC0832的CS

  (2)P3.6即XWR插孔接DAC0832的WR

  (3)8芯的排线连接8排针的P0口和DAC0832的D7-D0

  (4)串并转换区的+5v接DAC0832的参考电压Vref插孔 */

  #include 《reg51.h》

  sbit P1_1=P1^1;

  sbit P1_0=P1^0;

  #include 《ABSACC.H》//absacc.h是C51中绝对地址访问函数的头文件

  #define daport XBYTE[0x8000]//将daport定义为外部I/O口,地址为8000H,则74ls138的

  Y0有效

  unsigned char i,j,k;

  bit updown; //三角波的上升/下降

  unsignedchar code

  sinn[64]={198,204,210,216,222,228,233,237,242,245,249,251,253,255,255,255,

  255,254,252,250,247,243,239,235,230,224,219,213,207,201,194,188, 181,175,169,163,158,152,147,143,139,136,133,131,129,128,128,128, 129,130,132,135,138,142,146,151,156,162,168,174,180,186,193,199};

  //正弦的数值在128-255之间,所以输出的正弦幅值在0-5v

  void main(void)

  {

  updown=0;

  i=128; j=0;

  while(1)

  {

  if (P1_1==1)

  {

  if (P1_0==0) //输出占空比为25%的方波

  {

  if (j《=40) i=255;//i=255时输出的电压为+5v

  else if(j《=160) i=0;//i=0时输出的电压为-5v

  else j=0;

  }

  else //输出-5v—+5v的三角波

  {

  if (updown==0) //上升

  {

  if (i==255) updown=1;

  else i=i+5;//i++;

  }

  else //下降

  {

  if (i==0) updown=0;//if(i==128) updown=0;i=128输出的电压为0

  else i=i-5;//i--;

  }

  }

  }

  else

  {

  if (P1_0==0) //正弦波

  {

  i=sinn[j];

  if (j》=63) j=0;

  }

  else //锯齿波

  {

  if (i==255) i=128;

  else i++;

  }

  }

  daport=i;

  for (k=0;k《2;k++);

  j++;

  }

  }

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分