我想将温度传感器的读数从Atmenga32连续发送到另一个Atmega32。 但由于串行数据传输只有8位,我如何通过将数据分成8位块来发送数据。我如何收到相同的数据。 例如:如果ADC值为32.78
答案 0 :(得分:1)
AVR中的ADC采用无符号10位形式,而不是双精度。 ADC可以作为两个独立的字节读取,ADCL和ADCH。必须首先阅读ADCL。
如果您想发送其他uint16_t val
次使用
uint8_t lo = (uint8_t)val;
uint8_t hi = (uint8_t)(val >> 8);
double
和float
都是4个字节长。如果您想发送double dval
使用此技巧
uint32_t val32 = * (uint32_t *) &dval;
(使用地址运算符&
创建指向dval的指针。将该指针转换为指向uint32_t
的指针,该指针是一个占用相同字节数的变量。然后取消引用指针获取值,进入val32。
这与简单地将dval转换为uint32_t不同。这会截断数字。)
如上所述,通过移动发送val32
4件。通过移动和|
进行恢复,然后使用类似的指针技巧将结果转换回双倍。