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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC單片機ADC查詢方式例程

[復制鏈接]
跳轉到指定樓層
樓主
ID:165300 發表于 2017-2-18 20:43 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC15F4K60S4 系列 AD轉換查詢方式舉例----------------------------*/
/* --- Mobile: (86)13922805190 ----------------------------------------*/
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
/* --- Tel: 86-0513-55012928,55012929,55012966-------------------------*/

/* 如果要在程序中使用此代碼,請在程序中注明使用了STC的資料及程序        */
/* 如果要在文章中應用此代碼,請在文章中注明使用了STC的資料及程序        */
/*---------------------------------------------------------------------*/
//本示例在Keil開發環境下請選擇Intel的8058芯片型號進行編譯
//若無特別說明,工作頻率一般為11.0592MHz

#include "reg51.h"
#include "intrins.h"
#define FOSC    11059200L
#define BAUD    9600
typedef unsigned char BYTE;
typedef unsigned int WORD;
#define     URMD    0           //0:使用定時器2作為波特率發生器
                                //1:使用定時器1的模式0(16位自動重載模式)作為波特率發生器
                                //2:使用定時器1的模式2(8位自動重載模式)作為波特率發生器
sfr T2H   = 0xd6;               //定時器2高8位
sfr T2L   = 0xd7;               //定時器2低8位
sfr P1M1 = 0x91;    //PxM1.n,PxM0.n     =00--->Standard,    01--->push-pull
sfr P1M0 = 0x92;    //                  =10--->pure input,  11--->open drain
sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr P3M1 = 0xB1;
sfr P3M0 = 0xB2;
sfr P4M1 = 0xB3;
sfr P4M0 = 0xB4;
sfr P5M1 = 0xC9;
sfr P5M0 = 0xCA;
sfr P6M1 = 0xCB;
sfr P6M0 = 0xCC;
sfr P7M1 = 0xE1;
sfr P7M0 = 0xE2;
sfr  AUXR       =   0x8e;       //輔助寄存器                              
sfr ADC_CONTR   =   0xBC;           //ADC控制寄存器
sfr ADC_RES     =   0xBD;           //ADC高8位結果
sfr ADC_LOW2    =   0xBE;           //ADC低2位結果
sfr P1ASF       =   0x9D;           //P1口第2功能控制寄存器
#define ADC_POWER   0x80            //ADC電源控制位
#define ADC_FLAG    0x10            //ADC完成標志
#define ADC_START   0x08            //ADC起始控制位
#define ADC_SPEEDLL 0x00            //540個時鐘
#define ADC_SPEEDL  0x20            //360個時鐘
#define ADC_SPEEDH  0x40            //180個時鐘
#define ADC_SPEEDHH 0x60            //90個時鐘
void InitUart();
void InitADC();
void SendData(BYTE dat);
BYTE GetADCResult(BYTE ch);
void Delay(WORD n);
void ShowResult(BYTE ch);
void main()
{
    P0M0 = 0x00;
    P0M1 = 0x00;
    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
    P4M0 = 0x00;
    P4M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;
    P6M0 = 0x00;
    P6M1 = 0x00;
    P7M0 = 0x00;
    P7M1 = 0x00;
    InitUart();                     //初始化串口
    InitADC();                      //初始化ADC
    while (1)
    {
        ShowResult(0);              //顯示通道0
        ShowResult(1);              //顯示通道1
        ShowResult(2);              //顯示通道2
        ShowResult(3);              //顯示通道3
        ShowResult(4);              //顯示通道4
        ShowResult(5);              //顯示通道5
        ShowResult(6);              //顯示通道6
        ShowResult(7);              //顯示通道7
    }
}
/*----------------------------
發送ADC結果到PC
----------------------------*/
void ShowResult(BYTE ch)
{
    SendData(ch);                   //顯示通道號
    SendData(GetADCResult(ch));     //顯示ADC高8位結果
//    SendData(ADC_LOW2);           //顯示低2位結果
}
/*----------------------------
讀取ADC結果
----------------------------*/
BYTE GetADCResult(BYTE ch)
{
    ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
    _nop_();                        //等待4個NOP
    _nop_();
    _nop_();
    _nop_();
    while (!(ADC_CONTR & ADC_FLAG));//等待ADC轉換完成
    ADC_CONTR &= ~ADC_FLAG;         //Close ADC
    return ADC_RES;                 //返回ADC結果
}
/*----------------------------
初始化串口
----------------------------*/
void InitUart()
{
    SCON = 0x5a;                //設置串口為8位可變波特率
#if URMD == 0
    T2L = 0xd8;                 //設置波特率重裝值
    T2H = 0xff;                 //115200 bps(65536-18432000/4/115200)
    AUXR = 0x14;                //T2為1T模式, 并啟動定時器2
    AUXR |= 0x01;               //選擇定時器2為串口1的波特率發生器
#elif URMD == 1
    AUXR = 0x40;                //定時器1為1T模式
    TMOD = 0x00;                //定時器1為模式0(16位自動重載)
    TL1 = 0xd8;                 //設置波特率重裝值
    TH1 = 0xff;                 //115200 bps(65536-18432000/4/115200)
    TR1 = 1;                    //定時器1開始啟動
#else
    TMOD = 0x20;                //設置定時器1為8位自動重裝載模式
    AUXR = 0x40;                //定時器1為1T模式
    TH1 = TL1 = 0xfb;           //115200 bps(256 - 18432000/32/115200)
    TR1 = 1;
#endif
}
/*----------------------------
初始化ADC
----------------------------*/
void InitADC()
{
    P1ASF = 0xff;                   //設置P1口為AD口
    ADC_RES = 0;                    //清除結果寄存器
    ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
    Delay(2);                       //ADC上電并延時
}
/*----------------------------
發送串口數據
----------------------------*/
void SendData(BYTE dat)
{
    while (!TI);                    //等待前一個數據發送完成
    TI = 0;                         //清除發送標志
    SBUF = dat;                     //發送當前數據
}
/*----------------------------
軟件延時
----------------------------*/
void Delay(WORD n)
{
    WORD x;
    while (n--)
    {
        x = 5000;
        while (x--);
    }
}


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人福利在线视频 | 青草青草久热精品视频在线观看 | 国产人久久人人人人爽 | 91国在线视频 | 欧美日韩精品一区 | 欧美日韩中文在线 | 黑人性hd | 成人亚洲精品 | 91看片在线观看 | av一区二区三区在线观看 | 欧洲一区二区三区 | 久久久日韩精品一区二区三区 | 精品综合在线 | 亚洲精品一二三区 | 国产精品久久久久久久免费大片 | 日韩欧美一区在线 | 亚洲成人精 | 亚洲视频中文字幕 | 亚洲精品久久久一区二区三区 | 欧美a级成人淫片免费看 | 日韩在线不卡 | 国产精品人人做人人爽 | 成年人免费在线视频 | 91免费版在线观看 | 成人精品 | 亚洲天堂精品久久 | 久久精品国产一区二区 | 亚洲欧美中文日韩在线v日本 | 黄频视频 | 成人在线观看黄 | 欧美视频第三页 | 91在线精品视频 | 国产美女精品 | 日韩视频免费看 | 亚洲精品国产成人 | 亚洲人成人一区二区在线观看 | 婷婷成人在线 | 久久久久91 | 一区二区三区视频 | 久久精品com | 亚洲综合区 |