日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用C语言操作串口

發(fā)布時間:2024/4/24 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用C语言操作串口 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

其實(shí)這并不是一件很難的事,在自己動手實(shí)驗之前,我自然是知道現(xiàn)代操作系統(tǒng)都將設(shè)備看成文件來處理,這無疑降低了程序員操作硬件的難度,使用標(biāo)準(zhǔn)IO就可以操作硬件。

我上網(wǎng)查了一下“windows C語言 串口”,希望能得到一些示例,但是沒有成功,我得到的不是用CreateFile就是用這個模塊那個模塊,甚至扯上了用BIOS等恐龍時代的東東。無語,還是自己試一下的好。

[c-sharp]?view plaincopy
  • #include?<stdio.h>??
  • int?main(void)??
  • {??
  • ????FILE?*fp;??
  • ????if((fp=fopen("com3","r"))==NULL)??
  • ????????puts("this?way?doesn't?work!/n");??
  • ????else??
  • ????????puts("thiw?way?works!/n");??
  • ????return?0;??
  • }??
  • 編譯。。。運(yùn)行。。。!!不好使啊,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
  • #include?<stdio.h>??
  • int?main(void)??
  • {??
  • ????FILE?*fp;??
  • ????char?buf[100];??
  • ????if((fp=fopen("com3","r"))==NULL)?puts("Can't?open?com3?/n");??
  • ????while(1)??
  • ????{??
  • ????????if(fgets(buf,100,fp)!=0)??
  • ????????puts(buf);??
  • ????}??
  • ????fclose(fp);??
  • ????return?0;??
  • }??
  • 啊哈,剛開始的我是沒有加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)象!我在一個小的測試中初步證實(shí)了猜測,做法就是在puts后再puts("----")結(jié)果發(fā)現(xiàn)一次輸出中加載了幾次"---"。

    我又打印了我獲得數(shù)據(jù)的10進(jìn)制值,發(fā)現(xiàn)大量的未顯示字符其實(shí)是0x01也就是SOH,Start of heading。那么這就好解決了。(弄錯了啊,是-1,不明白是怎么回事,好像getc將不能顯示的字符返回-1?)

    那么程序應(yīng)該更改成:

    [cpp]?view plaincopy
  • #include?<stdio.h>??
  • #include?<windows.h>??
  • int?main(void)??
  • {??
  • ????FILE?*fp;??
  • ????char?temp;??
  • ????char?buf[100];??
  • ????if((fp=fopen("com3","r"))==NULL)?puts("Can't?open?com3?/n");??
  • ????while(1)??
  • ????{??
  • ????????temp=0;??
  • ????????fscanf(fp,"%c",&temp);??
  • ????????if(temp!=0)??
  • ????????????putchar(temp);??
  • ????????else??
  • ????????????Sleep(100);??
  • ????}??
  • ????fclose(fp);??
  • ????return?0;??
  • }??
  • 哈哈,這回可以了,加上那個Sleep()的目的是防止CPU的使用率過高。嘿嘿,到此結(jié)束!!!滿意的原創(chuàng)!!!

    ?

    總結(jié)

    以上是生活随笔為你收集整理的使用C语言操作串口的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。