标题:
获取DS18B20序列号的单片机源代码
[打印本页]
作者:
feiyang888
时间:
2017-10-7 18:11
标题:
获取DS18B20序列号的单片机源代码
1、获取DS18B20序列号,接多个DS18B20必用。
2、获取后,通过串口发送给串口助手。
3、接线图见附件。
DS18B20序列号.jpg
(20 KB, 下载次数: 55)
下载附件
接线图
2017-10-7 18:10 上传
单片机源程序如下:
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DS=P3^7; //定义DS18B20接口
uchar SN[8]; //获取8组序列号,每组为2位16进制数
void delay();//延时子函数,5个空指令
void tmpwritebyte(uchar dat);
uchar tmpread(void);
bit tmpreadbit(void);
void dsreset(void);
void delayb(uint count);
void readrom();
void main() //主函数
{
uchar i;
TMOD=0x20;
TH1=0xE8;
TL1=0xE8; //1200波特
PCON=0x00;
SCON=0x50; //串口的工作方式,设置为方式1
TR1=1;
EA=1;
ES=1; //打开串口中断
readrom();
for(i=0;i<8;i++) //向PC发送得到的8组序列号,PC可采用串口软件接受
{
SBUF=SN[i];
while(!TI){}
TI=0;
}
while(1){}
}
void delay(void) //空5个指令
{
_nop_();_nop_();_nop_();_nop_();_nop_();
}
void delayb(uint count) //delay
{
uint i;
while(count)
{
i=200;
while(i>0)
i--;
count--;
}
}
void dsreset(void) //DS18B20初始化
{
uint i;
DS=0;
i=103;
while(i>0)i--;
DS=1;
i=4;
while(i>0)i--;
}
bit tmpreadbit(void) // 读一位
{
uint i;
bit dat;
DS=0;i++; //小延时一下
DS=1;i++;i++;
dat=DS;
i=8;while(i>0)i--;
return (dat);
}
uchar tmpread(void) //读一个字节
{
uchar i,j,dat;
dat=0;
for(i=1;i<=8;i++)
{
j=tmpreadbit();
dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好//一个字节在DAT里
}
return(dat); //将一个字节数据返回
}
void tmpwritebyte(uchar dat)
{ //写一个字节到DS18B20里
uint i;
uchar j;
bit testb;
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if(testb) // 写1部分
{
DS=0;
i++;i++;
DS=1;
i=8;while(i>0)i--;
}
else
{
DS=0; //写0部分
i=8;while(i>0)i--;
DS=1;
i++;i++;
}
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
DS18B20_SN.rar
(20.65 KB, 下载次数: 58)
2017-10-7 18:11 上传
点击文件名下载附件
代码
下载积分: 黑币 -5
作者:
风光好
时间:
2020-5-11 16:23
楼主我测验这个程序为什么不行呢,请教一下
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1