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

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

STC12C5201AD芯片AD應(yīng)用總結(jié)

作者:劉佳喝   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2014年03月16日   【字體:

STC12C5201AD芯片應(yīng)用總結(jié)

1、  內(nèi)部含有8路AD轉(zhuǎn)換

2、  首先聲明與AD轉(zhuǎn)換有關(guān)的寄存器

Sfr  ADC_CONTR =0XBC;//AD轉(zhuǎn)換控制寄存器的地址

Sfr  ADC_RES=0XBD;//AD轉(zhuǎn)換結(jié)果存放寄存器

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

                //哪個(gè)位置1,P1.0-P1.7就設(shè)定為AD轉(zhuǎn)換功能

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

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

#define    ADC_FLAG     0X10;//AD轉(zhuǎn)換完成標(biāo)志位,第4位,

#define    ADC_START    0X08;//AD轉(zhuǎn)換開(kāi)始標(biāo)志位,第3位,

#define    ADC_SPEEDLL  0X00;//AD轉(zhuǎn)換速度控制位,第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;//設(shè)置哪個(gè)P1口進(jìn)行ADC

             //0X01  P1.0

             //0X02  P1.1

             //0X03  P1.0和P1.1

             //0XFF  全部8個(gè)口

 ADC_RES=0;//結(jié)果寄存器清零

 ADC_CONTR=ADC_POWER|ADC_SPEEDLL//打開(kāi)ADC電源并設(shè)置轉(zhuǎn)換速率

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

}

5、  讀取ADC的結(jié)果

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

{

ADC_CONTR=ADC_POWER|ADC_SPEEDLL |ADC_START|ch;

             //設(shè)置ADC控制寄存器,打開(kāi)電源,設(shè)置轉(zhuǎn)換速率、打開(kāi)開(kāi)始,設(shè)置轉(zhuǎn)//換通道

 _nop_();//設(shè)置ADC_CONTR控制寄存器的語(yǔ)句執(zhí)行后,要經(jīng)過(guò)4個(gè)CPU時(shí)鐘的延時(shí),

        //其值才能夠保證設(shè)置進(jìn)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轉(zhuǎn)換的結(jié)果為8位數(shù)據(jù),就存儲(chǔ)在A(yíng)DC_RES寄存器中,

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

為了方便利用轉(zhuǎn)換的值編制其他的控制程序及調(diào)試,可以將轉(zhuǎn)換后的數(shù)據(jù)通過(guò)串口發(fā)送出來(lái),然后利用串口調(diào)試工具進(jìn)行監(jiān)控。這就涉及到串口通信程序的編制。

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

1、  為提高程序的適應(yīng)性可以先對(duì)通信的波特率和晶振頻率進(jìn)行宏定義。

#define BAUD  9600//9600的波特率

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

2、  串口初始化

Void initUART()

{

 SCON=0X5A;//8位數(shù)據(jù),無(wú)校驗(yàn)位

 TMOD=0X20;//設(shè)置定時(shí)器1工作在8位自動(dòng)重裝的模式

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

 TR1=1;//開(kāi)定時(shí)器1

}

當(dāng)然這段程序也可以使用STC提供的波特率計(jì)算器來(lái)自動(dòng)生成,如下:

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

{

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

SCON = 0x50;              //8位數(shù)據(jù),可變波特率

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

AUXR &= 0xfe;           //串口1選擇定時(shí)器1為波特率發(fā)生器

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

TMOD |= 0x20;            //設(shè)定定時(shí)器1為8位自動(dòng)重裝方式

TL1 = 0xFD;         //設(shè)定定時(shí)初值

TH1 = 0xFD;         //設(shè)定定時(shí)器重裝值

ET1 = 0;        //禁止定時(shí)器1中斷

TR1 = 1;        //啟動(dòng)定時(shí)器1

}

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

Sfr AUXR=0X8E;

3、  發(fā)送數(shù)據(jù)

Void senddata(uchar dat)

{

 While(!TI);//等待前面的數(shù)據(jù)發(fā)送完畢

 TI=0;//TI標(biāo)志清零

 SBUF=dat;//發(fā)送當(dāng)前的數(shù)據(jù)

}

這樣只要調(diào)用發(fā)送數(shù)據(jù)函數(shù)就可以在串口調(diào)試軟件中看到數(shù)據(jù)了。

當(dāng)然你也可以利用74HC595和數(shù)碼管做一個(gè)顯示電路來(lái)監(jiān)控,這個(gè)電路以后再總結(jié)。

關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 蜜月va乱码一区二区三区 | 成人自拍视频 | 一级毛片成人免费看a | 99riav3国产精品视频 | 福利视频1000 | 91资源在线 | 久久91精品国产一区二区 | 日韩欧美不卡 | 欧美中文字幕一区二区三区亚洲 | 99久久精品国产毛片 | 午夜激情影院 | 亚洲最新在线 | 伊人久久精品一区二区三区 | 国内久久精品 | 免费黄色大片 | 婷婷福利 | 国产欧美日韩一区二区三区 | 爱爱无遮挡| 成人久久18免费网站 | 国产最新视频在线 | 国产欧美精品一区 | 国产真实精品久久二三区 | 免费在线黄色av | 一区二区三区四区视频 | 99久久久国产精品 | 中文字幕精品一区 | 欧美亚洲视频 | 日韩在线小视频 | 国产午夜精品一区二区三区四区 | 亚洲一区国产 | 黄a在线观看 | 国产永久免费 | 日韩中文一区 | 国产精品视频在线播放 | 欧美 日韩 中文 | www.中文字幕.com | 久久久久久久一区 | 伊人二区 | 国产精品国产成人国产三级 | 亚洲第一视频网 | 日本黄色免费大片 |