11464|13

83

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

串口发送字符串的问题 [复制链接]

请教一下,用C写430程序的时候,输出一个int或者更长的变量到串口怎么做最好? 例程中没有相关代码,谢谢!!

最新回复

IAR中设置为: options--->General options--->Library Options--->PRINTF FORMATTER-->large options--->General options--->Library Options--->scanf formatter-->large  详情 回复 发表于 2005-4-8 17:48
 
点赞 关注

回复
举报

70

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
可以用以下方法:
1、定义一个字符数组(长度为变量最大表示位数+1,有符号数+2,int类型长度为7)
2、调用“n= spritef(字符数组指针,输出控制字符串, 变量);”库函数。执行完成后,字符数组中为变量的ASCII码字符串。注意:该字符串是以变量实际长度+0x00结束。
3、向串口发送该字符串,判断第一次出现0x00时完成发送。
4、接收时用相应C库函数转换回来(若需要)

有没有其它更好的办法,我不知道,那位能介绍一下吗?
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
按位取,每位转化成对应的字符,转送,收到后再转化为int型数据,这样做不知道可以不
个人意见~
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

4
 
对int如何按位取?用指针吗?
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

5
 
int 型数据  123456   可以转化为 0x01,0x02,0x03,0x04,0x05,0x06把字符发送出去后,接收后再重新组装成int型数据   123456
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

6
 
int在内存中是2字节的二进制码,最高位是符号位,负数是以补码存储,按这种方法实际是将int转换为BCD码,简单的按位取字节可能达不到“ 0x01,0x02,0x03,0x04,0x05,0x06”的要求,我没有试过。
用sprintf函数转换,只要将字符数组的元素都屏蔽掉高半字节(即减去“0x30”)后,得到的就是BCD码了。不过在发送时,难判断何时结束,因为数字0和字符串结束符一样都是0x00。

我正在作一个发送的东西,要求传送的数据格式为“紧缩BCD”码,即高半字节为十进制低位,低半字节为十进制高位(《三表远串标准》中要求的地址码和数据域定点浮点数用此码,真搞不懂,为什么要如此定义,在C中运算特麻烦!除非用汇编),这几天正在犯难如何进行简洁的相互转换,谁有好办法??清指点迷津。谢谢!!
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

7
 
这个应该是比较常见的问题啊,但是在faq和精华贴里面都没有找到,烦请版主指点一下吧!
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用:

int 型数据 123456 可以转化为 0x01,0x02,0x03,0x04,0x05,0x06把字符发送出去后,接收后再重新组装成int型数据 123456
这样太累了.为什么不是0x12,0x34,0x56呢?
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用:

这样太累了.为什么不是0x12,0x34,0x56呢?
对!这就是所谓“紧缩BCD码”。如何将变量(如int)进行转换?
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用:

可以用以下方法:
1、定义一个字符数组(长度为变量最大表示位数+1,有符号数+2,int类型长度为7)
2、调用“n= spritef(字符数组指针,输出控制字符串, 变量);”库函数。执行完成后,字符数组中为变量的ASCII码字符串。注意:该字符串是以变量实际长度+0x00结束。
3、向串口发送该字符串,判断第一次出现0x00时完成发送。
4、接收时用相应C库函数转换回来(若需要)

有没有其它更好的办法,我不知道,那位能介绍一下吗?
我觉得你这种方法挺好呀!请教一下,sprintf()可以转化浮点数吗?
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

11
 
可以,输出控制字符串使用“%f”就行了。
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

12
 
不过必须在“大模式”下。
 
 
 

回复

49

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用:

不过必须在“大模式”下。
什么叫大模式?
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

14
 
IAR中设置为:
options--->General options--->Library Options--->PRINTF FORMATTER-->large
options--->General options--->Library Options--->scanf formatter-->large
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表