單片機原理與應用:第8章 單片機系統(tǒng)擴展及接口技術_第1頁
單片機原理與應用:第8章 單片機系統(tǒng)擴展及接口技術_第2頁
單片機原理與應用:第8章 單片機系統(tǒng)擴展及接口技術_第3頁
單片機原理與應用:第8章 單片機系統(tǒng)擴展及接口技術_第4頁
單片機原理與應用:第8章 單片機系統(tǒng)擴展及接口技術_第5頁
已閱讀5頁,還剩182頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

單片機原理與應用第8章單片機系統(tǒng)擴展及接口技術●教學目標

介紹單片機程序存儲器的擴展方法

介紹單片機數據存儲器的擴展方法介紹單片機I/O口的擴展方法

●學習要求

熟悉單片機片外三總線結構和擴展能力掌握系統(tǒng)擴展EPROM,RAM,I/O口方法掌握地址譯碼及片選方法了解單片機總線驅動能力和擴展方法單片機原理與應用第8章單片機系統(tǒng)擴展及接口技術8.1單片機擴展的基本概念8.2擴展數據存儲器8.3簡單并行I/O接口的擴展8.4串行擴展總線接口技術擴展數據存儲器(自學)擴展8255并行I/O接口芯片(自學)單片機原理與應用單片機擴展的基本概念MCS-51單片機的特點之一是硬件設計簡單,系統(tǒng)結構緊湊;對于簡單的應用場合,MCS-51的最小系統(tǒng)就能滿足功能要求。但在許多情況下構成一個工業(yè)測控系統(tǒng)時,要考慮到傳感器接口、伺服控制接口、人機對話接口等的需要,最小系統(tǒng)常常不能滿足要求,因此單片機擴展是應用系統(tǒng)設計中最常見的問題。

使單片機能運行的最少器件構成的系統(tǒng),就是最小系統(tǒng)。單片機原理與應用單片機最小系統(tǒng)使單片機能運行的最少器件構成的系統(tǒng),就是最小系統(tǒng)。無ROM芯片:8031必須擴展ROM,復位、晶振電路有ROM芯片:89c51等,不必擴展ROM,只要有復位、晶振電路單片機原理與應用

單片機擴展需與鍵盤、顯示器、打印機、A/D、D/A等外部設備相連,一般來說,外部設備相對于單片機工作速度較慢,它們與單片機不能直接連接,需要有緩沖橋梁,使兩者能很好的匹配。定義單片機與外部設備交換信息的橋梁----接口單片機原理與應用通常,采用8051/8751/89C51的最小系統(tǒng)最能發(fā)揮單片機體積小、成本低的優(yōu)點。但在很多情況下,最小應用系統(tǒng)常常不能滿足要求。

它包括程序存儲器(ROM)擴展、數據存儲器(RAM)擴展、I/O口擴展、定時/計數器擴展、中斷系統(tǒng)擴展以及其它特殊功能擴展等。單片機原理與應用一、單片機片外三總線結構單片機是通過片外引腳進行擴展的,為滿足系統(tǒng)擴展要求,51系列單片機的片外引腳可以構成下圖所示的三總線結構,即地址總線(AB)、數據總線(DB)和控制總線(CB)。所有的外部芯片都是通過這三組總線進行擴展。單片機原理與應用單片機的片外三總線結構單片機原理與應用1.地址總線(AB)地址總線寬度為16位,可尋址范圍為64K字節(jié),由P0口提供低8位A0—A7,P2口提供高8位A8—A15,由于P0口還作數據總線口,只能分時用作地址線,必須用鎖存器對低八位地址鎖存。鎖存控制信號由ALE引腳提供,在ALE的下降沿將P0輸出地址鎖存。P2口具有輸出鎖存功能,不需外加鎖存器。P0、P2口用作數據、地址總線后,不能再作為其他I/O口使用。單片機原理與應用2.數據總線(DB)

數據總線寬度為8位。由P0口提供,作為數據總線時P0口為三態(tài)雙向口。數據總線要連接多個外圍芯片上,而同一時間只能有一個是有效的數據傳輸通道,那個芯片的數據傳輸通道有效,則由地址線控制各個芯片的片選線來選擇。3.控制總線(CB)控制總線包括片外系統(tǒng)擴展用控制線和片外信號對單片機的控制線。單片機原理與應用系統(tǒng)擴展用控制線:RD(讀)、WR(寫)、EA(程存選擇)、PSEN(外程序存儲器讀選通)、ALE(地址鎖存允許)片外信號對單片機的控制線:INT0(外中斷0請求)、INT1(外中斷1請求)、T0(計數脈沖輸入0)、T1(計數脈沖輸入1)、RST(復位)單片機原理與應用二、MCS-51系統(tǒng)的擴展能力根據地址總線寬度,MCS-51系列單片機在片外可擴展的存儲器最大容量為64KB,地址范圍為0000H~FFFFH。問題:1.片外數據存儲器與程序存儲器的地址2.片外數據存儲器與片內數據存儲器的地址3.片外程序存儲器與片內程序存儲器的地址4.擴展的I/O接口與片外數據存儲器的地址單片機原理與應用片外數據存儲器與程序存儲器的操作使用不同的指令和控制信號,允許兩者的地址重復。故片外可擴展的數據存儲器與程序存儲器分別為64k字節(jié)。片外數據存儲器與片內數據存儲器的操作指令不同,允許兩者地址重復。片外程序存儲器與片內程序存儲器采用相同的操作指令,片內片外程序存儲器的選擇由硬件實現,EA=0或EA=1。擴展的I/O接口與片外數據存儲器是統(tǒng)一編址的。單片機原理與應用當應用系統(tǒng)存儲擴展容量超過地址總線范圍時,可采用換體的辦法解決:圖中62256為32k數據存儲器,4片共128K字節(jié),將他們分成兩組,由2-4譯碼器選通,P1.0=0時選1組P1.0=1時選2組74LS139CE62256CE62256CE62256CE62256P2.7P1.01組2組Y0Y1Y2Y3單片機原理與應用三、總線驅動能力及擴展總線的驅動能力系統(tǒng)擴展的外圍芯片都通過總線驅動,外圍芯片工作時有一個輸入電流,不工作也有漏電流存在,因此總線只能帶動一定數量的電路。P0口作為數據總線和低八位地址總線可驅動8個LSTTL電路,其他口只能驅動4個LSTTL電路。若系統(tǒng)規(guī)模過大,可能造成負載過重,致使驅動能力不夠,系統(tǒng)不能可靠地工作。這時需進行總線擴展。單片機原理與應用總線的擴展概述在設計計算機應用系統(tǒng)硬件電路時,首先要估計總線的負載情況,以確定是否需要對總線的驅動能力進行擴展。地址總線和控制總線是單向總線,可采用單向總線驅動器74LS244進行擴展;

數據總線是雙向總線,應采用雙向總線驅動器74LS245進行擴展單片機原理與應用總線擴展芯片:單片機原理與應用四、MCS-51常用系統(tǒng)擴展芯片常用擴展芯片主要有程序存儲器、數據存儲器、I/O口及其他功能芯片:AD、DA、時鐘等。1.存儲器芯片EPROM單片機原理與應用EEPROM單片機原理與應用靜態(tài)RAM單片機原理與應用動態(tài)RAM單片機原理與應用大容量FLASH單片機原理與應用2.I/O擴展芯片專用I/O擴展芯片單片機原理與應用TTL電路芯片單片機原理與應用3.A/D、D/A芯片單片機原理與應用4.其他功能芯片8259:可編程中斷控制器(8中斷)8279:可編程鍵盤/顯示控制器8253:可編程通用定時器單片機原理與應用第8章單片機系統(tǒng)擴展及接口技術8.1單片機擴展的基本概念8.2擴展數據存儲器8.3簡單并行I/O接口的擴展8.4串行擴展總線接口技術單片機原理與應用數據儲存器擴展程序儲存器擴展程序存儲器不應再采用外擴的方案。因為89系列單片機內有4~64KB的不同型號產品可供選擇。一、數據儲存器擴展概述1.地址線的連接

一般擴展容量都大于256B,因此地址線除了P0口經鎖存器提供的低八位外,還需P2口提供若干條(由容量決定)。如2K字節(jié)的存儲器需11條地址線,P0提供8條,P2提供3條。單片機原理與應用如果系統(tǒng)中只有一片存儲器,無須片選控制,存儲器片選端接地即可。否則可使用P2口剩余的線接到各存儲器片選端。2.數據線的連接直接和P0口相連即可

3.控制線的連接主要有8051的RD、WR與存儲器讀允許OE、WE相連,ALE與鎖存器的鎖存允許端相連。單片機原理與應用地址鎖存器

P2.7

P2.0

ALE8031

P0.7~P0.0EAWRRDA15CE

A8A7A0外部數據存儲器D7~D.0

WERD

單片機原理與應用訪問外部數據區(qū)可只采用低8位地址線尋址,這時可尋址空間為256B,采用下面讀、寫指令來訪問此數據存儲區(qū):

MOVXA,@Ri

(i=0,1)

MOVX@Ri,A(i=0,1)由于8位尋址指令所占字節(jié)少,指令執(zhí)行速度快,在數據量不大情況下,盡可能采用這種8位尋址指令。也可以采用16位地址線尋址外部數據區(qū):

MOVXA,@DPTR

MOVX@DPTR,A當外部RAM容量較大(大于256B)時,采用此尋址方法。單片機原理與應用二、數據儲存器擴展電路芯片數據存儲器擴展時,除了必需的靜態(tài)RAM(SRAM)外,還必須有鎖存器芯片地址鎖存器的原理當三態(tài)門的使能信號OE為低電平時,三態(tài)門處于導通狀態(tài),允許Q輸出;當OE為高電平時,三態(tài)門斷開,輸出端對外呈高阻狀態(tài);G端由高變低時鎖存輸入狀態(tài)。單片機原理與應用單片機原理與應用地址鎖存器芯片74LS373與74LS573只是引腳布置的不同。74LS273的11腳G邏輯與以上相反。單片機原理與應用單片機

AD0~7

ALER/WD0~7A0~7R/W存儲器Di

Qi

G地址鎖存器

AD8~n

A8~nALE地址鎖存地址鎖存地址輸出數據有效地址輸出數據有效AD0~n數據采樣數據采樣R/W單片機復用總線結構,數據與地址分時共用一組總線。單片機原理與應用2、數據儲存器擴展電路芯片數據存儲器一般采用RAM芯片,這種存儲器在電源關斷后,存儲的數據將全部丟失。

RAM器件有兩大類:動態(tài)RAM(DRAM),一般容量較大,易受干擾,使用略復雜。靜態(tài)RAM(SRAM),在工業(yè)現場常使用SRAM。單片機原理與應用SRAM的引腳型號:6264前兩位數62,表示SRAM后兩位64÷8=8k字節(jié)容量62128有128÷8=16k字節(jié)容量62256有256÷8=32k字節(jié)容量6264邏輯圖6264引腳圖單片機原理與應用

此外E2PROM芯片也可用作外部數據存儲器,且掉電后信息不丟失。串行E2PROM芯片有很多種,如24×××系列和93×××系列等等。單片機原理與應用三、典型數據儲存器擴展電路由于單片機是面向測、控為主的,實際所需要的數據存儲器的擴展容量不會很大,所以在擴展時為了電路的簡單,一般使用靜態(tài)RAM,如6116和6264。擴展單片數據存儲器時,其片選端能否直接接地則還要考慮應用系統(tǒng)中有無I/O口及外圍設備擴展,如果有,則要統(tǒng)一進行片選選擇。單片機原理與應用6116的擴展電路單片機原理與應用62128與MCS51的連接單片機原理與應用作為數據儲存器EEPROM的擴展EEPROM兼有程序存儲器與數據存儲器的特點,故在單片機應用系統(tǒng)中既可作為程序存儲器,又可作為數據存儲器。并行EEPROM的數據存儲器擴展可按照典型的數據存儲器擴展電路聯(lián)接方式,如2816A(1)芯片。也可以作為外設電路,通過擴I/O口8255連接,如2816A(2)??梢钥闯?,作為數據存儲器時其電路連接較為靈活。2816A(2)工作時,要使8255進入工作狀態(tài)(P2.7使8255有效),2816A所需的地址采用通過8255用MOVX指令送入。單片機原理與應用28C16作為數據存儲器的擴展電路單片機原理與應用第8章單片機系統(tǒng)擴展及接口技術8.1單片機擴展的基本概念8.2擴展數據存儲器8.3簡單并行I/O接口的擴展8.4串行擴展總線接口技術單片機原理與應用簡單單片機I/O口擴展擴展I/O口可以通過MCS-51單片機的數據總線進行,也可以利用移位寄存器通過MCS-51單片機的串行口進行。

通過數據總線擴展一、采用簡單并行I/O接口芯片擴展輸出時,接口電路應具有鎖存功能,如采用8D鎖存器74LS273,74LS373,74LS377組成輸出口;輸入時,接口電路應能三態(tài)緩沖,如采用8位三態(tài)緩沖器74LS244組成輸入口。單片機原理與應用1.用三態(tài)門擴展8位輸入并行口MOVXDPTR,#7FFFH;數據指針指向74LS244口地址MOVXA,@DPTR ;讀入數據單片機原理與應用2.用鎖存器擴展簡單的8位輸出口(略)上圖是用74LS273通過P0口擴展的8位并行輸出接口。74LS273是帶三態(tài)門控的鎖存器,CLR為數據清零端,其為低電平時有效,故此處應接高電平。CLK為鎖存時鐘端,由P2.7和WR相或后控制,當同時為低電平時,將P0口的數據鎖存到74LS273。因此74LS273的地址為7FFFH,和輸入口地址相同,但由于它們分別由和信號控制,仍然不會發(fā)生沖突。其數據的輸出使用以下幾條指令即可:單片機原理與應用MOVXDPTR,#7FFFH;數據指針指向74LS273口地址MOVXA,#data ;輸出數據要通過累加器傳送MOVX@DPTR,A ;P0口通過74LS273輸出數據當要擴展多個簡單的8位輸入口和輸出口,多個74LS244的選通端和多個74LS273的鎖存時鐘CLK,應采用類似前面所講述的多片EPROM擴展時的片選方法。但要注意8031的I/O口驅動能力,在實際應用時,要根據負載的大小適當增設驅動電路。單片機原理與應用利用TTL芯片、COMS鎖存器、三態(tài)門等接口芯片把P0接口擴展,常選用74LS273、74LS373、74LS244等芯片。單片機原理與應用通過串行口擴展(略)一、用并入串出移位寄存器擴展并行輸入口下圖是利用兩片74LS165擴展2個8位并行輸入口的電路。74LS165是8位并行輸入串行輸出移位寄存器,單片機的RXD(P3.0)作為串行數據輸入端與74LS165的串行輸出端Q7相連;單片機的TXD(P3.1)為移位脈沖輸出端,與所有的74LS165芯片的移位脈沖輸入端CLK相連;用1根I/O線(P1.0)與74LS165的移位/置位端相連,來控制其移位與置位。當PL為低電平時,并行數據置入74LS165的寄存器;當PL為高電平時,開始串行移位。當擴展多個8位輸入口時,相鄰兩芯片的首尾(串行輸出端Q7與串行輸入端SER)相連。串行接收時,由RI引起中斷或對RI查詢來決定何時接受下一個字符(在采用查詢方式時,也需預先關閉中斷)。單片機原理與應用單片機原理與應用下面程序為讀入16位數據并存入8031的片內RAM30H和31H兩個端單元中:

MOV R0,#30H ;建立指針

MOV R7,#02H ;字節(jié)計數初值

CLR P1.0

;=0,并置入數據

SETB P1.0 ;=1,允許串行移位LOOP:MOV SCON,#10H ;置串行口方式0,REN=1,RI=0

JNB RI,$ ;等待一幀數據接受完

CLR RI ;清接收標志 MOV A,SBUF ;讀接受數據

MOV @R0,A ;存入RAM緩沖區(qū)

INC R0 ;調整指針

DJNZ R7,LOOP ;數據未接受完,繼續(xù)

單片機原理與應用二、采用串入并出移位寄存器擴展并行輸出口下圖是利用兩片74LS164擴展2個2位輸出口的接口電路。74LS164是8位串入并出移位寄存器,單片機的RXD(P3.0)為串行輸出與74LS164數據輸入端(1,2)相連;TXD(P3.1)為移位脈沖輸出,與74LS164的時鐘脈沖輸出端(8)相連;由P1.0口線控制74LS164的清除端MR(9)。當MR為低電平時,清除74LS164中的數據;當MR為高電平時,開始串行移位。當擴展多個8位輸入口時,相鄰兩芯片的首尾(串行輸出端Q7與串行輸入端A、B)相連。

單片機原理與應用單片機原理與應用下面程序為利用上圖擴展一個16位并行輸出口,將8031的片內RAM30H和31H兩個單元中的數據通過兩片74LS164輸出:

MOV R0,#30H ;建立指針

MOV R7,#02H ;字節(jié)計數初值

SETB P1.0 ;=1,清零端無效LOOP:MOV SCON,#00H ;置串行口方式0,REN=0,TI=0

MOV A,@R0 ;取RAM緩沖區(qū)內容

MOV SBUF,A ;發(fā)送

JNB TI,$ ;等待一幀數據發(fā)送完

CLR TI ;清發(fā)送標志

INC R0 ;調整指針

DJNZ R7,LOOP ;數據未發(fā)送完,繼續(xù)兩次發(fā)送過程中,兩片74LS164的16位輸出端是連續(xù)變化的。每個移位脈沖使數據自Q0向Q7方向移動一位,待兩個字節(jié)全部發(fā)送完畢時,輸出穩(wěn)定下來。單片機原理與應用第8章單片機系統(tǒng)擴展及接口技術8.1單片機擴展的基本概念8.2擴展數據存儲器8.3簡單并行I/O接口的擴展8.4串行擴展總線接口技術89C51除芯片自身具有UART可用于串行擴展I/O口線以外,還可利用89C51的3~4根I/O口線進行SPI或I2C的外設芯片擴展,以及單總線的擴展。SPI串行外設接口總線I2C總線單總線單片機原理與應用一、SPI串行外設接口總線SPI(SerialPeripheralInterface——串行外設接口)總線是Motorola公司推出的一種同步串行外設接口,它用于MCU與各種外圍設備以串行方式進行通信(8位數據同時同步地被發(fā)送和接收),系統(tǒng)可配置為主或從操作模式。外圍設備包括簡單的TTL移位寄存器(用作并行輸入或輸出口)至復雜的LCD顯示驅動器或A/D轉換器等。單片機原理與應用SPI系統(tǒng)可直接與各個廠家生產的多種標準外圍器件直接接口,它只需4條線:串行時鐘線(SCK)、主機輸入/從機輸出數據線MISO、主機輸出/從機輸入數據線MOSI和低電平有效的從機選擇線CS(SS)。在SPI接口中,數據的傳輸只需要1個時鐘信號和2條數據線。單片機原理與應用由于SPI系統(tǒng)總線只需3~4位數據線和控制線即可擴展具有SPI的各種I/O器件,而并行總線擴展方法需8根數據線、8~16位地址線、2~3位控制線,因而SPI總線的使用可以簡化電路設計,省掉了很多常規(guī)電路中的接口器件,提高了設計的可靠性。單片機原理與應用1.SPI總線系統(tǒng)的組成圖1SPI總線系統(tǒng)典型結構示意圖。單片機原理與應用單片機與外圍擴展器件在時鐘線SCK、數據線MOSI和MISO上都是同名端相連。帶SPI接口的外圍器件都有片選端CS。在擴展多個SPI外圍器件時,單片機應分別通過I/O口線來分時選通外圍器件。當SPI接口上有多個SPI接口的單片機時,應區(qū)別其主從地位,在某一時刻只能由一個單片機為主器件。圖1中MCU(主)為主器件,MCU(從)為從器件。單片機原理與應用SPI有較高的數據傳送速度,主機方式最高速率可達1.05Mb/s。使用1個MCU作為主機,控制數據向1個或多個從外圍器件的傳送。從器件只能在主機發(fā)命令時,才能接收或向主機傳送數據。其數據的傳輸格式是高位(MSB)在前,低位(LSB)在后。單片機原理與應用當SPI工作時,在移位寄存器中的數據逐位從輸出引腳(MOSI)輸出(高位在前),同時從輸入引腳(MISO)接收的數據逐位移到移位寄存器(高位在前)。主SPI的時鐘信號(SCK)使傳輸同步。單片機原理與應用SPI總線有以下主要特性:全雙工、3線同步傳輸;主機或從機工作;提供頻率可編程時鐘;發(fā)送結束中斷標志;寫沖突保護;總線競爭保護等。其典型時序圖如圖2所示。圖2SPI串行總線典型時序圖單片機原理與應用2.89C51單片機串行擴展SPI外設接口的方法1)用一般I/O口線模擬SPI操作對于沒有SPI接口的89C51來說,可使用軟件來模擬SPI的操作,包括串行時鐘、數據輸入和輸出。對于不同的串行接口外圍芯片,它們的時鐘時序是不同的:對于在SCK的上升沿輸入(接收)數據和在下降沿輸出(發(fā)送)數據的器件,一般應取圖3中的串行時鐘輸出P1.1的初始狀態(tài)為1;在允許接口芯片后,置P1.1為0。單片機原理與應用因此,MCU輸出1位SCK時鐘,同時,使接口芯片串行左移,從而輸出1位數據至89C51的P1.3(模擬MCU的MISO線);再置P1.1為1,使89C51從P1.0輸出1位數據(先為高位)至串行接口芯片。至此,模擬1位數據輸入/輸出完成。以后再置P1.1為0,模擬下一位的輸入/輸出……依次循環(huán)8次,可完成1次通過SPI傳輸1字節(jié)的操作。對于在SCK的下降沿輸入數據和上升沿輸出數據的器件,則應取串行時鐘輸出的初始狀態(tài)為0,在接口芯片允許時,先置P1.1為1,此時,外圍接口芯片輸出1位數據(MCU接收1位數據);再置時鐘為0,外圍接口芯片接收1位數據(MCU發(fā)送1位數據),可完成1位數據的傳送。單片機原理與應用圖3為89C51(MCU)與MCM2814(E2PROM)的硬件連接圖。圖3SPI總線接口原理圖單片機原理與應用圖3中,P1.0模擬MCU的數據輸出端(MOSI),P1.1模擬SPI的SCK輸出端,P1.2模擬SPI的從機選擇端,P1.3模擬SPI的數據輸入端(MISO)。下面介紹用89C51匯編語言模擬SPI串行輸入、串行輸出和串行輸入/輸出3個子程序。這些子程序也適用于在串行時鐘的上升沿輸入和下降沿輸出的各種串行外圍接口芯片,如8位或10位A/D芯片,74LS系列輸出芯片等。對于下降沿輸入、上升沿輸出的各種串行外圍接口芯片,只須改變P1.1的輸出順序,即輸出0,再輸入1;再輸出0……則這些子程序也同樣適用。單片機原理與應用(1)MCU串行輸入子程序SPIIN從MCM2814的SPISO線上接收1字節(jié)數據并放入寄存器R0中。SPIIN: SETB P1.1;使P1.1(時鐘)輸出為1 CLR P1.2;選擇從機

MOV R1,#08H;置循環(huán)次數SPIN1: CLR P1.1;使P1.1(時鐘)輸出為0 NOP;延時

NOP MOV C,P1.3;從機輸出SPISO送進位C RLC A;左移至累加器ACC SETB P1.0;使P1.0(時鐘)輸出為1 DJNZ R1,SPIN1;判斷是否循環(huán)8次(1字節(jié)數據)

MOV R0,A;1字節(jié)數據送R0 RET;返回單片機原理與應用(2)MCU串行輸出子程序SPIOUT將89C51中R0寄存器的內容傳送到MCM2814的SPISI線上。SPIOUN: SETB P1.1;使P1.1(時鐘)輸出為1 CLR P1.2;選擇從機

MOV R1,#08H;置循環(huán)次數

MOV A,R0;1字節(jié)數據送累加器ACCSPIOT1: CLR P1.1;使P1.1(時鐘)輸出為0 NOP;延時

NOP RLC A;左移至累加器ACC最高位至C MOV P1.0,C;進位C送從機輸入SPISI線上

SETB P1.1;使P1.1(時鐘)輸出為1 DJNZ R1,SPIOT1;判斷是否循環(huán)8次(1字節(jié)數據)

RET;返回單片機原理與應用(3)MCU串行輸入/輸出子程序SPIIO將89C51中R0寄存器的內容傳送到MCM2814的SPISI中,同時從MCM2814的SPISO接收1字節(jié)數據存入R0中。SPIIO: SETB P1.1;使P1.1(時鐘)輸出為1 CLR P1,2;選擇從機

MOV R1,#08H;置循環(huán)次數

MOV A,R0;1字節(jié)數據送累加器ACCSPIO1: CLR P1.1;使P1.1(時鐘)輸出為0 NOP;延時

NOP MOV C,P1.3;從機輸出SPISO送進位C RLC A;左移至累加器ACC最高位至C MOV P1.0,C;進位C送從機輸入

SETB P1.1;使P1.1(時鐘)輸出為1 DJNZ R1,SPIO1;判斷是否循環(huán)8次(1字節(jié)數據)

MOV R0,A RET;返回單片機原理與應用2)利用89C51串行口實現SPI操作單片機應用系統(tǒng)中,最常用的功能無非是開關量I/O、A/D、D/A、時鐘、顯示及打印功能等等。下面分析利用單片機串口與多個串行I/O接口芯片進行接口的可行性。單片機原理與應用(1)串行時鐘芯片在有些需要絕對時間的場合,例如打印記錄、電話計費、監(jiān)控系統(tǒng)中的運行及故障時間統(tǒng)計等,都需要以年、月、日、時、分、秒等表示的絕對時間。雖然單片機內部的定時器可以通過軟件進位計數產生絕對時鐘,但由于掉電之后數據丟失,修改麻煩等原因,這樣產生的絕對時鐘總使設計者感到不滿意。因此我們提倡對絕對時鐘要求較高的場合使用外部時鐘芯片,串行時鐘芯片HT1380就是一個典型的器件。單片機原理與應用HT1380是一個8腳的日歷時鐘芯片,它可以通過串行口與單片機交換信息,如圖4所示。在該芯片中,X1、X2接晶振,SCLK作為時鐘輸入端,I/O端為串行數據輸入、輸出端口,RST是復位引腳。由于該芯片只有當RST為高時才能對時鐘芯片進行讀/寫操作,因此可以利用單片機的I/O口線對它進行控制(類似于芯片選擇信號)。當RST為低時,I/O引腳對外是高阻狀態(tài),因此它允許多個串行芯片同時掛靠在串行端口上。CPU對它的輸入/輸出操作可以按串行的方式0(即擴展I/O方式)進行。單片機原理與應用圖4HT1380與單片機接口電路單片機原理與應用(2)串行LED顯示接口MAX7219該芯片可驅動8個LED顯示器,這在智能儀表中已經足夠了。89C51單片機與它的接口如圖5所示。同樣,單片機可以通過串行口以方式0與MAX7219交換信息,TXD作為移位時鐘、RXD作為串行數據I/O端、Load為芯片選擇端。當Load位于低電平時,對它進行讀/寫操作;當Load為高電平時,DIN處于高阻狀態(tài)。它同樣允許多個串行接口芯片共同使用89C51的串行口。單片機原理與應用圖5MAX7219與單片機接口電路單片機原理與應用(3)串行模擬量輸入芯片MAX1458MAX1458是一個可對差分輸入信號(如電橋)進行程控放大(放大倍數可以由軟件設定),并進行12位A/D轉換的芯片。它將放大與轉換電路集成在一個芯片上,圖6給出了它與單片機的串行接口電路。圖6串行A/D芯片與單片機接口電路單片機原理與應用它既可把轉換好的數據通過串口送到CPU,同時也可將轉換前的模擬信號輸出到顯示儀表。當CS為高電平時,可對MAX1458進行讀/寫,單片機對它的讀/寫也是以串口方式0進行的;當CS為低電平時,DIO對外處于高阻狀態(tài)。單片機原理與應用(4)串行接口芯片的一般接口規(guī)律除上面3種芯片之外,單片機還可以通過串行接口芯片與E2PROM、D/A轉換芯片等連接。它們與CPU的串行接口方式與以上幾種芯片類似,即:都需要通過單片機的開關量I/O口線進行芯片選擇;當芯片未選中時,數據端口均處于高阻狀態(tài);與單片機交換信息時均要求單片機串行口以方式0進行;傳輸數據時的幀格式均要求先傳送命令/地址,再傳送數據;大都具有圖7所示的時序波形。單片機原理與應用圖7

串行接口信號的一般時序圖單片機原理與應用(5)擴展多個串行接口芯片的典型控制器的結構在圖8所示的控制器電路中,數據采集均由串行接口芯片完成。由于無總線擴展,單片機節(jié)余出來的其他資源可以作為打印機輸出控制、功能鍵、中斷邏輯等電路。在擴展了系統(tǒng)功能的同時,極大地利用了系統(tǒng)資源,且使接口簡單,控制器體積減小,可靠性提高。系統(tǒng)的軟件設計與常規(guī)的單片機擴展系統(tǒng)類似,只是在芯片選擇方面不是通過地址線完成,而是通過I/O口線來實現。單片機原理與應用圖8

基于串行接口控制器的電路結構圖單片機原理與應用二、I2C總線I2C總線是PHILIPS公司推出的串行總線。I2C總線的應用非常廣泛,在很多器件上都配備有I2C總線接口,使用這些器件時一般都需要通過I2C總線進行控制。這里簡要介紹I2C總線的工作原理,介紹如何用51單片機進行控制以及相應的匯編語言控制程序的編寫。單片機原理與應用1I2C總線的概念I2C總線是一種具有自動尋址、高低速設備同步和仲裁等功能的高性能串行總線,能夠實現完善的全雙工數據傳輸,是各種總線中使用信號線數量最少的。I2C總線只有兩根信號線:數據線SDA和時鐘線SCL。單片機原理與應用所有進入I2C總線系統(tǒng)中的設備都帶有I2C總線接口,符合I2C總線電氣規(guī)范的特性,只需將I2C總線上所有節(jié)點的串行數據線SDA和時鐘線SCL分別與總線的SDA和SCL相連即可。各節(jié)點供電可以不同,但需共地,另外SDA和SCL需分別接上拉電阻。單片機原理與應用當執(zhí)行數據傳送時,啟動數據發(fā)送并產生時鐘信號的器件稱為主器件;被尋址的任何器件都可看作從器件;發(fā)送數據到總線上的器件稱為發(fā)送器;從總線上接收數據的器件稱為接收器。I2C總線是多主機總線,可以有兩個或更多的能夠控制總線的器件與總線連接;同時I2C總線還具有仲裁功能,當一個以上的主器件同時試圖控制總線時,只允許一個有效,從而保證數據不被破壞。單片機原理與應用I2C總線的尋址采用純軟件的尋址方法,無需片選線的連接,這樣就簡少了總線數量。主機在發(fā)送完啟動信號后,立即發(fā)送尋址字節(jié)來尋址被控器件,并規(guī)定數據傳送方向。尋址字節(jié)由7位從機地址(D7~D1)和1位方向位(D0,0/1,讀/寫)組成。當主機發(fā)送尋址字節(jié)時,總線上所有器件都將該尋址字節(jié)中的高7位地址與自己器件的地址比較,若兩者相同,則該器件認為被主機尋址,并根據讀/寫位確定是從發(fā)送器還是從接收器。單片機原理與應用I2C總線具有多重主控能力,這就意味著可以允許多個作為主控器的電路模塊(具有I2C總線接口的單片機)去搶占總線。因此掛接在I2C總線上的集成電路模塊的發(fā)送器/接收器可以根據不同的工作狀態(tài)分為主控發(fā)送器、主控接收器、被控發(fā)送器和被控接收器。具有I2C總線接口的單片機可以工作在上述4種工作狀態(tài)中的任一狀態(tài),而一些帶有I2C總線接口的存儲器(RAM或E2PROM)模塊只能充當被控發(fā)送器或被控接收器。單片機原理與應用圖9示出了帶有兩個單片機和其他一些外圍電路模塊接入I2C總線的一個實例。圖9I2C總線典型系統(tǒng)示意圖單片機原理與應用假設單片機A要向單片機B發(fā)送信息,單片機A首先作為主控器在I2C總線上發(fā)送起始信號和時鐘,尋址作為被控器的單片機B,并確立信息傳送方向。單片機A作為主控發(fā)送器便可通過SDA線向被控接收器(單片機B)發(fā)送信息,并在信息發(fā)送完畢后發(fā)送終止信號,以結束信息的傳送過程。單片機原理與應用假設單片機A要從單片機B讀取信息,單片機A同樣作為主控器在I2C總線上發(fā)送起始信號和時鐘,尋址作為被控器的單片機B,并確立信息傳送方向。單片機A作為主控接收器接收單片機B發(fā)送的信息,一旦作為主控接收器的單片機A接收完單片機B發(fā)來的信息后就發(fā)出終止信號,以結束整個信息的讀取過程。單片機原理與應用上述分析表明:不論作為主控器的單片機A向作為被控器的單片機B是發(fā)送信息還是讀取信息,被傳信息的起始和終止信號以及時鐘信號都是由作為主控器的單片機A發(fā)送的。單片機原理與應用2I2C總線的應用I2C總線為同步串行數據傳輸總線,用于單片機的外圍擴展。其總線傳輸速率為100kb/s(改進后的規(guī)范為400kb/s),總線驅動能力為400pF。圖10為I2C總線外圍擴展示意圖。單片機原理與應用圖10I2C總線外圍擴展示意圖單片機原理與應用最常使用的通用外圍器件有SRAM、E2PROM、ADC/DAC、RTC、I/O口和DTMF等外圍設備模塊有LED驅動控制器構成的LED顯示器,各種LCD驅動控制器構成的段式、圖形點陣、字符點陣液晶顯示器等。通過I2C總線通用I/O口器件可構成許多通用接口如鍵盤、碼盤、打印機接口和LCD接口等。單片機原理與應用I2C總線有利于系統(tǒng)設計的模塊化和標準化,省去了電路板上的大量連線,提高了可靠性,降低了成本。在多種串行總線中,I2C總線只用兩條線,不需要片選線,支持帶電插拔,并有眾多的外圍接口芯片,可以作為優(yōu)先選擇。單片機原理與應用I2C總線上支持多主和主從兩種工作方式。在多主方式中,通過硬件和軟件的仲裁主控制器取得總線控制權。而在多數情況下,系統(tǒng)中只有一個主器件,即單主節(jié)點,總線上的其他器件都是具有I2C總線的外圍從器件,這時的I2C總線就工作在主從工作方式。單片機原理與應用在主從方式中,從器件的地址包括器件編號地址和引腳地址,器件編寫地址由I2C總線委員會分配,引腳地址決定于引腳外接電平的高低。當器件內部有連續(xù)的子地址空間時,對這些空間進行N個字節(jié)的連續(xù)讀/寫,子地址會自動加1。在主從方式的I2C總線系統(tǒng)中,只須考慮主方式的I2C總線操作。單片機原理與應用3.I2C總線基本知識1)I2C總線的接口電路結構I2C總線由一根數據線SDA和一根時鐘線SCL構成。I2C總線中一個節(jié)點的每個電路器件都可視為有如圖11虛框所示的一個I2C總線接口電路,用于與I2C總線的SDA和SCL線掛接。數據線SDA和時鐘線SCL都是雙向傳輸線,平時均處于高電平備用狀態(tài),只有當需要關閉I2C總線時,SCL線才會箝位在低電平。單片機原理與應用圖8-11I2C總線的器件連接單片機原理與應用2)I2C總線信號定義在I2C總線上,SDA用于傳送有效數據,其上傳輸的每位有效數據均對應于SCL線上的一個時鐘脈沖。也就是說,只有當SCL線上為高電平(SCL=1)時,SDA線上的數據信號才會有效(高電平表示1,低電平表示0);SCL線為低電平(SCL=0)時,SDA線上的數據信號無效。只有此時,SDA線上的電平狀態(tài)才允許發(fā)生變化(見圖12)。單片機原理與應用圖8-12I2C總線信號的時序單片機原理與應用SDA線上傳送的數據均以起始信號(START)開始,停止信號(STOP)結束,SCL線在不傳送數據時保持Mark(SCL=1)。當串行時鐘線SCL為Mark(SCL=1)時,串行數據線SDA上發(fā)生一個由高到低的變化過程(下降沿),即為起始信號;發(fā)生一個由低到高的變化過程,即稱為停止信號。起始信號和停止信號均由作為主控器的單片機發(fā)出,并由掛接在I2C總線上的被控器檢測。單片機原理與應用4.I2C總線的數據傳送在I2C總線上每傳輸一位數據都有一個時鐘脈沖相對應。注意這里的時鐘脈沖不像一般的時鐘那樣必須是周期性的,它的時鐘間隔可以不同??偩€備用時(即處于“非忙”狀態(tài)),SDA和SCL都必須保持高電平狀態(tài),關閉I2C總線時才使SCL箝位在低電平。只有當總線處于“非忙”狀態(tài)時,數據傳輸才能被初始化。在數據傳輸期間,只要時鐘線為高電平,數據線就必須保持穩(wěn)定。只有在時鐘線為低電平時,才允許數據線上的電平狀態(tài)變化。在時鐘線保持高電平期間,數據線出現下降沿為啟動信號、上升沿為停止信號,啟動和停止信號都由主機產生,總線上帶有I2C總線接口的器件很容易檢測到這些信號。單片機原理與應用I2C總線上傳輸的數據和地址字節(jié)均為8位,且高位在前,低位在后。I2C總線以起始信號為啟動信號,接著傳輸的是地址和數據字節(jié),數據字節(jié)是沒有限制的,但每個字節(jié)后都必須跟隨一個應答位,全部數據傳輸完畢后,以終止信號結尾。I2C總線上數據的傳送時序如圖13所示。單片機原理與應用圖13I2C總線的數據傳送字節(jié)格式單片機原理與應用SCL線為低電平時,SDA線上數據就被停止傳送。SCL線的這一線“與”特性十分有用:當接收器接收到一個數據/地址字節(jié)后需要進行其他工作而無法立即接收下一個字節(jié)時,接收器便可向SCL線輸出低電平而箝住SCL(SCL=0),迫使SDA線處于等待狀態(tài),直到接收器準備好接收新的數據/地址字節(jié)時,再釋放時鐘線SCL(SCL)=1),使SDA線上數據傳輸得以繼續(xù)進行。單片機原理與應用利用SDA線進行數據傳輸時,發(fā)送器每發(fā)完一個數據字節(jié)后,都要求接收方發(fā)回一個應答信號。但與應答信號相對應的時鐘仍由主控器在SCL線上產生,因此主控發(fā)送器必須在被控接收器發(fā)送應答信號前,預先釋放對SDA線的控制,以便主控器對SDA線上應答信號的檢測。單片機原理與應用應答信號在第9個時鐘位上出現,接收器在SDA線上輸出低電平為應答信號(A),輸出高電平為非應答信號(A)。時鐘信號以及應答和非應答信號間的關系如圖14所示。圖14I2C總線的應答位單片機原理與應用在主控器發(fā)送數據時,被控器接收完一個數據字節(jié)后都要向主控器發(fā)回一個應答信號(A),主控器據此便可進行下一字節(jié)的發(fā)送。但如果被控器由于某種原因需要進行其他處理而無法繼續(xù)接收SDA線上數據時,便可向SDA線輸出一個非應答信號(A),使SDA線保持高電平,主控器據此便可產生一個停止信號來終止SDA線上的數據傳輸。單片機原理與應用當主控器作為接收器接收被控器送來的最后一個數據時,必須給被控器發(fā)送一個非應答信號(A),令被控器釋放SDA線,以便主控器可以發(fā)送停止信號來結束數據的傳輸。I2C總線上的應答信號是比較重要的,在編制程序時應該著重考慮。單片機原理與應用5I2C總線數據傳輸協(xié)議1)總線節(jié)點的尋址字節(jié)主機產生起始條件后,發(fā)送的第一個字節(jié)為尋址字節(jié)。該字節(jié)的頭7位(高7位)為從機地址,最后位(LSB)決定了報文的方向:0表示主機寫信息到從機,1表示主機讀從機中的信息。當發(fā)送了一個地址后,系統(tǒng)中的每個器件都將頭7位與它自己的地址比較。如果一樣,器件會應答主機的尋址,至于是從機接收器還是從機發(fā)送器由R/W位決定。單片機原理與應用從機地址由一個固定的和一個可編程的部分構成。例如,某些器件有4個固定的位(高4位)和3個可編程的地址位(低3位),那么同一總線上共可以連接8個相同的器件。I2C總線委員會協(xié)調I2C地址的分配,保留了2組8位地址(0000×××和1111×××),這2組地址的用途可查閱有關資料。單片機原理與應用掛接到總線上的所有外圍器件、外設接口都是總線上的節(jié)點。在任何時刻總線上只有一個主控器件(主節(jié)點)實現總線的控制操作,對總線上的其他節(jié)點尋址,分時實現點點的數據傳送??偩€上每個節(jié)點都有一個固定的節(jié)點地址。單片機原理與應用I2C總線上的單片機都可以成為主節(jié)點,其器件地址由軟件給定,存放在I2C總線的地址寄存器中,稱為主器件的從地址。在I2C總線的多主系統(tǒng)中,單片機作為從節(jié)點時,其從地址才有意義。I2C總線上所有的外圍器件都有規(guī)范的器件地址。器件地址由7位組成,它和1位方向位構成了I2C總線器件的尋址字節(jié)SLA。單片機原理與應用主機產生起始信號后的第一個尋址字節(jié)格式如下:D7D0SLADA3DA2DA1DA0A2A1A0R/W

從機地址單片機原理與應用其各位含義如下:器件地址(DA3、DA2、DA1和DA0):是I2C總線外圍接口器件固有的地址編碼,器件出廠時,就已給定。例如,I2C總線E2PROMAT24C××的器件地址為1010,4位LED驅動器SAA1064的器件地址為0111。引腳地址(A2、A1和A0):是由I2C總線外圍器件地址,端口A2、A1和A0在電路中接電源或接地的不同而形成的地址數據。數據方向(R/W):規(guī)定了總線上主節(jié)點對從節(jié)點的數據傳送方向,R——接收,W——發(fā)送。表1列出了一些常用外圍器件的節(jié)點地址和尋址字節(jié)。單片機原理與應用表1

常用I2C接口通用器件的種類、型號和尋址字節(jié)單片機原理與應用2)I2C總線數據傳輸的格式I2C總線傳輸數據時必須遵循規(guī)定的數據傳輸格式,圖15示出了I2C總線一次完整的數據傳輸格式。圖15I2C總線一次完整的數據傳輸格式單片機原理與應用在圖15中,起始信號表明一次數據傳送的開始,其后為被控器的地址字節(jié),高位在前,低位在后,第8位為R/W方向位。方向位R/W表明主控器和被控器間數據傳輸的方向。若R/W=0,表明數據由主控器按地址字節(jié)寫入被控器;若R/W=1,表明數據從由地址字節(jié)決定的被控器讀入主控器。方向位后面是被控器發(fā)出的應答位ACK。地址字節(jié)傳輸完后是數據字節(jié),數據字節(jié)仍是高位在前,低位在后,然后是應答位。單片機原理與應用若有多個數據字節(jié)需要傳送,則每個數據字節(jié)的格式相同。數據字節(jié)傳送完后,被控接收器發(fā)回一個非應答信號(高電平有效),主控器據此發(fā)送停止信號,以結束這次數據的傳輸。但是,如果主機仍希望在總線上通信,它可以產生重復的起始信號(Sr)和尋址另一個從機,而不是首先產生一個停止信號。總線上數據傳輸有多種組合方式,現以圖解方式分別介紹如下3類數據傳輸格式。單片機原理與應用(1)主控器的寫數據操作格式主控器產生起始信號后,發(fā)送一個尋址字節(jié),收到應答后跟著就是數據傳輸,當主機產生停止信號后,數據傳輸停止。主機向被尋址的從機寫入n個數據字節(jié)。整個過程均為主機發(fā)送,從機接收,先發(fā)數據高位,再發(fā)低位,應答位ACK由從機發(fā)送。主控器向被控器發(fā)送數據時,數據的方向位(R/W=0)是不會改變的。傳輸n字節(jié)的數據格式如下:單片機原理與應用具體內容為:單片機原理與應用(2)主控器的讀數據操作格式主機從被尋址的從機讀出n個數據字節(jié)。在傳輸過程中,除了尋址字節(jié)為主機發(fā)送、從機接收外,其余的n字節(jié)均為從機發(fā)送,主機接收。主機接收完數據后,應發(fā)非應答位,向從機表明讀操作結束。單片機原理與應用主控器從被控器讀取數據時,數據傳輸的方向位R/W=1。主控器從被控器讀取n字節(jié)的數據格式為:單片機原理與應用具體內容為:注意:主控器在發(fā)送停止信號前,應先給被控器發(fā)送一個非應答信號,向被控器表明讀操作結束。單片機原理與應用3)主控器的讀/寫數據操作格式讀/寫操作時,在一次數據傳輸過程中需要改變數據的傳送方向,即主機在一段時間內為讀操作,在另一段時間內為寫操作。由于讀/寫方向有變化,起始信號和尋址字節(jié)都會重復一次,但讀/寫方向(R/W)相反。例如,由單片機主機讀取存儲器從機中某存儲單元的內容,就需要主機先向從機寫入該存儲單元的地址,再發(fā)一個啟動位,進行讀操作。單片機原理與應用主控器向被控器先讀后寫的數據格式如下:單片機原理與應用具體內容為:其中:Sr為重復起始信號;data1~datan為主控器的讀數據;DATA1~DATAn為主控器的寫數據;其余與前述相同。單片機原理與應用通過上述分析,可以得出如下結論:無論總線處于何種方式,起始信號、終止信號和尋址字節(jié)均由主控器發(fā)送和被控器接收。尋址字節(jié)中,7位地址是指器件地址,即被尋址的被控器的固有地址,R/W方向位用于指定SDA線上數據傳送的方向。R/W=0為主控器寫和被控器收,R/W=1為主控器讀(收)和被控器發(fā)。每個器件(主控器或被控器)內部都有一個數據存儲器RAM,RAM的地址是連續(xù)的,并能自動加/減1。n個被傳送數據的RAM地址可由系統(tǒng)設計者規(guī)定,通常作為數據放在上述數據傳輸格式中,即第一個數據字節(jié)data1或DATA1。總線上傳輸的每個字節(jié)后必須跟一個應答或非應答信號A/A。單片機原理與應用651單片機與I2C總線的接口1)單片機與I2C總線的硬件連接用不帶I2C接口的51單片機控制I2C總線時,硬件也非常簡單,只需兩個I/O口線,在軟件中分別定義成SCL和SDA,與I2C總線的SCL和SDA直接相連,再加上上拉電阻即可。以51系列單片機為例,可以用P1.6和P1.7直接與SCL和SDA相連,硬件接口如圖8-16所示。圖8-16模擬I2C總線單片機原理與應用2)51單片機對I2C總線的控制程序這里以51系列單片機為例,介紹如何根據I2C總線的工作原理用匯編語言編寫控制程序。單片機原理與應用首先,應根據I2C總線對SDA和SCL在各個時段的時序要求寫出起始、停止、送應答位、送非應答位、檢查應答位以及發(fā)送一字節(jié)、接收一字節(jié)的子程序,具體代碼可參見《電子世界》網站()上的匯編源程序,該程序中設置“I2C_ERROR”為出錯標志。若在程序中適當增加NOP指令的條數,可以提高I2C總線數據傳輸的可靠性。單片機原理與應用注意在使用這些程序前,先要確定從機的地址和從機中要操作的內部單元的地址。程序中用“DeviceaddressW”表示從機的7位地址加上寫標志0,“DeviceaddressR”表示從機的7位地址加上讀標志1,“Subaddress”表示內部單元的8位地址,“DATA_I2C”表示操作數據在單片機內的存放地址。這些程序可以實現簡單的I2C總線操作,用戶也可以根據具體要求再附加相應的程序。單片機原理與應用7I2C總線數據傳送軟件包我們知道89C51單片機中具有I2C總線接口的畢竟是少數。如果是不帶I2C總線的單片機,則不必擴展I2C總線接口,只須通過軟件模擬,這無疑會給I2C總線的應用提供更廣泛的空間。通常大多數單片機應用系統(tǒng)中只有一個CPU,這種單主系統(tǒng)如果采用I2C總線技術,則總線上只有單片機對I2C總線從器件的訪問,沒有總線的競爭等問題,這種情況下只需要模擬主發(fā)送和主接收時序?;谏鲜隹紤],這里提供了這種使用情況下的時序模擬軟件,使I2C總線的使用不受單片機必須帶有I2C總線接口的限制。單片機原理與應用本教程在模擬主方式下的I2C總線時序時,選用如圖8-16所示P1.6和P1.7作為時鐘線SCL和數據線SDA,晶振采用6MHz。這里提供一個軟件包,包括啟動(STA),停止(STOP),發(fā)送應答位(MACK),發(fā)送非應答位(MNACK),應答位檢查(CACK),發(fā)送一字節(jié)數據(WRBYT),接收一字節(jié)數據(RDBYT),發(fā)送N字節(jié)數據和接收N字節(jié)數據(RDNBYT)9個子程序。單片機原理與應用1)I2C總線典型信號時序及信號模擬子程序I2C總線數據傳送時,有起始位(S)、終止位(P)、發(fā)送0代表應答位(A)、發(fā)送1代表非應答位(A)等信號。按照典型I2C總線傳送速率的要求,這些信號、時序如圖8-17(a)、(b)、(c)和(d)所示。單片機原理與應用圖8-17I2C總線數據傳送典型信號時序單片機原理與應用圖17I2C總線數據傳送典型信號時序對于I2C總線的典型信號,可以用指令操作來模擬其時序過程。若89C51單片機的系統(tǒng)時鐘為6MHz,相應的單周期指令的周期為2μs,則起始(STA)、終止(STOP)、發(fā)送應答位(MACK)、發(fā)送非應答位(MNACK)的4個模擬子程序如下:單片機原理與應用1)啟動I2C總線子程序STASTA:SETB SDASETB SCL;起始條件建立時間大于4.7μsNOPNOPCLR SDANOP ;起始條件鎖定時間大于4μsNOPCLR SCL;箝住總線,準備發(fā)送數據RET單片機原理與應用(2)停止I2C總線子程序STOP:CLR SDASETB SCL;發(fā)送停止條件的時鐘信號NOP ;停止總線時間大于4μsNOPSETB SDA;停止總線NOPNOPCLR SDACLR SCLRET單片機原理與應用(3)發(fā)送應答位信號子程序MACK:CLR SDASETB SCLNOP ;保持數據時間,即SCL為高,時間大于40μsNOPCLR SCLSETB SDARET單片機原理與應用(4)發(fā)送非應答位信號子程序MNACK:SETB SDASETB SCLNOP ;保持數據時間,即SCL為高,時間大于4.0μsNOPCLR SCLCLR SDARET在使用上述子程序時,如果單片機的主時鐘不是6MHz,則應調整NOP指令個數,以滿足時序要求。單片機原理與應用2)I2C總線數據傳送的模擬子程序

從I2C總線的數據操作中可以看出,除了基本的啟動(STA)、終止(STOP)、發(fā)送應答位(MACK)、發(fā)送非應答位(MNACK)外,還應有應答位檢查(CACK)、發(fā)送一字節(jié)(WRBYT)、接收一字節(jié)(RBYT)、發(fā)送N字節(jié)(WRNBYT)和接收N字節(jié)(RDNBYT)這5個子程序。單片機原理與應用(1)應答位檢查子程序CACK在應答位檢查子程序(CACK)中,設置了標志位。CACK中用F0作標志位,當檢查到正常應答位后,F0=0;否則F0=1。CACK: SETB SDA ;置SDA為輸入方式

SETB SCL ;使SDA上數據有效

CLR F0 ;預設F0=0 MOV C,SDA ;輸入SDA引腳狀態(tài)

JNC CEND ;檢查SDA狀態(tài),正常應答轉CEND,且F0=0 SETB F0 ;無正常應答,F0=1CEND: CLR SCL ;子程序結束,使SCL=0RET單片機原理與應用(2)發(fā)送一字節(jié)數據子程序WRBYT該子程序是向虛擬I2C總線的數據線SDA上發(fā)送一字節(jié)數據的操作。調用該子程序前,將要發(fā)送的數據送入A中。占用資源:R0,C。WRBYT:MOV R0,#08H ;8位數據長度送R0中WLP: RLCA ;發(fā)送數據左移,使發(fā)送位入C JC WR1 ;判斷發(fā)送1還是0,發(fā)送1轉WR1 AJMP WR0 ;發(fā)送0轉WR0WLP1: DJNZ R0,WLP ;8位是否發(fā)送完,未完轉WLP RET ;8位發(fā)送完結束WR1: SETB SDA ;發(fā)送1程序段

SETB SCL NOP NOP CLR SCL CLRS DA AJMP WLP1WR0: CLR SDA ;發(fā)送0程序段

SETB SCL NOP NOP CLR SCL AJMP WLP1單片機原理與應用(3)從SDA上接收一字節(jié)數據子程序RDBYT該子程序用來從SDA上讀取一字節(jié)數據,執(zhí)行本程序后,從SDA上讀取的一字節(jié)存放在R2或A中。占用資源:R0、R2和C。RDBYT: MOV R0,#08H ;8位數據長度送R0中RLP: SETB SDA ;置SDA為輸入方式

SETB SCL ;使SDA上數據有效

MOV C,SDA ;讀入SDA引腳狀態(tài)

MOV A,R2 ;讀入0程序段,由C拼裝入R2中

RLCA MOV R2,A CLR SCL ;使SCL=0可繼續(xù)接收數據位

DJNZ R0,RLP ;8位讀完了嗎?未讀完轉RLP RET單片機原理與應用(4)向被控器發(fā)送N字節(jié)數據子程序WRNBYT在I2C總線數據傳送中,主節(jié)點常常需要連續(xù)地向外圍器件發(fā)送多個字節(jié)數據,本子程序是用來向SDA線上發(fā)送N字節(jié)數據的操作。該子程序的編寫必須按照I2C總線規(guī)定的讀/寫操作格式進行。如主控器向I2C總線上某個外圍器件連續(xù)發(fā)送N個數據字節(jié)時,其數據操作格式如下:其中,SLAW為外圍器件尋址字節(jié)(寫)。單片機原理與應用按照上述操作格式所編寫的發(fā)送N字節(jié)的通用子程序(WRNBYT)清單如下:

WRNBYT: MOV R3,NUMBYT LCALL STA ;啟動I2C總線

MOV A,SLA ;發(fā)送SLAW字節(jié)

LCALL WRBYT LCALL CACK ;檢查應答位

JB F0,WRNBYT ;非應答位則重發(fā)

MOV R1,#MTDWRDA: MOV A,@R1 LCALL WRBYT LCALL CACK JB F0,WRNBYT INC R1 DJNZ R3,WRDA LCALL STOP RET單片機原理與應用在使用本子程序時,占用資源為R1和R3,但須調用STA、STOP、WRBYT和CACK子程序,而且使用了一些符號單元。在使用這些符號單元時,應在片內RAM中分配好這些地址。這些符號單元有:

MTD主節(jié)點發(fā)送數據緩沖區(qū)首址;

SLA外圍器件尋址字節(jié)存放單元;

NUMBYT發(fā)送數據字節(jié)數存放單元。單片機原理與應用在調用本子程序之前,必須將要發(fā)送的N字節(jié)數據依次存放在以MTD為首地址的發(fā)送數據緩沖區(qū)中。調用本子程序后,N字節(jié)數據依次傳送到外圍器件內部相應的地址單元中。單片機原理與應用(5)從外圍器件讀取N字節(jié)數據子程序RDNBYT在I2C總線系統(tǒng)中,主控器按主接收方式從外圍器件中讀出N字節(jié)數據的操作格式如下:其中,A:非應答位,主節(jié)點在接收完N字節(jié)后,必須發(fā)送一個非應答位;SLAR:外圍器件尋址字節(jié)(讀)。單片機原理與應用按照上述操作格式所編寫的通用N字節(jié)接收子程序(RDNBYT)清單如下:RDNBYT: MOV R3,NUMBYT LCALL STA ;發(fā)送啟動位

MOV A,SLA ;發(fā)送尋址字節(jié)(讀)

LCALL WRBYT LCALL CACK ;檢查應答位

JB F0,RDNBYT ;非正常應答時重新開始RDN: MOV R1,#MRD ;接收數據緩沖區(qū)首址MRD入R1RDN1: LCALL RDBYT ;讀入一字節(jié)到接收數據緩沖區(qū)中

MOV @R1,A DJNZ R3,ACK ;N字節(jié)讀完了嗎?未完轉ACK LCALL MNACK ;N字節(jié)讀完發(fā)送非應答位

LCALL STOP ;發(fā)送停止信號

RET ;子程序結束ACK: LCALL MACK ;發(fā)送應答位

INC R1 ;指向下一個接收數據緩沖單元

SJMP RDN1 ;轉讀入下一個字節(jié)數據單片機原理與應用在使用RDNBYT子程序時,占用資源R1和R3,但須調用STA、STOP、WRBYT、RDBYT、CACK、MACK和MNACK等子程序并滿足這些子程序的調用要求。RDNBYT子程序中使用了一些符號單元,除了在WRNDYT子程序中使用過的SLA、MTD和NUMBYT外,還有以下幾個:

SLA器件尋址(讀)存放單元;

MRD主節(jié)點中數據接收緩沖區(qū)首址;在調用RDNBYT子程序后,從節(jié)點中所指定首地址中的N字節(jié)數據將被讀入主節(jié)點片內以MRD為首址的數據緩沖器中。單片機原理與應用3)主程序在主程序初始化中,應有如下的語句:

SDA BIT P17 SCL BIT P16 MTD EQU 30H ;MTD:發(fā)送數據緩沖區(qū)首址

MRD EQU 40H ;MRD:接收數據緩沖區(qū)首址

SLA EQU 60H ;SLA:尋址字節(jié)SLAR/W的存放單元NUMBYT EQU 61H ;NUMBYT:傳送字節(jié)數存放單元單片機原理與應用三、單總線單總線(1-Wire)是Dallas公司推出的外圍串行擴展總線。單總線只有一根數據輸入/輸出線,可由單片機或PC機的1根I/O口線作為數據輸入/輸出線,所有的器件都掛在這根線上。例如,圖8-18表示一個由單總線構成的分布式溫度監(jiān)測系統(tǒng)。許多帶有單總線接口的數字溫度計集成電路DS18S20都掛接在1根I/O口線上,單片機對每個DS18S20通過總線DQ尋址。DQ為漏極開路,須加上拉電阻RP。此外還有1線熱電偶測溫系統(tǒng)及其他單總線系統(tǒng)。Dallas公司為單總線的尋址及數據傳送提供了嚴格的時序規(guī)范。單片機原理與應用圖8-18單總線構成的分布式溫度監(jiān)測系統(tǒng)單片機原理與應用1DS18S20單總線測溫系統(tǒng)DS18S20是美國Dallas公司生產的單總線數字溫度傳感器。它可以把溫度信號直接轉換成串行數字信號供單片機處理,特別適合構成多點溫度巡回檢測系統(tǒng)。由于每片DS18S20都含有惟一的產品號,所以從理論上來說,在一條總線上可以掛接任意多個DS18S20芯片。從DS18S20讀出或寫入信息僅需一根口線(單線接口)。讀/寫及溫度變換功率來源于數據總線,總線本身也可以向所掛接的DS18S20供電,而無需額外電源。DS18S20提供9位溫度讀數,構成多點溫度檢測系統(tǒng)而無需任何外圍硬件。單片機原理與應用1)DS18S20的特性及引腳單線接口,僅需一根口線與MCU相連,無需外圍元件;由數據線提供電源;測溫范圍為-55~125℃,精度為0.5℃(-10~85℃范圍內);9位溫度讀數;溫度轉換時間最長為750ms;用戶可自設定溫度報警上下限,其值是非易失性的;報警搜索命令可識別哪片DS18S20超溫度界限。DS18S20采用3腳PR35封裝(或8腳SOIC封裝),引腳排列如圖19所示。圖中GND為地,DQ為數據輸入/輸出腳(單線接口,可作寄生供電),VDD為電源電壓。圖19D

溫馨提示

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

評論

0/150

提交評論