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

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

STC12C5A60S2中的AD轉(zhuǎn)換

作者:池塘里的鯊魚(yú)   來(lái)源:會(huì)員整理上傳   點(diǎn)擊數(shù):  更新時(shí)間:2014年05月22日   【字體:

逐次逼近原理 AD里面包含da,當(dāng)輸入電壓Vin時(shí),da的最高位是1,即為0.5Vref與輸入信號(hào)比較,如果輸入大于0.5Vref則比較器輸出為1,同時(shí)da的最高位為1,反之DA最高位則為0,通過(guò)8次比較后得到8個(gè)01數(shù)據(jù)即完成ad轉(zhuǎn)換。

 
現(xiàn)在說(shuō)下程序中用到stc12單片機(jī)兩個(gè)寄存器 ADC_CONTR;主要用來(lái)配置ad啟動(dòng)的工作模式;還有個(gè)result的寄存器
程序中的注意點(diǎn):配置完ADC_CONTR后要延時(shí)4個(gè)時(shí)鐘周期
先把程序附上
 
#include "stc12.h"
#include "intrins.h"
#include "ad.h"
uint ad;
 
#define ADC_POWER 0X80  //ADC最高位給adc部分供電,類似于片選
#define ADC_START 0X08  //模數(shù)轉(zhuǎn)換啟動(dòng)控制位
#define ADC_FLAG  0x10  //ad轉(zhuǎn)換需要時(shí)間,這個(gè)是轉(zhuǎn)換完成標(biāo)志位
#define ADC_SPEEDLL 0X00   //540 clock
#define ADC_SPEEDL  0X20   //360 clock
#define ADC_SPEEDH 0X40   //180 clock
#define ADC_SPEEDHH 0X60   //90  clock
uchar ADCresult(uchar aa) //這里的參數(shù)是哪個(gè)口來(lái)ad轉(zhuǎn)換
{
P1ASF=0X01; //這里的選擇和用哪一個(gè)P1口作為ad采樣
ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ADC_START|aa;
//ADC_CONTR=0X88|aa;
_nop_();
_nop_();
_nop_();
_nop_();//設(shè)置ADC_CONTR寄存器后需加4個(gè)CPU時(shí)鐘周期的延時(shí),才能保證值被寫(xiě)入ADC_CONTR寄存器
 
while (!(ADC_CONTR & ADC_FLAG));   //等待ADC_CONTR,這里的ADC_FLAG相當(dāng)于一個(gè)常數(shù),不是寄存器里面的某個(gè)位
    //while(!ADC_FLAG);
//ADC_FLAG=0;
ADC_CONTR &= ~ADC_FLAG;              //Close ADC 將標(biāo)志位清零等待下次硬件置1
ad=(ADC_RES<<2)+ADC_RESL; //打開(kāi)10位AD采集功能   如果用8位AD 屏掉這句 把下一句改為   Vo=(float)(ADC_RESL)*500/256; 即可
                                    //ADC_RES結(jié)果寄存器的高2位;ADC_RES結(jié)果寄存器的低8位
    ad=(float)(ad)*5*100/1024;           //Return ADC result(為顯示整數(shù),這里將電壓值擴(kuò)大了十倍) 
                                         //10位AD采集 即2的10次方 滿值為1024 這里用1024表示5伏的電壓 
//那么用采集到的數(shù)量值 除以1024 在乘以5 得到的值就是采集的電壓數(shù)值
//這里 又*100 是為了擴(kuò)大100倍 顯示小數(shù)位
                                         //ADC_RES*(5/256) 為采集的電壓值  然后擴(kuò)大10倍便于計(jì)算
    return ad; 
 
 
 
}
 
 
 
這里只是個(gè)ad.c源文件,這里有幾個(gè)問(wèn)題想說(shuō)一下
1.怎么知道是10位還是8位的ad結(jié)果;你可以在ADCresult(uchar aa)最前面加一條AUXR1&=0x04;什么意思呢,轉(zhuǎn)換結(jié)果的低2位放在ADC_RES,高8位ADC_RESL中
2為什么不用//while(!ADC_FLAG);
//ADC_FLAG=0;這兩條因?yàn)锳DC_FLAG相當(dāng)于常量前面用宏定義
而頭文件里只有ADC_CONTR的地址映射;但是如果在頭文件中用sbit ADC_FLAG=ADC_CONTR^4會(huì)出現(xiàn)錯(cuò)誤,具體原因還不清楚
 
 
先說(shuō)到這吧
關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 黑人精品一区二区 | 一区二区三区影视 | 日本少妇中文字幕 | 93久久精品日日躁夜夜躁欧美 | 久久午夜视频 | 国产视频在线观看视频 | 日韩视频在线观看免费 | 欧美一区二| 国产黄a三级三级看三级 | 国产精品一区二区在线播放 | 亚洲精品一区二区三区在线观看 | 欧美一二 | 日韩av在线免费播放 | 一级肉体全黄裸片 | 天天射天天爽 | 美女黄色大片 | 午夜影院在线观看视频 | 日韩av一区二区三区四区 | 欧美成人久久 | 国产黄色免费网站 | 欧美成人精品一区二区三区在线看 | 国产成人在线视频 | 伊人色播 | 三级a毛片 | 日韩在线欧美 | 中文文字幕文字幕高清 | 日韩在线免费播放 | 成人在线精品 | 黄色影视在线观看 | www.欧美精品| 永久免费看mv网站入口亚洲 | 国产精品国产三级国产 | 国产精品久久午夜夜伦鲁鲁 | 久久亚洲精品视频 | 一区二区三区av | 中文字幕在线视频观看 | 少妇视频在线观看 | 深夜福利视频在线观看 | 免费看的毛片 | 亚洲影音| 国产精品成人国产乱一区 |