使用C语言操作串口
其實這并不是一件很難的事,在自己動手實驗之前,我自然是知道現(xiàn)代操作系統(tǒng)都將設(shè)備看成文件來處理,這無疑降低了程序員操作硬件的難度,使用標(biāo)準(zhǔn)IO就可以操作硬件。
我上網(wǎng)查了一下“windows C語言 串口”,希望能得到一些示例,但是沒有成功,我得到的不是用CreateFile就是用這個模塊那個模塊,甚至扯上了用BIOS等恐龍時代的東東。無語,還是自己試一下的好。
[c-sharp]?view plaincopy編譯。。。運行。。。!!不好使啊,this way doesn't work!!!。wait 有個關(guān)鍵因素忘記了,我的U口轉(zhuǎn)串口是com3,但是我還沒有插入U口轉(zhuǎn)串口啊!插上,哈哈,this way works!。但這還不能說明問題啊,我又用我的丁丁串口調(diào)試助手進(jìn)行了一下測試,哈哈“該串口正在使用”。這回確信無疑了,方法是好使的,沒想到竟然這么簡單,那些人啊,把簡單的事情弄復(fù)雜了!!!進(jìn)一步操作。我要接受串口數(shù)據(jù)。
?
[cpp]?view plaincopy啊哈,剛開始的我是沒有加if(fgets(buf,100,fp)!=0) 這個判斷的,結(jié)果打印一連串的空行,剛開始還很奇怪,后來明白了,自己的編程能力有下降了!但是還是有些問題,有時候有錯的字符,而且絕大多數(shù)時候的輸出在不同的地方或多或少的加了回車,這應(yīng)該是經(jīng)過一次fgets()沒有一次將數(shù)據(jù)讀入,導(dǎo)致的結(jié)果。而之所以會出現(xiàn)亂碼,是因為程序中有中文字符,中文字符占兩個字節(jié),而在中文字符一個字節(jié)之后斷開,導(dǎo)致后續(xù)的字符解釋失誤,這在其他程序中也是有的現(xiàn)象!我在一個小的測試中初步證實了猜測,做法就是在puts后再puts("----")結(jié)果發(fā)現(xiàn)一次輸出中加載了幾次"---"。
我又打印了我獲得數(shù)據(jù)的10進(jìn)制值,發(fā)現(xiàn)大量的未顯示字符其實是0x01也就是SOH,Start of heading。那么這就好解決了。(弄錯了啊,是-1,不明白是怎么回事,好像getc將不能顯示的字符返回-1?)
那么程序應(yīng)該更改成:
[cpp]?view plaincopy哈哈,這回可以了,加上那個Sleep()的目的是防止CPU的使用率過高。嘿嘿,到此結(jié)束!!!滿意的原創(chuàng)!!!
?
總結(jié)
- 上一篇: VS2017简单用法
- 下一篇: 在VS中创建多个项目