⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 get0809.c

📁 在8052下实现电平电压测试功能,自己开发的单片系统
💻 C
字号:
/*
----------------------------------------------------------
;		(c) Copyright xami All Rights Reserved              
----------------------------------------------------------
;	SOURCE_FILE:    GET0809.C
;	APPLICATION:	80c51\80c52
;	DESCRIPTION:    取adc0809的数据,采用查询方式
;	AUTHOR:         xami
;	DATE:           28 Apr. 2007
---------------------------------------------------------- 
<工作时序说明>
START:	上升沿使内部寄存器清零,下降沿开始转换;
ALE:	地址锁存允许信号,上升沿将输入地址(ADDC,ADDB,ADDC)
		锁存,确定通道;
OE:		数据输出充许端,高电平时打开片内的三态锁存缓冲器,
		将输出寄存器的数据放到数据线上;
EOC:	转换结束信号,高电平有效,在START信号上升沿之后0~8个
		周期内变为低电平,转换结束变为高电平,可用作查询或中
		断信号用;
CLK:	时钟信号,ADC0809工作频率f不大于640kHz,一般利用扩展
		槽上的CLOCK信号(4.77MHz)8分频得到的596kHz信号.		
----------------------------------------------------------
*/
unsigned char getadc0809(void)	//取出ADC0809的数据,中断方式 
	{
    unsigned char res;
    P2_5=0;				//选中ADC0809
	WR=1;
	delay(10);
	WR=0;
	delay(10);
	WR=1;        		//(start ALE的电平)一起先上升沿,再下降沿,启动ADC0809    

    delay(10);			//时序限定了,先要等待8个周期以上才能查询.
	while(INT0!=0);  	//等待,当INT0不为0时等待
		RD=0;           //输出允许(OUT ENABLE)(查)
	res= P0;
	return(res);
	}

/*采集电压的值,基于全为内部电路的情况下的测量*/
float get_u(void){
//程控:端口选择,输入电压范围为0.7~7v。
//-----------------------------------------------------------------
/*
//先设定到中间档
P2_0= 1;								//	0.7/2	=	0.35	min
P2_1= 0;								//	7/2		=	3.5		max
res_u= getadc0809();

if(res_u> 4){							
	P2_0= 0;							//	0.7/20	=	0.035	min
	P2_1= 0;}							//	7*2.5	=	0.35	max
else if(res_u< 0.4){					
	P2_0= 0;							//	0.7/0.2	=	3.5		min
	P2_1= 1;}							//	7/0.2	=	35		max
	*/
//------------------------------------------------------------------
//改进:为了器件安全,先设定到最低增益档,再逐渐降增加增益
//放大转换
//------------------------------------------------------------------
P2_0= 0;								
P2_1= 1;								
res_u= ((float)getadc0809()/0.2)*0.0196;			//0.025:	1/40
/*为了提高精度,尽可能提高增益*/
if(res_u< 0.7){							
	P2_0= 1;
	P2_1= 0;
	res_u= ((float)getadc0809()/2.0)*0.0196;		//0.25:		1 /4	1~0.1
	if(res_u< 0.7){
		P2_0= 0;
		P2_1= 0;
		res_u= ((float)getadc0809()/20.0)*0.0196;	//2.5:		10/4
	}
}
//------------------------------------------------------------------
//衰减转换
//------------------------------------------------------------------
switch(mode_set_u_list){				
	case p20dB:{
	res_u= res_u*(0.316*0.316);}break;
	case p10dB:{
	res_u= res_u*0.316;}break;
	case p0dB: break;
	case m10dB:{
	res_u= res_u/0.316;}break;
	case m20dB:{
	res_u= res_u/(0.316*0.316);}break;
	case m30dB:{
	res_u= res_u/(0.316*0.316*0.316);}break;
	default: break;
	}
//------------------------------------------------------------------
return(res_u);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -