#include"reg51.h" #include"intrins.h" #defineucharunsignegchar #defineuintunsignedint #defineoutp0 sbitsmg1=out^4; sbitsmg2=out^5; sbitDQ=p3^7; voiddelay5(uchar); voidinit_ds18b20(void); ucharreadbyte(void); voidwritebyte(uchar); ucharretemp(void); voidmain(void) { uchari,temp; delay5(1000); while(1) { temp=retemp(); for(i=0;i<10;i++) { out=(temp/10)&0x0f; smg1=0; smg2=1; delay5(1000); out=(temp%10)&0x0f; smg1=1; smg2=0; delay5(1000); } } } voiddelay5(ucharn) { do { _nop_(); _nop_(); _nop_(); n--; } while(n); } voidinit_ds18b20(void) { ucharx=0; DQ=0; delay5(120); DQ=1; delay5(16); delay5(80); } ucharreadbyte(void) { uchari=0; uchardate=0; for(i=8;i>0;i--) { DQ=0; delay5(1); DQ=1; date>>=1; if(DQ) date|=0x80; delay5(11); } return(date); } voidwritebyte(uchardat) { uchari=0; for(i=8;i>0;i--) { DQ=0; DQ=dat&0x01; delay5(12); DQ=1; dat>>=1; delay5(5); } } ucharretemp(void) { uchara,b,tt; uintt; init_ds18b20(); writebyte(0xcc); writebyte(0x44); init_ds18b20(); writebyte(0xcc); writebyte(0xBE); a=readbye(); b=readbye(); t=b; t<<=8; t=t|a; tt=t*0.0625; return(tt); } |