STM8 DS18B20温度传感器子程序

来自丢石头百科
Admin讨论 | 贡献2021年6月18日 (五) 18:01的版本 (文本替换 - 替换“http://{{”为“https://{{”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
<tbody></tbody>
软件设计

/********************************************************************* 微 雪 电 子 WaveShare <a class="Blue_2_12px_" href="https://wiki.diustou.com/" style="color: rgb(7, 66, 184);">http://www.waveShare.net   目 的: 建立DS18B20操作库 目标系统: 基于STM8单片机  应用软件: Cosmic CxSTM8  说 明: 若用于商业用途,请保留此段文字或注明代码来源 深 圳 市 微 雪 电 子 有 限 公 司 保 留 所 有 的 版 权 

                                                                                                                                          • /
                                                                                                                                            void _delay_us(u8 us)
                                                                                                                                            {
                                                                                                                                            	while(--us);
                                                                                                                                            }
                                                                                                                                            
                                                                                                                                            //-----复位-----
                                                                                                                                            void resetOnewire(void) 
                                                                                                                                            {
                                                                                                                                            	OUT_DQ();
                                                                                                                                            	CLR_DQ();
                                                                                                                                            	_delay_us(750);
                                                                                                                                            	SET_DQ();
                                                                                                                                            	_delay_us(100);
                                                                                                                                            	IN_DQ(); 
                                                                                                                                            	//while(GET_DQ());
                                                                                                                                            	while(!(GET_DQ()));
                                                                                                                                            	SET_DQ();
                                                                                                                                            }
                                                                                                                                            
                                                                                                                                            //-----读数据-----
                                                                                                                                            u8 rOnewire(void)
                                                                                                                                            {
                                                                                                                                            	u8 data=0,i=0;
                                                                                                                                            	 for(i=0;i<8;i++)
                                                                                                                                            	{
                                                                                                                                            		data=data>>1;
                                                                                                                                            		OUT_DQ();
                                                                                                                                            		CLR_DQ();
                                                                                                                                            		IN_DQ();
                                                                                                                                            		if(GET_DQ()) data|=0x80;
                                                                                                                                            		else while(!(GET_DQ()));
                                                                                                                                            		_delay_us(60);
                                                                                                                                            	}
                                                                                                                                            	return(data);
                                                                                                                                            }
                                                                                                                                            //-----写数据-----
                                                                                                                                            void wOnewire(u8 data)
                                                                                                                                            {
                                                                                                                                            	u8 i=0;
                                                                                                                                            	OUT_DQ();
                                                                                                                                            	for(i=0;i<8;i++)
                                                                                                                                            	{
                                                                                                                                            		CLR_DQ();
                                                                                                                                            		if(data&amp;0x01)
                                                                                                                                            		{
                                                                                                                                            		SET_DQ();
                                                                                                                                            		}
                                                                                                                                            		else
                                                                                                                                            		{
                                                                                                                                            		CLR_DQ();
                                                                                                                                            		}
                                                                                                                                            		data=data>>1;
                                                                                                                                            		_delay_us(60);  //65
                                                                                                                                            		SET_DQ();
                                                                                                                                            	}
                                                                                                                                            }
                                                                                                                                            
                                                                                                                                            //-----DS18B20转换温度-----
                                                                                                                                            void convertDs18b20(void) 
                                                                                                                                            { 
                                                                                                                                            	resetOnewire(); 
                                                                                                                                            	wOnewire(0xcc); 
                                                                                                                                            	wOnewire(0x44); 
                                                                                                                                            }
                                                                                                                                            //------------DS18BB0读温度----------
                                                                                                                                            u8 readTemp(void) 
                                                                                                                                            { 
                                                                                                                                            	u8 temp1,temp2;
                                                                                                                                            	convertDs18b20();
                                                                                                                                            	resetOnewire(); 
                                                                                                                                            	wOnewire(0xcc); 
                                                                                                                                            	wOnewire(0xbe); 	
                                                                                                                                            	temp1=rOnewire(); 
                                                                                                                                            	temp2=rOnewire(); 
                                                                                                                                            	temp2=temp2<<4;
                                                                                                                                            	temp1=temp1>>4;
                                                                                                                                            	temp2|=temp1;
                                                                                                                                            	return (temp2&amp;0x7F);
                                                                                                                                            }