常用總線、通信接口(-65)課件_第1頁
常用總線、通信接口(-65)課件_第2頁
常用總線、通信接口(-65)課件_第3頁
常用總線、通信接口(-65)課件_第4頁
常用總線、通信接口(-65)課件_第5頁
已閱讀5頁,還剩60頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

3.9常用總線、通信接口數據通信的基本方式可分為并行通信與串行通信兩種:并行通信:是指利用多條數據傳輸線將一個數據的各位

同時傳送。

特點:是傳輸速度快,適用于短距離通信。串行通信:是指利用一條傳輸線將數據一位位地順序

傳送。

特點:是通信線路簡單,利用電話或電報線路就可

實現通信,降低成本,適用于遠距離通信,

但傳輸速度慢。8/1/20231串行通信:分為同步通信(SYNC)與異步通信(ASYNC)兩種方式。(實際通信中,沒有絕對的“異步”或“同步”,只是按不同的程度上“同步”。)異步通信:一個字節內同步,而字節之間“不同步”,

稱之為“異步”。同步通信:大于一個字節的“幀數據”或“塊數據”內

同步,稱之為“幀同步”或“塊同步”。稱

之為“同步”。(這時實際上“幀數據”

或“塊數據”之間也是“異步”)8/1/20232異步通信字符格式:規定有起始位、數據位、奇偶校驗位、停止位等波特率:是衡量數據傳送速率的指標(bps)。8/1/20233數據傳送方向單工方式只允許數據按照一個固定的方向傳送半雙工方式每次只能有一個站發送,另一個站接收全雙工方式允許通信雙方同時進行發送和接收8/1/20234串行通信的基本特征是數據逐位順序進行傳送串行通信的格式及約定(如:同步方式、通訊速率、數據塊格式、信號電平……等)不同,形成了多種串行通信的協議與接口標準。常見的有:?通用異步收發器(UART)——本課程介紹的串口?通用串行總線(USB)單總線(1-Wire)?I2C總線?CAN總線?SPI總線?1394?RS-485,RS-232C,RS422A標準……等等8/1/20235SPI、I2C、1-Wire、RS232是目前單片機應用系統中最常用的幾個串行總線接口。與并行擴展總線相比,串行擴展總線能夠最大程度發揮最小系統的資源功能、簡化連接線路,縮小電路板面積、擴展性好,可簡化系統設計。串行總線的缺點是數據吞吐容量小,信號傳輸較慢。但隨著CPU芯片工作頻率的提高,以及串行總線的功能增強,這些缺點將逐步淡化。8/1/202363.9.1I2C總線I2C(InterIntegratedCircuit)常譯為內部集成電路總線,或集成電路間總線,它是由Philips公司推出的芯片間串行傳輸總線。使用2線實現數據通信。

1根串行數據線(SDA)

1根串行時鐘線(SCL)。8/1/202371.I2C總線的基本特性硬件結構上具有相同的硬件接口界面。8/1/20238總線接口器件地址具有很大的獨立性。在單主系統中,每個I2C接口芯片具有唯一的器件地址,各從器件之間互不干擾,相互之間不能進行通信。MCU與I2C器件之間的通信是通過獨一無二的器件地址來實現的。數據傳輸首先從最高位開始。傳輸速率在標準模式下可達100kbit/s,在快速模式下達400kbit/s,在高速模式下達3.4Mbit/s。它是一個真正的多主機總線。如果兩個或更多主機同時初始化數據傳輸,可以通過沖突檢測和仲裁防止數據被破壞。軟件操作的一致性。任何器件通過I2C總線與MCU進行數據傳送的方式基本一樣,決定了I2C總線軟件編寫的一致性。數據線SDA/時鐘線SCL(接上拉電阻)

8/1/202392.I2C總線工作原理

(1)I2C總線信號類型開始信號:SCL為高電平時,SDA由高電平向低電平跳變,開始傳送數據。結束信號:SCL為低電平時,SDA由低電平向高電平跳變,結束傳送數據。應答信號:接收數據的器件在接收到8bit數據后,向發送數據的器件(發送器)發出特定的低電平脈沖,表示已收到數據。發送器接收到應答信號后,根據實際情況作出是否繼續傳遞信號的判斷。若未收到應答信號,由判斷為接收器出現故障。數據只能在SCL為低電平時才能改變,SCL為高電平時SDA須穩定。起始信號與結束信號都是由主器件產生。8/1/2023108/1/202311(2)I2C總線數據傳輸

主器件和從器件都可以工作于接收和發送狀態。總線必須由主器件(通常為單片機)控制,主器件產生串行時鐘控制總線的傳輸方向,并產生起始和停止條件。在起始信號結束后,主器件將發送一個用于選擇從器件地址的7位地址碼和一個數據方向位(R/W),方向位為“0”表示主器件把數據寫到所選擇的從器件中,此時主器件作為發送器,而從器件作為接收器;方向位為“1”表示主器件從所選擇的從器件中讀取數據,此時主器件作為接收器,而從器件作為發送器。在尋址字節后是按指定讀、寫操作的數據字節與應答位。在數據傳送完成后主器件必須發送停止信號。8/1/202312在51上用P1口模擬I2C(c語言)/*電平模擬函數和基本讀寫函數voidIIC_Start(void);voidIIC_Stop(void);voidSEND_0(void);voidSEND_1(void);bitCheck_Acknowledge(void);voidWrite_Byte(ucharb);bitWrite_N_Bytes(uchar*buffer,ucharn);bitRead_N_Bytes(uchar

SlaveAdr,uchar

n,uchar*buffer);ucharRead_Byte(void);*/8/1/202313#include<string.h>#include<reg52.h>#include<intrins.h>#include"aiic_51.h"sbitSCL=P1^6;sbitSDA=P1^7;voidDELAY(uintt){while(t!=0)t--;}8/1/202314voidIIC_Start(void){//啟動I2C總線的函數,當SCL為高電平時使SDA產生一個負跳變SDA=1;SCL=1;DELAY(DELAY_TIME);SDA=0;DELAY(DELAY_TIME);SCL=0;DELAY(DELAY_TIME);}8/1/202315voidIIC_Stop(void){//終止I2C總線,當SCL為高電平時使SDA產生一個正跳變SDA=0;SCL=1;DELAY(DELAY_TIME);SDA=1;DELAY(DELAY_TIME);SCL=0;DELAY(DELAY_TIME);}8/1/202316voidSEND_0(void){//發送0,在SCL為低電平時使SDA信號變為低SCL=0;SDA=0;SCL=1;DELAY(DELAY_TIME);SCL=0;DELAY(DELAY_TIME);}voidSEND_1(void){//發送1,在SCL為低電平時使SDA信號變為高SCL=0;SDA=1;SCL=1;DELAY(DELAY_TIME);SCL=0;DELAY(DELAY_TIME);}8/1/202317bitCheck_Acknowledge(void){//發送完一個字節后檢驗設備的應答信號SDA=1;SCL=1;DELAY(DELAY_TIME/2);F0=SDA;DELAY(DELAY_TIME/2);SCL=0;DELAY(DELAY_TIME);if(F0==1)returnFALSE;returnTRUE;}8/1/202318voidWrite_Byte(ucharb){//向IIC總線寫一個字節uchari;for(i=0;i<8;i++)if((b<<i)&0x80)SEND_1();elseSEND_0();}8/1/202319bitWrite_N_Bytes(uchar*buffer,ucharn){//向I2C總線寫n個字節uchari;IIC_Start();for(i=0;i<n;i++) {

Write_Byte(buffer[i]);

if(!Check_Acknowledge()) {

IIC_Stop();

return(i==n); } }IIC_Stop();returnTRUE;}8/1/202320ucharRead_Byte(void)reentrant

{//從I2C總線讀一個字節ucharb=0,i;for(i=0;i<8;i++) { SDA=1;//釋放總線

SCL=1;//接受數據

DELAY(10); F0=SDA; DELAY(10); SCL=0; if(F0==1) { b=b<<1; b=b|0x01; } else b=b<<1; }returnb;}8/1/202321bitRead_N_Bytes(uchar

SlaveAdr,uchar

n,uchar*buffer){//從I2C總線讀n個字節uchari;IIC_Start();Write_Byte(SlaveAdr);//向總線發送接收器地址if(!Check_Acknowledge())//等待接收器應答信號returnFALSE;for(i=0;i<n;i++) {

buffer[i]=Read_Byte();

if(i!=n) SEND_0();//發送應答

else SEND_1();//發送非應答

}IIC_Stop();returnTRUE;}8/1/202322IIC例:8/1/2023238/1/2023248/1/2023258/1/2023268/1/2023278/1/2023288/1/2023298/1/2023308/1/2023318/1/2023328/1/2023338/1/2023348/1/2023358/1/2023368/1/2023378/1/2023388/1/2023391.SPI總線的特點(串行外圍設備接口:serialperipheralinterface)一般使用4條線

串行時鐘線(SCK) 主機輸入/從機輸出數據線MISO

主機輸出/從機輸入數據線MOSI

低電平有效的從機選擇線SSSPI總線技術是Motorola公司推出的一種同步串行接口

3.9.2SPI串行總線8/1/2023402.SPI總線系統的構成單片機與多個SPI串行接口設備典型結構如圖6.1所示。8/1/2023413.SPI串行總線在MCS-51系列單片機中的實現

MCS-51單片機I/O口模擬SPI總線接口原理圖如圖6.2所示。8/1/202342單片機,如Motorola公司的M68HC08系列、Cygnal公司的C8051F0XX系列、Philips公司的P89LPC93X系列。A/D和D/A轉換器,如:AD公司的AD7811/12、TI公司的TLC1543、TLC2543、TLC5615等。實時時鐘RTC,如Dallas公司的DS1302/05/06等。溫度傳感器,如AD公司的AD7816/17/18;NS公司的LM74等。其他設備,如LED控制驅動器MAX7219、HD7279等,集成看門狗、電壓監控、E2PROM等功能的X5045等。4.常用SPI串行總線接口的器件8/1/202343SPI例:串行專用鍵盤/顯示器接口芯片HD72791.HD7279的主要特點

⑴與CPU間采用串行接口方式,僅占用4根口線;

⑵內部含有譯碼器,可直接接收BCD碼或16進制碼,同時具有兩種譯碼方式,實現LED數碼管位尋址和段尋址,消隱和閃爍屬性等多種控制指令,編程靈活;

⑶循環左移和循環右移指令;

⑷內部含有驅動器,無需外圍元件可直接驅動LED ⑸具有級聯功能,可方便的實現多于8位顯示或多于64鍵的鍵盤接口;

⑹具有自動消除抖動并識別按鍵鍵值的功能。 8/1/2023442.HD7279的引腳說明DIG0~DIG7:8個LED管的位驅動輸出端。SA~SG:LED數碼管的A段~G段的輸出端。DP為小數點的驅動輸出端。:片選信號。DATA:串行數據輸入/輸出端。CLK:數據串行傳送的同步時鐘輸入端。KEY:按鍵信號輸出端。RC:連接HD7279的外接振蕩元件,其典型值為R=1.5kΩ,C=15pF。:復位端。CLKO:振蕩輸出端VDD:正電源(+5V)VSS:接地8/1/2023453.HD7279的控制與實現

HD7279的控制指令由6條純指令、7條帶數據指令和1條讀鍵盤指令組成。1)純指令 (1)復位(清除)指令(A4H)

該指令將所有的顯示清除,所有設置的字符消隱、閃爍等屬性也被一起清除。執行該指令后,芯片所處的狀態與系統上電后所處的狀態一樣。

D7D6D5D4D3D2D1D0101001008/1/202346(2)測試指令(BFH)

該指令使所有的LED全部點亮,并處于閃爍狀態,主要用于測試。(3)左移指令(A1H)

該指令使所有的顯示自右向左(從第1位向第8位)移動一位(包括處于消隱狀態的顯示位),但對各位所設置的消隱及閃爍屬性不變。移動后,最右邊一位為空(無顯示)。D7D6D5D4D3D2D1D010111111D7D6D5D4D3D2D1D0101000018/1/202347(4)右移指令(A0H)

(5)循環左移指令(A3H)

該指令與左移指令類似,不同之處在于移動后原最左邊一位(第8位)的內容顯示于最右位(第1位)。D7D6D5D4D3D2D1D010100000D7D6D5D4D3D2D1D010100011(6)循環右移指令(A2H)該指令與循環左移指令類似,但移動方向相反。

D7D6D5D4D3D2D1D0101000108/1/2023482)帶數據的指令 帶數據指令均由雙字節組成,第1字節為指令標志碼(有的還含有位地址),第2字節為顯示內容。(1)按方式0譯碼顯示指令

命令由二個字節組成,前半部分為指令,其中a2、a1、a0為LED數碼管的位地址,即顯示數據是送給哪一位LED的。具體分配如表6.6所列。指令中的d3~d0為顯示數據,收到此指令時,HD7279按表6.7規則(譯碼方式0)進行譯碼和顯示。小數點的顯示由DP位控制,DP=1時,小數點顯示,DP=0時,小數點不顯示。指令中的XXX為無影響位。位D7D6D5D4D3D2D1D0十六進制碼指令碼10000a2a1a080H~87H數據碼DPXXXd3d2d1d08/1/202349LED位地址譯碼表a2a1a0LED顯示位000LED1001LED2010LED3011LED4100LED5101LED6110LED7111LED88/1/202350方式0譯碼顯示表d3~d0LED顯示字d3~d0LED顯示字00H008H801H109H902H20AH—03H30BHE04H40CHH05H50DHL06H60EHP07H70FH空(無顯示)8/1/202351(2)按方式1譯碼顯示指令 此指令與上一條指令基本相同,所不同的是譯碼方式。方式1情況下,LED顯示的內容與十六進制相對應,該指令的譯碼規則見表

(譯碼方式1)。a2、a1、a0位地址譯碼見表。位D7D6D5D4D3D2D1D0十六進制碼指令碼11001a2a1a0C8H~CFH數據碼DPXXXd3d2d1d08/1/202352方式1譯碼顯示表d3~d0LED顯示字d3~d0LED顯示字00H008H801H109H902H20AHA03H30BHB04H40CHC05H50DHD06H60EHE07H70FHF8/1/202353(3)不譯碼顯示指令(方式2) 其中a2,a1,a0為位地址,位地址譯碼見表。第2字節仍為LED顯示的內容,其中A-G和DP為顯示數據,分別對應LED數碼管的各段和小數點,當取值為“1”時,該段點亮;取值為“0”時,該段熄滅。位D7D6D5D4D3D2D1D0十六進制碼指令碼10010a2a1a090H~9FH數據碼DPABCDEFG8/1/202354(4)閃爍控制指令 此命令控制各個數碼管的閃爍屬性。d0~d7分別對應LED1~LED8數碼管,當取值為1時,LED不閃爍;取值為0時,LED閃爍。開機后,缺省的狀態為各位均不閃爍。位D7D6D5D4D3D2D1D0十六進制碼指令碼1000100088H數據碼d7d6d5d4d3d2d1d08/1/202355(5)消隱控制指令

此命令控制各個數碼管的消隱屬性。d0~d7分別對應LED1~LED8數碼管,當取值為“1”時,LED顯示;取值為“0”時,LED消隱。位D7D6D5D4D3D2D1D0十六進制碼指令碼1001100098H數據碼d7d6d5d4d3d2d1d08/1/202356(6)段點亮指令位D7D6D5D4D3D2D1D0十六進制碼指令碼11100000E0H數據碼XXd5d4d3d2d1d0該指令的作用是點亮某個數碼管中某一指定的段,或64個LED矩陣中某一指定的LED。d5~d0為段地址,范圍從00H~3FH,

8/1/202357 該指令作用為關閉(熄滅)數碼管中的某一段,d5~d0為段地址,范圍從00H~3FH,作用與段點亮指令相同,僅將點亮段改為關閉段。(7)段關閉指令位D7D6D5D4D3D2D1D0十六進制碼指令碼11000000C0H數據碼d7d6d5d4d3d2d1d08/1/2023583)讀鍵盤數據指令 該指令從HD7279讀出當前的按鍵代碼。與其它指令不同,此命令的前一個字節15H為單片機傳送到HD7279的指令,而后一個字節d7~d0則為HD7

溫馨提示

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

評論

0/150

提交評論