新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > RS232串口通信篇

RS232串口通信篇

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

本文引用地址:http://butianyuan.cn/article/201612/330818.htm

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

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

  對于下位機軟件的編程,我們使用MPLab IDE 軟件來進行C 語言編程,它是我們的編程環(huán)境,同時我們可以通過使用ICD2 仿真燒寫器和增強型PIC實驗板連接進行程序的仿真調試和燒寫步驟,具體的操作步驟,我們已經在前幾期做了詳細的說明和介紹,在此就不再重復說明,讀者朋友可以參閱以前的文章或直接登陸http://www.hificat.com/pic_demo/pic_demo.asp 查看資料?,F在我們可以輸入程序代碼進行調試了,我們在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; // 使能串口發(fā)送,選擇高速波特率

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

  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; // 返送接收到的數據 // 把接

  收到的數據發(fā)送回去

  }

  }

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

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

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

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

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


上一頁 1 2 下一頁

關鍵詞: RS232串口通

評論


技術專區(qū)

關閉