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

專注電子技術學習與研究
當前位置:單片機教程網 >> 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和數碼管做一個顯示電路來監控,這個電路以后再總結。

關閉窗口

相關文章

主站蜘蛛池模板: 9999国产精品欧美久久久久久 | 日本精品一区二区在线观看 | 国产精品免费av | 欧美黑人一区 | 欧美激情综合色综合啪啪五月 | 日美女逼逼 | 亚洲在线一区 | 精品久久久久久久久久久 | 欧美色999| 色网站入口 | 九九亚洲 | 91久久夜色精品国产网站 | 蜜桃免费av | 日日草夜夜草 | 日韩一区二区三区在线视频 | 国产毛片在线看 | 成人久久久 | 国产伦一区二区三区四区 | 日日夜夜天天干 | 日日摸日日碰夜夜爽2015电影 | 99精品国产一区二区三区 | 久久精品国产久精国产 | 欧美精品一区三区 | 特级a欧美做爰片毛片 | 亚洲 欧美 日韩 精品 | 成人欧美一区二区三区白人 | 男人天堂午夜 | 久久久国产一区二区 | 岛国av免费观看 | 国产一级片在线观看视频 | 亚洲精品自在在线观看 | 国产精品视频久久 | 午夜专区 | 欧美一级片久久 | 黑人巨大精品欧美一区二区免费 | 亚洲精品一区二三区不卡 | 天天躁日日躁狠狠很躁 | www.伊人.com| 成人字幕网zmw| 手机看片1 | 人人澡人人爱 |