<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        STC12C5A60S2單片機的10位AD轉換程序

        作者:佚名   來源:本站原創   點擊數:  更新時間:2014年03月27日   【字體:

        //****************************************STC12C5A60S2 AD轉換***********************************************//
        #include"stc12c5a.h" //頭文件在STC公司主頁上下載
        #include"stdio.h"
        #include"intrins.h"
        //------------------------------------------------------------------------------
        void AD_init();
        void serial_init();
        void delay(unsigned int a);
        float AD_work(unsigned char channel);
        unsigned int AD_get(unsigned char channel);
        //------------------------------------------------------------------------------
        void main()
        {
        AD_init();    //A/D轉換初始化
        serial_init();   //串口初始化
        while(1)
        {
           unsigned char i;
           for(i=0;i<8;i++) //循環發送P1.0-P1.7的轉換數值
           {
            TI=1;    //使用printf函數前須先將發送標志位TI置1
            printf("The P1.%bd voltage is %f\n",i,AD_work(i));
            TI=0;
            delay(1000); //延時約1s
           }
        }
        }
        //------------------------------------------------------------------------------
        unsigned int AD_get(unsigned char channel)
        {
        ADC_CONTR=0x88|channel;    //開啟AD轉換1000 1000 即POWER SPEED1 SPEED0 ADC_FLAG   ADC_START CHS2 CHS1 CHS0
        _nop_(); _nop_(); _nop_(); _nop_();//要經過4個CPU時鐘的延時,其值才能夠保證被設置進ADC_CONTR 寄存器
        while(!(ADC_CONTR&0x10));    //等待轉換完成
        ADC_CONTR&=0xe7;      //關閉AD轉換,ADC_FLAG位由軟件清0
        return(ADC_RES*4+ADC_RESL);   //返回AD轉換完成的10位數據(16進制)
        }
        //------------------------------------------------------------------------------
        float AD_work(unsigned char channel)
        {
        float AD_val;     //定義處理后的數值AD_val為浮點數
        unsigned char i;
        for(i=0;i<100;i++)
        AD_val+=AD_get(channel); //轉換100次求平均值(提高精度)
        AD_val/=100;
        AD_val=(AD_val*5)/1024; //AD的參考電壓是單片機上的5v,所以乘5即為實際電壓值
        return AD_val;
        }
        //------------------------------------------------------------------------------
        void delay(unsigned int a) //延時約1ms
        {
        unsigned int i;
        while (--a!=0)
        for(i=600;i>0;i--);   //1T單片機i=600,若是12T單片機i=125
        }
        //------------------------------------------------------------------------------
        void serial_init()
        {
        TMOD=0x20;
        TH1=0xfd;
        TL1=0xfd; //設置9600波特率
        SCON=0x50; //串口方式1,允許接收
        TR1=1;
        }
        //------------------------------------------------------------------------------
        void AD_init()
        {
        P1ASF=0xff; //P1口全部作為模擬功能AD使用
        ADC_RES=0;   //清零轉換結果寄存器高8位
        ADC_RESL=0; //清零轉換結果寄存器低2位
        ADC_CONTR=0x80;//開啟AD電源
        delay(2);   //等待1ms,讓AD電源穩定
        }
        /*

        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮