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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC系列單片機內部AD的應用程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:80436 發表于 2015-5-21 17:09 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. *****************************************************************************************

  2. STC系列單片機內部AD的應用,和AVR作比較,好理解點

  3. *****************************************************************************************

  4.               #include <reg52.H>
  5. <span style="line-height: 1.5;">#include <intrins.H></span>

  6. // 定義與 ADC 有關的特殊功能寄存器

  7. sfr P1_ADC_EN = 0x97; //A/D轉換功能允許寄存器

  8. sfr ADC_CONTR = 0xC5; //A/D轉換控制寄存器

  9. sfr ADC_DATA = 0xC6;  //A/D轉換結果寄存器

  10. typedef unsigned char INT8U;

  11. typedef unsigned int INT16U;

  12. void delay(INT8U delay_time) // 延時函數

  13. {

  14.          INT8U n;

  15.          INT16U m;

  16.          for (n=0;n<delay_time;n++)

  17.                   {

  18.                             for(m=0;m<10000;m++);

  19.                   }

  20. }

  21. void initiate_RS232(void)  //串口初始化

  22. {

  23.          ES = 0;        // 禁止串口中斷

  24.          SCON = 0x50;   // 0101,0000 8 位數據位, 無奇偶校驗

  25.          T2CON = 0x34;  // 0011,0100, 由T2 作為波特率發生器

  26.          RCAP2H = 0xFF; // 時鐘11.0592MHz, 9600 波特率

  27.          RCAP2L = 0xDB;

  28.          ES = 1;        // 允許串口中斷

  29. }

  30. void Send_Byte(INT8U one_byte) // 發送一個字節

  31. {

  32.          TI = 0;        // 清零串口發送中斷標志

  33.          SBUF = one_byte;

  34.          while (TI == 0);

  35.          TI = 0;        // 清零串口發送中斷標志

  36. }

  37. INT8U get_AD_result(INT8U channel)

  38. {

  39.          INT8U AD_finished = 0; // 存儲 A/D 轉換標志

  40.          ADC_DATA = 0;

  41.          ADC_CONTR = channel; // 選擇 A/D 當前通道

  42.          delay(1);                      //使輸入電壓達到穩定

  43.          ADC_CONTR |= 0x08; //0000,1000 令 ADC_START = 1, 啟動A/D 轉換

  44.          AD_finished = 0;

  45.          while ( AD_finished == 0 ) // 等待A/D 轉換結束

  46.          {

  47.                   AD_finished = (ADC_CONTR & 0x10); //0001,0000, ADC_FLAG ==1測試A/D轉                  換結束否

  48.          }

  49.          ADC_CONTR &= 0xF7; //1111,0111 令 ADC_START = 0, 關閉A/D 轉換,

  50.          return (ADC_DATA); // 返回 A/D 轉換結果

  51. }

  52. void main()

  53. {

  54.          initiate_RS232();

  55.          P1 = P1 | 0x63; // 0110,0011,要設置為 A/D 轉換的P1.x 口,先設為高

  56.          P1_ADC_EN = 0x63; //0110,0011, P1 的P1.0,P1.1,P1.5,P1.6 設置為 A/D 轉換輸入腳

  57.          // 斷開P1.0,P1.1,P1.5,P1.6 內部上拉電阻

  58.          while(1)

  59.          {

  60.                   Send_Byte(get_AD_result(0)); //P1.0 為 A/D 當前通道, 測量并發送結果

  61.                   delay(0x200);

  62.                   Send_Byte(get_AD_result(1)); //P1.1 為 A/D 當前通道, 測量并發送結果

  63.                   delay(0x200);

  64.                   Send_Byte(get_AD_result(5)); //P1.5 為 A/D 當前通道, 測量并發送結果

  65.                   delay(0x200);

  66.                   Send_Byte(get_AD_result(6)); //P1.6 為 A/D 當前通道, 測量并發送結果

  67.                   delay(0x200);

  68.                   Send_Byte(0); // 連續發送 4 個 00H, 便于觀察輸出顯示

  69.                   Send_Byte(0);

  70.                   Send_Byte(0);

  71.                   Send_Byte(0);

  72.                   delay(0x200); // 延時

  73.                   delay(0x200);

  74.                   delay(0x200);

  75.                   delay(0x200);

  76.                   delay(0x200);

  77.                   delay(0x200);

  78.          }

  79. }
復制代碼


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

使用道具 舉報

沙發
ID:369082 發表于 2018-8-23 17:24 | 只看該作者
我用的STC15單片機測試脈沖信號的幅值,在采集數據過程中只能采樣一次,想取多次采樣取最大值的平均值來顯示,但是程序顯示時總是錯誤,您能幫我看看一下嗎?
回復

使用道具 舉報

板凳
ID:369082 發表于 2018-8-23 17:26 | 只看該作者
這是我的程序,把采樣程序區掉就可以成功顯示一次
/******************
???AD?????
*******************/
void AD_int(void)          //???AD?????                                  
{
CLK_DIV&=0xDF;   //MCKO_S1,MCKO_S0,ADRJ,TX_RX,CLKS2,CLKS1,CLKS0
                                 //ADRJ=0,ADC_RES[7:0]???8λADC?????ADC_RESl[1:0]???2λADC???
ADC_CONTR=0x80;//??AD??????
delay_ms(1);//???????????????1ms???????
P1ASF=0x01;//????P1.0,P1.1???0?????1???????????????
ADC_CONTR=0xE0;   // ADC_POWRE SPEED1 SPEED0 ADC_FLAG  ADC_START CHS2 CHS1 CHS0=1 11 0 0 000
                                   //???90??????????????Σ?????????AD????????0???
delay_ms(1); //????????20us~200us????
}                                  
                          
/******************
AD???????
*******************/                                  
uint adval()//ad???????
{
        uint val;//???ad??????
        uchar low;//???ad??????????λ
//        float fval;//??????
       
//        P1ASF=0X08;//p1.3?ad???kou
       
        P1M1 |= (1<<3);                // ??ADC???????????????
        P1M0 &= ~(1<<3);
        P1ASF = (1<<3);                //P1.3??ADC
        ADC_CONTR=0xeb;//??ad?????????????????p1.3
//        delay_ms(1);
        while(ADC_CONTR&0X10==0);
        val=ADC_RES;//??????????λ????
        val<<=2;//??????λ
        low=ADC_RESL;
        low&=0x03;
        val+=low;
//        fval=val;
//        fval*=5;
//        fval/=1024;
//        fval*=10;
//        num=fval;//*100;
        ADC_CONTR=0xeb;                          //1110 1011  ??ad?????????????????p1.3
        return val;//num;   
}
/******************
  ???????
*******************/
uint quyang()
{uint i,t,j,l,m;
for(i=0;i<3;i++)
{
   t=adval();          //a[i]=i
   a[i]=t;
        _nop_();_nop_(); _nop_();
         _nop_();_nop_(); _nop_();

}
for(j=0;j<3;j++)

{for(i=0;i<3-j;i++)
     if(a[i]>a[i+1])
        {  l=a[i];
         a[i]=a[i+1];
         a[i+1]=l;
        }
}                                       
m=a[2];
return m;
}
回復

使用道具 舉報

地板
ID:399179 發表于 2020-5-31 19:38 來自觸屏版 | 只看該作者
加油!我也正在學習內部AD
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲欧洲精品在线 | 亚洲综合在线视频 | 亚洲精品二三区 | av网站在线免费观看 | 福利片在线 | 国产精品福利在线 | 国产亚韩| 国产精品成人国产乱一区 | 人妖videosex高潮另类 | 国产日产欧产精品精品推荐蛮挑 | 欧美色综合| 亚洲在线一区 | 精品小视频| 网站黄色在线 | 亚洲天堂一区 | av在线黄 | 91在线精品一区二区 | 成人久久久 | 日本不卡视频在线播放 | 在线观看一区 | 国产精品久久久久9999鸭 | 欧美精品一区在线 | 国产成人精品一区二区三区在线 | 亚洲精品一二三区 | 亚洲视频在线一区 | 五月天综合影院 | 亚洲成人精品一区 | 精品福利视频一区二区三区 | 黄色片在线免费看 | 日日夜夜精品视频 | 色综合久 | 日韩av在线中文字幕 | 久草福利 | 日韩成人免费av | 99免费视频 | 欧美精品在线一区二区三区 | 91久久精品一区二区二区 | 天天夜夜人人 | 香蕉久久久 | 韩日精品一区 | 国产成人免费视频网站高清观看视频 |