輕松學(xué)PIC之RS232串口通信篇
在實(shí)際應用中一般采用如圖4 所示的硬件電路圖,這是最簡(jiǎn)單的連接方法,但是對我們來(lái)說(shuō)已經(jīng)足夠使用了。
為了能夠在電腦端看到單片機發(fā)出的數據,我們必須借助一個(gè)PC 機(上位機)的軟件進(jìn)行觀(guān)察,這里我們推薦一個(gè)免費的電腦串口調試軟件——串口調試助手,軟件界面如圖5 所示。
軟件可以設定串口號、波特率、校驗位等參數,非常實(shí)用。在實(shí)際應用中一定要保證上位機設置與單片機相統一,否則數據將會(huì )出錯。串口調試助手可以從http://www.hificat.com/ 免費下載使用。
對于下位機軟件的編程,我們使用MPLab IDE 軟件來(lái)進(jìn)行C 語(yǔ)言編程,它是我們的編程環(huán)境,同時(shí)我們可以通過(guò)使用ICD2 仿真燒寫(xiě)器和增強型PIC實(shí)驗板連接進(jìn)行程序的仿真調試和燒寫(xiě)步驟,具體的操作步驟,我們已經(jīng)在前幾期做了詳細的說(shuō)明和介紹,在此就不再重復說(shuō)明,讀者朋友可以參閱以前的文章或直接登陸http://www.hificat.com/pic_demo/pic_demo.asp 查看資料?,F在我們可以輸入程序代碼進(jìn)行調試了,我們在MPLab IDE 軟件中新建工程,加入源程序代碼,同時(shí)進(jìn)行芯片型號的選擇和配置位的設置,我們實(shí)驗所用的芯片型號為PIC16F877A。編寫(xiě)的程序代碼如下:
#includepic.h> / 包含單片機內部資源預定義
unsigned char recdata;
void delay() // 延時(shí)子程序
{
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; // 使能串口工作,連續接收
RCIE=0X1; // 使能接收中斷
GIE=0X1; // 開(kāi)放全局中斷
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 通過(guò)ICD2 仿真燒寫(xiě)器燒入單片機芯片,然后上電運行。首先,我們打開(kāi)串口調試助手,設定好串口序號、波特率等相關(guān)參數,具體參數見(jiàn)圖6 所示,然后我們發(fā)送十六進(jìn)制數“01”,我們的思路是發(fā)送數據“01”,則點(diǎn)亮實(shí)驗板上第一個(gè)LED 發(fā)光管;發(fā)送數據“02”,則點(diǎn)亮板上第二個(gè)LED 發(fā)光管,現在我們發(fā)送了“01”后,我們可以看到實(shí)驗板上的第一個(gè)發(fā)光管已點(diǎn)亮,如圖7 所示,同樣,你可以試一下用串口調試助手發(fā)送其它數據內容,板子上將會(huì )出現何種現象。
我們輸入了這么長(cháng)一段程序后,作為初學(xué)者的讀者一定對有些語(yǔ)句會(huì )有點(diǎn)疑問(wèn),下面我們就來(lái)一起結果實(shí)際,看一下一些關(guān)鍵程序語(yǔ)句的作用。
#includepic.h> 語(yǔ)句用來(lái)加載PIC 庫文件,頭部recdata 變量的定義是用來(lái)存放我們接收到的串口數據,void delay () 是延時(shí)函數,TRISC、TRISA 相關(guān)的語(yǔ)句用來(lái)設置RC、RA 口的輸入、輸出狀態(tài),在此我們設置為輸出。SPBRG=0X19 至PEIE=0X1 這些語(yǔ)句,分別是對串口通信參數的配置與開(kāi)啟中斷使能, while(1) 是死循環(huán)語(yǔ)句,即周而復始地執行{ } 內的語(yǔ)句體,如我們現在的程序中的作用即是不停地判斷recdata 這個(gè)變量,也就是不停地判斷串口接收到的數據是否為0x01、0x02??
0x06 這些數據,通過(guò)判斷不同的數值,再點(diǎn)亮板上LED 發(fā)光管,即PORTC 端口的賦值。在程序尾部有個(gè)interrupt usart() 函數,它是我們的中斷處理函數,當有串口中斷產(chǎn)生時(shí),就會(huì )進(jìn)入這個(gè)函數體,函數體中語(yǔ)句的主要作用是把接收到的串口數據放到變量recdata 中,同時(shí)將接收到的數據再返回給上位機,即回傳給PC 機,這樣就進(jìn)行了一次完整的雙向通信。
RS232 串口通信的原理與使用我們講到這里,接下來(lái)幾期,我們將繼續一起學(xué)習增強型PIC 實(shí)驗板的其它各部分資源的原理與使用,使你對單片機應用的各方面知識都有所入門(mén)與提高。增強型PIC實(shí)驗板系統資源豐富,可做實(shí)驗有:6 位LED 數碼管、8 路LED、直控鍵盤(pán)、蜂鳴器喇叭、繼電器試驗、I2C 總線(xiàn)接口、SPI 總線(xiàn)接口、160X 液晶、128X64液晶、紅外接收頭接口、步進(jìn)電機驅動(dòng)接口、AD模/ 數轉換接口、串行時(shí)鐘芯片DS1302、溫度傳感器DS18B20 接口、RS232 串口通訊、外擴展接口以便外接更多的實(shí)驗資源。
手機電池相關(guān)文章:手機電池修復
數字通信相關(guān)文章:數字通信原理
通信相關(guān)文章:通信原理
電荷放大器相關(guān)文章:電荷放大器原理 蜂鳴器相關(guān)文章:蜂鳴器原理
評論