⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sht11_reader.txt

📁 sht11 humidty an temperature sensor reader algoritm...
💻 TXT
字号:
'microbasic pic source code

sub function sht11(dim commandbyte as byte) as word
      dim wreading as word
      dim crc as byte
      dim tmp as byte
      dim wtmp as longint
      dim tmp1 as byte

      SHT_TDATA=0  'data output
      SHT_TCLOCK=0  'clock output

      SHT_DATA=1
      SHT_CLOCK=0

      for tmp=0 to 8
         SHT_CLOCK=1  'clock output
         nop
         SHT_CLOCK=0  'clock output
      next tmp
      nop

' generates a transmission start
'       _____         ________
' DATA:      |_______|
'           ___     ___
' CLK : ___|   |___|   |______
'
      SHT_DATA=1
      SHT_CLOCK=0                  'Initial state
      nop
      SHT_CLOCK=1
      nop

      SHT_DATA=0
      nop
      SHT_CLOCK=0
      nop
      nop
      nop
      SHT_CLOCK=1
      nop

      SHT_DATA=1
      nop
      SHT_CLOCK=0
      nop


      'send command byte
      tmp1=7
      for tmp=0 to 7
         SHT_CLOCK=0 'clock low
         if commandbyte.tmp1=1 then
             SHT_DATA=1
         else
             SHT_DATA=0
         end if
         SHT_CLOCK=1 'clock high
         tmp1=tmp1-1
      next tmp
      SHT_CLOCK=0 'clock low

      'check for ack
      SHT_TDATA=1 'data input
      SHT_CLOCK=1 'clock high
      if SHT_DATA=1 then 'ack not received
         'error code
         exit
      end if

      'wait for data ready (data=0)
      SHT_CLOCK=0 'clock low
      for wtmp=1 to 165535
          if SHT_DATA=0 then
             break
          end if
      next wtmp
      if SHT_DATA=1 then
         'data not ready after spec delay
         'error code here
         exit
      end if
      'data is ready, read in upper 8 bits
      wReading=0
      for tmp=0 to 7
         wReading=(wReading<<1)
         SHT_CLOCK=1 'clock high
         if SHT_DATA=1 then
             wReading.0=1
         else
             wReading.0=0
         end if
         SHT_CLOCK=0 'clock low
      next tmp
      'ack msb
      SHT_TDATA=0  'data output
      SHT_DATA=0  'data low
      SHT_CLOCK=1  'toggle clock / ack
      SHT_CLOCK=0  '
      SHT_TDATA=1  'data input
      'get lsb
      for tmp=0 to 7
         wReading=(wReading<<1)
         SHT_CLOCK=1 'clock high
         if SHT_DATA=1 then
             wReading.0=1
         else
             wReading.0=0
         end if
         SHT_CLOCK=0 'clock low
      next tmp

        'ack lsb
      SHT_TDATA=0  'data output
      SHT_DATA=0  'data low
      SHT_CLOCK=1  'toggle clock / ack
      SHT_CLOCK=0  '
      SHT_TDATA=1  'data input

        'get crc - not used
      for tmp=0 to 7
         crc=(crc<<1)
         SHT_CLOCK=1 'clock high
         if SHT_DATA=1 then
             crc.0=1
         else
             crc.0=0
         end if
         SHT_CLOCK=0 'clock low
      next tmp

        'ack crc
      SHT_TDATA=0  'data output
      SHT_DATA=0  'data low
      SHT_CLOCK=1  'toggle clock / ack
      SHT_CLOCK=0  '
      SHT_TDATA=1  'data input

      result=wreading
end sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -