前言:站長在學習這個單片機和PC串口通訊實驗共花費了整整3個星期的時間,期間翻了好幾本書和上網(wǎng)搜索了不少相關資料,這也是我自學單片機過程中的一個里程碑。串口通訊對單片機而言意義重大,不但可以實現(xiàn)將單片機的數(shù)據(jù)傳輸?shù)诫娔X端,而且也能實現(xiàn)電腦對單片機的控制,比如可以很直觀地把紅外遙控器鍵值的數(shù)據(jù)碼顯示在電腦上,可以使編寫紅外遙控程序時方便不少,起到仿真器的某些功效。
51單片機有一個全雙工的串行通訊口,所以單片機和電腦之間可以方便地進行串口通訊。進行串行通訊時要滿足一定的條件,比如電腦的串口是RS232電平的,而單片機的串口是TTL電平的,兩者之間必須有一個電平轉換電路,我們采用了專用芯片MAX232進行轉換,雖然也可以用幾個三極管進行模擬轉換,但是還是用專用芯片更簡單可靠。我們采用了三線制連接串口,也就是說和電腦的9針串口只連接其中的3根線:第5腳的GND、第2腳的RXD、第3腳的TXD。這是最簡單的連接方法,但是對我們來說已經(jīng)足夠使用了,電路如下圖所示,MAX232的第10腳和單片機的11腳連接,第9腳和單片機的10腳連接,第15腳和單片機的20腳連接。電子制作實驗室網(wǎng)站的提供的帶擴展元件的51單片機實驗板上已經(jīng)裝配好了全部硬件。
九針串口Serial (PC 9)
|
|
1 |
CD |
載波檢測 |
2 |
RXD |
接收數(shù)據(jù) |
3 |
TXD |
發(fā)送數(shù)據(jù) |
4 |
DTR |
數(shù)據(jù)終端準備好 |
5 |
GND |
地 |
6 |
DSR |
設備準備好 |
7 |
RTS |
發(fā)送請求 |
8 |
CTS |
清除發(fā)送 |
9 |
RI |
鈴聲指示 |
為了能夠在電腦端看到單片機發(fā)出的數(shù)據(jù),所以我們還要借助一個電腦串口調試軟件,好在網(wǎng)絡上已經(jīng)有了現(xiàn)成的的調試軟件,點擊這里可以下載這個串口調試軟件。
;這是一個89C51單片機向PC串口單向發(fā)送數(shù)據(jù)AF的程序 ;通過MAX232專用芯片作RS232/TTL電平轉換. ;波特率4800KBPS,只要P3.2引腳變成低電平(也就是按下紅外遙控器的任意鍵),就連續(xù)發(fā)送16進制的AF字符(就是一個8位2進制的數(shù)值) ORG 0000H AJMP MAIN;轉入主程序 ORG 0003H ;外部中斷P3.2腳INT0入口地址 AJMP INT ;轉入外部中斷服務子程序(解碼程序) ;以下為主程序進行CPU中斷方式設置 MAIN:SETB EA ;打開CPU總中斷請求 SETB IT0 ;設定INT0的觸發(fā)方式為脈沖負邊沿觸發(fā) SETB EX0 ;打開INT0中斷請求 AJMP $ INT: CLR EA ;暫時關閉CPU的所有中斷請求
MOV SCON,#50H;設置成串口1方式 MOV TMOD,#20H;波特率發(fā)生器T1工作在模式2上 MOV PCON,#80H;波特率翻倍為2400x2=4800BPS MOV TH1,#0F3H;預置初值(按照波特率2400BPS預置初值) MOV TL1,#0F3H;預置初值(按照波特率2400BPS預置初值) SETB TR1;啟動定時器T1 MOV A,#0AFH;將16進制的字符AF發(fā)送到串口去 MOV SBUF,A;將遙控器鍵值通過串口發(fā)送出去 SETB EA ;允許中斷 RETI ;退出解碼子程序 END |