串行发送双数据AVR

时间:2014-11-15 06:10:34

标签: serial-port avr

我想将温度传感器的读数从Atmenga32连续发送到另一个Atmega32。 但由于串行数据传输只有8位,我如何通过将数据分成8位块来发送数据。我如何收到相同的数据。 例如:如果ADC值为32.78

1 个答案:

答案 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);

doublefloat都是4个字节长。如果您想发送double dval使用此技巧

uint32_t val32 = * (uint32_t *) &dval;

(使用地址运算符&创建指向dval的指针。将该指针转换为指向uint32_t的指针,该指针是一个占用相同字节数的变量。然后取消引用指针获取值,进入val32。

这与简单地将dval转换为uint32_t不同。这会截断数字。)

如上所述,通过移动发送val32 4件。通过移动和|进行恢复,然后使用类似的指针技巧将结果转换回双倍。