您好,欢迎访问三七文档
SHTxxHumidity&TemperatureSensmitterApplicationNoteSampleCode1IntroductionThisapplicationnotegivesanexampleformicrocontrollerCcode.Itincludescodefor:ReadoutofHumidity(RH)orTemperature(T)withbasicerrorhandlingCalculationofRHlinearizationandtemperaturecompensationAccesstostatusregisterDewpointcalculationfromRHandTUARThandling2SampleCode/****************************************************************Project:SHT11demoprogram(V2.0)Filename:SHT11.cProzessor:80C51familyCompiler:KeilVersion6.14Autor:MSTCopyrigth:(c)SensirionAG****************************************************************/#includeAT89s53.h//Microcontrollerspecificlibrary,e.g.portdefinitions#includeintrins.h//Keillibrary(isusedfor_nop()_operation)#includemath.h//Keillibrary#includestdio.h//Keillibrarytypedefunion{unsignedinti;floatf;}value;//---------------------------------------------------------------------------------//modul-var//------------------------------------------------------------------------------enum{TEMP,HUMI};#defineDATAP1_1#defineSCKP1_0#definenoACK0#defineACK1//adrcommandr/w#defineSTATUS_REG_W0x06//00000110#defineSTATUS_REG_R0x07//00000111#defineMEASURE_TEMP0x03//00000011#defineMEASURE_HUMI0x05//00000101#defineRESET0x1e//00011110//---------------------------------------------------------------------------------chars_write_byte(unsignedcharvalue)//---------------------------------------------------------------------------------//writesabyteontheSensibusandcheckstheacknowledge{unsignedchari,error=0;for(i=0x80;i0;i/=2)//shiftbitformasking{if(i&value)DATA=1;//maskingvaluewithi,writetoSENSI-BUSelseDATA=0;SCK=1;//clkforSENSI-BUS_nop_();_nop_();_nop_();//pulswithapprox.5usSCK=0;}DATA=1;//releaseDATA-lineSCK=1;//clk#9forackerror=DATA;//checkack(DATAwillbepulleddownbySHT11)SCK=0;returnerror;//error=1incaseofnoacknowledge}//----------------------------------------------------------------------------------chars_read_byte(unsignedcharack)//----------------------------------------------------------------------------------//readsabyteformtheSensibusandgivesanacknowledgeincaseofack=1{unsignedchari,val=0;DATA=1;//releaseDATA-linefor(i=0x80;i0;i/=2)//shiftbitformasking{SCK=1;//clkforSENSI-BUSif(DATA)val=(val|i);//readbitSCK=0;}DATA=!ack;//incaseofack==1pulldownDATA-LineSCK=1;//clk#9forack_nop_();_nop_();_nop_();//pulswithapprox.5usSCK=0;DATA=1;//releaseDATA-linereturnval;}//----------------------------------------------------------------------------------voids_transstart(void)//----------------------------------------------------------------------------------//generatesatransmissionstart//_____________//DATA:|_______|//______//SCK:___||___||______{DATA=1;SCK=0;//Initialstate_nop_();SCK=1;_nop_();DATA=0;_nop_();SCK=0;_nop_();_nop_();_nop_();SCK=1;_nop_();DATA=1;_nop_();SCK=0;}//---------------------------------------------------------------------------------voids_connectionreset(void)//----------------------------------------------------------------------------------//communicationreset:DATA-line=1andatleast9SCKcyclesfollowedbytransstart//_____________________________________________________________//DATA:|_______|//_______________//SCK:__||__||__||__||__||__||__||__||__||______||___||______{unsignedchari;DATA=1;SCK=0;//Initialstatefor(i=0;i9;i++)//9SCKcycles{SCK=1;SCK=0;}s_transstart();//transmissionstart}//----------------------------------------------------------------------------------chars_softreset(void)//----------------------------------------------------------------------------------//resetsthesensorbyasoftreset{unsignedcharerror=0;s_connectionreset();//resetcommunicationerror+=s_write_byte(RESET);//sendRESET-commandtosensorreturnerror;//error=1incaseofnoresponseformthesensor}//----------------------------------------------------------------------------------chars_read_statusreg(unsignedchar*p_value,unsignedchar*p_checksum)//---------------------------------------------------------------------------------//readsthestatusregisterwithchecksum(8-bit){unsignedcharerror=0;s_transstart();//transmissionstarterror+=s_write_byte(STATUS_REG_R);//sendcommandtosensor*p_value=s_read_byte(ACK);//readstatusregister(8-bit)*p_checksum=s_read_byte(noACK);//readchecksum(8-bit)returnerror;//error=1incaseofnoresponseformthesensor}//----------------------------------------------------------------------------------chars_write_statusreg(unsignedchar*p_value)//----------------------------------------------------------------------------------//writesthestatusregisterwithchecksum(8-bit){unsignedcharerror=0;s_transstart();//transmissionstarterror+=s_write_byte(STATUS_REG_W);//sendcommandtosensorerror+=s_write_byte(*p_value);//sendvalueofstatusregisterreturnerror;//error=1incaseofnoresponseformthesensor}//----------------------------------------------------------------------------------chars_measure(unsignedchar*p_value,unsignedchar*p_checksum,unsignedcharmode)//----------------------------------------------------------------------------------//makesameas
本文标题:SHT20源码
链接地址:https://www.777doc.com/doc-5475628 .html