stc12c2052ad测试ad模块
时间:10-02
整理:3721RD
点击:
#include<stc12c2052ad.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
//I/O
sbit led1=P3^3;
sbit led2=P3^4;
sbit led3=P3^5;
sbit led4=P3^6;
sbit j4=P3^2;
sbit j3=P3^1;
sbit j2=P3^0;
uchar V;
void delay_ms(uint a)
{
uint i;
while(--a!=0)
{
for(i=0; i<600; i++);
}
}
void UART_init(void)
{
TMOD=0x20; //定时器工作方式2
SCON=0x50; //串口工作方式1
TH1=0xf3;
TL1=0xf3;
PCON=0x80; //波特率倍频
TR1=1; //启动定时器
}
void UART_T(uchar UART_data)
{
SBUF=UART_data;
while(TI==0);
TI=0;
}
void READ_init(uchar CHA)
{
uchar AD_FIN=0; //存储AD转换标志
CHA&=0x07; //选择ADC的8个接口中的一个
ADC_CONTR=0x40; //ADC转换的速度(0xx00000)
_nop_();
ADC_CONTR|=CHA; //选择AD当前通道
_nop_();
ADC_CONTR|=0x80; //启动AD电源
delay_ms(1); //使输入电压达到稳定
}
uchar read(void)
{
uchar AD_FIN=0; //存储AD转换标志
ADC_CONTR|=0x08; //启动AD转换(00001000)
_nop_();
_nop_();
_nop_();
_nop_();
while(AD_FIN==0) //等待AD转换结束
{
AD_FIN=(ADC_CONTR&0x10); //00010000测试AD转换结束否
}
ADC_CONTR&=0xE7; //11110111清ADC_FLAG位,关闭AD转换
return(ADC_DATA); //返回AD转换结果(8位)
}
void relay()
{
if(V>160)
{
led4=1;
j4=0;
j3=0;
j2=0;
}
if(V<60)
{
led1=1;
j4=1;
}
if(V<100&&V>60)
{
led2=1;
j2=1;
j3=0;
j4=0;
}
if(V>100&&V<160)
{
led3=1;
j3=1;
j2=0;
j4=0;
}
}
void main()
{
uchar R;
UART_init();
READ_init(7);
P1M0=0x80; //P1.7~0;00000001(高阻)P1.7为开漏
P1M1=0x80; //P1.7~0:00000000(强推)
P3M0=0x00; //P3为强推
P3M1=0xBF;
while(1)
{
R=read();
UART_T(R);
V=read();
delay_ms(10);
relay();
delay_ms(10);
}
}
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
//I/O
sbit led1=P3^3;
sbit led2=P3^4;
sbit led3=P3^5;
sbit led4=P3^6;
sbit j4=P3^2;
sbit j3=P3^1;
sbit j2=P3^0;
uchar V;
void delay_ms(uint a)
{
uint i;
while(--a!=0)
{
for(i=0; i<600; i++);
}
}
void UART_init(void)
{
TMOD=0x20; //定时器工作方式2
SCON=0x50; //串口工作方式1
TH1=0xf3;
TL1=0xf3;
PCON=0x80; //波特率倍频
TR1=1; //启动定时器
}
void UART_T(uchar UART_data)
{
SBUF=UART_data;
while(TI==0);
TI=0;
}
void READ_init(uchar CHA)
{
uchar AD_FIN=0; //存储AD转换标志
CHA&=0x07; //选择ADC的8个接口中的一个
ADC_CONTR=0x40; //ADC转换的速度(0xx00000)
_nop_();
ADC_CONTR|=CHA; //选择AD当前通道
_nop_();
ADC_CONTR|=0x80; //启动AD电源
delay_ms(1); //使输入电压达到稳定
}
uchar read(void)
{
uchar AD_FIN=0; //存储AD转换标志
ADC_CONTR|=0x08; //启动AD转换(00001000)
_nop_();
_nop_();
_nop_();
_nop_();
while(AD_FIN==0) //等待AD转换结束
{
AD_FIN=(ADC_CONTR&0x10); //00010000测试AD转换结束否
}
ADC_CONTR&=0xE7; //11110111清ADC_FLAG位,关闭AD转换
return(ADC_DATA); //返回AD转换结果(8位)
}
void relay()
{
if(V>160)
{
led4=1;
j4=0;
j3=0;
j2=0;
}
if(V<60)
{
led1=1;
j4=1;
}
if(V<100&&V>60)
{
led2=1;
j2=1;
j3=0;
j4=0;
}
if(V>100&&V<160)
{
led3=1;
j3=1;
j2=0;
j4=0;
}
}
void main()
{
uchar R;
UART_init();
READ_init(7);
P1M0=0x80; //P1.7~0;00000001(高阻)P1.7为开漏
P1M1=0x80; //P1.7~0:00000000(强推)
P3M0=0x00; //P3为强推
P3M1=0xBF;
while(1)
{
R=read();
UART_T(R);
V=read();
delay_ms(10);
relay();
delay_ms(10);
}
}