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