如何解决HEX中的14位转换-MCP2515和MAX31855
关于MAX31855板,温度的有符号值由14位[31:18]位给出。 这14位首先从MSB发送出去,第一位是符号位。
这些是示例值:
我想将该值放在8插槽阵列的前两个插槽中,该值将通过MCP2515模块通过CAN发送出去。
实际上我正在研究此代码,这是MCP_CAN_lib的发送示例: Library
// CAN Send Example
//
#include <mcp_can.h>
#include <SPI.h>
MCP_CAN CAN0(10); // Set CS to pin 10
void setup()
{
Serial.begin(115200);
// Initialize MCP2515 running at 16MHz with a baudrate of 500kb/s and the masks and filters disabled.
if(CAN0.begin(MCP_ANY,CAN_500KBPS,MCP_16MHZ) == CAN_OK) Serial.println("MCP2515 Initialized Successfully!");
else Serial.println("Error Initializing MCP2515...");
CAN0.setMode(MCP_norMAL); // Change to normal mode to allow messages to be transmitted
}
byte data[8] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};
void loop()
{
// send data: ID = 0x100,Standard CAN Frame,Data length = 8 bytes,'data' = array of data bytes to send
byte sndStat = CAN0.sendMsgBuf(0x100,8,data);
if(sndStat == CAN_OK){
Serial.println("Message Sent Successfully!");
} else {
Serial.println("Error Sending Message...");
}
delay(100); // send data per 100ms
}
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
任何帮助和关于最佳库的建议,都将受到赞赏!
解决方法
我不确定“已转换为十进制格式”是什么意思,为什么会需要它。
这里是如何从板上转移值并将其放入数组的前两个字节(以您的1000C示例为例):
unsigned char data[8] = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07 };
int temp = 0b0011'1110'1000'0000'0000'0000'0000'0000;
temp >>= 18;
data[1] = temp & 0xFF;
temp >>= 8;
data[0] = temp & 0xFF;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。