BYTE readdata_555() //555握手
{ P3M1 = 0XFF; P3M0 = 0XFF; date = 0; delaytime(300); //延时*us
date = 1;
delaytime(2); // *us P3M1 = 0XFF; P3M0 = 0X00; TH0 = 0; TL0 = 0;
while(date); // 等待拉低 TR0 = 1;
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ (); while(!date); // 约31us TR0 = 0;
if(TL0<34&&TL0>28) return 1;
else
- 26 -
return 0;
}
//--------------------------------------------------------------- void conmu_555() { BYTE che; BYTE jiao,check; BYTE th,tl; WORD temp; che = readdata_555(); if(che) { while(date); th = read_byte(); tl = read_byte(); hum = read_byte(); jiao = read_byte(); temp = th<<8;
tem = temp|tl;
} check = th^tl; check = check^hum; if(jiao != check)
hum = 5;
- 27 -
P3M1 = 0X00; P3M0 = 0X00;
}
//-------------------------------------------------------------- void lcd_555()
//显示字
{ char i; LCD_send_command(0x80); for(i=0;i<4;i++) { LCD_send_data(t[i]); delay(15);
}
LCD_send_command(0x80+10); for(i=0;i<4;i++)
{ LCD_send_data(rt[i]);
delay(15);
} }
//---------------------------------------------- void UartInit(void)
//9600bps@12MHz
{ PCON &= 0x7f; //波特率不倍速 SCON = 0x50;
//8位数据,可变波特率
BRT = 0xD9;
//设定独立波特率发生器重装值- 28 -
AUXR |= 0x04; //独立波特率发生器时钟为Fosc,即1T
AUXR |= 0x01;//串口1选择独立波特率发生器为波特率发生器 AUXR |= 0x10;
//启动独立波特率发生器
}
void UART_T(unsigned char UART_data) { //定义串口发送数据变量 // ES=0; //禁止穿行中断 SBUF = UART_data; //将接收的数据发送回去 while(TI == 0); //检查发送中断标志位
TI = 0; //令发送中断标志位为0(软件清零)
// ES=1; //打开穿行中断 // delay(100); }
//-------------频率----------------------------- sbit checkFre = P3^3; //检测频率脚 double
Frequency;
//Hz
double F55;
double gain = (3.35272e-3);
WORD calculateFrequency() //计时25个周期 { BYTE t_num = 25; TH0 = 0;
TL0 = 1;
- 29 -
EA = 0;
while(checkFre==0); _nop_ ();_nop_ (); while(1)
{ if(checkFre==0) break;
} TR0=1;
//等待负跳变开始计时 while(t_num--) { while(1)
{ if(checkFre==1) break;
} while(1)
{ if(checkFre==0) break;
} }
TR0=0; //下次负跳变停止计时 EA = 1;
return((300000.0/(TH0*256+TL0))*1000);
}
void calFre()
- 30 -