📄 rh.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 + -