歡迎您光臨本站 登入註冊首頁

模數轉換DAC0832的應用實驗

admin @ 2014-03-25 , reply:0

概述

[實驗任務]  用兩個按鍵通過單片機控制DAC0832的輸出,使OUT端可以輸出0—5V的幅值,頻率為1KHZ的鋸齒波和三角波兩種波形。通上電源后;按下INT1則輸出三……

[實驗任務]
   用兩個按鍵通過單片機控制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語言源程序]
#include  
unsigned char keycnt=0;  
unsigned char tcnt=0;        //鍵值判斷
bit sjz=0;     //產生三角波時用到的標誌
void delayl()    //延時子程序
{    unsigned char i,j;
    for(i=20;i>0;i--)  
    for(j=248;j>0;j--); }
void KEY()          //按鍵掃描程序
{
if(P3_2==0)
  {
   delayl();    //延時跳過按下時的抖動
    if(P3_2==0)
      {
        keycnt=0;  //定時器產生鋸齒波標誌
  TR0=0;    //暫時停止波形輸出
        TH0=0x256-40; //對TH0 TL0賦值
        TL0=0x256-40;
        TR0=1;       //開始定時,產生鋸齒波
        while(P3_2==0);  //如果一直按著鍵,則等待松鍵開
  delayl();    //延時跳過鬆開后的抖動
      }   } 
if(P3_3==0)
  {
    delayl();    //延時跳過按下時的抖動
    if(P3_3==0)
      {
        keycnt=1; //定時器產生三角波標誌
   TR0=0;    //暫時停止波形輸出
        TH0=0x256-40; //對TH0 TL0賦值
        TL0=0x256-40;
        TR0=1;    //開始定時 產生三角波
       }
     while(P3_2==0);  //如果一直按著鍵,則等待松鍵開
  delayl();    //延時跳過鬆開后的抖動
      }
   }   //請注意寫程序時的格式規範,此處是為了節省紙張
void t0(void) interrupt 1 using 0  //定時中斷服務函數
{
 if(keycnt==0)  //產生鋸齒波
    {
  P0=tcnt;
  tcnt=+0x0a; //步進0.2V/一次中斷
     if(tcnt==0xfb)
     {tcnt=0;}
 }
 if(keycnt==1)  //產生三角波
     {  if(sjz==0)
      {P0=tcnt;
    tcnt=+0x0a;//步進0.2V/一次中斷
       if(tcnt==0xfa)
             {sjz=1;}
       }
     if(sjz==1)
    {
     P0=tcnt;
     tcnt=-0x0a;
     if(tcnt==0)
       {sjz=0;}
     }
      }
}
void main(void)
{
TMOD=0x02;  //定時器工作在方式2
ET0=1;
EA=1;
while(1)
  {  KEY();  }
}

[硬體電路圖]
 


[admin via 研發互助社區 ] 模數轉換DAC0832的應用實驗已經有2024次圍觀

http://cocdig.com/docs/show-post-42065.html