第4章 软件程序设计
4.1主程序
首先,单片机通过单总线接收来自数字接口温湿度变送器和作为基准的AMS2302数字温湿度传感器采集到的数据(其中数字接口温湿度变送器湿度部分直接传送电容式传感器HS1101和TLC555芯片组成的振荡电路所给出的频率)。然后将两者的数据进行比较计算得出需要的标定值传输给数字接口温湿度变送器。程序流程图如下:
- 16 -
图3.4
4.2 主程序代码 #include<12C5A.TXT> #include
typedef unsigned char BYTE; typedef unsigned int WORD; WORD
tem=257;
BYTE hum=58;
//555
//---------------------------- WORD tem_2301 = 241;
WORD
hum_2301 = 657; //2301
BYTE code t[]={\BYTE code rt[]={\BYTE tempra_2301[4]; BYTE humini_2301[4]; uchar tempra[4]; uchar humini[2];
- 17 -
//---------------------------------------------------- void delay(WORD i) //延时约x个ms { WORD j; for(i;i>0;i--)
for(j=950;j>0;j--);
}
void delaytime(WORD i) //延时约x个ms { while(i--){
_nop_ ();
_nop_ (); }}
//-----------------2301------------------------ sbit wire = P3^4; void check_rt()
//读数据准备信号
{ P3M1 = 0XFF; P3M0 = 0XFF; wire = 0; delaytime(600); //延时*us
wire = 1; delaytime(16); // 31us
_nop_ ();
_nop_ ();
- 18 -
_nop_ (); P3M1 = 0XFF; P3M0 = 0X00; while(wire); // 等待2301拉低
_nop_ ();
_nop_ ();
//低
_nop_ ();
while(!wire); // 等待拉高
_nop_ ();
_nop_ ();
//高
_nop_ ();
while(wire); // 等待2301拉低
_nop_ ();
_nop_ ();
_nop_ ();
}
//--------------------------------------------- BYTE redata_2301() //接收一位数据{ WORD WEI;
TH0 = 0; TL0 = 0;
EA = 0;
- 19 -
while(!wire); TR0 = 1; while(wire); TR0 = 0; EA = 1; if(TL0>50)
WEI = 1;
else WEI = 0; return WEI;
}
//------------------------------------------- BYTE read_byte_2301() //接收一个字节{ BYTE dat = 0;
BYTE temp; BYTE a; int i = 7; while(i>=0)
{ a = redata_2301(); temp = a<
}
- 20 -