标题: 尴尬了。忘记单片机串口怎么发送十六进制了? [打印本页]

作者: sq8422779    时间: 2021-6-21 18:02
标题: 尴尬了。忘记单片机串口怎么发送十六进制了?
SendString("STC15F2K60S2\r\nUart2 Test !\r\n");这个没问题,是字符串。
怎么发送SendString(74)SendString(A1) ,这种十六进制数据?
这个dat的类型改成啥?忘记了。。

void SendData(BYTE dat)
{
    while (busy);               //等待前面的数据发送完成
    ACC = dat;                  //获取校验位P (PSW.0)
    if (P)                      //根据P来设置校验位
    {
#if (PARITYBIT == ODD_PARITY)
        S2CON &= ~S2TB8;        //设置校验位为0
#elif (PARITYBIT == EVEN_PARITY)
        S2CON |= S2TB8;         //设置校验位为1
#endif
    }
    else
    {
#if (PARITYBIT == ODD_PARITY)
        S2CON |= S2TB8;         //设置校验位为1
#elif (PARITYBIT == EVEN_PARITY)
        S2CON &= ~S2TB8;        //设置校验位为0
#endif
    }
    busy = 1;
    S2BUF = ACC;                //写数据到UART2数据寄存器
}


作者: xuyaqi    时间: 2021-6-21 19:34
下面就是串口怎么发送十六进制程序,Udat是一个十六进制数,你把发字符看到最后就是它:
void Uart1_SendChar(unsigned char Udat)
{
        SBUF=Udat;                //将要发送的数据放入串口数据缓冲区
        while(!TI);                //等待发送完成
    TI=0;                     //清零TI发送完成标记               
}
作者: lishengaha    时间: 2021-6-22 00:25
发送都是二进制,也可以说是十六进制,都是一个字节。至于是字符还是十六进制数值是看你怎么接收,同样发0x30H,你按字符收就是字符0,按十六进制收就是0x30h
作者: 冰点36    时间: 2021-6-22 08:55
直接设定16进制值
作者: kimoye    时间: 2021-6-22 08:57
lishengaha 发表于 2021-6-22 00:25
发送都是二进制,也可以说是十六进制,都是一个字节。至于是字符还是十六进制数值是看你怎么接收,同样发0x ...

就是这个理解
作者: sq8422779    时间: 2021-6-22 11:26
我看错了我去,前面0x就是16进制,我去
作者: 人人学会单片机    时间: 2021-7-6 20:28

串口1打印程序 可以打印3个十六位的变量 波特率9600 http://www.51hei.com/bbs/dpj-201660-1.html

串口发送 不需要while死等 串口接收执行软件复位 http://www.51hei.com/bbs/dpj-200927-1.html
作者: 790116460    时间: 2021-7-19 23:46
单片机的串口是,你给的是什么格式他就发送什么格式,在使用串口助手接收到时候也会出现“用什么显示的选项”:
1.如果你串口发送的是16进制数,可以直接把16进制数放到数组里面进行发送,也可以用sprintf函数对数据进行格式化成16进制格式,在进行发送。
2.如果你想发送ASCII码,就要把数据转换成字符串或者ASCII码进行发送




作者: dwb123    时间: 2021-7-20 11:43
这个需要上位机显示16进制,而不是发送16进制。这边推荐正点原子的上位机




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1