- 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即可) - }
- 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位) - }
以上- 8位ADC程序模块(适用于STC12C2052AD系列)
C代码
- #include
//单片机头文件 - #include
//51根本运算(包含_nop_空函数) - void
DELAY_MS (unsigned int a){ unsigned int i; while( a– != 0){ for(i = 0; i < 600; i++); } - }
- 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; //定时器发动 - }
- void
UART_T (unsigned char UART_data){ //界说串口发送数据变量 SBUF = UART_data; //将接纳的数据发送回去 while(TI == 0); //查看发送中止标志位 TI = 0; //令发送中止标志位为0(软件清零) - }
- 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即可) - }
- 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读出值送入串口显现 } - }
以上- 8位ADC运用实例(适用于STC12C2052AD系列)
C代码
- 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即可) - }
- unsigned
int ADC_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_RES*4+ADC_RESL);//回来A/D转化成果(10位ADC数据高8位在ADC_RES中,低2位在ADC_RESL中) - }
以上- 10位ADC程序模块(适用于STC12C5A60S2系列)
C代码
- #include
//单片机头文件 - #include
//51根本运算(包含_nop_空函数) - void
DELAY_MS (unsigned int a){ unsigned int i; while( a– != 0){ for(i = 0; i < 600; i++); } - }
- 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; //定时器发动 - }
- void
UART_T (unsigned char UART_data){ //界说串口发送数据变量 SBUF = UART_data; //将接纳的数据发送回去 while(TI == 0); //查看发送中止标志位 TI = 0; //令发送中止标志位为0(软件清零) - }
- 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即可) - }
- void
ADC_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转化, - }
- void
main (void){ UART_init();//串口初始程序 Read_init(0);//ADC初始化 P1M1 = 0x01; //P1.7~P1.0:0000 0001(高阻)//留意:更改ADC通道时须一起将对应的IO接口修改为高阻输入。 P1M0 = 0x00; //P1.7~P1.0:0000 0000(强推) while(1){ ADC_Read ();//调用ADC转化程序 UART_T (ADC_RES); //串口小秘书,将ADC读出值高8位送入串口 0000 0000 UART_T (ADC_RESL); //串口小秘书,将ADC读出值低2位送入串口 XXXX XX00 } - }