新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 輕松學(xué)PIC之RS232串口通信篇

輕松學(xué)PIC之RS232串口通信篇

作者: 時(shí)間:2013-11-14 來源:網(wǎng)絡(luò) 收藏

在實(shí)際應(yīng)用中一般采用如圖4 所示的硬件電路圖,這是最簡(jiǎn)單的連接方法,但是對(duì)我們來說已經(jīng)足夠使用了。

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

  軟件可以設(shè)定串口號(hào)、波特率、校驗(yàn)位等參數(shù),非常實(shí)用。在實(shí)際應(yīng)用中一定要保證上位機(jī)設(shè)置與單片機(jī)相統(tǒng)一,否則數(shù)據(jù)將會(huì)出錯(cuò)。串口調(diào)試助手可以從http://www.hificat.com/ 免費(fèi)下載使用。

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

  #includepic.h> / 包含單片機(jī)內(nèi)部資源預(yù)定義

  unsigned char recdata;

  void delay() // 延時(shí)子程序

  {

  unsigned int k;

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

  }

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

  // 主程序

  void main()

  {

  TRISC=0xC0; // 設(shè)置C 口方向

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

  SPBRG=0X19; // 設(shè)置波特率為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();

  }

  }

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

  // 中斷函數(shù)

  void interrupt usart(void)

  {

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

  {

  RCIF=0;

  recdata=RCREG; // 接收數(shù)據(jù)并存儲(chǔ)

  TXREG=recdata; // 返送接收到的數(shù)據(jù) // 把接

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

  }

  }

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

  我們輸入了這么長(zhǎng)一段程序后,作為初學(xué)者的讀者一定對(duì)有些語句會(huì)有點(diǎn)疑問,下面我們就來一起結(jié)果實(shí)際,看一下一些關(guān)鍵程序語句的作用。

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

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

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

手機(jī)電池相關(guān)文章:手機(jī)電池修復(fù)


數(shù)字通信相關(guān)文章:數(shù)字通信原理


通信相關(guān)文章:通信原理


電荷放大器相關(guān)文章:電荷放大器原理
蜂鳴器相關(guān)文章:蜂鳴器原理

上一頁 1 2 下一頁

關(guān)鍵詞: PIC RS232 串口通信

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉