標(biāo)題:
51單片機(jī)串口讀取DS18B20序列號(hào)的程序 顯示出來的只有******,求指導(dǎo)!
[打印本頁]
作者:
jing105768
時(shí)間:
2016-1-26 21:17
標(biāo)題:
51單片機(jī)串口讀取DS18B20序列號(hào)的程序 顯示出來的只有******,求指導(dǎo)!
剛寫了一個(gè)串口讀取DS18B20序列號(hào)的程序,顯示出來的只有******,求指導(dǎo)!謝謝了#include<reg52.h>
#include<intrins.h> //nop函數(shù)
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P3^7;
uchar Rom_18B20[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
void delay(uint z); //延時(shí)函數(shù)
bit DS18B20_Readbit(void); //讀1位數(shù)據(jù)函數(shù)
uchar DS18B20_ReadByte(void); //讀1個(gè)字節(jié)數(shù)據(jù)函數(shù)
void DS18B20_WriteByte(uchar dat); //向DS18B20寫一個(gè)字節(jié)數(shù)據(jù)函數(shù)
void get_ser(void);//讀取序列號(hào)
/***************************************************/
/* 延時(shí)函數(shù):void delay() */
/* 功能:延時(shí)函數(shù) */
/***************************************************/
void delay(uint z)//延時(shí)函數(shù)
{
uint x,y;
for( x = z; x > 0; x-- )
for(y = 110;y>0;y--);
}
uchar DS18B20_Reset()
{
uchar i;
DQ = 0; //將總線拉低480us~960us
i = 70;
while(i--); //延時(shí)642us
DQ= 1; //然后拉高總線,如果DS18B20做出反應(yīng)會(huì)將在15us~60us后總線拉低
i = 0;
while(DQ) //等待DS18B20拉低總線
{
i++;
if(i>5)//等待>5MS
{
return 0;//初始化失敗
}
delay(1);
}
return 1;//初始化成功
}
/***************************************************/
/* DS18B20函數(shù):void DS18B20_Readbit() */
/* 功能:讀1個(gè)字節(jié)數(shù)據(jù)函數(shù) */
/***************************************************/
bit DS18B20_Readbit(void) //讀1位數(shù)據(jù)函數(shù)
{
uint i;
bit dat;
DQ = 0;
i++; //i++起延時(shí)作用
DQ = 1;
i++;
i++;
dat = DQ;
i = 8;
while( i > 0 )i--;
return(dat);
}
/***************************************************/
/* DS18B20函數(shù):void DS18B20_ReadByte() */
/* 功能:讀1個(gè)字節(jié)數(shù)據(jù)函數(shù) */
/***************************************************/
uchar DS18B20_ReadByte(void) //讀1個(gè)字節(jié)數(shù)據(jù)函數(shù)
{
uchar i,j,dat;
dat = 0;
for( i = 1; i <= 8; i++ )
{
j = DS18B20_Readbit();
dat = ( j << 7 ) | ( dat >> 1 );
}
return(dat);
}
/***************************************************/
/* DS18B20函數(shù):void DS18B20_WriteByte() */
/* 功能:向DQ18B20寫一個(gè)字節(jié)數(shù)據(jù)函數(shù) */
/***************************************************/
void DS18B20_WriteByte(uchar dat) //向DQ18B20寫一個(gè)字節(jié)數(shù)據(jù)函數(shù)
{
uint i;
uchar j;
bit testb;
for( j=1; j<=8; j++)
{
testb = dat&0x01;
dat= dat>>1;
if(testb) //寫1
{
DQ = 0;
i++;i++;
DQ = 1;
i = 8;while(i>0)i--;
}
else
{
DQ = 0; //寫0
i = 8;while(i>0)i--;
DQ = 1;
i++;i++;
}
}
}
/*****************************************************
函數(shù):void get_ser(void)
功能:顯示DS18B20的序列號(hào)
*******************************************************/
/*void get_ser(void)//讀取溫度
{
uchar i,temp;
while(DS18B20_Reset());
DS18B20_WriteByte(0x33);//讀取光刻ROM中編碼命令
delay(1);
for(i=0;i<8;i++)
{
Rom_18B20
=DS18B20_ReadByte();
}
} */
//串口初始化函數(shù) //
//9600,N,8,1 //
//T1做波特率發(fā)生器//
void InitUart(void)
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
SCON=0x50;
PCON=0;
EA=1;
ES=1;
TR1 = 1;
}
void main()
{
uchar i;
InitUart();
while(1)
{
ES=0;
for(i=0;i<8;i++)
{
SBUF=Rom_18B20
;
while(!TI);
TI=0;
}
}
}
作者:
雪玉寐影
時(shí)間:
2016-1-29 06:09
沒看到有讀取序列號(hào)的命令
作者:
wandeng123
時(shí)間:
2016-2-2 23:04
樓主的的溫度測試成功了嗎?我現(xiàn)在急需一個(gè)可以用的程序,謝謝
作者:
archer1971
時(shí)間:
2016-2-3 14:22
你的main里并沒有運(yùn)行g(shù)et_ser(void)
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1