您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > c51单片机DS18B20测试程序
/**************************************;:13922805190;0755-82948412温度传感器DS18B20测试程序主芯片:STC90C52RC(12T)工作频率:12.000MHz**************************************/#includeREG51.H#includeINTRINS.HtypedefunsignedcharBYTE;sbitDQ=P3^3;//DS18B20的数据口位P3.3BYTETPH;//存放温度值的高字节BYTETPL;//存放温度值的低字节voidDelayXus(BYTEn);voidDS18B20_Reset();voidDS18B20_WriteByte(BYTEdat);BYTEDS18B20_ReadByte();voidmain(){DS18B20_Reset();//设备复位DS18B20_WriteByte(0xCC);//跳过ROM命令DS18B20_WriteByte(0x44);//开始转换命令while(!DQ);//等待转换完成DS18B20_Reset();//设备复位DS18B20_WriteByte(0xCC);//跳过ROM命令DS18B20_WriteByte(0xBE);//读暂存存储器命令TPL=DS18B20_ReadByte();//读温度低字节TPH=DS18B20_ReadByte();//读温度高字节while(1);}/**************************************延时X*10微秒(STC90C52RC@12M)不同的工作环境,需要调整此函数当改用1T的MCU时,请调整此延时函数**************************************/voidDelayX0us(BYTEn){while(n--){_nop_();_nop_();}}/**************************************复位DS18B20,并检测设备是否存在**************************************/voidDS18B20_Reset(){CY=1;while(CY){DQ=0;//送出低电平复位信号DelayX0us(48);//延时至少480usDQ=1;//释放数据线DelayX0us(6);//等待60usCY=DQ;//检测存在脉冲DelayX0us(42);//等待设备释放数据线}}/**************************************从DS18B20读1字节数据**************************************/BYTEDS18B20_ReadByte(){BYTEi;BYTEdat=0;for(i=0;i8;i++)//8位计数器{dat=1;DQ=0;//开始时间片_nop_();//延时等待_nop_();DQ=1;//准备接收_nop_();//接收延时_nop_();if(DQ)dat|=0x80;//读取数据DelayX0us(6);//等待时间片结束}returndat;}/**************************************向DS18B20写1字节数据**************************************/voidDS18B20_WriteByte(BYTEdat){chari;for(i=0;i8;i++)//8位计数器{DQ=0;//开始时间片_nop_();//延时等待_nop_();dat=1;//送出数据DQ=CY;DelayX0us(6);//等待时间片结束DQ=1;//恢复数据线}}
本文标题:c51单片机DS18B20测试程序
链接地址:https://www.777doc.com/doc-4704475 .html