网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
06月21日漏签0天
51单片机吧 关注:74,388贴子:303,646
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 5回复贴,共1页
<<返回51单片机吧
>0< 加载中...

求助 ds18b20 搞了一天了 没出来

  • 只看楼主
  • 收藏

  • 回复
  • 訫侑所属丶ni
  • 童生
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
//#include"C8051f020.h"
#include "intrins.h"
sbit DQ=P2^1;
int t;
unsigned int num;
unsigned char dat; //读写数据变量
unsigned char a=0;
unsigned char b=0;
float tep=0; //读一个温度时的温度转换中间间
//unsigned char data tempbuf[4]=0;//温度字型显示中间变量
/******************************************************
函数名称:delay(uint num)
返回值:无
参数:uint num
延时数据值
作用:延时
*******************************************************/
void delay512us (void)///512us
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=2;b>0;b--)
for(a=250;a>0;a--);
}
void delay60us (void) //70us
{
unsigned char a,b;
for(b=1;b>0;b--)
for(a=60;a>0;a--);
}
/*void delay66us (void)
{
unsigned char a,b;
for(b=1;b>0;b--)
for(a=55;a>0;a--);
}*/
void delay10us (void) // 11.5us
{
unsigned char a,b;
for(b=2;b>0;b--)
for(a=1;a>0;a--);
}
void delay25us (void)
{
unsigned char a,b;
for(b=1;b>0;b--)
for(a=20;a>0;a--);
}
void delay (unsigned x)
{
for (;x>0;x--);
_nop_();
}
/******************************************************
函数名称:void Init_DS18B20(void)
返回值:无
参数:无
作用:初始化18B20
*******************************************************/
char Init_DS18B20(void)
{
char presence=1;
while(presence)
{
while(presence)
{
DQ=1;_nop_();_nop_();//从高拉倒低
DQ=0;
delay512(); //550 us
DQ=1;
delay60(); //66 us
presence=DQ; //presence=0 复位成功,继续下一步
}
delay512(); //延时500 us
presence=~DQ;
}
DQ=1;
return presence; //拉高电平
}
/******************************************************
函数名称:uchar ReadOneChar(void)
返回值:uchar dat
参数: 无
作用:读取1820一个字节
*******************************************************/
unsigned char ReadOneChar(void)
{
unsigned char i;
unsigned char value=0;
for(i=8;i>0;i--)
{
DQ=1;nop();
value>>=1;
DQ=0;nop(); nop(); //4 us
DQ=1;nop(); nop(); //4 us
if(DQ)value|=0x80;
delay60(); //66 us
}
DQ=1;
return(value);
}
/******************************************************
函数名称:void WriteOneChar(uchar dat)
返回值:无
参数: uchar dat
作用:向1820写一个字节
*******************************************************/
/////****写DS18B20***/
//写0 60us读完,写1 30us 内读完
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for(i=0;i<8;i++)
{
DQ=1;
nop();
DQ=0;
nop();
nop();
DQ=dat&0x01;//写所给数据最低位
delay60us();
DQ=1;//给脉冲
dat>>=1;
}
nop();
}
/******************************************************
函数名称:int ReadOneTemperature(void)
返回值:int t
参数: 无
作用:读温度值
*******************************************************/
int ReadOneTemperature(void)
////////***读取温度值***********/
//// 每次读写均要先复位
{
Init_DS18B20();
delay60us () ;
delay60us () ;
delay60us () ;
WriteOneChar(0xcc);//发跳过ROM命令
WriteOneChar(0x44);//发读开始转换命令
Init_DS18B20();
delay60us () ;
delay60us () ;
delay60us () ;
WriteOneChar(0xcc);//发跳过ROM命令
WriteOneChar(0xbe);//读寄存器,共九字节,前两字节为转换值
a=ReadOneChar(); //a存低字节
b=ReadOneChar(); //b存高字节
t=b;
t<<=8;//高字节转换为10进制
t=t|a;
//tep=t*0.0625;//转换精度为0.0625/LSB
//t=tep*10+0.5;//保留1位小数并四舍五入****后面除10还原正确温度值)
return(t);
}
/******************************************************
函数名称:uint Temperaturepro(void)
返回值:void
参数: void
作用:温度处理
*******************************************************/
/*void Temperaturepro(void)
{
int temp;
temp=ReadOneTemperature();
tempbuf[3]=temp/1000;//百位
tempbuf[2]=temp/100%10;//十位
tempbuf[1]=temp%100/10; //个位
tempbuf[0]=temp%10; //小数
} */ 这个是.h文件


  • 訫侑所属丶ni
  • 童生
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include "C8051F020.h"
#include "ds18b20.h"
sbit LED2=P3^6; // LED1 ='0' means ON
sbit LED3=P3^7;
unsigned int i; // Software timer
unsigned char serial_busy=0;
bit key2_down_flag=0;
bit key3_down_flag=0;
void delay111(int i)
{
while(--i);
}
main(void)
{int temp=0,tflag=0;
unsigned char tempbuff[4]=0;
WDTCN = 0xde; // Disable watchdog timer
WDTCN = 0xad;
P3MDOUT = 0xC0;//配置P3.6,P3.7为推挽输出方式
XBR2 = 0x40; // Enable crossbar and enable
// weak pull-ups
//OSCICN |= 0x03; // Configure internal oscillator for
// its maximum frequency (24.5 Mhz)
//OSCICN |= 0x80; // Enable the missing clock detector
/*使用外部22.1184M晶振*/
OSCXCN = 0x67; // Enable external crystal osc.
for (i=0; i < 256; i++); // Wait at least 1ms
while (!(OSCXCN & 0x80)); // Wait for crystal osc to settle
OSCICN |= 0x08; // Select external clock source
OSCICN &= ~0x04; // Disable the internal osc.
/*引脚配置*/
XBR0 = 0x04; // Enable UART0
XBR2 = 0x40; // Enable crossbar and weak pull-up
P0MDOUT |= 0x01; // Set TX pin to push-pull
/*初始化定时器1*/
TMOD|=0x20;//定时器1工作在8位自动重装方式
TH1=250;//采用默认的22.1184/12时钟,根据公式计算当波特率为9600时,TH1=250;
TL1=0;
TR1=1;
//ET1=1;//开启定时器1中断允许
/*初始化串口*/
SCON0 = 0x50; //8位的UART工作方式,接收允许
TI0 = 1; // Indicate TX0 ready
ES0=1;//打开串口中断
EA=1;//允许所有中断
while (1)
{ //temp=ReadOneTemperature();
delay111(3000);
temp=0x0099 ;
if(temp<0x0fff)
{
tflag=0;
}
else
{temp=~temp+1;
tflag=1;
}
temp=temp*(0.625);//温度值扩大10倍,精确到1位小数
tempbuff[0]=temp/1000+0x30;//百位数
tempbuff[1]=temp%1000/100+0x30;//十位数
tempbuff[2]=temp%100/10+0x30;//个位数
tempbuff[3]=temp%10+0x30;//小数位
/*if(tflag=1)
{
while(serial_busy);
SBUF0=45;
serial_busy=1;
} */
while(serial_busy);
SBUF0=tempbuff[0];
serial_busy=1;
while(serial_busy);
SBUF0=tempbuff[1];
serial_busy=1;
while(serial_busy);
SBUF0=tempbuff[2];
serial_busy=1;
key2_down_flag=1;
LED2=~LED2; // Turn on LED
while(serial_busy);
SBUF0='.';
serial_busy=1;
while(serial_busy);
SBUF0=tempbuff[3];
serial_busy=1;
while(serial_busy);
SBUF0='\n';
serial_busy=1;
while(serial_busy);
SBUF0='\n';
serial_busy=1;
LED3=~LED3;
// Turn on LED
delay111(3000);
delay111(3000);
delay111(3000);
delay111(3000);delay111(3000);
delay111(3000);
delay111(3000);
delay111(3000);
} // end of while(1)
}
void uart0(void) interrupt 4
{
if(TI0)
{
TI0=0;
serial_busy=0;
}
else
RI0=0;
}
主程序 串口部分没问题 晶振22.1184 c8051f020 keilv4


2026-06-21 10:34:36
广告
不感兴趣
开通SVIP免广告
  • 訫侑所属丶ni
  • 童生
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
绝对不是伸手党 .h文件里的延时512用软件测得 60得大约75us 10是11.5us 是不是主函数初始化的时钟选择问题 传感器新的 两个都试过 接线没问题.


  • 贴吧用户_756PSy3350
  • 探花
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
今天我也花了半天时间


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 5回复贴,共1页
<<返回51单片机吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示