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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

AT89C2051內部比較器做AD轉換器ADC

  [復制鏈接]
跳轉到指定樓層
樓主
    放假研究恒溫烙鐵,繼昨晚研究完1602液晶驅動后,今天繼續研究利用AT89C2051內部的電壓比較器做廉價的ADC轉換器,查閱了一些資料,基本上有這么一些方法:
  1、常規RC電路,對電容充電時間進行計算,通過查表得到AD值。這種AD簡單,但分辨率低,僅8位左右。
  2、常規RC電路,對電容充電時間進行計算,通過直接的自然對數反對數運算得到AD值,這種AD電路簡單,分辨率高,但程序的運算量很大。2051這種低端單片機不適合此法。
  3、中國歐軟采用的辦法:外置恒流源,以得到線性的充電曲線,這樣單片機的運算工作就會簡單很多了。
電路圖:

焊接好的電路板:



    程序:

  1. #include <reg51.h>
  2. sbit CMP_R=P3^6;
  3. sbit ADC = P1^1;
  4. unsigned char sled1,sled2,sled3,sled4,sztj;//串行LED掃描數據,狀態機
  5. unsigned char temp,temp1,temp2;
  6. unsigned int advalue;
  7. bit timer1overflow;
  8. unsigned char code sledsg[]={0x28,0xEB,0x32,0xA2,0xE1,0xA4,0x24,0xEA,0x20,0xA0,
  9.                              0x60,0x25,0x3C,0x37,0x23,0x34,0x74,0x61,0x65,0x3D,
  10.         0x67,0x68,0x27,0x70,0x77,0x35,0x29,0xF7,0x7F,0xff};//LED段碼
  11. void init(void) //初始化函數,就是開機首先要做的事情,init是自己起的名字
  12.      {
  13.   TMOD=0x11; //兩個定時器工作于方式1
  14.   PX0=1;  //計時定時器中斷優先
  15.   TR0=1;  //定時器0啟動
  16.   ET0=1;
  17.   ET1=1;
  18.   EA=1;
  19.   }   //這段程序啟動了芯片中的兩個定時器
  20. void sledscan(void)      //時速LED模塊掃描子程序,定時器調用
  21.      {
  22.   unsigned char datemp;
  23.   switch(sztj)      //切換狀態機
  24.     {
  25.     case 0:       //第一狀態
  26.     P3=0XFF;       //關閉顯示
  27.     datemp=sledsg[sled3];
  28.     P1=0X01;
  29.     P1=P1|(datemp&0xfc);
  30.     P3=P3&(datemp|0xfc);
  31.     P3=P3&0x7f;
  32.     sztj=1;       //轉移狀態
  33.     break;       //狀態結束
  34.     case 1:       //第二狀態
  35.     P3=0XFF;       //關閉顯示
  36.     datemp=sledsg[sled4];
  37.     P1=0X01;
  38.     P1=P1|(datemp&0xfc);
  39.     P3=P3&(datemp|0xfc);
  40.     P3=P3&0xdf;
  41.     sztj=2;       //轉移狀態
  42.     break;       //狀態結束
  43.     case 2:       //第三狀態
  44.     P3=0XFF;       //關閉顯示
  45.     datemp=sledsg[sled1];
  46.     P1=0X01;
  47.     P1=P1|(datemp&0xdc);
  48.     P3=P3&(datemp|0xfc);
  49.     P3=P3&0xef;
  50.     sztj=3;
  51.     break;
  52.     case 3:
  53.     P3=0XFF;       //關閉顯示
  54.     datemp=sledsg[sled2];
  55.     P1=0X01;
  56.     P1=P1|(datemp&0xfc);
  57.     P3=P3&(datemp|0xfc);
  58.     P3=P3&0xf7;
  59.     sztj=0;
  60.     break;
  61.     default:
  62.     sztj=0;       //異常時捕獲狀態機
  63.     break;
  64.     }
  65.   }
  66. void timer0 (void) interrupt 1 using 2  //定時器中斷程序,定時時間到,自動運行此程序
  67.      {
  68.   TH0=(65536-10000)/256;    //這兩行的數值代表每10000us運行一次此程序
  69.   TL0=(65536-10000)%256;    //置定時值,每次時間到都要重新置定時值
  70.   sledscan();      //掃描時速LED模塊,122個周期
  71.   }
  72. void timer1 (void) interrupt 3 using 1  //定時器中斷程序,定時時間到,自動運行此程序
  73.   {
  74.   TR1=0;
  75.   timer1overflow=1;
  76.   TH1=0XFF;
  77.   TL1=0XFF;
  78.   }
  79. void delay()
  80.   {
  81. while(--temp)
  82.    while(--temp1)
  83.      while(--temp2);//等待電容放電完畢
  84.   }
  85. void main()
  86.   {
  87.   init();
  88.   while(1)
  89.     {
  90. P3=0XFF;//關閉顯示
  91. advalue=0;//變量復位
  92. ET0=0;//關閉中斷,防止中斷干擾
  93. TL1=0X00;
  94. TH1=0X00;
  95. TR1=1;
  96. ADC=1;//開始給電容充電
  97. while(CMP_R&&(!timer1overflow));//等待比較器結果
  98.     timer1overflow=0;
  99. TR1=0;
  100. ADC=0;
  101. ((unsigned char *)&advalue)[0]=TH1;
  102. ((unsigned char *)&advalue)[1]=TL1;
  103. advalue=advalue+1000;
  104. sled1=advalue/10000;//轉成十進制
  105. sled2=advalue%10000/1000;
  106. sled3=advalue%1000/100;
  107. sled4=advalue%100/10;
  108. ET0=1;
  109. temp=4;
  110. delay();
  111. }
  112.   }
復制代碼




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

使用道具 舉報

沙發
ID:70769 發表于 2015-1-1 23:51 | 只看該作者
GOOD!!!
回復

使用道具 舉報

板凳
ID:111188 發表于 2016-3-29 21:23 | 只看該作者
先下載看一下,不知道可不可用
回復

使用道具 舉報

地板
ID:72088 發表于 2016-9-10 19:58 | 只看該作者
試過了嗎,你們誰試過,精度如何
回復

使用道具 舉報

5#
ID:72088 發表于 2017-2-15 13:01 | 只看該作者
利用定時器計時加橫流充電,精度很高的,我制作過。
很容易達到4位精度
回復

使用道具 舉報

6#
ID:230350 發表于 2017-9-1 02:48 | 只看該作者
新鄉家電維修 發表于 2017-2-15 13:01
利用定時器計時加橫流充電,精度很高的,我制作過。
很容易達到4位精度

用ISIS 7 Professional 仿真后怎么只顯示四個 7777
回復

使用道具 舉報

7#
ID:517951 發表于 2020-11-15 09:56 | 只看該作者
謝謝樓主分析代碼,值得學習
回復

使用道具 舉報

8#
ID:137736 發表于 2022-9-26 16:06 | 只看該作者
1305115329 發表于 2017-9-1 02:48
**** 作者被禁止或刪除 內容自動屏蔽 ****

好象有人說模型中的89c2051無比較器,而后,有人做了個模型
回復

使用道具 舉報

9#
ID:163139 發表于 2022-9-28 20:38 | 只看該作者

太棒了,我一直想制作一個
回復

使用道具 舉報

10#
ID:977861 發表于 2022-10-3 13:03 | 只看該作者
學習了,謝謝你的付出
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 人人澡视频 | 伊人狠狠 | 欧洲色综合 | 国产小视频在线观看 | 一级黄色淫片 | 国产一区三区在线 | 欧美一区二区三区精品 | 国产一区在线看 | 日本在线视频一区二区 | xnxx 日本免费 | 521av网站 | 91在线中文字幕 | 久久久久亚洲国产| 韩日一区二区三区 | 午夜在线视频 | 欧美日韩精品在线免费观看 | 久久久久亚洲av毛片大全 | 国产成人区 | 91在线精品视频 | h网站在线观看 | 毛片黄片免费看 | 中文字幕亚洲免费 | 亚洲午夜一区二区 | 免费小视频在线观看 | 午夜精品一区二区三区三上悠亚 | 日韩网站在线观看 | 亚洲免费av一区 | 欧美二区在线 | 国产精品色 | 羞羞视频免费在线 | 成人一区在线观看 | 亚洲一区二区免费电影 | 日韩三区在线观看 | 国产成人亚洲精品 | 欧美一区二区三区在线播放 | 我要看免费一级毛片 | 久久精品国产亚洲一区二区 | 国产精品一区二区在线播放 | 国产精品影视在线观看 | 欧美激情精品久久久久久变态 | 一区不卡在线观看 |