18b20复位函数:
bit ds18b20_reset(void)
{
bit bitbuf;
ds18b20=1;
//10us
TH0=0xff;
TL0=0xf6;
TF0=0;
while(!TF0);
ds18b20=0;
//设置1-wire总线为低电平(占领总线)
//延迟480us-960us,尽可能选小值(480us)
//这里我们选490us
TH0=0xfe;
TL0=0x3c;
TF0=0;
while(!TF0);
ds18b20=1;
//设置1-wire总线为高电平(释放总线)
//最佳时间: 60us+7.5us
//这里我们选68us
TH0=0xff;
TL0=0xc1;
TF0=0;
while(!TF0);
ds18b20=1;
// 探测总线上是否有器件
if(ds18b20==1) bitbuf=1; //没有器件在线
else bitbuf=0; //有器件在线
//保证DS18B20释放总线的时间
//490-68=422us
TH0=0xfe;
TL0=0x7b;
TF0=0;
while(!TF0);
return(bitbuf);
}
18b20写字节函数:
void ds18b20_write(unsigned char val)
{
unsigned char i;
for (i=0;i<8;i++) //
{
ds18b20=0; // 设置1-wire总线为低电平
//2us
TH0=0xff;
TL0=0xfe;
TF0=0;
while(!TF0);
ds18b20=val&0x01; //最低位移出
val=val>>1; //右移一位
//60us~120us(实际不能到120us, 因为其它语句也用时间了!)
//这里我们选62us
TH0=0xff;
TL0=0xc6;
TF0=0;
while(!TF0);
ds18b20=1;
}
}
18b20读字节函数:
unsigned char ds18b20_read(void)
{
unsigned char i;
unsigned char value = 0;
for (i=0;i<8;i++)
{
//从总线拉低到读总线状态,不能大于15us!
ds18b20=0;
//2us
TH0=0xff;
TL0=0xfe;
TF0=0;
while(!TF0);
ds18b20=1;
//4us
TH0=0xff;
TL0=0xfc;
TF0=0;
while(!TF0);
value>>=1;
if(ds18b20) value|=0x80;
//62us,必须大于60us
TH0=0xff;
TL0=0xc6;
TF0=0;
while(!TF0);
}
ds18b20=1;
return(value);
}
启动18b20温度转换:
void convert_T(void)
{
if(ds18b20_reset()==0) // 如果复位成功
{
ds18b20_write(0xcc); // 跳过多器件识别
ds18b20_write(0x44); // 启动温度转换
}
}
读18b20温度函数:
void read_T(void)
{
unsigned char Lsb,Msb;
if(ds18b20_reset()==0) // 如果复位成功
{
ds18b20_write(0xcc); // 跳过多器件识别
ds18b20_write(0xbe); // 读暂存器
Lsb=ds18b20_read(); // 低字节
Msb=ds18b20_read(); // 高字节
temp2=Lsb&0x0f;
temp1=(Lsb>>4)|(Msb<<4);
}
}
关键字:51单片机 18B20程序
引用地址:
51单片机18B20程序
推荐阅读最新更新时间:2024-03-16 15:24
8051单片机教程第五课:延时程序分析
上一次课中,我们已经知道,程序中的符号R7、R6是代表了一个个的RAM单元,是用来放一些数据的,下面我们再来看一下其它符号的含义。 DELAY:MOVR7,#250;(6) D1:MOVR6,#250;(7) D2:DJNZR6,D2;(8) DJNZR7,D1;(9) RET;(10) MOV:这是一条指令,意思是传递数据。说到传递,我们都很清楚,传东西要从一个人的手上传到另一个人的手上,也就是说要有一个接受者,一个传递者和一样东西。从指令MOVR7,#250中来分析,R7是一个接受者,250是被传递的数,传递者在这条指令中被省略了(注意:并不是每一条传递指令都会省的,事实上大部份数据传递指令都会有传递者
[单片机]
学51单片机-UART口发送一个字符
UART口,又叫做通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),是单片机常用功能的一部分,也是早期台式电脑必备的一个硬件接口。 当年我调试UART口的时候,用的还是超级终端,现在都用串口助手了,比我们当时方便多了。 UART口按位发送和接收字节,虽然相比于并口,慢了很多,但是在有限的IO资源面前,这种方式是非常可取的。 UART口主要用于ASCII码的传输,传输过程遵循ANSI/EIA-232标准。ASCII码是啥?看下表: 就是说,当我想发送字符“A”的时候,我要向串口发送十进制数65,或者十六进制数41。 驱动电
[单片机]
通过51单片机实现直流电机调速
一、项目背景及目的 随着各种工业生产设备和机械设备的广泛使用,直流电机调速技术的研究和应用越来越受到人们的重视,具有广泛的应用前景。本项目通过51单片机实现直流电机调速功能,为实际工程应用提供一个可靠和有效的调速方案。 二、设计思路 (1)系统原理 本系统采用PWM(脉冲宽度调制)技术对直流电机进行调速控制。通过改变输出信号的占空比,实现对直流电机的转速控制。系统中包括51单片机、直流电机、电路板以及控制程序。 (2)硬件设计 电机:使用24V直流电机实现实际转速控制。 驱动电路:使用四个寄生二极管三相全桥驱动电路控制电机,使电机可以正反转,并控制电机的速度。 51单片机:使用STC89C52单片机,作为控制核心。单片机
[单片机]
51单片机外围模块——DS18B20温度传感器
一. DS18B20简介 DS18B20数字温度传感器接线方便,封装后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式。主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。 二. DS18B20的特点 适应电压范围更宽,电压范围:3.0~5.5V,在寄生电源方式下可由数据线供电 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。 DS18B20支持多点组
[单片机]
51单片机一个输出口显示多位输出
电路图 #include reg51.h sbit LE0=P3^0; sbit LE1=P3^1; sbit LE2=P3^2; sbit LE3=P3^3; int i,j,k; int xx ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void yanchi(int ms) { while(ms--) { for(i=0;i 100;i++); } } void main() { while(1) { for(j=0;j 10000;j++) { P2=xx ;//千 LE
[单片机]
c51中断优先级c语言,51单片机的中断优先级及中断嵌套
说最基本的,老的51单片机(80C51系列)有5个中断源,2个优先级,可以实现二级中断服务嵌套。现在很多扩展的51单片机已经有4个优先级(或更多)和更多的中断源了。 在说到中断之前,我先来定义一下优先级,明白了什么是优先级,后面的阐述就容易明白了。实际上很多人都是混淆了优先级的含义,所以才觉得糊里糊涂。 中断的优先级有两个:查询优先级和执行优先级。 什么是查询优级呢?我们从datasheet或书上看到的默认(IP寄存器不做设置,上电复位后为00H)的优先级: 外部中断0 定时/计数器0 外部中断1 定时/计数器1 串行中断 或 int0,timer0,int1,timer1,serial port 或 INT0、T
[单片机]
51单片机中的一些关键字(不断更新中)
extern变量:作用域从申明到整个程序的结束 sbit使用:sbit P1_1=P1^1 或者sbit P1_1=0X91 sizeof使用:sizeof(变量),返回变量占内存大小 sizeof(数组),返回数组大小,不是元素多少 typedef作用是给XXX取别名,例如:typedef unsigned char uchar
[单片机]
AT89C51单片机在LED显示屏控制电路设计中的应用
LED显示屏又叫电子显示屏,是由LED点阵组成,通过红色或绿色灯珠的亮灭来显示文字、图片、动画、视频,内容可以随时更换,通常由显示模块、控制系统及电源系统组成。显示模块由LED灯组成的点阵构成,负责发光显示;控制系统通过控制相应区域的亮灭,可以让屏幕显示文字、图片、视频等内容,恒舞动卡主要是播放动画的;电源系统负责将输入电压电流转为显示屏需要的电压电流。 LED显示屏广泛应用于信息指示灯,大屏幕显示,液晶显示的背光灯,固体照明等。本文设计一种由4个16×16点阵LED模块组成的显示屏,由单片机作控制器,平滑移动显示任意多个文字或图形符号,本电路可级联扩展实现由任意多个16×16点阵LED模块组成的显示屏。 一、控制
[单片机]