网站导航: 首页 > 设计参考 > 正文 文章搜索
模数转换DAC0832的应用实验
 
文章编号:
091111222117
文章分类: 单片机 51系列
点 击:
...
关 键 词: DAC0832,D/A
文章来源:
网络
摘 要:

[实验任务]
   用两个按键通过单片机控制DAC0832的输出,使OUT端可以输出0—5V的幅值,频率为1KHZ的锯齿波和三角波两种波形。通上电源后;按下INT1则输出三角波,在按下INT0输出锯齿波。

[实验原理]
   ADC0804是8位全MOS 中速D/A转换器,采用R—2RT形电阻解码网络,转换结果为一对差动电流输出,转换时间大约为1us。使用单电源+5V―+15V供电。参考电压为-10V-+10V。在此我们直接选择+5V作为参考电压。DAC0832有三种工作方式:直通方式,单缓冲方式,双缓冲方式;在此我们选择直通的工作方式,将XFER WR 1WR2 CS管脚全部接数字地。管脚8接参考电压,在此我们接的参考电压是+5V。那么经过第一级运放后,输出电压将是-5V-0V,在经过第二级运放反相放大1倍以后将可以输出0V—5V了。我们在控制P1口输出数据有规律的变化将可以产生三角波,锯齿波,梯型波等波形了。

[硬件电路图]
 

 

[C语言源程序]
 

 
  1. #include <AT89X51.H>     
  2. unsigned char keycnt=0;      
  3. unsigned char tcnt=0;        //键值判断   
  4. bit sjz=0;     //产生三角波时用到的标志   
  5. void delayl()    //延时子程序   
  6. {    unsigned char i,j;   
  7.     for(i=20;i>0;i--)      
  8.     for(j=248;j>0;j--); }   
  9. void KEY()          //按键扫描程序   
  10. {   
  11. if(P3_2==0)    
  12.   {    
  13.    delayl();    //延时跳过按下时的抖动   
  14.     if(P3_2==0)    
  15.       {    
  16.         keycnt=0;  //定时器产生锯齿波标志   
  17.   TR0=0;    //暂时停止波形输出   
  18.         TH0=0x256-40; //对TH0 TL0赋值   
  19.         TL0=0x256-40;    
  20.         TR0=1;       //开始定时,产生锯齿波   
  21.         while(P3_2==0);  //如果一直按着键,则等待松键开   
  22.   delayl();    //延时跳过松开后的抖动   
  23.       }   }     
  24. if(P3_3==0)    
  25.   {    
  26.     delayl();    //延时跳过按下时的抖动   
  27.     if(P3_3==0)    
  28.       {    
  29.         keycnt=1; //定时器产生三角波标志   
  30.    TR0=0;    //暂时停止波形输出   
  31.         TH0=0x256-40; //对TH0 TL0赋值   
  32.         TL0=0x256-40;    
  33.         TR0=1;    //开始定时 产生三角波   
  34.        }    
  35.      while(P3_2==0);  //如果一直按着键,则等待松键开   
  36.   delayl();    //延时跳过松开后的抖动    
  37.       }    
  38.    }   //请注意写程序时的格式规范,此处是为了节省纸张   
  39. void t0(void) interrupt 1 using 0  //定时中断服务函数   
  40. {   
  41.  if(keycnt==0)  //产生锯齿波   
  42.     {   
  43.   P0=tcnt;    
  44.   tcnt=+0x0a; //步进0.2V/一次中断    
  45.      if(tcnt==0xfb)    
  46.      {tcnt=0;}   
  47.  }   
  48.  if(keycnt==1)  //产生三角波   
  49.      {  if(sjz==0)   
  50.       {P0=tcnt;   
  51.     tcnt=+0x0a;//步进0.2V/一次中断    
  52.        if(tcnt==0xfa)   
  53.              {sjz=1;}    
  54.        }    
  55.      if(sjz==1)   
  56.     {   
  57.      P0=tcnt;   
  58.      tcnt=-0x0a;   
  59.      if(tcnt==0)   
  60.        {sjz=0;}   
  61.      }   
  62.       }    
  63. }   
  64. void main(void)    
  65. {    
  66. TMOD=0x02;  //定时器工作在方式2   
  67. ET0=1;    
  68. EA=1;    
  69. while(1)    
  70.   {  KEY();  }   
  71. }  

 

 
相关文章:

 
最新开源项目
 
 
  查看更多...  
 
本站相关产品   淘宝网店
 




 
  查看更多...  

 

本站程序由百合电子工作室开发和维护
Copyright @ baihe electric studio
渝ICP备09006681号-4