新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > stc 8位ADC轉換實驗程序

        stc 8位ADC轉換實驗程序

        作者: 時間:2016-11-18 來源:網絡 收藏
        /*********************************************************************************************
        程序名:    8位ADC轉換實驗程序
        編寫時間:  2010年3月24日
        硬件支持:  STC12C2052AD 使用ADC功能 外部晶體12MHz
        接口說明:  
        修改日志:  
          1-
        /*********************************************************************************************
        說明:
        PC串口端設置 [ 4800,8,無,1,無 ]
        將ADC讀出的數值通過串口以十六進制方式顯示。
        /*********************************************************************************************/
        #include //單片機頭文件
        #include //51基本運算(包括_nop_空函數)
        /*********************************************************************************************
        函數名:毫秒級CPU延時函數
        調 用:DELAY_MS (?);
        參 數:1~65535(參數不可為0)
        返回值:無
        結 果:占用CPU方式延時與參數數值相同的毫秒時間
        備 注:應用于1T單片機時i<600,應用于12T單片機時i<125
        /*********************************************************************************************/
        void DELAY_MS (unsigned int a){
        unsigned int i;
        while( a-- != 0){
        for(i = 0; i < 600; i++);
        }
        }
        /*********************************************************************************************/
        /*********************************************************************************************
        函數名:UART串口初始化函數
        調 用:UART_init();
        參 數:無
        返回值:無
        結 果:啟動UART串口接收中斷,允許串口接收,啟動T/C1產生波特率(占用)
        備 注:振蕩晶體為12MHz,PC串口端設置 [ 4800,8,無,1,無 ]
        /**********************************************************************************************/
        void UART_init (void){
        //EA = 1; //允許總中斷(如不使用中斷,可用//屏蔽)
        //ES = 1; //允許UART串口的中斷
        TMOD = 0x20; //定時器T/C1工作方式2
        SCON = 0x50; //串口工作方式1,允許串口接收(SCON = 0x40 時禁止串口接收)
        TH1 = 0xF3; //定時器初值高8位設置
        TL1 = 0xF3; //定時器初值低8位設置
        PCON = 0x80; //波特率倍頻(屏蔽本句波特率為2400)
        TR1 = 1; //定時器啟動
        }
        /**********************************************************************************************/
        /*********************************************************************************************
        函數名:UART串口發送函數
        調 用:UART_T (?);
        參 數:需要UART串口發送的數據(8位/1字節)
        返回值:無
        結 果:將參數中的數據發送給UART串口,確認發送完成后退出
        備 注:
        /**********************************************************************************************/
        void UART_T (unsigned char UART_data){ //定義串口發送數據變量
        SBUF = UART_data; //將接收的數據發送回去
        while(TI == 0); //檢查發送中斷標志位
        TI = 0; //令發送中斷標志位為0(軟件清零)
        }
        /**********************************************************************************************/
        /*********************************************************************************************
        函數名:8位A/D轉換初始化函數
        調 用:Read (?);
        參 數:輸入的端口(0000 0XXX 其中XXX是設置輸入端口號,可用十進制0~7表示,0表示P1.0,7表示P1.7)
        返回值:無
        結 果:開啟ADC功能并設置ADC的輸入端口
        備 注:適用于STC12C2052AD系列單片機(必須使用STC12C2052AD.h頭文件)
        /**********************************************************************************************/
        void Read_init (unsigned char CHA){
        unsigned char AD_FIN=0; //存儲A/D轉換標志
        CHA &= 0x07; //選擇ADC的8個接口中的一個(0000 0111 清0高5位)
        ADC_CONTR = 0x40; //ADC轉換的速度(0XX0 0000 其中XX控制速度,請根據數據手冊設置)
        _nop_();
        ADC_CONTR |= CHA; //選擇A/D當前通道
        _nop_();
        ADC_CONTR |= 0x80; //啟動A/D電源
        DELAY_MS(1); //使輸入電壓達到穩定(1ms即可)
        }
        /**********************************************************************************************/
        /*********************************************************************************************
        函數名:8位A/D轉換函數
        調 用:? = Read ();
        參 數:無
        返回值:8位的ADC數據
        結 果:讀出指定ADC接口的A/D轉換值,并返回數值
        備 注:適用于STC12C2052AD系列單片機(必須使用STC12C2052AD.h頭文件)
        /**********************************************************************************************/
        unsigned char Read (void){
        unsigned char AD_FIN=0; //存儲A/D轉換標志
        ADC_CONTR |= 0x08; //啟動A/D轉換(0000 1000 令ADCS = 1)
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        while (AD_FIN ==0){ //等待A/D轉換結束
        AD_FIN = (ADC_CONTR & 0x10); //0001 0000測試A/D轉換結束否
        }
        ADC_CONTR &= 0xE7; //1111 0111 清ADC_FLAG位, 關閉A/D轉換,
        return (ADC_DATA); //返回A/D轉換結果(8位)
        }
        /**********************************************************************************************/
        /*********************************************************************************************
        函數名:主函數
        調 用:無
        參 數:無
        返回值:無
        結 果:程序開始處,無限循環
        備 注:
        /**********************************************************************************************/
        void main (void){
        unsigned char R;
        UART_init();//串口初始程序
        Read_init(0);//ADC初始化
        P1M0 = 0x01; //P1.7~.0:0000 0001(高阻)//注意:更改ADC通道時須同時將對應的IO接口修改為高阻輸入。
        P1M1 = 0x00; //P1.7~.0:0000 0000(強推)
        while(1){
        R = Read ();
        UART_T (R); //串口小秘書,將ADC讀出值送入串口顯示
        }
        }/**********************************************************************************************/
        /*************************************************************
        * 杜洋工作室 www.DoYoung.net
        /*************************************************************/


        關鍵詞: stc8位ADC轉

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 洛阳市| 南充市| 天峻县| 建德市| 海宁市| 衡阳县| 罗田县| 南岸区| 青冈县| 温州市| 隆回县| 蓬安县| 都匀市| 华蓥市| 云安县| 夹江县| 兴宁市| 金山区| 定兴县| 嘉峪关市| 渝中区| 双峰县| 广丰县| 新竹县| 都匀市| 高淳县| 元阳县| 朝阳区| 大悟县| 石泉县| 建湖县| 南宁市| 宣化县| 界首市| 石门县| 彝良县| 甘肃省| 格尔木市| 家居| 五台县| 房产|