微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于89C52的DH11 C语言测试程序

基于89C52的DH11 C语言测试程序

时间:11-28 来源:互联网 点击:
//单片机 : AT89S52 或 STC89C52RC

// 功能 :串口发送温湿度数据 波特率 9600

//单片机教程之DH11的测试程序

#include

#include

typedefunsigned charU8;// defined for unsigned 8-bits integer variable 无符号8位整型变量 */

typedef signed charS8;// defined for signed 8-bits integer variable 有符号8位整型变量 */

typedefunsigned intU16;// defined for unsigned 16-bits integer variable 无符号16位整型变量 */

typedef signed intS16;//defined for signed 16-bits integer variable 有符号16位整型变量 */

typedefunsigned longU32;// defined for unsigned 32-bits integer variable 无符号32位整型变量 */

typedef signed longS32;// defined for signed 32-bits integer variable 有符号32位整型变量 */

typedef floatF32;// single precision floating point variable (32bits) 单精度浮点数(32位长度)

typedefdoubleF64;// double precision floating point variable (64bits) 双精度浮点数(64位长度)

#define uchar unsigned char

#define uint unsigned int

#define Data_0_time 4

//----------------------------------------------//

//----------------IO口定义区--------------------//

//----------------------------------------------//

sbit P2_0 = P2^0 ; //DH11

//----------------------------------------------//

//----------------定义区--------------------//

//----------------------------------------------//

U8 U8FLAG,k;

U8 U8count,U8temp;

U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;

U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;

U8 U8comdata;

U8 outdata[5];//定义发送的字节数

U8 indata[5];

U8 count, count_r=0;

U8 str[5]={"RS232"};

U16 U16temp1,U16temp2;

SendData(U8 *a)

{

outdata[0] = a[0];

outdata[1] = a[1];

outdata[2] = a[2];

outdata[3] = a[3];

outdata[4] = a[4];

count = 1;

SBUF=outdata[0];

}

voidDelay(U16 j)

{ U8 i;

for(;j>0;j--)

{

for(i=0;i<27;i++);

}

}

voidDelay_10us(void)

{

U8 i;

i--;

i--;

i--;

i--;

i--;

i--;

}

voidCOM(void)

{

U8 i;

for(i=0;i<8;i++)

{

U8FLAG=2;

//----------------------

P2_1=0 ;//T

P2_1=1 ;//T

//----------------------

while((!P2_0)&&U8FLAG++);

Delay_10us();

Delay_10us();

// Delay_10us();

U8temp=0;

if(P2_0)U8temp=1;

U8FLAG=2;

while((P2_0)&&U8FLAG++);

//----------------------

P2_1=0 ;//T

P2_1=1 ;//T

//----------------------

//超时则跳出for循环

if(U8FLAG==1)break;

//判断数据位是0还是1

// 如果高电平高过预定0高电平值则数据位为 1

U8comdata<=1;

U8comdata|=U8temp;//0

}//rof

}

//--------------------------------

//-----湿度读取子程序 ------------

//--------------------------------

//----以下变量均为全局变量--------

//----温度高8位== U8T_data_H------

//----温度低8位== U8T_data_L------

//----湿度高8位== U8RH_data_H-----

//----湿度低8位== U8RH_data_L-----

//----校验 8位 == U8checkdata-----

//----调用相关子程序如下----------

//---- Delay();, Delay_10us();,COM();

//--------------------------------

voidRH(void)

{

//主机拉低18ms

P2_0=0;

Delay(180);

P2_0=1;

//总线由上拉电阻拉高 主机延时20us

Delay_10us();

Delay_10us();

Delay_10us();

Delay_10us();

//主机设为输入 判断从机响应信号

P2_0=1;

//判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行

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.059

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top