多个ds18b20c程序Word格式.docx
- 文档编号:17873499
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:10
- 大小:18.24KB
多个ds18b20c程序Word格式.docx
《多个ds18b20c程序Word格式.docx》由会员分享,可在线阅读,更多相关《多个ds18b20c程序Word格式.docx(10页珍藏版)》请在冰豆网上搜索。
uchark;
k=2;
while(k)k--;
j=DQ;
k=25;
while(k)k--;
returnj;
uchards_readbyte()//先读的为最低位
uchari,j,b;
b=0;
j=ds_readbit();
b=(j<
<
i)|b;
returnb;
ucharcrctest(uchar*p)
ucharcrc,i,n,cbit,bit0,byte,r;
crc=0;
9;
byte=*p;
for(n=0;
n<
n++)
cbit=crc&
bit0=byte&
crc=crc>
r=cbit^bit0;
if(r==1)crc=crc^0x8c;
byte=byte>
p++;
}//crc==0校正正确
returncrc;
voidGet_wendu()//得到float型全局量wendu[number_18B20]
ucharcodeserial_number[4][8]={0x28,0x2e,0xe0,0xce,0x01,0x00,0x00,0xe6,//一号18b20ROM号
0x28,0x13,0x2d,0x6c,0x01,0x00,0x00,0x21,//二号
0x28,0xea,0x07,0x6c,0x01,0x00,0x00,0x80,//三号
0x28,0x2a,0x0e,0x6c,0x01,0x00,0x00,0xec};
//四号
//四个18b20的八字节序列号数据
ucharscratch[9];
//TL,TH,ThR,TlR,Con,Res,Res,Res,CRC;
//温度高低字节,结构寄存器和卷积码字节
uintT_18B20;
//整型,合并存储温度数据
uchari,j,crc;
charfuhao;
//表示正负温度+1,-1;
while(ds_init());
//返回1则继续复位,直到检测到低电平的应答脉冲则向下执行
ds_writebyte(0xcc);
//SKIPROM,不发送ROM命令则要发送跳过ROM命令(0xcc)
ds_writebyte(0x44);
//命令单总线上的所有器件开始转换
delayms(10);
//一般转换要750us,这里等待3ms足够
for(j=0;
j<
number_18B20;
j++)//读取转换后的四个温度
while(ds_init());
//返回1则继续复位,直到检测到低电平的应答脉冲则向下执行
ds_writebyte(0x55);
//ROM匹配
for(i=0;
i++)
ds_writebyte(serial_number[j][i]);
//ROM匹配注意:
发送序列号后,只有匹配的18B20才会对接下来的命令响应
ds_writebyte(0xbe);
//readscratchpad命令
scratch[i]=ds_readbyte();
crc=crctest(scratch);
//crc==0校正正确
////////////////////////
T_18B20=0;
T_18B20=scratch[1];
T_18B20=(T_18B20<
8)+scratch[0];
fuhao=1;
if(T_18B20>
0xf000)
//为负温度
T_18B20=~T_18B20+1;
fuhao=-1;
wendu[j]=fuhao*T_18B20/16.0+T_18B20%16/16.0;
//将温度高低字节变成float
if(crc!
=0)wendu[j]=85.5;
发表于2008/4/1620:
59:
28
标签:
无标签
DS18B20温度采集通过串口送入电脑
程序肯定还是把其它的驱动组合,呵呵,EDN51验证。
显示4位温度。
串口助手设置12008N1哦
给点支持吧
#include<
AT89x52.h>
#include<
intrins.h>
//*****************************************
sbit
DS18b20_DQ=P1^6;
bit
flag;
unsignedchar*p;
chara[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0x86,0x8e,0x82};
charb[16]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,
0x00,0x19,0x08,0x03,0x46,0x06,0x0e,0x02};
charone,two,three,four;
unsignedchar
codeCrcTable[256]={
0,
94,188,
226,
97,
63,
221,
131,
194,
156,
126,
32,
163,
253,
31,
65,
157,
195,
33,
127,
252,
162,
64,
30,
95,
1,
227,
189,
62,
96,
130,
220,
35,
125,
159,
193,
66,
28,
254,
160,
225,
191,
93,
3,
128,
222,
60,
98,
190,
224,
2,
92,
223,
129,
99,
61,
124,
34,
192,
158,
29,
67,
161,
255,
70,
24,
250,
164,
39,
121,
155,
197,
132,
218,
56,
102,
229,
187,
89,
7,
219,
133,103,
57,
186,
228,
6,
88,
25,
71,
165,
251,
120,
38,
196,
154,
101,
59,217,
135,
4,
90,
184,
230,
167,
249,
27,
69,
198,
152,
122,
36,
248,
166,68,
26,
153,
199,
37,
123,
58,
100,
134,
216,
91,
5,
231,
185,
140,
210,48,
110,
237,
179,
81,
15,
78,
16,
242,
172,
47,
113,
147,
205,
17,
79,
173,
243,
112,
46,
204,
146,
211,
141,
111,
49,
178,
236,
14,
80,
175,
241,19,
77,
206,
144,
114,
44,
109,
51,
209,
143,
12,
82,
176,
238,
50,
108,
142,
208,
83,
13,
239,
177,
240,
174,
76,
18,
145,
207,
45,
115,
202,
148,118,
40,
171,
245,
23,
73,
8,
86,
180,
234,
105,
55,
213,139,
87,
9,
235,
181,
54,
104,
138,
212,
149,
203,
41,
119,
244,
170,
72,
22,
233,
183,
85,
11,
136,
214,
52,
106,
43,
117,
151,
201,
74,
20,
246,
168,
116,
42,
200,
150,
21,
75,
169,
247,
182,
232,
10,
84,
215,
137,
107,
53};
unsignedchartemp_buff[9];
//存储读取的字节,readscratchpad为9字节,readromID为8字节
unsignedcharcrc_data;
floatTemperature;
unsignedcharid_buff[8];
/******定义函数****************/
#defineucharunsignedchar
#defineuintunsignedint
voidLCD_init(void);
//初始化函数
voidLCD_write_command(ucharcommand);
//写指令函数
voidLCD_write_data(uchardat);
//写数据函数
voidLCD_disp_char(ucharx,uchary,uchardat);
//在某个屏幕位置上显示一个字符,X(0-16),y(1-2)
voiddelay_n40us(uintn);
//延时函数
//****************************************************/
voidTempDelay(uintus)
while(us--);
//******************************************************/
voidInit18b20(void)
DS18b20_DQ=1;
_nop_();
DS18b20_DQ=0;
TempDelay(86);
//delay530uS//80
_nop_();
TempDelay(14);
//delay100uS//14
if(DS18b20_DQ==0)
flag=1;
//detect1820success!
flag=0;
//detect1820fail!
TempDelay(20);
//20
DS18b20_DQ
=1;
/*****************************
*Function:
向18B20写入一个字节*/
voidWriteByte(ucharwr)
//单字节写入
uchari;
for(i=0;
=
0;
DS18b20_DQ=wr&
0x01;
TempDelay(5);
//delay45uS//5
wr>
=1;
/************************************************************
读18B20的一个字节
*************************************************************/
ucharReadByte(void)
//读取单字节
uchari,u=0;
DS18b20_DQ=0;
u>
if(DS18b20_DQ==1)
u|=0x80;
TempDelay(4);
return(u);
读18B20
voidread_bytes(ucharj)
j;
*p=ReadByte();
/*Function:
CRC校验********************************/
ucharCRC(ucharj)
uchari,crc_data=0;
i++)
//查表校验
crc_data=CrcTable[crc_data^temp_buff[i]];
return(crc_data);
读取温度
voidGemTemp(void)
read_bytes(9);
if(CRC(9)==0)//校验正确
Temperature=temp_buff[1]*0x100+temp_buff[0];
Temperature*=0.625;
Temperature/=16;
TempDelay
(1);
内部配置
voidConfig18b20(void)
//重新配置报警限定值和分辨率
Init18b20();
WriteByte(0xcc);
//skiprom
WriteByte(0x4e);
//writescratchpad
WriteByte(0x19);
//上限
WriteByte(0x1a);
//下限
WriteByte(0x7f);
//set11bit(0.125)
WriteByte(0x48);
//保存设定值
WriteByte(0xb8);
//回调设定值
读18B20ID
*parameter:
*Return:
*Modify:
voidReadID(void)//读取器件id
Init18b20();
WriteByte(0x33);
//readrom
read_bytes(8);
18B20ID全处理*/
voidTemperatuerResult(void)
p=id_buff;
ReadID();
Config18b20();
Init18b20();
WriteByte(0x44);
//Temperatureconvert
WriteByte(0xbe);
voidGet_Temperature()
p
=temp_buff;
GemTemp();
/*voiddelay_n40us(uintn)
{
uinti;
ucharj;
for(i=n;
i>
0;
i--)
for(j=0;
15;
j++)
;
//
}*/
//初始化232
voidInit_RSC232()
//波特率:
1200bit/s,1位起始位,1位停止位,8位数据位
TMOD=0x20;
TL1
=0xE8;
TH1
TR1
PCON=0x00;
SCON=0x50;
voidprintc(unsignedcharc)
TI
SBUF=
c;
while(TI==0)
TI
=0
voidprints(unsignedcharc[])
unsignedcharindex=0;
while(c[index]!
='
\0'
)
printc(c[index]);
index++;
voidprinthex(unsignedchari)
unsignedcharj;
j=i+0x30;
printc(j);
voiddelay_n40us(uintn)
}
//*******************************
//*********主函数*****************
voidmain(void)
intTemper;
Init_RSC232();
while
(1)
TemperatuerResult();
Get_Temperature();
//prints("
Welcometojizzll'
sblog!
\n\r"
);
Temper=(int)Temperature;
one="
Temper/10"
;
two="
Temper"
%10;
three=(Temperature-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ds18b20c 程序