基于89C52的DH11 C语言测试程序
//判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行
if(!P2_0)//T !
{
U8FLAG=2;
//判断从机是否发出 80us 的低电平响应信号是否结束
while((!P2_0)&&U8FLAG++);
U8FLAG=2;
//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
while((P2_0)&&U8FLAG++);
//数据接收状态
COM();
U8RH_data_H_temp=U8comdata;
COM();
U8RH_data_L_temp=U8comdata;
COM();
U8T_data_H_temp=U8comdata;
COM();
U8T_data_L_temp=U8comdata;
COM();
U8checkdata_temp=U8comdata;
P2_0=1;
//数据校验
U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
if(U8temp==U8checkdata_temp)
{
U8RH_data_H=U8RH_data_H_temp;
U8RH_data_L=U8RH_data_L_temp;
U8T_data_H=U8T_data_H_temp;
U8T_data_L=U8T_data_L_temp;
U8checkdata=U8checkdata_temp;
}//fi
}//fi
}
//----------------------------------------------
//main()功能描述: AT89C51 11.0592MHz 串口发
//送温湿度数据,波特率 9600
//----------------------------------------------
voidmain()
{
U8 i,j;
//uchar str[6]={"RS232"};
TMOD = 0x20;//定时器T1使用工作方式2
TH1 = 253;// 设置初值
TL1 = 253;
TR1 = 1;// 开始计时
SCON = 0x50;//工作方式1,波特率9600bps,允许接收
ES = 1;
EA = 1;// 打开所以中断
TI = 0;
RI = 0;
SendData(str) ;//发送到串口
Delay(1);//延时100US(12M晶振)
while(1)
{
//------------------------
//调用温湿度读取子程序
RH();
//串口显示程序
//--------------------------
str[0]=U8RH_data_H;
str[1]=U8RH_data_L;
str[2]=U8T_data_H;
str[3]=U8T_data_L;
str[4]=U8checkdata;
SendData(str) ;//发送到串口
//读取模块数据周期不易小于 2S
Delay(20000);
}//elihw
}// main
voidRSINTR() interrupt 4using2
{
U8 InPut3;
if(TI==1)//发送中断
{
TI=0;
if(count!=5)//发送完5位数据
{
SBUF= outdata[count];
count++;
}
}
if(RI==1)//接收中断
{
InPut3=SBUF;
indata[count_r]=InPut3;
count_r++;
RI=0;
if(count_r==5)//接收完4位数据
{
//数据接收完毕处理。
count_r=0;
str[0]=indata[0];
str[1]=indata[1];
str[2]=indata[2];
str[3]=indata[3];
str[4]=indata[4];
P0=0;
}
}
}
评论