湿度计的读写时序包括读时序和写时序,写时序如下:向 SH T21写8 个数据位 ,然后在第9 个时钟周期 ,读取 SHT21 的应答位 ,应位为 0 ,表示SHT21正确接收到了一个字节 ,也就是 8 个写时序加 1 个读时序。SH T21 读写数据的规则是:DA TA在 SCK时钟的下降沿之后改变状态 ,并在 SCK时钟的上升沿有效。从微控制器向 SHT21 写数据的角度来看 ,可以理解为上升沿将触发 SHT21 锁存数据 ,即微控制器在下降沿输出数据 ,再给出上升沿触发 SHT21 锁存数据。下降沿和上升沿之间的时间间隔需要满足 SHT21 的数据建立时间 TSU (最小值为 100ns) ,上升沿之后数据也需要保持一段时间 ,这段时间用于满足 SHT21 的数据保持时间 THO(典型值为 10ns) 。写时序的 C语言程序如下: int write_byte (int val) {int i ,er ror = 0 ; for (i = 0x80 ;i > 0 ;i = i > > 1) {if (i &val) outp ut_float (DA TA) ; el se outp ut_low(DA TA) ;/ /数据准备好 outp ut_bit (SCK,1) ;/ /上升沿锁存数据 outp ut_bit (SCK,0) ;/ /时钟线恢复为低电平 } outp ut_float (DA TA) ;/ / MCU 释放数据线 outp ut_bit (SCK,1) ; er ror = inp ut (DA TA) ;/ /读取应答信号 outp ut_bit (SCK,0) ; ret urn er ror ; } 写时序子程序的入口参数为待发送的数据 ,返回参数用于标识 SH T21 是否正确接收到数据。由于微控制器采用 4MHz的晶振 ,指令周期为 1μs ,能够满足 SHT21 的数据建立时间与数据保持时间 , 故程序中没用使用延时指令。 当 SHT21 完成测量后 ,微控制器需要发布读时序将测量结果读回。实现读时序首先需要实现 8个数据位的读取。SHT21 读写数据的规则是:DA2TA 在 SCK时钟的下降沿之后改变状态 ,并在 SCK时钟的上升沿有效。从微控制器读数据的角度理 解 ,时钟线的下降沿将触发 SHT21 接口内的锁存器输出数据 ,输出数据在时钟线上升沿之后达到稳定 ,下降沿和上升沿之间的时间间隔要大于 SH T21的输出数据有效时间 Tv (典型值为 250ns) ,即微控制器需要先给出下降沿 ,延时一段时间待数据稳定 后再读取数据。此外 ,微处理器需要在第 9 个时钟给出应答位 ,这属于写时序 ,写时序可参考前文的论述。读时序的 C语言程序代码如下 ,程序的入口参数为 0 或 1 ,0 代表给出应答位 ,继续接收后续数据;1 表示终止通信。
int read_byte (int acknowledge) {int i ,val = 0 ; for (i = 0x80 ;i > 0 ;i = i > > 1) {outp ut_bit (SCK,1) ; if (inp ut (DA TA) ) val = val| i ;/ /时钟上升沿读取数据 outp ut _ bit (SCK,0) ;/ /下降沿启动 SH T10输出下一位数据 } if (acknowledge) outp ut_low(DA TA) ; el se outp ut_float (DA TA) ; outp ut_bit (SCK,1) ;/ /上升沿锁存数据 delay_us (3) ;/ /延时 3us让 SHT锁存数据 outp ut_bit (SCK,0) ;/ /时钟线恢复为低电平 outp ut_float (DA TA) ;/ / MCU 释放数据线 ret urn val ; } 综合写时序和读时序即实现温湿度的测量任务。微控制器首先发布一个启动传输时序 ,接着调用写时序发布温度或湿度(取决于入口参数)的测量命令 ,之后等待测量的完成 ,在测量完成后 ,调用读时序读回测量结 果。需要注意的一点是 ,仅当通信错误标志 er ror为 0 时,才说明通信正确 ,读回的结果有效。在主程序中若检测到通信错误标志 error 非零 ,需要使用复位时序 ,来复位串行端口 ,然后重新进行测量。
[ 本帖最后由 qwertyuiop11111 于 2010-8-19 15:24 编辑 ]
|