新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > RS232串口通信篇

        RS232串口通信篇

        作者: 時間:2016-12-16 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/201612/330818.htm

          為了能夠在電腦端看到單片機發出的數據,我們必須借助一個PC 機(上位機)的軟件進行觀察,這里我們推薦一個免費的電腦串口調試軟件——串口調試助手,軟件界面如圖5 所示。

          軟件可以設定串口號、波特率、校驗位等參數,非常實用。在實際應用中一定要保證上位機設置與單片機相統一,否則數據將會出錯。串口調試助手可以從http://www.hificat.com/ 免費下載使用。

          對于下位機軟件的編程,我們使用MPLab IDE 軟件來進行C 語言編程,它是我們的編程環境,同時我們可以通過使用ICD2 仿真燒寫器和增強型PIC實驗板連接進行程序的仿真調試和燒寫步驟,具體的操作步驟,我們已經在前幾期做了詳細的說明和介紹,在此就不再重復說明,讀者朋友可以參閱以前的文章或直接登陸http://www.hificat.com/pic_demo/pic_demo.asp 查看資料。現在我們可以輸入程序代碼進行調試了,我們在MPLab IDE 軟件中新建工程,加入源程序代碼,同時進行芯片型號的選擇和配置位的設置,我們實驗所用的芯片型號為PIC16F877A。編寫的程序代碼如下:

          #includepic.h> / 包含單片機內部資源預定義

          unsigned char recdata;

          void delay() // 延時子程序

          {

          unsigned int k;

          for(k=0;k300;k++);

          }

          //------------------------------

          // 主程序

          void main()

          {

          TRISC=0xC0; // 設置C 口方向

          TRISA=0XC0; //RA0--RA5 為輸出

          SPBRG=0X19; // 設置波特率為9600BPS

          TXSTA=0X24; // 使能串口發送,選擇高速波特率

          RCSTA=0X90; // 使能串口工作,連續接收

          RCIE=0X1; // 使能接收中斷

          GIE=0X1; // 開放全局中斷

          PEIE=0X1; // 使能外部中斷

          while(1) // 等待中斷

          {

          switch (recdata)

          {

          case 0x01:PORTC=0x01;break;

          case 0x02:PORTC=0x02;break;

          case 0x03:PORTC=0x04;break;

          case 0x04:PORTC=0x08;break;

          case 0x05:PORTC=0x10;break;

          case 0x06:PORTC=0x20;break;

          }

          delay();

          }

          }

          //------------------------------

          // 中斷函數

          void interrupt usart(void)

          {

          if(RCIF) // 判斷是否為串口接收中斷

          {

          RCIF=0;

          recdata=RCREG; // 接收數據并存儲

          TXREG=recdata; // 返送接收到的數據 // 把接

          收到的數據發送回去

          }

          }

          編好程序后,讀者朋友可以將編譯好的HEX 通過ICD2 仿真燒寫器燒入單片機芯片,然后上電運行。首先,我們打開串口調試助手,設定好串口序號、波特率等相關參數,具體參數見圖6 所示,然后我們發送十六進制數“01”,我們的思路是發送數據“01”,則點亮實驗板上第一個LED 發光管;發送數據“02”,則點亮板上第二個LED 發光管,現在我們發送了“01”后,我們可以看到實驗板上的第一個發光管已點亮,如圖7 所示,同樣,你可以試一下用串口調試助手發送其它數據內容,板子上將會出現何種現象。

          我們輸入了這么長一段程序后,作為初學者的讀者一定對有些語句會有點疑問,下面我們就來一起結果實際,看一下一些關鍵程序語句的作用。

          #includepic.h> 語句用來加載PIC庫文件,頭部recdata 變量的定義是用來存放我們接收到的串口數據,void delay () 是延時函數,TRISC、TRISA 相關的語句用來設置RC、RA 口的輸入、輸出狀態,在此我們設置為輸出。SPBRG=0X19 至PEIE=0X1 這些語句,分別是對串口通信參數的配置與開啟中斷使能, while(1) 是死循環語句,即周而復始地執行{ } 內的語句體,如我們現在的程序中的作用即是不停地判斷recdata 這個變量,也就是不停地判斷串口接收到的數據是否為0x01、0x02??

          0x06 這些數據,通過判斷不同的數值,再點亮板上LED 發光管,即PORTC 端口的賦值。在程序尾部有個interrupt usart() 函數,它是我們的中斷處理函數,當有串口中斷產生時,就會進入這個函數體,函數體中語句的主要作用是把接收到的串口數據放到變量recdata 中,同時將接收到的數據再返回給上位機,即回傳給PC 機,這樣就進行了一次完整的雙向通信。

          信的原理與使用我們講到這里,接下來幾期,我們將繼續一起學習增強型PIC 實驗板的其它各部分資源的原理與使用,使你對單片機應用的各方面知識都有所入門與提高。增強型PIC實驗板系統資源豐富,可做實驗有:6 位LED 數碼管、8 路LED、直控鍵盤、蜂鳴器喇叭、繼電器試驗、I2C 總線接口、SPI 總線接口、160X 液晶、128X64液晶、紅外接收頭接口、步進電機驅動接口、AD模/ 數轉換接口、串行時鐘芯片DS1302、溫度傳感器DS18B20 接口、訊、外擴展接口以便外接更多的實驗資源。


        上一頁 1 2 下一頁

        關鍵詞: RS232串口通

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 博爱县| 澄迈县| 安国市| 上林县| 那坡县| 长泰县| 炉霍县| 金华市| 专栏| 花垣县| 肇源县| 北海市| 赫章县| 门头沟区| 恩施市| 韶关市| 汕头市| 北碚区| 赫章县| 内黄县| 新密市| 涿州市| 正定县| 深水埗区| 田阳县| 锡林浩特市| 福州市| 北宁市| 龙门县| 蚌埠市| 察隅县| 根河市| 仁寿县| 杭锦后旗| 石泉县| 阿勒泰市| 乐平市| 玉溪市| 宜君县| 务川| 红桥区|