// 收到: [01] [03] [00 00] [00 02] [CRC]
// 从站1 读起始地址0x0000 数量2
if(frame[0]==ADDR && frame[1]==0x03){
uint16_t start = (frame[2]<<8)|frame[3];
uint16_t n = (frame[4]<<8)|frame[5];
// 应答: ADDR 03 [字节数] [数据2*n] [CRC]
resp[0]=ADDR; resp[1]=0x03; resp[2]=n*2;
for(i=0;i<n;i++){
uint16_t v = regs[start+i];
resp[3+i*2]=v>>8; resp[4+i*2]=v&0xFF;
}
uint16_t crc = modbus_crc16(resp, 3+n*2);
resp[3+n*2]=crc&0xFF; resp[4+n*2]=crc>>8;
uart_send(resp, 5+n*2);
}