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

📄 rh.c

📁 这是HF3226与52单片机的通信程序,该程序主要是用测量频率的手段来测量空气湿度
💻 C
字号:
			  
/******************AT89S52 and HF3226 for communication***********************************************/
#include <total.H>

//#define uchar unsigned char
//#define uint  unsigned int

//sbit alarm1 = P2^6;
//sbit alarm2 = P2^5;
sbit Fout = P3^2;
bit   bdata 	t50ms_bit;
bit   bdata 	f_check;
bit   bdata		temp_int;

uchar data rh;	  //对应的湿度
uchar data rhh; //湿度的高低位
uchar data sample_count; //湿度总数
uchar data t100ms;

uchar data	rhx;	     //第x次的湿度值
uchar data  rh0;


/******************AT89S52 and HF3223 for communication***********************************************/

uint	data	 frequency;
uchar   data	 dat[10];
uint    data	 total;

  
/******************AT89S52 and HF3223 for communication***********************************************/
uchar Measure_F(void)
{
	bit state_old=0;
 	bit state_new=0;
 	uint temp_flag=0;
	uchar rhi;
 	TH0=(-50000)/256;
 	TL0=(-50000)%256;
 	temp_int=0;
 	TR0=1;
 	while(1)
 	{
  		state_new=Fout; 
  		if(state_old&&(!state_new)) 
    	{
			temp_flag++;
			TR0=1;
		}
   		if(temp_int)
   		{
     		TR0=0;
     		frequency=temp_flag*20; 
		//	 frequency-=100;
         	if(frequency>9490)
         	frequency=9490;
         	if(frequency<8129)//Fout:8129---RH:99%
          	frequency=8129;
         	rhi=((9595-frequency)*10)/148;
		//	if(rh0<75)rh0-=2;
			return(rhi);
			
        }
		
	    state_old=state_new;      
 }
}


void Sample_Rh(void)
{
	 uchar i=0;
	 uint datx=0;
	 if(sample_count<10)
	 {
	 	dat[sample_count]=Measure_F();
		sample_count++;
	 }
	 else
	 {
	    f_check=0;
		t100ms=0;
		total=0;
	    for(i=0;i<10;)
	 	{
			datx=dat[i]+dat[i+1];
			total+=datx;	
			i=i+2;
		
		}
	//	datx=dat[0]+dat[1]+dat[2]+dat[3]+dat[4]+dat[5]+dat[6]+dat[7]+dat[8]+dat[9];
		sample_count=0;
	    rh0=(uchar)(total/10);
		rhoffset=byte_read(0,5);//读取相关校验数值
		if(rhoffset>=0x80)             //负校验
		{
			rh=rh0+0x80-rhoffset;
			if(rh>99)rh=99;
		}
		else
		{
		    rh=rh0+rhoffset;
			if(rh>99)rh=99;
		} 
	    f_check=0;
		t100ms=0;
	 } 
} 



void timer0(void)interrupt 1 
{
    temp_int=1;
}





/*

void Process_F(void)
{
		frequency=TH0*256+TL0;
		frequency=500000000/frequency;
		if(frequency>9490)
         	frequency=9490;
        if(frequency<8129)//Fout:8129---RH:99%
          	frequency=8129;
		rhx=((9595-frequency)*10)/148;
		dat[sample_count++]=rhx;
		frequency=0;
	   	xstate=1;  //等待下一次采样
}





bit bdata process_bit=0;

void int0_f(void)interrupt 0	   //p3^2
{
	TR0=1;   
	frequency++;
	if(frequency>500)
	{
		TR0=0;	//停止计数
		EX0=0;	//关中断
		process_bit=1;

	}

}

void Sample_Rh(void)
{
    uchar i,datx;
  	if(f_check)
	{
		if(xstate)
		{

 	    	TH0=0;
 	    	TL0=0;	//0.00452error
			TR0=0;
			process_bit=0;
			xstate=0;
			IT0=1;//下降沿中断
  			EX0=1;
		}
	}
	if(process_bit)
	{
		Process_F();
		process_bit=0;
	}	
	if(sample_count>9)
	{
	    f_check=0;
		t100ms=0;
		total=0;
	    for(i=0;i<10;)
	 	{
			datx=dat[i]+dat[i+1];
			total+=datx;	
			i=i+2;	
		}
		sample_count=0;
	    rh0=(uchar)(total/10);
		rhoffset=byte_read(0,18);//读取相关校验数值
		if(rhoffset>=0x80)             //负校验
			rh=rh0+0x80-rhoffset;
		else
		    rh=rh0+rhoffset; 
	    f_check=0;
		t100ms=0;
		
	 }

	
}

*/


⌨️ 快捷键说明

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