使用C语言操作串口

其实这并不是一件很难的事,在自己动手实验之前,我自然是知道现代操作系统都将设备看成文件来处理,这无疑降低了程序员操作硬件的难度,使用标准IO就可以操作硬件。

我上网查了一下“windows C语言 串口”,希望能得到一些示例,但是没有成功,我得到的不是用CreateFile就是用这个模块那个模块,甚至扯上了用BIOS等恐龙时代的东东。无语,还是自己试一下的好。

编译。。。运行。。。!!不好使啊,this way doesn't work!!!。wait 有个关键因素忘记了,我的U口转串口是com3,但是我还没有插入U口转串口啊!插上,哈哈,this way works!。但这还不能说明问题啊,我又用我的丁丁串口调试助手进行了一下测试,哈哈“该串口正在使用”。这回确信无疑了,方法是好使的,没想到竟然这么简单,那些人啊,把简单的事情弄复杂了!!!进一步操作。我要接受串口数据。

 

啊哈,刚开始的我是没有加if(fgets(buf,100,fp)!=0) 这个判断的,结果打印一连串的空行,刚开始还很奇怪,后来明白了,自己的编程能力有下降了!但是还是有些问题,有时候有错的字符,而且绝大多数时候的输出在不同的地方或多或少的加了回车,这应该是经过一次fgets()没有一次将数据读入,导致的结果。而之所以会出现乱码,是因为程序中有中文字符,中文字符占两个字节,而在中文字符一个字节之后断开,导致后续的字符解释失误,这在其他程序中也是有的现象!我在一个小的测试中初步证实了猜测,做法就是在puts后再puts("----")结果发现一次输出中加载了几次"---"。

我又打印了我获得数据的10进制值,发现大量的未显示字符其实是0x01也就是SOH,Start of heading。那么这就好解决了。(弄错了啊,是-1,不明白是怎么回事,好像getc将不能显示的字符返回-1?)

那么程序应该更改成:

哈哈,这回可以了,加上那个Sleep()的目的是防止CPU的使用率过高。嘿嘿,到此结束!!!满意的原创!!!

 

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值