spid.SetPoint = 100; /* Set PID Setpoint */ while(1) {
if(plus==0) { EA=0;
for(a=0;a<5;a++) for(b=0;b<102;b++){} if(plus==0) {
set_temper++; flag=0; } }
else if(subs==0) {
for(a=0;a<5;a++) for(b=0;a<102;b++){} if(subs==0) {
set_temper--; flag=0; } }
else if(stop==0) {
for(a=0;a<5;a++) for(b=0;b<102;b++){} if(stop==0) {
28
flag=0; break; } EA=1; }
get_temper(); b=temper; if(flag_2==1) a=b;
if((abs(a-b))>5) temper=a; else temper=b; a=temper; flag_2=0; if(++count1>30) {
display(); count1=0; }
compare_temper();} TR0=0; z=1; while(1) { EA=0; if(stop==0) {
for(a=0;a<5;a++)
29
for(b=0;b<102;b++){} if(stop==0) disp_1(phil); // break; } EA=1; } }
/*DS18b20 子程序*/ #include
sbit DQ=P2^1;
typedef unsigned char byte; typedef unsigned int word; void delay(word useconds) {
for(;useconds>0;useconds--); }
/*复位*/ byte ow_reset(void) {
byte presence;
DQ=0; DQ=1; delay(3); presence=DQ; delay(25);
return(presence);; }
30
byte read_byte(viod) {
byte i; byte value=0; for (i=8;i>0;i--) {
value>>=1; DQ=0; DQ=1; delay(1);
if(DQ)value|=0x80; delay(6); }
return(value); }
/*void write_byte(char val) {
byte i;
for (i=8;i>0;i--) /* { DQ=0; DQ=val&0x01; delay(5); DQ=1; val=val/2; }
delay(5); }
/*
向1-wire总线上写一个字节*/ 一次写一个字节*/ 读取温度*/
31
char Read_Temperature(void) {
union{
byte c[2]; int x; }temp; ow_reset(); write_byte(0xcc); write_byte(0xBE); temp.c[1]=read_byte(); temp.c[0]=read_byte(); ow_reset(); write_byte(0xCC); write_byte(0x44); return temp.x/2;
附2 89S51系统程序及子程序 #include
32