久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10259|回復: 2
打印 上一主題 下一主題
收起左側

ADC0809的詳細資料及單片機程序和仿真

[復制鏈接]
跳轉到指定樓層
樓主
  ADC0809是美國國家半導體公司生產的CMOS工藝8通道,8位逐次逼近式A/D模數轉換器。其內部有一個8通道多路開關,它可以根據地址碼鎖存譯碼后的信號,只選通8路模擬輸入信號中的一個進行A/D轉換。目前僅在單片機初學應用設計中較為常見。

   
我們在做一個單片機系統時,常常會遇到這樣那樣的數據采集,在這些被采集的數據中,大部分可以通過我們的I/O口擴展接口電路直接得到,由于51單片機大部分不帶AD轉換器,所以模擬量的采集就必須靠A/D或V/F實現。下現我們就來了解一下AD0809與51單片機的接口及其程序設計。

1、ADc0809的邏輯結構
ADC0809是8位逐次逼近型A/D轉換器。它由一個8路模擬開關、一個地址鎖存譯碼器、一個A/D轉換器和一個三態輸出鎖存器組成(見圖1)。多路開關可選通8個模擬通道,允許8路模擬量分時輸入,共用A/D轉換器進行轉換。三態輸出鎖器用于鎖存A/D轉換完的數字量,當OE端為高電平時,才可以從三態輸出鎖存器取走轉換完的數據。
                    

2AD0809的工作原理

IN0-IN7:8條模擬量輸入通道
ADC0809對輸入模擬量要求:信號單極性,電壓范圍是05V,若信號太小,必須進行放大;輸入的模擬量在轉換過程中應該保持不變,如若模擬量變化太快,則需在輸入前增加采樣保持電路。
地址輸入和控制線:4
ALE為地址鎖存允許輸入線,高電平有效。當ALE線為高電平時,地址鎖存與譯碼器將ABC三條地址線的地址信號進行鎖存,經譯碼后被選中的通道的模擬量進轉換器進行轉換。ABC為地址輸入線,用于選通IN0IN7上的一路模擬量輸入。通道選擇表如下表所示


數字量輸出及控制線:11
ST為轉換啟動信號。當ST上跳沿時,所有內部寄存器清零;下跳沿時,開始進行A/D轉換;在轉換期間,ST應保持低電平。EOC為轉換結束信號。當EOC為高電平時,表明轉換結束;否則,表明正在進行A/D轉換。OE為輸出允許信號,用于控制三條輸出鎖存器向單片機輸出轉換得到的數據。OE1,輸出轉換得到的數據;OE0,輸出數據線呈高阻狀態。D7D0為數字量輸出線。
CLK為時鐘輸入信號線。因ADC0809的內部沒有時鐘電路,所需時鐘信號必須由外界提供,通常使用頻率為500KHZ
VREF(+),VREF(-)為參考電壓輸入。
3、ADC0809應用說明
(1).     ADC0809內部帶有輸出鎖存器,可以與AT89S51單片機直接相連。
(2).     初始化時,使ST和OE信號全為低電平。
(3).     送要轉換的哪一通道的地址到A,B,C端口上。
(4).     在ST端給出一個至少有100ns寬的正脈沖信號。
(5).     是否轉換完畢,我們根據EOC信號來判斷。
(6).     當EOC變為高電平時,這時給OE為高電平,轉換的數據就輸出給單片機了。

4AD0809的應用
了解完A/D轉換芯片,下面我們以圖2為例來完成它的程序設計。
電路說明:
電路見圖(2),主要由AD轉換器AD0809,頻率發生器SUN7474,單片機AT89S51及顯示用數碼管組成。
AD0809的啟動方式為脈沖啟動方式,啟動信號START啟動后開始轉換,EOC信號在START的下降沿10us后才變為無效的低電平。這要求查詢程序待EOC無效后再開始查詢,轉換完成后,EOC輸出高電平,再由OE變為高電平來輸出轉換數據。我們在設計程序時可以利用EOC信號來通知單片機(查詢法或中斷法)讀入已轉換的數據,也可以在啟動AD0809后經適當的延時再讀入已轉換的數據。
AT89S51的輸出頻為晶振頻的1/6(2MHZ),AT89S1與SUN7474連接經與7474的ST腳提供AD0809的工作時鐘。AD0809的工作頻范圍為10KHZ-1280KHZ,當頻率范圍為500KHZ時,其轉換速度為128us。
AD0809的數據輸出公式為:Dout=Vin*255/5=Vin*51,其中Vin為輸入模擬電壓,Vout
為輸出數據。
      當輸入電壓為5V時,讀得的數據為255再乘以2,得510。我們用510*98%499,再將百位數碼管的小數點點亮,顯示為4.99V,顯示值與輸入值基本吻合。

軟件設計思路及程序流程
編程思路:
(1)      向AD0809寫入通道號并啟動轉換
(2)      延時1ms后等待EOC出現高電平(JNB EOC,$)
(3)      給OE置高并讀入轉換數據存入數據地址或數組中。
(4)      顯示

(5)      

  1. #include <at89x51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit st=P3^2;
  5. sbit oe=P3^1;
  6. sbit eoc=P3^0;
  7. uchar code tab[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};//數碼管顯示段碼
  8. uchar code td[]={0x00,0x10,0x20,0x30,0x40,0x50,0x60,0x70};//通道先擇數組
  9. uint ad_0809,ad_data1,ad_data2,ad_data3,ad_data0;
  10. uchar m,number;
  11. uchar x[8];//八通道數據待存數組
  12. void delaynms(uint x);//nms延時程序
  13. void display();//顯示程序
  14. void ad0809();//芯片啟動程序
  15. void key();//鍵掃描程序
  16. main()
  17. {
  18. number=1;
  19. P1=0x00;
  20. while(1)
  21. {
  22. ad0809();//調AD0809啟動子程序
  23. key();//調按鍵子程序
  24. ad_0809=x[number];//把相關通道數據給ad_0809
  25. display();//調顯示
  26. }}
  27. //nms延時程序
  28. void delaynms(uint x)
  29. {
  30. uchar i;
  31. while(x-->0)
  32. {
  33. for(i=0;i<125;i++)
  34. {;}}}
  35. void display()
  36. {
  37. uchar a;
  38. ad_data1=(ad_0809*49/25)/100;//讀得的數據乘以2再乘以98%除以100得百位
  39. ad_data2=((ad_0809*49/25)%100)/10;//讀得的數據乘以2再乘以98%再分出十位
  40. ad_data3=(((ad_0809*49/25)%100)%10);//讀得的數據乘以2再乘以98%再分出個位
  41. for(a=0;a<10;a++)
  42. {
  43. P0=tab[ad_data3];//送小數點后第二位顯示
  44. P2=0x07;//選通第一個數碼管
  45. delaynms(3);
  46. P0=tab[ad_data2];//送小數點后第一位顯示
  47. P2=0x0b;//選通第二個數碼管
  48. delaynms(3);
  49. P0=tab[ad_data1];//送整數顯示
  50. P0_7=0;//點亮第三個數碼管小數點
  51. P2=0x0d;// 選通第三個數碼管
  52. delaynms(3);
  53. P0=tab[number];//送通道號顯示
  54. P2=0x0e;
  55. delaynms(3);
  56. }}
  57. void ad0809()
  58. {
  59. uchar i,m=1;
  60. for(i=0;i<8;i++)
  61. {
  62. P0=td[i];//選通通道
  63. oe=0;//以下三條指令為起動AD0809
  64. st=0;
  65. st=1;
  66. st=0;
  67. delaynms(1);
  68. while(!eoc);//等待轉換結束
  69. oe=1;//取出讀得的數據
  70. x[m]=P2;//送相關通道數組
  71. oe=0;
  72. m++;
  73. }}
  74. void key()
  75. {
  76. if(!P3_5)//P3.5是否按下
  77. {
  78. delaynms(20);//延時判誤
  79. if(!P3_5)//再一次判斷P3。5是否按下
  80. {
  81. while(!P3_5);//等待P3。5為高電平
  82. number++;//通道號顯示加一
  83. if(number>8)number=1;//八通道
  84. }}}
復制代碼





----------下面介紹adc0809的proteus仿真---------------------------------








0809的單片機程序很簡單
  1. #include
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar code duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0xff,0x6f};
  5. uchar code wei[]={0xfe,0xfd,0xfb};
  6. uchar s[]={0,0,0};

  7. void delay1ms(uint i)
  8. {
  9.      uchar j;
  10.          for(;i>0;i--)
  11.          for(j=0;j<125;j++)
  12.          {;}
  13. }void main()
  14. {         while(1){
  15.      P0=0XF0;
  16.          P1=duan[0];
  17.          P0=0XF0;
  18.          P1=duan[1];
  19.          P0=0XF0;
  20.          P1=duan[2];  }
  21. }
復制代碼

全部資料下載:
0809.rar (75.68 KB, 下載次數: 72)

評分

參與人數 2黑幣 +10 收起 理由
HGQK + 5 共享資料的黑幣獎勵!
赤炎木 + 5 很給力!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

板凳
ID:258881 發表于 2017-12-30 19:55 | 只看該作者
樓主在附件中的ad.c文件丟失了很多代碼,好幾個函數只有聲明,函數體根本沒有。
而且Text1.c并不是0809的程序。
祝好!

QQ圖片20171230195114.jpg (80.27 KB, 下載次數: 87)

ad.c

ad.c

QQ圖片20171230195502.jpg (58.22 KB, 下載次數: 84)

Text1.c

Text1.c
回復

使用道具 舉報

沙發
ID:183134 發表于 2017-4-20 18:18 | 只看該作者
很不錯,謝謝
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本精品一区二区三区在线观看视频 | 久久一区视频 | 欧美日韩国产精品激情在线播放 | 午夜在线| 亚洲不卡在线观看 | 精品久久久久久久 | 美国一级黄色片 | 国产精品一区二区视频 | 日日操操操| 亚洲综合一区二区三区 | 国产成人免费观看 | 午夜成人免费视频 | 久久精品日产第一区二区三区 | 亚洲免费在线视频 | 国产成人精品午夜视频免费 | 一级在线观看 | 黄色网址免费在线观看 | 久久tv在线观看 | 欧美一区二区免费 | 欧美成人a∨高清免费观看 欧美日韩中 | 久久99精品视频 | 野狼在线社区2017入口 | 99久久国产免费 | 欧美二区三区 | 成人黄色电影在线观看 | 色婷婷在线视频 | 综合国产 | 久久久久国产一区二区 | 亚洲精品一二三区 | 99精品视频一区二区三区 | 免费看一区二区三区 | 国产国产精品久久久久 | 99视频在线免费观看 | 91精品国产91久久久久福利 | 国产探花在线观看视频 | 日韩一区二区在线视频 | 国产欧美一区二区三区在线看 | av毛片在线免费观看 | 午夜精品久久久久久久久久久久 | av在线一区二区三区 | 97日韩精品|