|
硬汉哥提供的历程中写到0x10最多支持23个寄存器是写错了吗 ,我查阅资料0x10最多支持123个寄存器
/*
*********************************************************************************************************
* 函 数 名: MODH_Send10H
* 功能说明: 发送10H指令,连续写多个保持寄存器. 最多一次支持23个寄存器。
* 形 参: _addr : 从站地址
* _reg : 寄存器编号
* _num : 寄存器个数n (每个寄存器2个字节) 值域
* _buf : n个寄存器的数据。长度 = 2 * n
* 返 回 值: 无
*********************************************************************************************************
*/
void MODH_Send10H(uint8_t _addr, uint16_t _reg, uint8_t _num, uint8_t *_buf)
{
uint16_t i;
g_tModH.TxCount = 0;
g_tModH.TxBuf[g_tModH.TxCount++] = _addr; /* 从站地址 */
g_tModH.TxBuf[g_tModH.TxCount++] = 0x10; /* 从站地址 */
g_tModH.TxBuf[g_tModH.TxCount++] = _reg >> 8; /* 寄存器编号 高字节 */
g_tModH.TxBuf[g_tModH.TxCount++] = _reg; /* 寄存器编号 低字节 */
g_tModH.TxBuf[g_tModH.TxCount++] = _num >> 8; /* 寄存器个数 高字节 */
g_tModH.TxBuf[g_tModH.TxCount++] = _num; /* 寄存器个数 低字节 */
g_tModH.TxBuf[g_tModH.TxCount++] = 2 * _num; /* 数据字节数 */
for (i = 0; i < 2 * _num; i++)
{
if (g_tModH.TxCount > H_RX_BUF_SIZE - 3)
{
return; /* 数据超过缓冲区超度,直接丢弃不发送 */
}
g_tModH.TxBuf[g_tModH.TxCount++] = _buf[i]; /* 后面的数据长度 */
}
MODH_SendAckWithCRC(); /* 发送数据,自动加CRC */
}
|
|