2022年單片機及接口技術6_第1頁
2022年單片機及接口技術6_第2頁
2022年單片機及接口技術6_第3頁
2022年單片機及接口技術6_第4頁
2022年單片機及接口技術6_第5頁
已閱讀5頁,還剩20頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

本章主要內容第一節移位寄存器的串行擴展技術(80C51串行口擴展)1)串行口于工作方式02)虛擬串行擴展2)串行接口總線:I2C總線

單片機串行擴展1.串行口工作于方式0串行口的四種工作方式方式0,同步傳輸,8位數據傳輸,傳輸速率固定fOSC/12方式1,10位數據傳輸,傳輸速率由T1產生,可變方式2,11位數據傳輸,可多機通信,傳輸速率固定兩種方式3,11位數據傳輸,可多機通信,傳輸速率同方式11)串行口擴展的工作原理一個引腳用作數據輸入/輸出另一個引腳用作時鐘輸出(同步)串行口工作于方式0時,RXD用作數據輸入/輸出;TXD用作時鐘輸出虛擬串行口采用1個I/O端口引腳作數據輸入/輸出;采用另一個I/O端口引腳作時鐘輸出。

2)80C51串行擴展的時序

RXDTXDTI發送RENRITXDRXD接收單片機串行擴展3)串行口方式0的歸一化子程序(歸一化子程序即廣泛適用的子程序)(1)歸一化輸出子程序

設工作方式0清TI取數據到寄存器A設指向數據塊的指針輸出數據數據塊輸出完畢?YES返回主程序數據塊指針加1數據輸出完畢?YESNONOa.流程圖

單片機串行擴展b.歸一化子程序設用R0作數據塊指針,用R2記錄數據塊的數據個數設置工作方式字SCON:00HSM0SM1SM2RENTB8RB8TIRI000———0—

UARTNO:MOVR0,#MTD;R0指向第一個數據MOVSCON,#00H;設串行口工作于方式0SOUT:MOVA,@R0;取一個數據到A寄存器MOVSBUF,A;輸出數據JNBTI,$;等待數據輸出完畢CLRTI;關串行口輸出中斷標志INCR0;數據塊指針加1DJNZR2,SOUT;判斷數據塊是否輸出完畢,若沒有輸出完,;繼續下一個數據的輸出RET;若數據塊輸出完畢,返回主程序。程序:注意:在主程序中需設置#MTD和R2單片機串行擴展(2)歸一化輸入子程序UARTNI思考:流程圖SM0SM1SM2RENTB8RB8TIRI0001———0

方式字SCON:10H程序UARTNI:MOVR0,#MTDMOVSCON,#10HSIN:CLRRIJNBRI,$MOVA,SBUFMOV@R0,AINCR0DJNZR2,SINRET(3)應用界面(主程序)a.串行發送:MTDEQU數據塊首地址;如MTDEQU60HMOVR2,#N;發送字節數送R2LCALLUARTNO;調用歸一化;串行口發送子程序b.串行接受:與串行發送相同

單片機串行擴展2.用I/O口虛擬的串行輸入/輸出歸一化子程序流程圖

取數據到A寄存器A右移一位將ACC.0從VRXD引腳輸出設指向數據塊的指針從VTXD引腳輸出一個0,再輸出一個1數據塊輸出完畢?YES返回主程序數據塊指針加18位數據輸出完畢?YESNONO(1)歸一化輸出子程序單片機串行擴展程序VUARTNO:MOVR0,#MTD;設指向數據塊的指針VSOUT:MOVR3,#8;設置位數為8MOVA,@R0;取一個數到AMOVVRXD,C;將數據的最低位送到輸出I/O引腳CLRVTXDSETBVTXD;產生時鐘DJNZR3,BITOUT;若沒有送夠8位,繼續輸送下一位INCR0;指針指向下一個數據DJNZR2,SOUT;若數據塊沒輸出完,繼續輸出RET主程序需要設置:MTD、VRXD、VTXD、R2用串行口工作方式0擴展I2C總線外圍擴展示意圖JNBRI,$時鐘線SCL和數據線SDA低電平,SCL轉高電平DJNZR3,BITOUT;LCALLVUARTNISETBSL;MOVR2,#數據字節數;數據線SDA和SCL低電平,SDA轉高電平(4)通過并行輸出口擴展LED顯示器時鐘線SCL和數據線SDA低電平,SCL轉高電平‘—’的段碼:abcdef有效,gdp無效MOVR2,#NJNBRI,$MOVR2,#4應用界面

MTDEQU數據塊首地址;如MTDEQU60HMOVR2,#數據字節數;如MOVR2,#10LCALLVUARTNO;調用虛擬串行口歸一化子程序(2)歸一化輸入子程序VUARTNI:MOVR0,#MTDVSIN:MOVR3,#8BITIN:CLRVTXDSETBVTXDMOVC,VRXDRRCADJNZR3,BITINMOV@R0,AINCR0DJNZR2,VSINRETb.應用界面:與虛擬串行輸出歸一化子程序類似

單片機串行擴展5)串行口擴展應用(1)輸出移位寄存器74HC16474HC164QAQBQCQDQEQFQGQHD7D6D5D4D3D2D1D0ABGNDCLRCLR(平)VCC串行輸入,并行輸出。按D0~D7的次序逐個輸入位A、B:串行數據輸入端(2)多個74HC164輸出擴展74HC164(1)QAQBQCQDQEQFQGQHD7D6D5D4D3D2D1D0ABGNDCLKCLR(平)VCC74HC164(2)QAQBQCQDQEQFQGQHD7D6D5D4D3D2D1D0ABGNDCLKCLR(平)VCC…80C51RXD/VRXDTXD/VTXDVCC單片機串行擴展由于數據位按照QH~QA的次序輸入74HC164,所以數據(8位)按照74HC164(n)~74HC164(1)的次序輸入,即第一個數據輸入到最后一個74HC164,第二個數據輸入到倒數第二個74HC164,…,最后一個數據輸入到第一個74HC164。假如用4個74HC164,數據塊首地址為片內RAM60H串行口方式0(移位寄存器方式)擴展:

MTDEQU60HMOVR2,#4LCALLUARTNO虛擬串行口擴展:設用P1.0輸出數據;P1.1輸出時鐘MTDEQU60HMOVR2,#4LCALLVUARTNO

單片機串行擴展(3)移位輸入寄存器74HC165及多個74HC165輸入擴展

74HC165(1)HGFEDCBAD0D1D2D3D4D5D6D7QHGNDCLRSH/LD(平)74HC165(2)HGFEDCBAD0D1D2D3D4D5D6D7QHGNDCLRSH/LD(平)VCC…80C51RXD/VRXDTXD/VTXDVCCSERVCCQHSLQH是串行數據輸出端,SER是級聯時的串行數據輸入端,A~H為并行數據輸入端,SH/LD(平)為預置控制端,低電平時,并行數據端D0~D7置入74HC165內部寄存器,高電平時,可進行串行移位操作

單片機串行擴展a.用串行口工作方式0擴展MRDEQU40HSLEQUP1.0UARN:CLRSL;74HC165外部數據并行輸入內部寄存器SETBSL;74HC164移位操作,74HC165(n)的數據串行;輸入到74HC165(n-1)MOVR2,#N;設置接收的字節數LCALLUARTNI;調歸一化子程序b.虛擬方式(與串行口方式0類似,但要設VRXD和VTXD):MRDEQU40HWARN:CLRSLSETBSLMOVR2,#NLCALLVUARTNI

單片機串行擴展(4)通過并行輸出口擴展LED顯示器74HC164(1)QAQBQCQDQEQFQGQHABGNDCLRCLR(平)VCC74HC164(2)QAQBQCQDQEQFQGQHABGNDCLRCLR(平)VCC…80C51RXD/VRXDTXD/VTXDVCCdpgfedcbaCOML8dpgfedcbaCOML7+5V…假設要顯示bUAA————首先,求段碼:共陽極b的段碼:cdefg有效abdp無效10000011B=83HU的段碼:bcdef有效,agdp無效11000001B=C1HA的段碼:abcefg有效,ddp無效10001000=88H‘—’的段碼:abcdef有效,gdp無效11000000=C0H單片機串行擴展其次,編寫指令MTDEQU30H;定義MTD=30HBUAA:MOVR1,#MTDMOV@R1,#C0HINCR1MOV@R1,#C0HINCR1MOV@R1,#C0HINCR1MOV@R1,#C0H;將4個‘—’段碼送入數據塊INCR1MOV@R1,#88HINCR1MOV@R1,#88H;將2個‘A’段碼送入數據塊INCR1MOV@R1,#C1H;將‘U’段碼送入數據塊INCR1MOV@R1,#83H;將‘b’段碼送入數據塊

MOVR2,#8;設置輸出數據字節數LCALLUARTNO;調歸一化子程序單片機串行擴展第二節I2C總線的串行擴展技術1.I2C總線(InterIntegratedCircuitBUS)概述

80C51VSDAVSCLE2PROMSDASCLADC/DACSDASCLVDD其它I2C外圍接口SDASCLSDASCLI2C總線外圍擴展示意圖1)二總線:數據線SDA,時鐘線SCL總線上掛接單片機、外圍器件(如I/O口,日歷時鐘,ADC,DAC,存儲器等)和外設接口(如鍵盤、顯示器、打印機等)。I2C總線接口電路均為漏極開路,所以總線上必須有上拉電阻單片機串行擴展2.典型I2C總線時序起始——傳送7個外圍器件或接口的地址位,以及1個讀寫控制位——對方應答——傳送數據和應答——終止

>4.7us>4.0usSDA/VSDASCL/VSCL1)起始

數據線SDA和SCL低電平,SDA轉高電平2)終止

>4.7us>4.0usSDA/VSDASCL/VSCL時鐘線SCL和數據線SDA低電平,SCL轉高電平SCL保持高電平至少4.0us之后,數據線SDA由低電平變為高電平SDA保持高電平至少4.7us之后,轉低電平。單片機串行擴展3)應答單片機每發送完一個字節數據(8位),對方會從SDA/VSDA發送一個應答位,低電平為有效應答信號。4)數據傳輸按照從高位到低位的傳輸次序(與80C51串行口擴展方式相反)

>4.0us輸出0SDA/VSDASCL/VSCLa.輸出0SDA/VSDA變低電平SCL/VSCL變高電平,并保持4.0us以上時間,SCL/VSCL變低電平SDA/VSDA變高電平b.輸出1:與輸出0同理可得>4.0us輸出1SDA/VSDASCL/VSCL單片機串行擴展子程序STA:SETBVSDA;VSDA高電平SETBVSCL;VSCL高電平NOPNOP;延時,查教材得,NOP的執行需要1個機器周期,;因此兩條NOP指令共需2個機器周期,耗時2*2us=4usCLRVSDA;VSDA變低電平NOPNOP;延時>4usCLRVSCL;VSCL變低電平RET單片機串行擴展2)終止子程序

>4.7us>4.0usSDA/VSDASCL/VSCL流程圖(與啟動類似,略)子程序:STOP:CLRVSDASETBVSCLNOPNOPSETBVSDANOPNOPCLRVSDACLRVSCLRET

單片機串行擴展3)應答位檢查子程序CACK有效的應答標志:0SDA/VSDASCL/VSCL應答查詢VSDAVSDA為0?YES設置標志位F0NO標志位F0清零VSDA置1VSCL變高電平VSCL變低電平返回主程序流程圖

子程序CACK:SETBVSDASETBVSCLCLRF0MOVC,VSDAJNCCEND;查詢數據信號是否;為0,若為0,說明;有;正常應答信號;,標志位F0=0SETBF0;若無正常應答信號;,標志位F0=1CEND:CLRVSCLRET

單片機串行擴展4)發送一個字節數據子程序WRBYT一個字節8位,從高位到低位依次發送設數據已存放于A中

VSDA清零C為1?YESVSCL清零NOVSDA置1位數8送R2A帶進位位左移一位(ACC.7→C)VSCL置1返回主程序延時>4us已輸出8位?VSCL清零NOYES流程圖

子程序WRBYT:MOVR2,#08HMOVA,DA;DA為數據的;片內存儲地址CLRVSCLWLP:R

溫馨提示

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

評論

0/150

提交評論