單片機通信模塊設計_第1頁
單片機通信模塊設計_第2頁
單片機通信模塊設計_第3頁
單片機通信模塊設計_第4頁
單片機通信模塊設計_第5頁
已閱讀5頁,還剩59頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

單元8通信模塊設計

回顧1,DS18B20有幾個管腳?其和單片機連接僅需幾根連接線?

2,A/D轉換的性能指標有哪些?含義分別是什么?3,ADC0809轉換精度為多少位?轉換時間?4,DAC0832一般應用在哪些場合?其轉換精度是?本單元任務任務1單片機系統(tǒng)之間的串行通信設計任務2單片機與PC機串行通信設計任務描述:任務分析: 客戶希望可以在控制室遠程發(fā)指令給廣告燈系統(tǒng)改變流水燈運行方式,而不是每次都要在親臨安裝現(xiàn)場進行調校。本任務要求在控制室按下按鍵K1、K2,分別遠程控制現(xiàn)場流水燈依次點亮運行以及流水燈紅藍交替點亮運行。

遠程控制包括無線和有線方式,其中有線方式中最常見的就是串口通訊方案。51單片機集成了串口引擎,因此可以方便利用串口進行數據的收發(fā)。本設計也將運用單片機串口編程方案解決遠程控制的問題。

任務1單片機系統(tǒng)之間的串行通信設計1.通信基本概念

計算機CPU與外部設備之間進行的信息交換,或者計算機之間的信息交換,均稱為通信。通信通常有并行和串行兩種方法。并行通信是指數據的各位同時進行傳送(發(fā)送或接收)的通信方式。其優(yōu)點是傳送速度快;缺點是數據有多少位,就需要多少根傳送線。例如8051單片機的P1口作為輸出/輸入口時,在P1口引腳上的8位數據同時輸出到外部設備或讀入到CPU中。圖8-1(a)所示為8051單片機與外設間8位數據并行通信的連接方法。并行通信在位數多、傳送距離又遠時就不太適宜。并行數據通信是指數據的各位同時進行傳送(發(fā)送或接收)的通信方式。其優(yōu)點是傳送速度快;缺點是數據有多少位,就需要多少根傳送線。串行數據通信指數據是一位一位順序傳送的通信方式,它的突出優(yōu)點是只需一對傳送線(利用電話線就可作為傳送線),這樣就大大降低了傳送成本,特別適用于遠距離通信;其缺點是傳送速度較低。串行通信數據格式異步通信同步通信數據傳輸方式單工(Simplex):單工方式僅能進行一個方向的傳輸,即發(fā)送方只能發(fā)送信息,接收方只能接收信息半雙工(Half-Duplex):半雙工方式能交替進行雙向數據傳輸,但兩設備之間只有一根傳輸線,即不能同時進行兩個方向的數據傳輸全雙工(Full-Duplex):全雙工方式能同時進行兩個方向的數據傳輸,設備之間有兩根傳輸線,在發(fā)送的同時也能接收信息傳輸速率串行通信中傳輸速率的單位是波特率(baudrate)。波特率等于每秒鐘傳輸二進制的數據位數(位/秒)如果數據傳輸速率為960字符/秒,在異步通信下,每個字符包含10位(1個起始位、8個數據位、1個停止位),則一個8位的字符實際包含10位,計算波特率為

10×960=9600位/秒 每個數據位傳輸的時間為波特率的倒數,即

=1/9600≈0.1042ms2.串行接口控制寄存器8051單片機的串口接口中的核心部件—通用異步接收/發(fā)送器,簡稱UART(Univerial

AsynohronousReceiver/Transmitter),為異步串行通信設計提供了簡便可靠的方案。單片機接收數據時,串行數據由RXD引腳接收到接收緩沖器SBUF,再通過指令讀SBUF即得到接收的數據;發(fā)送數據時,由指令直接將數據寫入發(fā)送緩沖器SBUF中,隨后由硬件控制將數據輸出到TXD引腳上。當接收緩沖器滿或發(fā)送緩沖器空,將置RI位(接收中斷標志)或TI(發(fā)送中斷標志)為“1”,若串行中斷允許(ES=1)及總中斷允許(EA=1),則向CPU產生串口中斷。單片機串行通信有關的控制寄存器包括串行控制寄存器SCON、電源控制寄存器PCON及中斷允許寄存器IE。串行控制寄存器SCON:SCON用于設定串行接口工作方式、接收發(fā)送控制及設置狀態(tài)標志。SCON格式如下(98H)D7D6D5D4D3D2D1D0SCONSM0SM1SM2RENTB8RB8TIRI位地址9F9E9D9C9B9A9998SCON中的各位含義如下:

SM0,SM1串行口的工作方式選擇位SM0SM1工作方式功能說明波特率000移位寄存器方式(用于擴展I/O口)fosc/1201110位異步收發(fā)方式(UART)由TI控制10211位異步收發(fā)方式(UART)fosc/32或fosc/6411311位異步收發(fā)方式(UART)由TI控制SM2多機通信控制位 在方式2或方式3中,如果SM2=1,則接收到的第9位數據(RB8)為0時不激活RI,接收到的數據丟失;只有當收到的第9位數據(RB8)為1時才激活RI,向CPU申請中斷。如果SM2=0,則不論收到的第9位數據(RB8)為1還是為0,都會將接收的數據裝入SBUF中。在方式1時,如果SM2=1,則只有收到有效的停止位時才會激活RI;若沒有接收到有效的停止位,則RI清零。在方式0中,SM2必須為0REN允許串行接收控制位 由軟件置1或清0,只有當REN=1時才允許接收,相當于串行接收的開關。若REN=0,則禁止接收。在串行通信接收控制過程中,如果滿足RI=0和REN=1(允許接收)的條件,就允許接收,一幀數據就裝載入接收SBUF中TB8發(fā)送數據位 發(fā)送數據的第9位(D8)裝入TB8中。在方式2或方式3中,根據發(fā)送數據的需要由軟件置位或復位。在許多通信協(xié)議中可用作奇偶校驗位,也可在多機通信中作為發(fā)送地址幀或數據幀的標志位。對于后者,TB8=1,說明該幀數據為地址;TB8=0,說明該幀數據為數據字節(jié)。在方式0或方式1中,該位未用RB8接收數據位 接收數據的第9位。在方式2或方式3中,接收到的第9位數據放在RB8位。它或是約定的奇偶校驗位,或是約定的地址數據標示位。在方式2或方式3多機通信中,若SM2=1,如果RB8=1,說明收到的數據為地址幀。在方式1中,若SM2=0(即不是多機通信情況),RB8中存放的是已接收到的停止位。在方式0中,該位未用TI發(fā)送中斷標志位 在一幀數據發(fā)送完時被置位。在方式0串行發(fā)送第8位結束或其他方式串行發(fā)送到停止位的開始時由硬件置位,可用軟件查詢。它同時也申請中斷,TI置位為意味著向CPU提供“發(fā)送緩沖器SBUF已空”的信息,CPU可以準備發(fā)送下一幀數據。串行口發(fā)送中斷相應后,TI不會自動清0,必須由軟件清0RI接收中斷標志位 在接收到一幀有效數據后由硬件置位。在方式0中,第8位數據發(fā)送數據時,由硬件置位;在其他三種方式中,當接收到停止位時,由硬件置位,RI=1,申請中斷,表示一幀數據接收結束,并已裝入接收SBUF中,要求CPU取走數據。CPU相應中斷,取走數據。RI也必須由軟件清0,清除中斷申請,并準備接收下一幀數據。 串行發(fā)送中斷標志TI和接收中斷標志RI是同一個中斷源,CPU事先不知道是發(fā)送中斷TI還是接收中斷RI產生的中斷請求,所以,在全雙工通信時,必須由軟件來判別,在CPU響應中斷以后,不能由硬件自動清零,只有在用戶查詢出是發(fā)送中斷還是接收中斷以后,由用戶通過軟件清0電源控制寄存器PCON:電源控制寄存器PCON能夠進行電源控制,其D7位SMOD是串行口波特率設置位。稱為波特率倍增位。即當SMOD=1時,波特率加倍;當SMOD=0時,波特率不加倍。PCON與串行通信有關的格式如下SMODGF0GF1PDIDL中斷允許控制寄存器IE:IE寄存器控制中斷系統(tǒng)的各中斷的允許與否。其中與串行通信有關的位有EA和ES位,當EA=1時且ES=1時,串行中斷允許3.串行接口工作方式

串行接口的工作方式有4種,由SCON中的SM0和SM1來定義。在這4種工作方式中,串行通信只使用方式1、方式2、方式3,方式0主要用于擴展并行輸入/輸出口方式0

方式0為移位寄存器輸入輸出方式,也可接同步輸入輸出設備,一般用于擴展I/O口。

擴展輸出口。例如,通過74LS164擴展并行輸出口時,如圖8-7所示,串行數據通過RXD引腳輸出,TXD引腳輸出移位脈沖。當數據寫入串行口數據緩沖器SBUF時,TXD每送出一位移位信號,RXD引腳就發(fā)送一位數據。直到最高位(D7位)發(fā)出后,停止發(fā)送數據和移位脈沖,并由硬件置TI為“1”,申請中斷 擴展輸入口。例如,通過74LS165擴展并行輸入口,如圖8-8所示,當設置REN(SCON.4)=1且RI(SCON.0)=1時,就啟動一次接收過程,此時,RXD引腳為串行數據輸入端,TXD引腳仍輸出移位脈沖,每輸出一位移位脈沖,從RXD引腳輸入到移位寄存器的數據左移一位,直到接收完所有數據位,再裝入接收緩沖器SBUF中,并由硬件置RI為“1”,申請中斷

【課堂練習】試用164擴展輸出口連接LCD1602數據口,驅動顯示“Thisisdisplaysystemwith74LS164”方式1

方式1是一幀10位的異步串行通信方式。共包括1個起始位、8個數據位(低位在前)和一個停止位。TXD為發(fā)送端,RXD為接收端,波特率可變 發(fā)送 串行口在方式1下進行發(fā)送時,數據由TXD端輸出。CPU執(zhí)行一條寫入SBUF的指令就會啟動串行口發(fā)送,發(fā)送完一幀數據信息時,由硬件置發(fā)送中斷標志TI為“1”,申請中斷 接收 接收數據時,SCON應處于允許接收狀態(tài)(REN=1)。接收數據有效時,數據裝載入SBUF,停止位進入RB8,RI置“1”,申請中斷方式2、3

串行口工作于方式2或方式3,為波特率固定11位異步通信口,發(fā)送和接收的一幀信息由11位組成,即1位起始位、8位數據位(低位在前)、1位可編程位(第9位)和1位停止位。TXD為發(fā)送端,RXD為接收端。發(fā)送時可編程位(TB8)根據需要設置為“0”或“1”(TB8即可作為多機通信中的地址數據標志位又可作為奇偶校驗位);接收時,可編程位的信息被送入SCON的RB8中 發(fā)送 數據由TXD端輸出,附加的第9位數據為SCON中的TB8。CPU執(zhí)行一條寫SBUF的指令后,便立即啟動發(fā)送器發(fā)送,送完一幀信息后,TI被置“1”,申請中斷 接收 當REN=1,允許串行口接收數據。數據由RXD端輸入,接收11位信息。接收數據有效,8位數據裝入SBUF,第9位數據裝入RB8,并置RI為14.波特率

串行通信中,收發(fā)雙方不管是對數據傳輸格式,或對數據傳輸速率都必須相互約定。數據傳輸格式通過編程設定不同的工作方式來確定方式0的波特率 波特率固定為振蕩頻率的1/12。即: 方式0波特率=/12

課堂練習:試計算晶振頻率為12MHz、6MHz,方式0的波特率?方式2的波特率 波特率為振蕩頻率的1/64或1/32,它取決于PCON的SMOD位。當SMOD=0,波特率為的1/64,當SMOD=1,波特率為的1/32。即: 方式2波特率=×方式1、3由定時器T1作為波特率發(fā)生器,因此波特率由定時器T1的溢出率與SMOD共同決定。即: 方式1、3波特率=T1溢出率×

通常設定T1為工作方式2(8位自動重載模式),設定時初值為x,則每過(-x)個機器周期產生一次溢出。溢出周期為: (-x)×12/

則溢出率為: 所以: 方式1、3波特率= T1工作方式2的定時初值【例8-1】某8051單片機控制系統(tǒng),晶振頻率為12MHz,要求串行口發(fā)送數據為8位,波特率為1200b/s,編寫串行口的初始化程序 分析:方式0主要用于擴展IO口。方式2的波特率為晶振頻率的1/32或1/64,無法達到1200b/s,且方式2、3為9位UART??芍x用方式0、2、3都不符合題目要求。因此設定為工作方式1。 設SMOD=0,則T1工作方式2的定時初值X為

X=28-2SMOD×fosc/(12×32×波特率)

=256-1×12×106/(384×1200)

=256-26.04=229.96≈0E6H 初始化程序如下:

SCON=0x50; //串行口工作于方式1 PCON=PCON&&0x7f;//SMOD=0 TMOD=0x20; //T1工作于方式2,定時方式

TH1=0xE6; //設置時間常數初值

TL1=0xE6; TR1=1; //啟動T1

執(zhí)行上面的程序后,即可使串行口工作于方式1,波特率為1200b/s。

【課堂思考】某單片機系統(tǒng)的晶振頻率為11.0592MHz,要求串行口發(fā)送數據為8位,波特率為9600b/s,試編寫串行口的初始化程序。波特率方式1、3fosc=6MHzfosc=12MHzfosc=11.0592MHzSMODT1方式初值SMODT1方式初值SMODT1方式初值62.5k12FFH19.2k12FDH9.6k02FDH4.8k12F3H02FAH2.4k12F3H12F3H02F4H1.2k12E6H02E6H02E8H60012CCH02CCH02D0H30002CCH0298H02A0H137.5121DH021DH022EH1100272H01FEEBH01FEFFH5.串行通信設置過程

1.波特率設置初始化,通信雙方的波特率必須一致;2.串行口初始化;3.按約定發(fā)送/接收數據;4.編寫串行中斷服務程序1.Proteus電路設計2.KeilC51程序設計3.Proteus-Keil聯(lián)合調試仿真任務實施單片機之間串口通信電路連接 左邊單片機用于接收控制室內發(fā)來的指令調整流水燈運行,流水燈電路安裝在P1口;右邊單片機安放在控制室,根據按鍵發(fā)出相應指令,按鍵k0、k1安裝在P1.6、P1.7口。兩個單片機的發(fā)送端口和接收端口交叉相連,即單片機的發(fā)送端和另一個單片機的接收端相連。(1)程序流程

左邊單片機接收控制室內發(fā)來的指令,當接收到指令“0xf1”,控制流水燈依次點亮運行;當接收到指令“0xf2”,控制流水燈紅藍交替點亮運行。右邊單片機根據按鍵發(fā)出相應指令,按下k0發(fā)出指令“0xf1”,按下k1發(fā)出指令“0xf2”。

單片機1程序:

#include"AT89X51.H" unsignedcharcodeled_light1[]={0X7E,0XBD,0XDB,0XE7, 0XDB,0XBD,0X7E};//兩頭向中間,然后再返回的編碼

unsignedcharcodeled_light2[]={0Xaa,0X55};//紅燈-藍燈交替點亮的編碼

voidmain() { TMOD=0x20; //設置定時器1工作方式2 TH1=0xfd; //裝載定時器初值,波特率為9600 TL1=0xfd; //波特率重裝值

SCON=0x50; //設置串行口方式1,REN=1準備接收數據

PCON=0x0; //波特率不增加

TR1=1; //啟動定時器1 ES=1; //允許串行中斷

EA=1; //允許總中斷標志位

while(1) { if(led_running1==1) //判斷l(xiāng)ed_running1標志位是否為1 { P1=led_light1[i++];//運行兩頭向中間,再返回

delay();

if(i==7)i=0; } if(led_running2==1) //判斷l(xiāng)ed_running2標志位是否為1 { P1=led_light2[i++];//運行紅-藍燈交替點亮

delay();圖9-4串行中斷程序流程

if(i==2)i=0; } } }voidserial()interrupt4 //接收到數據,產生串行中斷{ RI=0; //清接收中斷標志RI,使得可繼續(xù)接收

if(SBUF==0xf1) //判斷接收的數據

{ led_running1=1; //led_running1運行標志位置1 led_running2=0; i=0; //運行位置變量重新清0 }

if(SBUF==0xf2) { led_running1=0; led_running2=1; //led_running2運行標志位置1 i=0; //運行位置變量重新清0 }

單片機2程序:

#include"AT89X51.H" voidmain() { TMOD=0x20; //設置定時器1工作方式2 TH1=0xfd; //裝載定時器初值,波特率為9600 TL1=0xfd; //波特率重裝值

SCON=0x50; //設置串行口方式1,REN=1準備接收數據

PCON=0x0; //波特率不增加

TR1=1; //啟動定時器1 while(1) { if(P1_6==0) //判斷key0被按下

{

key_delay();//去抖延時10ms if(P1_6==0) //再次判斷key0按下

{ SBUF=0xf1; //發(fā)送的值裝載到SBU

while(!TI); //等待發(fā)送完畢

TI=0; //清發(fā)送標志,使得可繼續(xù)發(fā)送

} } if(P1_7==0)//判斷key1被按下

{

key_delay();//去抖延時10ms if(P1_7==0) //再次判斷key1按下

{ SBUF=0xf2; //發(fā)送的值裝載到SBUF

while(!TI); //等待發(fā)送完畢

TI=0; //清發(fā)送標志,使得可繼續(xù)發(fā)送

} } } }

配置步驟1分別建立兩個單片機的C51工程文件,并編寫相應程序,調試通過生成對應的HEX文件(Task程序-1.hex、Task程序-2.hex)Proteus-Keil聯(lián)合調試仿真步驟2把Task程序-1.hex、Task程序-2.hex拷貝到此任務對應的proteus電路設計文件夾中步驟3打開電路設計文件,選中其一單片機并雙擊,打開“EditComponent”對話框,將對應的HEX文件加載到單片機中,如圖8-15所示。同理可將另一個單片機的HEX文件加載進來。另外注意,根據串口通信波特率設置要求,需將單片機的晶振頻率“ClockFrequency”更改為11.0592MHz步驟4點擊中的按鈕,啟動運行。即可通過右邊單片機按鍵控制左邊單片機的流水燈運行任務描述:任務分析: 實現(xiàn)單片機系統(tǒng)之間的通信設計后,客戶還希望可以通過PC機向電子廣告屏系統(tǒng)發(fā)出指令,以便控制電子廣告屏上的流水燈依次點亮運行以及流水燈紅藍交替點亮運行樣式。

PC機和單片機系統(tǒng)共有的通信口資源是串行口,因此仍可用串口作為溝通PC機和單片機系統(tǒng)信息之間的橋梁。本任務將基于proteus仿真軟件,模擬PC機和單片機串口通信設計的完整過程,當電子廣告屏系統(tǒng)接收到PC機發(fā)出指令“0x05”,流水燈依次點亮運行,當接收的指令為“0x08”,流水燈紅藍交替點亮運行。

任務2單片機與PC機串行通信設計1.RS-232C標準串行總線

RS-232C是美國電子工業(yè)協(xié)會EIA推薦的一種串行物理接口標準,RS-232C總線標準有25條信號線,包括一個主通道和一個輔助通道。而對于一般的雙工通信,僅需幾根信號線就可實現(xiàn),如一根發(fā)送線、一根接收線及地線引腳名稱功能1DCDMODEM收到遠程載波信號,向DTE發(fā)載波信號DCD2RXD接收數據線3TXD發(fā)送數據線4DTRDTE(數據終端:數據源或目的地)準備就緒,發(fā)送DTR給MODEM5GND信號地6DSRDCE(數據通信設備:MODEM)準備就緒,發(fā)送DSR給DTE7RTSDTE在檢測到DSR有效時,向MODEM發(fā)送RTS,請求發(fā)送數據給遠程DTE8CTS當MODEM檢測到RTS有效時,根據目的地的號碼向遠程MODEM發(fā)出呼叫,遠程MODEM收到此呼叫,發(fā)出回答載波信號,本地MODEM收到遠程載波信號時,向遠程MODEM發(fā)出原載波信號進行確認,同時發(fā)送DCD、CTS給DTE,表示通信鏈路已經建立,可以通信9RIMODEM收到遠方呼叫時,向DTE發(fā)出RI振鈴,RI結束,若DTR有效,向對方發(fā)應答信號2.MAX232介紹

由于RS-232C規(guī)定的邏輯電平同TTL/MOS電平不一樣,因

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論