[X]关闭

uart发送比较长的16进制数据

文档创建者:江苏-天文
浏览次数:5315
最后更新:2019-07-09
在做uart串口中断实验中,想发送比较长的数据(485的指令)
更改主函数如下
int main(void)
{

        init_intr_sys();
        XUartPs_Recv(&UartPs, RecvBuffer, TEST_BUFFER_SIZE);
        while(1){
        XUartPs_Send(&UartPs,send1,16);
        sleep(1);
        XUartPs_Send(&UartPs,send2,16);
        sleep(1);
        XUartPs_Send(&UartPs,send3,16);
        sleep(1);
        XUartPs_Send(&UartPs,send4,16);
        sleep(1);
        }
        return 0;
}

由于串口发送的是ASCII码格式的,所以事前把要发送的数据转换成了ASCII格式
//static u8 send1[32]="303032303037343030323D3F3130370D" ;
static char send1[32]="0020074002=?107\r";
//static u8 send2[32]="303033303033303930323D3F3130390D" ;
static char send2[32]="0030030902=?109\r" ;
//static u8 send3[32]="303033303033333030323D3F3130330D" ;
static char send3[32]="0030033002=?103\r" ;
//static u8 send4[32]="303037303033303930323D3F3131330D" ;
static char send4[32]="0070030902=?113\r" ;

但是我想知道如何直接定义比较长的16进制数据,以及如何更改发送的数据格式,让其发送16进制而不是ASCII格式的数据。


发表评论已发布 1

uisrc

发表于 2019-7-9 22:01:34 | 显示全部楼层

先把数据全部转换为16进制,之后再发送
//功能描述:把ASCII转换为16进制
unsigned char AscToHex(unsigned char aHex){
if((aHex>=0)&&(aHex<=9))
aHex += 0x30;
else if((aHex>=10)&&(aHex<=15))//A-F
aHex += 0x37;
else aHex = 0xff;
return Hex;
}
越努力越幸运!加油!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则