欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3972|回復(fù): 3
收起左側(cè)

STC系列單片機(jī)內(nèi)部AD的應(yīng)用程序

[復(fù)制鏈接]
ID:80436 發(fā)表于 2015-5-21 17:09 | 顯示全部樓層 |閱讀模式
  1. *****************************************************************************************

  2. STC系列單片機(jī)內(nèi)部AD的應(yīng)用,和AVR作比較,好理解點(diǎn)

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

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

  6. // 定義與 ADC 有關(guān)的特殊功能寄存器

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

  8. sfr ADC_CONTR = 0xC5; //A/D轉(zhuǎn)換控制寄存器

  9. sfr ADC_DATA = 0xC6;  //A/D轉(zhuǎn)換結(jié)果寄存器

  10. typedef unsigned char INT8U;

  11. typedef unsigned int INT16U;

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

  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 位數(shù)據(jù)位, 無奇偶校驗(yàn)

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

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

  27.          RCAP2L = 0xDB;

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

  29. }

  30. void Send_Byte(INT8U one_byte) // 發(fā)送一個(gè)字節(jié)

  31. {

  32.          TI = 0;        // 清零串口發(fā)送中斷標(biāo)志

  33.          SBUF = one_byte;

  34.          while (TI == 0);

  35.          TI = 0;        // 清零串口發(fā)送中斷標(biāo)志

  36. }

  37. INT8U get_AD_result(INT8U channel)

  38. {

  39.          INT8U AD_finished = 0; // 存儲(chǔ) A/D 轉(zhuǎn)換標(biāo)志

  40.          ADC_DATA = 0;

  41.          ADC_CONTR = channel; // 選擇 A/D 當(dāng)前通道

  42.          delay(1);                      //使輸入電壓達(dá)到穩(wěn)定

  43.          ADC_CONTR |= 0x08; //0000,1000 令 ADC_START = 1, 啟動(dòng)A/D 轉(zhuǎn)換

  44.          AD_finished = 0;

  45.          while ( AD_finished == 0 ) // 等待A/D 轉(zhuǎn)換結(jié)束

  46.          {

  47.                   AD_finished = (ADC_CONTR & 0x10); //0001,0000, ADC_FLAG ==1測(cè)試A/D轉(zhuǎn)                  換結(jié)束否

  48.          }

  49.          ADC_CONTR &= 0xF7; //1111,0111 令 ADC_START = 0, 關(guān)閉A/D 轉(zhuǎn)換,

  50.          return (ADC_DATA); // 返回 A/D 轉(zhuǎn)換結(jié)果

  51. }

  52. void main()

  53. {

  54.          initiate_RS232();

  55.          P1 = P1 | 0x63; // 0110,0011,要設(shè)置為 A/D 轉(zhuǎn)換的P1.x 口,先設(shè)為高

  56.          P1_ADC_EN = 0x63; //0110,0011, P1 的P1.0,P1.1,P1.5,P1.6 設(shè)置為 A/D 轉(zhuǎn)換輸入腳

  57.          // 斷開P1.0,P1.1,P1.5,P1.6 內(nèi)部上拉電阻

  58.          while(1)

  59.          {

  60.                   Send_Byte(get_AD_result(0)); //P1.0 為 A/D 當(dāng)前通道, 測(cè)量并發(fā)送結(jié)果

  61.                   delay(0x200);

  62.                   Send_Byte(get_AD_result(1)); //P1.1 為 A/D 當(dāng)前通道, 測(cè)量并發(fā)送結(jié)果

  63.                   delay(0x200);

  64.                   Send_Byte(get_AD_result(5)); //P1.5 為 A/D 當(dāng)前通道, 測(cè)量并發(fā)送結(jié)果

  65.                   delay(0x200);

  66.                   Send_Byte(get_AD_result(6)); //P1.6 為 A/D 當(dāng)前通道, 測(cè)量并發(fā)送結(jié)果

  67.                   delay(0x200);

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

  69.                   Send_Byte(0);

  70.                   Send_Byte(0);

  71.                   Send_Byte(0);

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

  73.                   delay(0x200);

  74.                   delay(0x200);

  75.                   delay(0x200);

  76.                   delay(0x200);

  77.                   delay(0x200);

  78.          }

  79. }
復(fù)制代碼


相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

ID:369082 發(fā)表于 2018-8-23 17:24 | 顯示全部樓層
我用的STC15單片機(jī)測(cè)試脈沖信號(hào)的幅值,在采集數(shù)據(jù)過程中只能采樣一次,想取多次采樣取最大值的平均值來顯示,但是程序顯示時(shí)總是錯(cuò)誤,您能幫我看看一下嗎?
回復(fù)

使用道具 舉報(bào)

ID:369082 發(fā)表于 2018-8-23 17:26 | 顯示全部樓層
這是我的程序,把采樣程序區(qū)掉就可以成功顯示一次
/******************
???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;
}
回復(fù)

使用道具 舉報(bào)

ID:399179 發(fā)表于 2020-5-31 19:38 來自觸屏版 | 顯示全部樓層
加油!我也正在學(xué)習(xí)內(nèi)部AD
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表