在线时间954 小时
UID336767
注册时间2011-12-29
NXP金币721
TA的每日心情 | 开心 2018-7-23 21:04 |
---|
签到天数: 103 天 连续签到: 1 天 [LV.6]常住居民II
金牌会员
 
- 积分
- 16702
- 最后登录
- 1970-1-1
|
本帖最后由 lkl0305 于 2015-9-29 10:03 编辑
一、问题描述:
在上位机计算机与微控制器通信时,经常要传输数据,有很多采用了ASCII码传输,那如果2字节的整数,就需要转换成对应的ASCII码发送,计算机发送过来的ASCII码数据又要转成2字节整数,如何实现呢?
二、解决办法:
1、经分析,2字节整数共有4个16进制数据,因此要用4字节来存放。
2、而反过来,需要将4字节的ASCII码转成16进制数据存放。
3、二进制数与16进制数据之间转换程序之前已经说明。
4、对应程序我写出来也调试通过了,给大家分享一下:
(1)将一个2字节整数转成4个字节ASCII
uint8_t OneWord2FourAscii(uint16_t oneWord, uint8_t * fourAscii)
{
uint8_t result = 0;
uint8_t aAscii;
uint8_t fourAsciiTemp[4];
aAscii = Hex2Ascii(oneWord >> 12);
if (aAscii == 0xFF)
{
return result;
}
*fourAsciiTemp = aAscii;
aAscii = Hex2Ascii((oneWord >> 8) & 0x0F);
if (aAscii == 0xFF)
{
return result;
}
*(fourAsciiTemp + 1) = aAscii;
aAscii = Hex2Ascii((oneWord >> 4) & 0x0F);
if (aAscii == 0xFF)
{
return result;
}
*(fourAsciiTemp + 2) = aAscii;
aAscii = Hex2Ascii(oneWord & 0x0F);
if (aAscii == 0xFF)
{
return result;
}
*(fourAsciiTemp + 3) = aAscii;
*fourAscii = *fourAsciiTemp;
*(fourAscii + 1) = *(fourAsciiTemp + 1);
*(fourAscii + 2) = *(fourAsciiTemp + 2);
*(fourAscii + 3) = *(fourAsciiTemp + 3);
result = 1;
return result;
}
(2)将4个字节ASCII转成一个2字节整数
uint8_t FourAscii2OneWord(uint8_t * fourAscii, uint16_t * oneWord)
{
uint8_t result = 0;
uint8_t aHex;
uint16_t oneWordTemp;
aHex = Ascii2Hex(*fourAscii);
if(aHex == 0xFF)
{
return result;
}
oneWordTemp = ((uint16_t)aHex) << 12;
aHex = Ascii2Hex(*(fourAscii + 1));
if(aHex == 0xFF)
{
return result;
}
oneWordTemp |= ((uint16_t)aHex) << 8;
aHex = Ascii2Hex(*(fourAscii + 2));
if(aHex == 0xFF)
{
return result;
}
oneWordTemp |= ((uint16_t)aHex) << 4;
aHex = Ascii2Hex(*(fourAscii + 3));
if(aHex == 0xFF)
{
return result;
}
oneWordTemp |= aHex;
*oneWord = oneWordTemp;
result = 1;
return result;
}
三、感想与收获:
1、这个在一些微处理器与上位机通信会用到。
|
|