/*********************************************************************************************
程序名: 8位ADC转化试验程序
编写时刻: 2010年3月24日
硬件支撑: STC12C2052AD 运用ADC功用 外部晶体12MHz
接口阐明:
修正日志:
1-
/*********************************************************************************************
阐明:
PC串口端设置 [ 4800,8,无,1,无 ]
将ADC读出的数值经过串口以十六进制方法显现。
/*********************************************************************************************/
#include //单片机头文件
#include //51根本运算(包含_nop_空函数)
/*********************************************************************************************
函数名:毫秒级CPU延时函数
调 用:DELAY_MS (?);
参 数:1~65535(参数不可为0)
回来值:无
结 果:占用CPU方法延时与参数数值相同的毫秒时刻
备 注:应用于1T单片机时i<600,应用于12T单片机时i<125
/*********************************************************************************************/
void DELAY_MS (unsigned int a){
unsigned int i;
while( a– != 0){
for(i = 0; i < 600; i++);
}
}
/*********************************************************************************************/
/*********************************************************************************************
函数名:UART串口初始化函数
调 用:UART_init();
参 数:无
回来值:无
结 果:发动UART串口接纳中止,答应串口接纳,发动T/C1发生波特率(占用)
备 注:振动晶体为12MHz,PC串口端设置 [ 4800,8,无,1,无 ]
/**********************************************************************************************/
void UART_init (void){
//EA = 1; //答应总中止(如不运用中止,可用//屏蔽)
//ES = 1; //答应UART串口的中止
TMOD = 0x20; //定时器T/C1工作方法2
SCON = 0x50; //串口工作方法1,答应串口接纳(SCON = 0x40 时制止串口接纳)
TH1 = 0xF3; //定时器初值高8位设置
TL1 = 0xF3; //定时器初值低8位设置
PCON = 0x80; //波特率倍频(屏蔽本句波特率为2400)
TR1 = 1; //定时器发动
}
/**********************************************************************************************/
/*********************************************************************************************
函数名:UART串口发送函数
调 用:UART_T (?);
参 数:需求UART串口发送的数据(8位/1字节)
回来值:无
结 果:将参数中的数据发送给UART串口,承认发送完成后退出
备 注:
/**********************************************************************************************/
void UART_T (unsigned char UART_data){ //界说串口发送数据变量
SBUF = UART_data; //将接纳的数据发送回去
while(TI == 0); //查看发送中止标志位
TI = 0; //令发送中止标志位为0(软件清零)
}
/**********************************************************************************************/
/*********************************************************************************************
函数名:8位A/D转化初始化函数
调 用:Read (?);
参 数:输入的端口(0000 0XXX 其间XXX是设置输入端口号,可用十进制0~7表明,0表明P1.0,7表明P1.7)
回来值:无
结 果:敞开ADC功用并设置ADC的输入端口
备 注:适用于STC12C2052AD系列单片机(有必要运用STC12C2052AD.h头文件)
/**********************************************************************************************/
void Read_init (unsigned char CHA){
unsigned char AD_FIN=0; //存储A/D转化标志
CHA &= 0x07; //挑选ADC的8个接口中的一个(0000 0111 清0高5位)
ADC_CONTR = 0x40; //ADC转化的速度(0XX0 0000 其间XX操控速度,请依据数据手册设置)
_nop_();
ADC_CONTR |= CHA; //挑选A/D当时通道
_nop_();
ADC_CONTR |= 0x80; //发动A/D电源
DELAY_MS(1); //使输入电压到达安稳(1ms即可)
}
/**********************************************************************************************/
/*********************************************************************************************
函数名:8位A/D转化函数
调 用:? = Read ();
参 数:无
回来值:8位的ADC数据
结 果:读出指定ADC接口的A/D转化值,并回来数值
备 注:适用于STC12C2052AD系列单片机(有必要运用STC12C2052AD.h头文件)
/**********************************************************************************************/
unsigned char Read (void){
unsigned char AD_FIN=0; //存储A/D转化标志
ADC_CONTR |= 0x08; //发动A/D转化(0000 1000 令ADCS = 1)
_nop_();
_nop_();
_nop_();
_nop_();
while (AD_FIN ==0){ //等候A/D转化完毕
AD_FIN = (ADC_CONTR & 0x10); //0001 0000测验A/D转化完毕否
}
ADC_CONTR &= 0xE7; //1111 0111 清ADC_FLAG位, 封闭A/D转化,
return (ADC_DATA); //回来A/D转化成果(8位)
}
/**********************************************************************************************/
/*********************************************************************************************
函数名:主函数
调 用:无
参 数:无
回来值:无
结 果:程序开端处,无限循环
备 注:
/**********************************************************************************************/
void main (void){
unsigned char R;
UART_init();//串口初始程序
Read_init(0);//ADC初始化
P1M0 = 0x01; //P1.7~.0:0000 0001(高阻)//留意:更改ADC通道时须一起将对应的IO接口修正为高阻输入。
P1M1 = 0x00; //P1.7~.0:0000 0000(强推)
while(1){
R = Read ();
UART_T (R); //串口小秘书,将ADC读出值送入串口显现
}
}/**********************************************************************************************/
/*************************************************************
* 杜洋工作室 www.DoYoung.net
/*************************************************************/