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

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

        STC12C5201AD芯片AD應用總結

        作者:劉佳喝   來源:本站原創   點擊數:  更新時間:2014年03月16日   【字體:

        STC12C5201AD芯片應用總結

        1、  內部含有8路AD轉換

        2、  首先聲明與AD轉換有關的寄存器

        Sfr  ADC_CONTR =0XBC;//AD轉換控制寄存器的地址

        Sfr  ADC_RES=0XBD;//AD轉換結果存放寄存器

        Sfr  P1ASF=0x9d;//P1口模擬功能控制寄存器

                        //哪個位置1,P1.0-P1.7就設定為AD轉換功能

        3、  為了使程序的更具靈活性,可以單獨設定ADC_CONTR的每一位。

        #define    ADC_POWER   0X80;//所有ADC電源控制為,第7位

        #define    ADC_FLAG     0X10;//AD轉換完成標志位,第4位,

        #define    ADC_START    0X08;//AD轉換開始標志位,第3位,

        #define    ADC_SPEEDLL  0X00;//AD轉換速度控制位,第5、6位

                                       //420 clocks

        #define    ADC_SPEEDL   0x20;//280 clocks

        #define    ADC_SPEEDH  0x40;//140 clocks

        #define    ADC_SPEEDHH  0x60;//70 clocks

        4、  初始化ADC

        Void initADC(void)

        {

         P1ASF=0X01;//設置哪個P1口進行ADC

                     //0X01  P1.0

                     //0X02  P1.1

                     //0X03  P1.0和P1.1

                     //0XFF  全部8個口

         ADC_RES=0;//結果寄存器清零

         ADC_CONTR=ADC_POWER|ADC_SPEEDLL//打開ADC電源并設置轉換速率

         Delay(2);//軟件延時2ms

        }

        5、  讀取ADC的結果

        Uchar getADCresult(uchar ch)//ch為要讀取的通道的值,0-7

        {

        ADC_CONTR=ADC_POWER|ADC_SPEEDLL |ADC_START|ch;

                     //設置ADC控制寄存器,打開電源,設置轉換速率、打開開始,設置轉//換通道

         _nop_();//設置ADC_CONTR控制寄存器的語句執行后,要經過4個CPU時鐘的延時,

                //其值才能夠保證設置進ADC_CONTR控制寄存器

         _nop_();

         _nop_();

         _nop_();

         while(!(ADC_CONTR & ADC_FLAG));//wait complete flag

         

         ADC_CONTR&=~ADC_FLAG;//close ADC

         

         return ADC_RES;//return ADC result

        }

        AD轉換的結果為8位數據,就存儲在ADC_RES寄存器中,

        其值為:ADC_RES[0:7]=256  X  Vin/Vcc

        為了方便利用轉換的值編制其他的控制程序及調試,可以將轉換后的數據通過串口發送出來,然后利用串口調試工具進行監控。這就涉及到串口通信程序的編制。

        串口通信程序的編制(只發不收):

        1、  為提高程序的適應性可以先對通信的波特率和晶振頻率進行宏定義。

        #define BAUD  9600//9600的波特率

        #define FOSC   11059200L  //11.0592M的晶振

        2、  串口初始化

        Void initUART()

        {

         SCON=0X5A;//8位數據,無校驗位

         TMOD=0X20;//設置定時器1工作在8位自動重裝的模式

         TH1=TL1=-(FOSC/12/32/BAUD);//T1裝初值

         TR1=1;//開定時器1

        }

        當然這段程序也可以使用STC提供的波特率計算器來自動生成,如下:

        void UartInit(void)         //9600bps@11.0592MHz

        {

        PCON &= 0x7f;            //波特率不倍速

        SCON = 0x50;              //8位數據,可變波特率

        AUXR &= 0xbf;           //定時器1時鐘為Fosc/12,即12T

        AUXR &= 0xfe;           //串口1選擇定時器1為波特率發生器

        TMOD &= 0x0f;           //清除定時器1模式位

        TMOD |= 0x20;            //設定定時器1為8位自動重裝方式

        TL1 = 0xFD;         //設定定時初值

        TH1 = 0xFD;         //設定定時器重裝值

        ET1 = 0;        //禁止定時器1中斷

        TR1 = 1;        //啟動定時器1

        }

        但要注意聲明特殊輔助寄存器AUXR

        Sfr AUXR=0X8E;

        3、  發送數據

        Void senddata(uchar dat)

        {

         While(!TI);//等待前面的數據發送完畢

         TI=0;//TI標志清零

         SBUF=dat;//發送當前的數據

        }

        這樣只要調用發送數據函數就可以在串口調試軟件中看到數據了。

        當然你也可以利用74HC595和數碼管做一個顯示電路來監控,這個電路以后再總結。

        關閉窗口

        相關文章

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