DS18B20单总线单点测试Word格式.docx
- 文档编号:15720028
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:13
- 大小:17.96KB
DS18B20单总线单点测试Word格式.docx
《DS18B20单总线单点测试Word格式.docx》由会员分享,可在线阅读,更多相关《DS18B20单总线单点测试Word格式.docx(13页珍藏版)》请在冰豆网上搜索。
//chars1[20];
//sprintf(s1,"
初始化,\r\n"
);
//UartSendString(s1);
BUS_Write_Bit(0);
time_us=0;
while(time_us<
95)//500us后总线拉高释放
BUS_Write_Bit
(1);
GPIODirModeSet(DS18B20_BUS_PORT,DS18B20_BUS_PIN,GPIO_DIR_MODE_IN);
//DS18B20总线管脚为输入模式
6)//延时38us等待DS18B20存在脉冲的发出
}
existence_Flag=GPIOPinRead(DS18B20_BUS_PORT,DS18B20_BUS_PIN);
//读DS18B20的脉冲
if(existence_Flag==0)//存在信号为低表示复位成功
{
Init_Flag=1;
else//存在信号为高表示复位失败
Init_Flag=0;
voidreset(void)//复位函数
while(release_Flag==0)//检测DS18B20存在后直到释放总线,不然3秒内一直复位等待检测
while(Init_Flag==0)
{
DS18B20_Init();
}
time_us=0;
while(time_us<
20)//延时100us等待DS18B20释放总线
}
release_Flag=GPIOPinRead(DS18B20_BUS_PORT,DS18B20_BUS_PIN);
voidWrite_data(unsignedchartemperature_alarm)//向DS18B20写一字节的值
unsignedchari;
//chars2[20];
//sprintf(s2,"
写操作,\r\n"
//UartSendString(s2);
write_data=temperature_alarm;
for(i=8;
i>
0;
i--)
BUS_Write_Bit(0);
//总线拉低
2)//延时15us
}
if((write_data&
0x01))
{//取最低位值进行判断,为1时对总线写1
BUS_Write_Bit
(1);
else//否则写0
BUS_Write_Bit(0);
while(time_us<
7)//延时45us
}
write_data=write_data>
>
1;
//右移一位继续判断
BUS_Write_Bit
(1);
//总线拉高释放ius
longread_data(void)//读函数
longtemp=0,temp1;
//chars3[20];
//sprintf(s3,"
读操作,\r\n"
//UartSendString(s3);
temp=temp>
//右移一位
//总线拉低
//释放总线
GPIODirModeSet(DS18B20_BUS_PORT,DS18B20_BUS_PIN,GPIO_DIR_MODE_IN);
1)//延时8us
}
temp1=GPIOPinRead(DS18B20_BUS_PORT,DS18B20_BUS_PIN);
//读DS18B20的数据
if(temp1!
=0)//读数为1高位置一
temp=temp|0x80;
else//读数为0高位置零
temp=temp|0x00;
10)//延时60us
returntemp;
//返回读数值
intRead_Temperature(void)
intTemperature,Temph,Templ;
unsignedcharMFlag;
reset();
//复位
existence_Flag=1;
release_Flag=0;
Init_Flag=0;
Write_data(0xCC);
//跳过ROM
Write_data(0x44);
//温度转换
150)//延时750us,等待DS18B20温度转换结束
;
}
//跳过ROM
Write_data(0xBE);
//读取RAM
Templ=read_data();
//读取低八位,LSByte,ROM0
Temph=read_data();
//读取高八位,MSByte,ROM1
//复位表示温度读取结束
if(Temph&
0xFC)
{//符号位为高则为负数
Temperature=((Temph<
<
8)|Templ);
//高地位整合
Temperature=((~Temperature)+1);
//负数取反加一
Temperature*=0.0625;
MFlag=1;
MFlag=0;
8)|Templ)*0.0625;
returnTemperature;
//MAIN.c
#defineDS18B20_BUSSYSCTL_PERIPH_GPIOB
//定义DS18B20总线管脚
#defineDS18B20_BUS_PORTGPIO_PORTB_BASE
#defineDS18B20_BUS_PINGPIO_PIN_6
#defineBUS_0GPIOPinWrite(DS18B20_BUS_PORT,DS18B20_BUS_PIN,0);
//总线拉低
#defineBUS_1GPIOPinWrite(DS18B20_BUS_PORT,DS18B20_BUS_PIN,~0);
//总线拉高
/***************************pwm*******************************************************/
#definePH0_PWM2GPIO_PIN_0
#definePH1_PWM3GPIO_PIN_1
/**************************************************************************************/
unsignedlongtime_us=0;
//将us级计数值标志位
unsignedlongrest_time;
//将复位时间定义为全局变量
longexistence_Flag=1;
//将存在标志位定义为全局变量
longrelease_Flag=0;
//将DS18B20释放总线标志位定义为全局变量
unsignedlongInit_Flag=0;
//将初始化成功标志位定义为全局变量
unsignedcharwrite_data;
//将写入值定义为全局变量
unsignedintx=500,y=1000;
//PWM1,PWM2
voidkey()
{
if(!
GPIOPinRead(GPIO_PORTB_BASE,GPIO_PIN_4))//PWM1
SysCtlDelay(4000);
if(!
GPIOPinRead(GPIO_PORTB_BASE,GPIO_PIN_4))
x=x+25;
SysCtlDelay(4000);
while(!
GPIOPinRead(GPIO_PORTB_BASE,GPIO_PIN_4));
}
GPIOPinRead(GPIO_PORTB_BASE,GPIO_PIN_5))
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DS18B20 总线 单点 测试
![提示](https://static.bdocx.com/images/bang_tan.gif)