• PUDN用户
    了解作者
  • Others
    开发工具
  • 1KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 51
    下载次数
  • 2007-05-16 10:42
    上传日期
数字温度传感器DS18B20,keil C 环境,使用宏晶的高速51单片机
ds18b20_2007C.rar
  • www.pudn.com.txt
    218B
  • ds18b20.c
    2.8KB
内容介绍
/*51平台,11.0592晶体,使用stc12c4052和ds18b20*/ #include "reg51.h" #define uchar unsigned char #define uint unsigned int sbit p10=P1^0; sbit p11=P1^1; sbit p12=P1^2; sbit p13=P1^3; sbit addr1=P1^4; sbit addr2=P1^5; sbit addr3=P1^6; sbit p17=P1^7; sbit dir485=P3^2; sbit rs232en=P3^3; sbit rs485en=P3^4; sbit p35=P3^5; sbit p37=P3^7; /*p37为单总线*/ /*初始化*/ void initds18b20() { p37=0; delay(200); delay(184); p37=1; delay(48); if(p37==1) { ds18b20=0; } else { ds18b20=1; delay(160); } p37=1; } void writebyteds18b20(uchar aaa) { uchar i,j; for(i=0;i<8;i++) { p37=0; p37=0x01&aaa; aaa=aaa>>1; delay(48); p37=1; WDT=0x30; //feed the dog to delay WDT=0x30; WDT=0x30; WDT=0x30; WDT=0x30; WDT=0x30; WDT=0x30; WDT=0x30; } p37=1; } void readds18b20() { uchar i,j; for(i=0;i<8;i++) { p37=1; WDT=0x30; WDT=0x30; WDT=0x30; WDT=0x30; WDT=0x30; WDT=0x30; WDT=0x30; WDT=0x30; p37=0; WDT=0x30; WDT=0x30; WDT=0x30; WDT=0x30; WDT=0x30; WDT=0x30; WDT=0x30; WDT=0x30; p37=1; cirl=cirl>>1; if(p37==1) { cirl=cirl+128; } delay(32); } for(i=0;i<8;i++) { p37=1; WDT=0x30; WDT=0x30; WDT=0x30; WDT=0x30; WDT=0x30; WDT=0x30; WDT=0x30; WDT=0x30; p37=0; WDT=0x30; WDT=0x30; WDT=0x30; WDT=0x30; WDT=0x30; WDT=0x30; WDT=0x30; WDT=0x30; p37=1; cirh=cirh>>1; if(p37==1) { cirh=cirh+128; } delay(32); } } void temp() { uchar temph,templ; p37=1; initds18b20(); if(ds18b20) { delay(48); writebyteds18b20(0xcc); writebyteds18b20(0x44); longdelay(184000); initds18b20(); if(ds18b20) { delay(48); writebyteds18b20(0xcc); writebyteds18b20(0xbe); readds18b20(); } } /*数据处理后由串行口返回PC*/ if(ds18b20) { dir485=1; SBUF=0xaa; while(!TI) { WDT=0x30; } TI=0; SBUF=localaddress; while(!TI) { WDT=0x30; } TI=0; SBUF=0x08; while(!TI) { WDT=0x30; } TI=0; SBUF=0x00; while(!TI) { WDT=0x30; } TI=0; temph=(cirh<<4)+(cirl>>4); if(temph>=128) { temph=383-temph; } SBUF=temph; while(!TI) { WDT=0x30; } TI=0; templ=(uchar)((float)(cirl&0x0f)*0.625); SBUF=templ; while(!TI) { WDT=0x30; } TI=0; SBUF=localaddress+0x08+0x00+temph+templ; while(!TI) { WDT=0x30; } TI=0; dir485=0; } }
评论
    相关推荐