有谁用过SHT7X系列温湿度传感器

[复制链接]
 楼主| highhand 发表于 2007-3-28 20:56 | 显示全部楼层 |阅读模式
感觉好像读写存储芯片那样,但是就是不能正常读取,哪位读取SHT7X系列的,能否提供一份参考程序,谢谢!有酬
mohanwei 发表于 2007-3-28 21:38 | 显示全部楼层

厂家就给出了例程……

用起来感觉非常方便。<br />注意它的接口只是看起来很想I2C而已,实际不是的……好好阅读一下手册。
yewuyi 发表于 2007-3-29 10:55 | 显示全部楼层

怎么个有酬法子?

呵呵,自己看看就知道了啊,也可以联系代理商,需要提醒你的是,这个东西精度确实不错,但因为要求功耗的原因,传输距离要注意
 楼主| highhand 发表于 2007-3-29 11:30 | 显示全部楼层

联系过了,还是没有解决

代理商只提供51的参考程序,存在的可能是IO方向问题,我也试过了,还是出不来,楼上的兄弟们如果做过的话就指点指点吧,谢谢你们了!
chenlung 发表于 2007-3-29 13:41 | 显示全部楼层

能不能把你的CPU连接和程序搞出来看下

只见你说有问题,这样哪里看得出来。
 楼主| highhand 发表于 2007-3-29 15:07 | 显示全部楼层

自己程序

PA2作为时钟线,PA3作为数据线。因为要用作定时输出,所以用到了定时中断程序,请各位帮我看看,程序可能乱了点,主要是看看SHT部分,PWM、定时那些都没有问题的了。不胜感激!!<br /><br /><br /><br />#include&nbsp;&nbsp;&ltpic.h&gt<br />#include&nbsp;&nbsp;&ltpic16f81x.h&gt<br />#include&nbsp;&nbsp;&ltmath.h&gt<br />#include&nbsp;&nbsp;&ltstdio.h&gt<br /><br />char&nbsp;s_write_byte(unsigned&nbsp;char&nbsp;value);<br />char&nbsp;s_read_byte(unsigned&nbsp;char&nbsp;ack);<br />void&nbsp;s_transstart(void);<br />void&nbsp;s_connectionreset(void);<br />char&nbsp;s_softreset(void);<br />char&nbsp;s_read_statusreg(unsigned&nbsp;char&nbsp;*p_value,&nbsp;unsigned&nbsp;char&nbsp;*p_checksum);<br />char&nbsp;s_write_statusreg(unsigned&nbsp;char&nbsp;*p_value);<br />char&nbsp;s_measure(unsigned&nbsp;char&nbsp;*p_value,&nbsp;unsigned&nbsp;char&nbsp;*p_checksum,&nbsp;unsigned&nbsp;char&nbsp;mode);<br />void&nbsp;calc_sth11(float&nbsp;*p_humidity&nbsp;,float&nbsp;*p_temperature);<br />float&nbsp;calc_dewpoint(float&nbsp;h,float&nbsp;t);<br />void&nbsp;PWM_Initial(void);<br />void&nbsp;PWM_Display(int&nbsp;PWMOut92,&nbsp;int&nbsp;PWMOut10);<br />void&nbsp;Timer1_Initial(void);<br />void&nbsp;interrupt&nbsp;isr(void);<br /><br />static&nbsp;bit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SCK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;(unsigned)&PORTA*8+2;<br />static&nbsp;bit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DATA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@&nbsp;(unsigned)&PORTA*8+3;<br /><br />//------------------------------------------------------------------------------<br />//&nbsp;modul-var<br />//------------------------------------------------------------------------------<br />enum&nbsp;{TEMP,HUMI};<br /><br />#define&nbsp;noACK&nbsp;0<br />#define&nbsp;ACK&nbsp;&nbsp;&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//adr&nbsp;&nbsp;command&nbsp;&nbsp;r/w<br />#define&nbsp;STATUS_REG_W&nbsp;0x06&nbsp;&nbsp;&nbsp;//000&nbsp;&nbsp;&nbsp;0011&nbsp;&nbsp;&nbsp;&nbsp;0<br />#define&nbsp;STATUS_REG_R&nbsp;0x07&nbsp;&nbsp;&nbsp;//000&nbsp;&nbsp;&nbsp;0011&nbsp;&nbsp;&nbsp;&nbsp;1<br />#define&nbsp;MEASURE_TEMP&nbsp;0x03&nbsp;&nbsp;&nbsp;//000&nbsp;&nbsp;&nbsp;0001&nbsp;&nbsp;&nbsp;&nbsp;1<br />#define&nbsp;MEASURE_HUMI&nbsp;0x05&nbsp;&nbsp;&nbsp;//000&nbsp;&nbsp;&nbsp;0010&nbsp;&nbsp;&nbsp;&nbsp;1<br />#define&nbsp;RESET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x1e&nbsp;&nbsp;&nbsp;//000&nbsp;&nbsp;&nbsp;1111&nbsp;&nbsp;&nbsp;&nbsp;0<br /><br />char&nbsp;PWM92,PWM10;<br />unsigned&nbsp;int&nbsp;n_Scan=0,pwm=0;<br />float&nbsp;dew_point;<br />unsigned&nbsp;char&nbsp;err,chksum;<br />unsigned&nbsp;int&nbsp;humi_vali=0,temp_vali=0;<br />float&nbsp;humi_valf,temp_valf;<br /><br />main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TRISA&nbsp;=&nbsp;0x00;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;TRISB&nbsp;=&nbsp;0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;PORTB&nbsp;=&nbsp;0x0FF;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PWM_Initial();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;PWM&nbsp;Initial<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Timer1_Initial();&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;Timer1&nbsp;Initial<br />&nbsp;&nbsp;&nbsp;&nbsp;PEIE=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;Enable&nbsp;Peripheral&nbsp;Interupts<br />&nbsp;&nbsp;&nbsp;&nbsp;GIE&nbsp;=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;Enable&nbsp;Global&nbsp;Interrupt<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;s_connectionreset();<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;//<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><br />void&nbsp;PWM_Initial(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;PR2=0x0F9;<br />&nbsp;&nbsp;&nbsp;&nbsp;CCPR1L=0x7F;<br />&nbsp;&nbsp;&nbsp;&nbsp;CCP1CON=0x20;<br />&nbsp;&nbsp;&nbsp;&nbsp;TRISB=0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;T2CON=0x05;<br />&nbsp;&nbsp;&nbsp;&nbsp;CCP1CON|=0x0F;<br />}<br /><br /><br />void&nbsp;PWM_Display(int&nbsp;PWMOut92,&nbsp;int&nbsp;PWMOut10)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;CCPR1L=PWMOut92;<br />&nbsp;&nbsp;&nbsp;&nbsp;CCP1CON&=0x0CF;<br />&nbsp;&nbsp;&nbsp;&nbsp;CCP1CON|=PWMOut10;&nbsp;&nbsp;&nbsp;&nbsp;<br />}&nbsp;&nbsp;&nbsp;&nbsp;<br /><br /><br />void&nbsp;Timer1_Initial(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;OPTION=0x87;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;Falling&nbsp;Edge&nbsp;of&nbsp;INT&nbsp;Pin,WDT&nbsp;Fosc/128<br />&nbsp;&nbsp;&nbsp;&nbsp;PSA=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;WDT&nbsp;Fosc/128<br />&nbsp;&nbsp;&nbsp;&nbsp;T1CON=0x00;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;Internal&nbsp;Clock(Fosc/4)<br />&nbsp;&nbsp;&nbsp;&nbsp;TMR1H=0x0FC;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;TMR1L=0x2E;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;1ms<br />&nbsp;&nbsp;&nbsp;&nbsp;TMR1IF=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;Clear&nbsp;TIMER1&nbsp;Interrupt&nbsp;Flag<br />&nbsp;&nbsp;&nbsp;&nbsp;TMR1IE=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;Enable&nbsp;TIMER1&nbsp;Interrupt<br />&nbsp;&nbsp;&nbsp;&nbsp;TMR1ON=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;Start&nbsp;Timing<br />}<br /><br /><br />void&nbsp;interrupt&nbsp;isr(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(TMR1IF==1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;TIMER1&nbsp;Interrupt&nbsp;Subroutine<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;TMR1IF=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;TMR1H=0x0FC;<br />&nbsp;&nbsp;&nbsp;&nbsp;TMR1L=0x2E;<br />&nbsp;&nbsp;&nbsp;&nbsp;n_Scan+=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;CLRWDT();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;WDT&nbsp;Clear<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(n_Scan==1000)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;PORTB=0x0FF;<br />&nbsp;&nbsp;&nbsp;&nbsp;CLRWDT();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;WDT&nbsp;Clear<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(n_Scan==1500)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;PORTB=0x01;<br />&nbsp;&nbsp;&nbsp;&nbsp;//pwm=200;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(pwm==1000)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;pwm=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;PWM10=(char)(pwm&(0x03));<br />&nbsp;&nbsp;&nbsp;&nbsp;PWM10=PWM10&lt&lt4;<br />&nbsp;&nbsp;&nbsp;&nbsp;PWM92=pwm&gt&gt2;<br />&nbsp;&nbsp;&nbsp;&nbsp;PWM_Display(PWM92,PWM10);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(n_Scan==2000)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;PORTB=0x02;<br />&nbsp;&nbsp;&nbsp;&nbsp;err=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;err+=s_measure((unsigned&nbsp;char*)&nbsp;&humi_vali,&chksum,HUMI);&nbsp;&nbsp;//measure&nbsp;humidity<br />&nbsp;&nbsp;&nbsp;&nbsp;//err+=s_measure((unsigned&nbsp;char*)&nbsp;&temp_vali,&chksum,TEMP);&nbsp;&nbsp;//measure&nbsp;temperature<br />&nbsp;&nbsp;&nbsp;&nbsp;//if(err!=0)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//{s_connectionreset();}<br />&nbsp;&nbsp;&nbsp;&nbsp;if(err==0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//humi_vali=1500;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//temp_vali=10000;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;humi_valf=(float)humi_vali;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//converts&nbsp;integer&nbsp;to&nbsp;float<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_valf=(float)temp_vali;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//converts&nbsp;integer&nbsp;to&nbsp;float<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;calc_sth11(&humi_valf,&temp_valf);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//calculate&nbsp;humidity,&nbsp;temperature<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pwm=(unsigned&nbsp;int)&nbsp;(humi_valf*10);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(n_Scan==7000)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;PORTB=0x03;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(n_Scan==8000)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;PORTB=0x04;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(n_Scan==8999)&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;PORTB=0x0;<br />&nbsp;&nbsp;&nbsp;&nbsp;n_Scan=0;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><br />//----------------------------------------------------------------------------------<br />char&nbsp;s_write_byte(unsigned&nbsp;char&nbsp;value)<br />//----------------------------------------------------------------------------------<br />//&nbsp;writes&nbsp;a&nbsp;byte&nbsp;on&nbsp;the&nbsp;Sensibus&nbsp;and&nbsp;checks&nbsp;the&nbsp;acknowledge&nbsp;<br />{&nbsp;<br />&nbsp;&nbsp;unsigned&nbsp;char&nbsp;i,error=0;&nbsp;&nbsp;<br />&nbsp;&nbsp;for&nbsp;(i=0x80;i&gt0;i/=2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//shift&nbsp;bit&nbsp;for&nbsp;masking<br />&nbsp;&nbsp;{&nbsp;if&nbsp;(i&nbsp;&&nbsp;value)&nbsp;DATA=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//masking&nbsp;value&nbsp;with&nbsp;i&nbsp;,&nbsp;write&nbsp;to&nbsp;SENSI-BUS<br />&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;DATA=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SCK=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//clk&nbsp;for&nbsp;SENSI-BUS<br />&nbsp;&nbsp;&nbsp;&nbsp;NOP();NOP();NOP();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//pulswith&nbsp;approx.&nbsp;5&nbsp;us&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SCK=0;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;DATA=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//release&nbsp;DATA-line<br />&nbsp;&nbsp;SCK=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//clk&nbsp;#9&nbsp;for&nbsp;ack&nbsp;<br />&nbsp;&nbsp;error=DATA;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//check&nbsp;ack&nbsp;(DATA&nbsp;will&nbsp;be&nbsp;pulled&nbsp;down&nbsp;by&nbsp;SHT11)<br />&nbsp;&nbsp;SCK=0;<br />&nbsp;&nbsp;return&nbsp;error;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//error=1&nbsp;in&nbsp;case&nbsp;of&nbsp;no&nbsp;acknowledge<br />}<br /><br /><br />//----------------------------------------------------------------------------------<br />char&nbsp;s_read_byte(unsigned&nbsp;char&nbsp;ack)<br />//----------------------------------------------------------------------------------<br />//&nbsp;reads&nbsp;a&nbsp;byte&nbsp;form&nbsp;the&nbsp;Sensibus&nbsp;and&nbsp;gives&nbsp;an&nbsp;acknowledge&nbsp;in&nbsp;case&nbsp;of&nbsp;&quot;ack=1&quot;&nbsp;<br />{&nbsp;<br />&nbsp;&nbsp;unsigned&nbsp;char&nbsp;i,val=0;<br />&nbsp;&nbsp;DATA=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//release&nbsp;DATA-line<br />&nbsp;&nbsp;TRISA3=1;<br />&nbsp;&nbsp;for&nbsp;(i=0x80;i&gt0;i/=2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//shift&nbsp;bit&nbsp;for&nbsp;masking<br />&nbsp;&nbsp;{&nbsp;SCK=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//clk&nbsp;for&nbsp;SENSI-BUS<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(DATA)&nbsp;val=(val&nbsp;|&nbsp;i);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//read&nbsp;bit&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SCK=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;TRISA3=0;<br />&nbsp;&nbsp;DATA=!ack;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//in&nbsp;case&nbsp;of&nbsp;&quot;ack==1&quot;&nbsp;pull&nbsp;down&nbsp;DATA-Line<br />&nbsp;&nbsp;SCK=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//clk&nbsp;#9&nbsp;for&nbsp;ack<br />&nbsp;&nbsp;NOP();NOP();NOP();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//pulswith&nbsp;approx.&nbsp;5&nbsp;us&nbsp;<br />&nbsp;&nbsp;SCK=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;DATA=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//release&nbsp;DATA-line<br />&nbsp;&nbsp;return&nbsp;val;<br />}<br /><br /><br />//----------------------------------------------------------------------------------<br />void&nbsp;s_transstart(void)<br />//----------------------------------------------------------------------------------<br />//&nbsp;generates&nbsp;a&nbsp;transmission&nbsp;start&nbsp;<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_____&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;________<br />//&nbsp;DATA:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|_______|<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;___&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;___<br />//&nbsp;SCK&nbsp;:&nbsp;___|&nbsp;&nbsp;&nbsp;|___|&nbsp;&nbsp;&nbsp;|______<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;DATA=1;&nbsp;SCK=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Initial&nbsp;state<br />&nbsp;&nbsp;&nbsp;NOP();<br />&nbsp;&nbsp;&nbsp;SCK=1;<br />&nbsp;&nbsp;&nbsp;NOP();<br />&nbsp;&nbsp;&nbsp;DATA=0;<br />&nbsp;&nbsp;&nbsp;NOP();<br />&nbsp;&nbsp;&nbsp;SCK=0;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;NOP();NOP();NOP();<br />&nbsp;&nbsp;&nbsp;SCK=1;<br />&nbsp;&nbsp;&nbsp;NOP();<br />&nbsp;&nbsp;&nbsp;DATA=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;NOP();<br />&nbsp;&nbsp;&nbsp;SCK=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br /><br />//----------------------------------------------------------------------------------<br />void&nbsp;s_connectionreset(void)<br />//----------------------------------------------------------------------------------<br />//&nbsp;communication&nbsp;reset:&nbsp;DATA-line=1&nbsp;and&nbsp;at&nbsp;least&nbsp;9&nbsp;SCK&nbsp;cycles&nbsp;followed&nbsp;by&nbsp;transstart<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_____________________________________________________&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;________<br />//&nbsp;DATA:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|_______|<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_&nbsp;&nbsp;&nbsp;&nbsp;_&nbsp;&nbsp;&nbsp;&nbsp;_&nbsp;&nbsp;&nbsp;&nbsp;_&nbsp;&nbsp;&nbsp;&nbsp;_&nbsp;&nbsp;&nbsp;&nbsp;_&nbsp;&nbsp;&nbsp;&nbsp;_&nbsp;&nbsp;&nbsp;&nbsp;_&nbsp;&nbsp;&nbsp;&nbsp;_&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;___&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;___<br />//&nbsp;SCK&nbsp;:&nbsp;__|&nbsp;|__|&nbsp;|__|&nbsp;|__|&nbsp;|__|&nbsp;|__|&nbsp;|__|&nbsp;|__|&nbsp;|__|&nbsp;|______|&nbsp;&nbsp;&nbsp;|___|&nbsp;&nbsp;&nbsp;|______<br />{&nbsp;&nbsp;<br />&nbsp;&nbsp;unsigned&nbsp;char&nbsp;i;&nbsp;<br />&nbsp;&nbsp;DATA=1;&nbsp;SCK=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Initial&nbsp;state<br />&nbsp;&nbsp;for(i=0;i&lt9;i++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//9&nbsp;SCK&nbsp;cycles<br />&nbsp;&nbsp;{&nbsp;SCK=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;SCK=0;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;s_transstart();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//transmission&nbsp;start<br />}<br /><br /><br />//----------------------------------------------------------------------------------<br />char&nbsp;s_softreset(void)<br />//----------------------------------------------------------------------------------<br />//&nbsp;resets&nbsp;the&nbsp;sensor&nbsp;by&nbsp;a&nbsp;softreset&nbsp;<br />{&nbsp;<br />&nbsp;&nbsp;unsigned&nbsp;char&nbsp;error=0;&nbsp;&nbsp;<br />&nbsp;&nbsp;s_connectionreset();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//reset&nbsp;communication<br />&nbsp;&nbsp;error+=s_write_byte(RESET);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//send&nbsp;RESET-command&nbsp;to&nbsp;sensor<br />&nbsp;&nbsp;return&nbsp;error;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//error=1&nbsp;in&nbsp;case&nbsp;of&nbsp;no&nbsp;response&nbsp;form&nbsp;the&nbsp;sensor<br />}<br /><br /><br />//----------------------------------------------------------------------------------<br />char&nbsp;s_read_statusreg(unsigned&nbsp;char&nbsp;*p_value,&nbsp;unsigned&nbsp;char&nbsp;*p_checksum)<br />//----------------------------------------------------------------------------------<br />//&nbsp;reads&nbsp;the&nbsp;status&nbsp;register&nbsp;with&nbsp;checksum&nbsp;(8-bit)<br />{&nbsp;<br />&nbsp;&nbsp;unsigned&nbsp;char&nbsp;error=0;<br />&nbsp;&nbsp;s_transstart();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//transmission&nbsp;start<br />&nbsp;&nbsp;error=s_write_byte(STATUS_REG_R);&nbsp;//send&nbsp;command&nbsp;to&nbsp;sensor<br />&nbsp;&nbsp;*p_value=s_read_byte(ACK);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//read&nbsp;status&nbsp;register&nbsp;(8-bit)<br />&nbsp;&nbsp;*p_checksum=s_read_byte(noACK);&nbsp;&nbsp;&nbsp;//read&nbsp;checksum&nbsp;(8-bit)&nbsp;&nbsp;<br />&nbsp;&nbsp;return&nbsp;error;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//error=1&nbsp;in&nbsp;case&nbsp;of&nbsp;no&nbsp;response&nbsp;form&nbsp;the&nbsp;sensor<br />}<br /><br /><br />//----------------------------------------------------------------------------------<br />char&nbsp;s_write_statusreg(unsigned&nbsp;char&nbsp;*p_value)<br />//----------------------------------------------------------------------------------<br />//&nbsp;writes&nbsp;the&nbsp;status&nbsp;register&nbsp;with&nbsp;checksum&nbsp;(8-bit)<br />{&nbsp;<br />&nbsp;&nbsp;unsigned&nbsp;char&nbsp;error=0;<br />&nbsp;&nbsp;s_transstart();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//transmission&nbsp;start<br />&nbsp;&nbsp;error+=s_write_byte(STATUS_REG_W);//send&nbsp;command&nbsp;to&nbsp;sensor<br />&nbsp;&nbsp;error+=s_write_byte(*p_value);&nbsp;&nbsp;&nbsp;&nbsp;//send&nbsp;value&nbsp;of&nbsp;status&nbsp;register<br />&nbsp;&nbsp;return&nbsp;error;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//error&gt=1&nbsp;in&nbsp;case&nbsp;of&nbsp;no&nbsp;response&nbsp;form&nbsp;the&nbsp;sensor<br />}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />//----------------------------------------------------------------------------------<br />char&nbsp;s_measure(unsigned&nbsp;char&nbsp;*p_value,&nbsp;unsigned&nbsp;char&nbsp;*p_checksum,&nbsp;unsigned&nbsp;char&nbsp;mode)<br />//----------------------------------------------------------------------------------<br />//&nbsp;makes&nbsp;a&nbsp;measurement&nbsp;(humidity/temperature)&nbsp;with&nbsp;checksum<br />{&nbsp;<br />&nbsp;&nbsp;unsigned&nbsp;error=0;<br />&nbsp;&nbsp;unsigned&nbsp;int&nbsp;i;<br /><br />&nbsp;&nbsp;s_transstart();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//transmission&nbsp;start<br />&nbsp;&nbsp;PORTB=0x0;<br />&nbsp;&nbsp;switch(mode){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//send&nbsp;command&nbsp;to&nbsp;sensor<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;TEMP&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;error+=s_write_byte(MEASURE_TEMP);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;HUMI&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;error+=s_write_byte(MEASURE_HUMI);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;default&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;for&nbsp;(i=0;i&lt65535;i++)&nbsp;if(DATA==0)&nbsp;break;&nbsp;//wait&nbsp;until&nbsp;sensor&nbsp;has&nbsp;finished&nbsp;the&nbsp;measurement<br />&nbsp;&nbsp;if(DATA)&nbsp;error+=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;or&nbsp;timeout&nbsp;(~2&nbsp;sec.)&nbsp;is&nbsp;reached<br />&nbsp;&nbsp;*(p_value)&nbsp;&nbsp;=s_read_byte(ACK);&nbsp;&nbsp;&nbsp;&nbsp;//read&nbsp;the&nbsp;first&nbsp;byte&nbsp;(MSB)<br />&nbsp;&nbsp;*(p_value+1)=s_read_byte(ACK);&nbsp;&nbsp;&nbsp;&nbsp;//read&nbsp;the&nbsp;second&nbsp;byte&nbsp;(LSB)<br />&nbsp;&nbsp;*p_checksum&nbsp;=s_read_byte(noACK);&nbsp;&nbsp;//read&nbsp;checksum<br />&nbsp;&nbsp;return&nbsp;error;<br />}<br /><br /><br />//----------------------------------------------------------------------------------------<br />void&nbsp;calc_sth11(float&nbsp;*p_humidity&nbsp;,float&nbsp;*p_temperature)<br />//----------------------------------------------------------------------------------------<br />//&nbsp;calculates&nbsp;temperature&nbsp;[癈]&nbsp;and&nbsp;humidity&nbsp;[%RH]&nbsp;<br />//&nbsp;input&nbsp;:&nbsp;&nbsp;humi&nbsp;[Ticks]&nbsp;(12&nbsp;bit)&nbsp;<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;[Ticks]&nbsp;(14&nbsp;bit)<br />//&nbsp;output:&nbsp;&nbsp;humi&nbsp;[%RH]<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;[癈]<br />{&nbsp;const&nbsp;float&nbsp;C1=-4.0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;for&nbsp;12&nbsp;Bit<br />&nbsp;&nbsp;const&nbsp;float&nbsp;C2=+0.0405;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;for&nbsp;12&nbsp;Bit<br />&nbsp;&nbsp;const&nbsp;float&nbsp;C3=-0.0000028;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;for&nbsp;12&nbsp;Bit<br />&nbsp;&nbsp;const&nbsp;float&nbsp;T1=+0.01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;for&nbsp;14&nbsp;Bit&nbsp;@&nbsp;5V<br />&nbsp;&nbsp;const&nbsp;float&nbsp;T2=+0.00008;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;for&nbsp;14&nbsp;Bit&nbsp;@&nbsp;5V&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;float&nbsp;rh=*p_humidity;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;rh:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Humidity&nbsp;[Ticks]&nbsp;12&nbsp;Bit&nbsp;<br />&nbsp;&nbsp;float&nbsp;t=*p_temperature;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;t:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Temperature&nbsp;[Ticks]&nbsp;14&nbsp;Bit<br />&nbsp;&nbsp;float&nbsp;rh_lin;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;rh_lin:&nbsp;&nbsp;Humidity&nbsp;linear<br />&nbsp;&nbsp;float&nbsp;rh_true;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;rh_true:&nbsp;Temperature&nbsp;compensated&nbsp;humidity<br />&nbsp;&nbsp;float&nbsp;t_C;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;t_C&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;Temperature&nbsp;[癈]<br /><br />&nbsp;&nbsp;t_C=t*0.01&nbsp;-&nbsp;40;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//calc.&nbsp;temperature&nbsp;from&nbsp;ticks&nbsp;to&nbsp;[癈]<br />&nbsp;&nbsp;rh_lin=C3*rh*rh&nbsp;+&nbsp;C2*rh&nbsp;+&nbsp;C1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//calc.&nbsp;humidity&nbsp;from&nbsp;ticks&nbsp;to&nbsp;[%RH]<br />&nbsp;&nbsp;rh_true=(t_C-25)*(T1+T2*rh)+rh_lin;&nbsp;&nbsp;&nbsp;//calc.&nbsp;temperature&nbsp;compensated&nbsp;humidity&nbsp;[%RH]<br />&nbsp;&nbsp;if(rh_true&gt100)rh_true=100;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//cut&nbsp;if&nbsp;the&nbsp;value&nbsp;is&nbsp;outside&nbsp;of<br />&nbsp;&nbsp;if(rh_true&lt0.1)rh_true=0.1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//the&nbsp;physical&nbsp;possible&nbsp;range<br /><br />&nbsp;&nbsp;*p_temperature=t_C;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//return&nbsp;temperature&nbsp;[癈]<br />&nbsp;&nbsp;*p_humidity=rh_true;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//return&nbsp;humidity[%RH]<br />}<br /><br /><br />//--------------------------------------------------------------------<br />float&nbsp;calc_dewpoint(float&nbsp;h,float&nbsp;t)<br />//--------------------------------------------------------------------<br />//&nbsp;calculates&nbsp;dew&nbsp;point<br />//&nbsp;input:&nbsp;&nbsp;&nbsp;humidity&nbsp;[%RH],&nbsp;temperature&nbsp;[癈]<br />//&nbsp;output:&nbsp;&nbsp;dew&nbsp;point&nbsp;[癈]<br />{&nbsp;float&nbsp;logEx,dew_point;<br />&nbsp;&nbsp;logEx=0.66077+7.5*t/(237.3+t)+(log10(h)-2);<br />&nbsp;&nbsp;dew_point&nbsp;=&nbsp;(logEx&nbsp;-&nbsp;0.66077)*237.3/(0.66077+7.5-logEx);<br />&nbsp;&nbsp;return&nbsp;dew_point;<br />}<br /><br /><br /><br /><br />
lehao 发表于 2007-3-29 18:40 | 显示全部楼层

不懂c语言

&nbsp;&nbsp;用汇编做过,我做的时候有个问题,一个是等待是否检测到变低的信号.得到这个信号了就说明通讯工作对了.&nbsp;你要是迷惑,先做个程序检测这个低信号好了.<br /><br />&nbsp;&nbsp;没学过c语言,只能这么说下了.<br /><br />&nbsp;&nbsp;工作过程是容易:先发启动信号,在发命令,等待低信号,在就读数据好了.sht工作有周期,你的时间间隔不能太短,他本身的检测时间较长.<br /><br />&nbsp;&nbsp;希望能帮到你!
mohanwei 发表于 2007-3-29 22:03 | 显示全部楼层

今天太晚了,我明天再看看程序……

一般说来这种接口的驱动是最好写的,先按照手册上的读写流程图编写出程序框架,然后往下细化到read和write函数,最后参照读写时序图编写read和write的实现。<br /><br />调试的时候不要急着直接编译整个项目,要先单独编几个测试函数先把接口完全调通。调试的时候最好能有硬件仿真器(其实我一般是用keil先进行软件仿真的……),结合万用表和示波器观察管脚电平变化,有一点不对也要分析清楚。<br /><br />虽然这段文字看起来是纸上谈兵,但的确是我多年调程序总结出来的部分经验,我按照这个步骤来调接口,几乎没有浪费过时间。
 楼主| highhand 发表于 2007-3-29 22:22 | 显示全部楼层

非常感谢楼上的兄台

真心感谢你,我会再努力的,如果你又时间,也希望你帮帮忙看看,指点一下。
 楼主| highhand 发表于 2007-3-31 00:57 | 显示全部楼层

问题已经解决,谢谢大家提示

谢谢大家帮忙!非常感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

7

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

2

主题

7

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部