#include "Key.h" /* ---------------------------------------------------------------------------- * @breif:发送按键信息给从机 * @input:NONE * @retval:NONE */ void Send_Key_Inf(void) { uint16_t crc16=0; //校验码 if(sending_flag[USART1_Locat] == 0) { //没有报文正在发送 if(Dealwith.Key1_REG != 0 || Dealwith.Key2_REG != 0) { //有按键按下 Txbuf[0] = SLAVE_ADDRESS; //装置地址 Txbuf[1] = MOD_WRITE_M_REGISTER; Txbuf[2] = (uint8_t)(ADR_KEY_START>>8); Txbuf[3] = (uint8_t)(ADR_KEY_START); Txbuf[4] = 0x00; Txbuf[5] = 0x02; Txbuf[6] = 0x04; Txbuf[7] = (uint8_t)(Dealwith.Key1_REG>>8); Txbuf[8] = (uint8_t)(Dealwith.Key1_REG); Txbuf[9] = (uint8_t)(Dealwith.Key2_REG>>8); Txbuf[10] = (uint8_t)(Dealwith.Key2_REG); crc16 = CRC16(Txbuf,11); Txbuf[11] = (uint8_t)(crc16); Txbuf[12] = (uint8_t)(crc16>>8); Txlen = 13; //发送数据 DMA_Usart1_Send(Txbuf,Txlen); } } }
时间: 2024-04-07 10:33:19 浏览: 43
2021年辉芒微单C语言笔记-Robert
这段代码是一个函数`Send_Key_Inf`,用于向从机发送按键信息。让我们逐行分析代码。
```c
void Send_Key_Inf(void)
{
uint16_t crc16 = 0; // 校验码
if (sending_flag[USART1_Locat] == 0)
{
// 没有报文正在发送
if (Dealwith.Key1_REG != 0 || Dealwith.Key2_REG != 0)
{
// 有按键按下
Txbuf[0] = SLAVE_ADDRESS; // 装置地址
Txbuf[1] = MOD_WRITE_M_REGISTER;
Txbuf[2] = (uint8_t)(ADR_KEY_START >> 8);
Txbuf[3] = (uint8_t)(ADR_KEY_START);
Txbuf[4] = 0x00;
Txbuf[5] = 0x02;
Txbuf[6] = 0x04;
Txbuf[7] = (uint8_t)(Dealwith.Key1_REG >> 8);
Txbuf[8] = (uint8_t)(Dealwith.Key1_REG);
Txbuf[9] = (uint8_t)(Dealwith.Key2_REG >> 8);
Txbuf[10] = (uint8_t)(Dealwith.Key2_REG);
crc16 = CRC16(Txbuf, 11);
Txbuf[11] = (uint8_t)(crc16);
Txbuf[12] = (uint8_t)(crc16 >> 8);
Txlen = 13;
// 发送数据
DMA_Usart1_Send(Txbuf, Txlen);
}
}
}
```
首先,函数检查`sending_flag[USART1_Locat]`的值是否为0,表示没有报文正在发送。如果是这样,进入下一步检查。
然后,函数检查`Dealwith.Key1_REG`和`Dealwith.Key2_REG`是否有按键被按下。如果有按键被按下,进入下一步操作。
接下来,函数构建发送的数据帧`Txbuf`。这个数据帧包括装置地址、写寄存器的功能码、寄存器地址、寄存器数量以及按键的状态信息。具体地,装置地址存储在`Txbuf[0]`,功能码为`MOD_WRITE_M_REGISTER`存储在`Txbuf[1]`,寄存器地址的高8位和低8位分别存储在`Txbuf[2]`和`Txbuf[3]`,寄存器数量为2存储在`Txbuf[5]`,按键的状态信息分别存储在`Txbuf[7]`、`Txbuf[8]`、`Txbuf[9]`、`Txbuf[10]`。
接下来,函数计算数据帧的校验码,并将校验码的低8位存储在`Txbuf[11]`,高8位存储在`Txbuf[12]`。
最后,函数将数据帧的长度13存储在变量`Txlen`中,并调用`DMA_Usart1_Send`函数发送数据。
以上就是代码的分析。该函数用于根据按键的状态信息构建并发送数据帧给从机,从而实现按键信息的传输。
阅读全文