基于89C52的DH11 C語言測試程序
//判斷從機是否有低電平響應信號 如不響應則跳出,響應則向下運行
if(!P2_0)//T !
{
U8FLAG=2;
//判斷從機是否發(fā)出 80us 的低電平響應信號是否結束
while((!P2_0)&&U8FLAG++);
U8FLAG=2;
//判斷從機是否發(fā)出 80us 的高電平,如發(fā)出則進入數(shù)據(jù)接收狀態(tài)
while((P2_0)&&U8FLAG++);
//數(shù)據(jù)接收狀態(tài)
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;
//數(shù)據(jù)校驗
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 串口發(fā)
//送溫濕度數(shù)據(jù),波特率 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) ;//發(fā)送到串口
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) ;//發(fā)送到串口
//讀取模塊數(shù)據(jù)周期不易小于 2S
Delay(20000);
}//elihw
}// main
voidRSINTR() interrupt 4using2
{
U8 InPut3;
if(TI==1)//發(fā)送中斷
{
TI=0;
if(count!=5)//發(fā)送完5位數(shù)據(jù)
{
SBUF= outdata[count];
count++;
}
}
if(RI==1)//接收中斷
{
InPut3=SBUF;
indata[count_r]=InPut3;
count_r++;
RI=0;
if(count_r==5)//接收完4位數(shù)據(jù)
{
//數(shù)據(jù)接收完畢處理。
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;
}
}
}
評論