📄 ad.c
字号:
//------------------------函数声明,变量定义---------------------------------
#include<reg51.h>
#include<intrins.h>
sbit sle_A=P3^0;
sbit sle_B=P3^1;
sbit sle_C=P3^2;
sbit comp_OUT=P3^6;
sbit comp_IN1=P1^0;
sbit comp_IN2=P1^1;
unsigned char ABC;
unsigned int Tref;
unsigned int Tx;
unsigned int Vx;
unsigned int Vref=25000;//实际参考电压值的1000倍,以免出现小数
void delay(unsigned int N);//延时子程序,实现(16xN+24)US的延时
void timer_set();//定时器初始化函数
void discharge();//电容放电
void measure_Vref();//测量参考电压值
void measure_Vx(unsigned char channels);//测量指定通道的电压
void calculate_Vx();//计算待测电压值
#define delayNOP();{_nop_();_nop_();_nop_();_nop_();};
//------------------------------------------------------------------
//函数名称:DELAY
//入口参数:N
//函数功能:延时子程序,实现(16xN+24)us的延时
//系统采用11。0592的时钟时,延时满足要求,其他情况需要改动
//--------------------------------------------------------------------
void delay(unsigned int N)
{
int i;
for(i=0;i<N;i++);
}
//-----------------------------------------------------------------------
//函数名称:TIMER-SET()
//功能说明:设置定时器工作状态,与硬件有关、
//-----------------------------------------------------------------------
void timer_set()
{
TMOD=0X01;//设定定时器工作模式
}
//-----------------------------------------------------------------------
//函数名称:DISCHARGE()
//函数功能:电容放电,定时器清零
//-----------------------------------------------------------------------
void discharge()
{
comp_IN2=0;//P1,1置零,cr放电
delay(0);//延时24us
TH0=0;
TL0=0;
}
//--------------------------------------------------------------------------
//函数名称:MEASURE-Vref
//函数功能:测量参考电压
//--------------------------------------------------------------------------
void measure_Vref()
{
sle_A=0;
sle_B=0;
sle_C=0;//选通道0,Vref输入
delayNOP();//定时消除抖动
TR0=1;//启动计数器
comp_IN2=1;//p1.1置1,开始积分。
while(comp_OUT);//检测p3,6是否出现跳变
TR0=0;//停止计数器记数
Tref=TH0;
Tref=(Tref<<8)||TL0;
discharge();//放电
}
//-------------------------------------------------------------------------------------
//函数名称:MEASURE-Vx
//入口参数:CHANNELS选通通道(1-7)
//功能说明:测量指定通道的电压
//-------------------------------------------------------------------------------------
void measure_Vx(unsigned char channels)
{
sle_A=channels&0x01;
sle_B=channels&0x02;
sle_C=channels&0x04;
delayNOP();//定时消除抖动
TR0=1;//启动计数器
comp_IN2=1;//置p1,1为1,开始积分
while(comp_OUT);
TR0=0;
Tx=TH0;
Tx=(Tx<<8)||TL0;
discharge();//放电
}
//---------------------------------------------------------------------------------------------
//函数名称:CALCULATE-VX
//函数公式VX=Vref *Tx/Tref计算结果
//功能说明:计算Vx
//---------------------------------------------------------------------------------------------
void calculte_Vx()
{
}
//--------------------------------------------------------------------------------------------
//函数名称:MAIN
//函数功能:主函数
//--------------------------------------------------------------------------------------------
void main()
{
timer_set();
discharge();
measure_Vref();
measure_Vx(1);
calculte_Vx();//计算待测电压
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -