




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第9章 AT89S51單片機地I/O擴展1內(nèi)容概要AT89S51本身有4個通用地并行I/O口P0~P3,但是真正用作通用I/O口線地只有P1口與P3口地某些位線。有時,AT89S51單片機需要進行外部I/O接口地擴展。介紹AT89S51擴展常用可編程I/O接口芯片82C55地設(shè)計。此外還介紹使用廉價地74LSTTL芯片擴展并行I/O接口以及使用AT89S51串行口來擴展并行I/O口地設(shè)計。29.1I/O接口擴展概述由第8章,擴展I/O接口與擴展存儲器一樣,都屬于系統(tǒng)擴展地內(nèi)容。首先明確I/O接口具有地功能。9.1.1擴展地I/O接口功能擴展地I/O接口電路應(yīng)滿足以下功能要求。1.實現(xiàn)與不同外設(shè)地速度匹配大多數(shù)外設(shè)速度慢,無法與μs量級地單片機速度相比。單片機只有在確認(rèn)外設(shè)已為數(shù)據(jù)傳送做好準(zhǔn)備地前提下才能進行數(shù)據(jù)傳送。而要知道外設(shè)是否準(zhǔn)備好,就需要I/O接口電路與外設(shè)之間傳送狀態(tài)信息,以實現(xiàn)單片機與外設(shè)之間地速度匹配。32.輸出數(shù)據(jù)鎖存與外設(shè)相比,由于單片機地工作速度快,數(shù)據(jù)在數(shù)據(jù)總線上保留地時間十分短暫,無法滿足慢速外設(shè)地數(shù)據(jù)接收。所以在擴展地I/O接口電路中應(yīng)有輸出數(shù)據(jù)鎖存器,以保證輸出數(shù)據(jù)能為慢速地接收設(shè)備所接收。3.輸入數(shù)據(jù)三態(tài)緩沖外設(shè)向單片機輸入數(shù)據(jù)時,要經(jīng)過數(shù)據(jù)總線,但數(shù)據(jù)總線上可能"掛"有多個數(shù)據(jù)源,為使傳送數(shù)據(jù)時不發(fā)生沖突,只允許當(dāng)前時刻正在接收數(shù)據(jù)地I/O接口使用數(shù)據(jù)總線,其余地I/O接口應(yīng)處于隔離狀態(tài),為此要求I/O接口電路能為數(shù)據(jù)輸入提供三態(tài)緩沖功能。49.1.2I/O端口地編址首先弄清楚I/O接口(Interface)與I/O端口(Port)地概念。I/O接口是單片機與外設(shè)間地連接電路地總稱。I/O端口(簡稱I/O口)是指I/O接口電路中具有單元地址地寄存器或緩沖器。一個I/O接口芯片可以有多個I/O端口,傳送數(shù)據(jù)地稱為數(shù)據(jù)口,傳送命令地稱為命令口,傳送狀態(tài)地稱為狀態(tài)口。當(dāng)然,并不是所有地外設(shè)都一定需要3種端口齊全地I/O接口。每個I/O接口中地端口都要有地址,以便AT89S51通過讀寫端口來與外設(shè)交換信息。常用I/O端口編址有兩種方式,一種是獨立編址方式,另一種是統(tǒng)一編址方式。51.獨立編址I/O端口地址空間與存儲器地址空間分開編址。優(yōu)點I/O地址空間與存儲器地址空間相互獨立,界限分明。但需要設(shè)置一套專門地讀寫I/O端口地指令與控制信號。2.統(tǒng)一編址把I/O端口與數(shù)據(jù)存儲器單元同等對待。I/O端口與外部數(shù)據(jù)存儲器RAM統(tǒng)一編址。因此外部數(shù)據(jù)存儲器空間也包括I/O端口在內(nèi)。優(yōu)點是不需專門地I/O指令。缺點但是需要把數(shù)據(jù)存儲器單元地址與I/O端口地地址劃分清楚,避免數(shù)據(jù)沖突。69.1.3I/O數(shù)據(jù)地傳送方式為實現(xiàn)與不同外設(shè)地速度匹配,須根據(jù)不同外設(shè)選擇恰當(dāng)?shù)豂/O數(shù)據(jù)傳送方式。I/O數(shù)據(jù)傳送方式有:同步傳送,異步傳送與中斷傳送。1.同步傳送又稱無條件傳送。當(dāng)外設(shè)速度與單片機地速度相比擬時,常采用同步傳送方式,典型地同步傳送是單片機與外部數(shù)據(jù)存儲器之間地數(shù)據(jù)傳送。2.查詢傳送又稱有條件傳送(也稱異步式傳送)。通過查詢外設(shè)"準(zhǔn)備好"后,再進行數(shù)據(jù)傳送。優(yōu)點是通用性好,硬件連線與查詢程序簡單,但工作效率不高。73.中斷傳送為提高單片機對外設(shè)地工作效率,常采用中斷傳送方式,來實現(xiàn)I/O數(shù)據(jù)地傳送。單片機只有在外設(shè)準(zhǔn)備好后,才中斷主程序地執(zhí)行,從而進入與外設(shè)數(shù)據(jù)傳送地中斷服務(wù)子程序,進行數(shù)據(jù)傳送。中斷服務(wù)完成后又返回主程序斷點處繼續(xù)執(zhí)行。采用中斷方式可大大提高工作效率。9.1.4I/O接口電路常用地外圍I/O接口芯片:(1)82C55:可編程通用并行接口(3個8位I/O口);8(2)81C55:可編程地IO/RAM擴展接口電路(2個8位I/O口,1個6位I/O口,256RAM單元,1個14位地減法計數(shù)器)。都可以與AT89S51直接連接,接口邏輯簡單。9.2AT89S51擴展I/O接口芯片82C55地設(shè)計先介紹可編程并行I/O接口芯片82C55地應(yīng)用特性,然后介紹AT89S51與82C55地接口電路以及軟件設(shè)計。9.2.182C55芯片簡介Intel公司地可編程并行I/O接口芯片,3個8位并行I/O口,3種工作方式,單片機與多種外設(shè)連接時地中間接口電路。引腳及內(nèi)部結(jié)構(gòu)如圖9-1與圖9-2。9圖9-182C55地引腳圖 圖9-282C55地內(nèi)部結(jié)構(gòu)101.引腳說明共40個引腳,引腳功能如下:D7~D0:三態(tài)雙向數(shù)據(jù)線,與單片機地P0口連接,用來與單片機之間傳送數(shù)據(jù)信息。CS*:片選信號線,低有效,表示本芯片被選中。RD*:讀信號線,低有效,讀82C55端口數(shù)據(jù)地控制信號。WR*:寫信號線,低電平有效,用來向82C55寫入端口數(shù)據(jù)地控制信號。Vcc:+5V電源。11PA7~PA0:端口A輸入/輸出線。PB7~PB0:端口B輸入/輸出線。PC7~PC0:端口C輸入/輸出線。A1,A0:地址線,用來選擇82C55內(nèi)部地4個端口。RESET:復(fù)位引腳,高電平有效。2.內(nèi)部結(jié)構(gòu)如圖9-2,3個并行數(shù)據(jù)輸入/輸出端口,兩種工作方式地控制電路,一個讀/寫控制邏輯電路與一個8位數(shù)據(jù)總線緩沖器。各部件地功能如下:12(1)端口PA,PB,PC3個8位并行口PA,PB與PC,都可選為輸入/輸出工作模式,功能與結(jié)構(gòu)上有差異。PA口:一個8位數(shù)據(jù)輸出鎖存器與緩沖器;一個8位數(shù)據(jù)輸入鎖存器。PB口:一個8位數(shù)據(jù)輸出鎖存器與緩沖器;一個8位數(shù)據(jù)輸入緩沖器。PC口:一個8位地輸出鎖存器;一個8位數(shù)據(jù)輸入緩沖器。通常PA口,PB口作為輸入/輸出口,PC口既可作為輸入/輸出口,也可在軟件控制下,分為兩個4位端口,作為端口PA,PB選通方式操作時地狀態(tài)控制信號。13(2)A組與B組控制電路是兩組根據(jù)AT89S51寫入地"命令字"控制82C55工作方式地控制電路。A組控制PA口與PC口地上半部(PC7~PC4);B組控制PB口與PC口地下半部(PC3~PC0),并可用"命令字"來對端口PC地每一位實現(xiàn)按位置"1"或清"0"。(3)數(shù)據(jù)總線緩沖器數(shù)據(jù)總線緩沖器是一個三態(tài)雙向8位緩沖器,作為82C55與系統(tǒng)總線之間地接口,用來傳送數(shù)據(jù),指令,控制命令以及外部狀態(tài)信息。14(4)讀/寫控制邏輯電路接收AT89S51單片機發(fā)來地控制信號RD*,WR*,RESET,地址信號A1,A0等,然后根據(jù)控制信號地要求,端口數(shù)據(jù)被AT89S51單片機讀出,或者將AT89S51單片機送來地數(shù)據(jù)寫入端口。各端口工作狀態(tài)與控制信號地關(guān)系如表9-1。15169.2.2工作方式選擇控制字及端口PC置位/復(fù)位控制字可向82C55控制寄存器寫入兩種不同地控制字。1.工作方式選擇控制字82C55有3種基本工作方式:(1)方式0—基本輸入/輸出;(2)方式1—選通輸入/輸出;(3)方式2—雙向傳送(僅PA口有此工作方式)。3種工作方式方式控制字來決定。格式如圖9-3。最高位D7=1,為本方式控制字地標(biāo)志,以便與另一控制字相區(qū)別(最高位D7=0)。17圖9-3 82C55地方式控制字格式18PC口分兩部分,隨PA口稱為A組,隨PB口稱為B組。其中PA口可工作于方式0,1與2,而PB口只能工作在方式0與1。例9-1AT89S51單片機向82C55地控制字寄存器(假設(shè)端口地址為FF7FH)寫入工作方式控制字95H,根據(jù)圖9-3所示,可將82C55編程設(shè)置為:PA口方式0輸入,PB口方式1輸出,PC口地上半部分(PC7~PC4)輸出,PC口地下半部分(PC3~PC0)輸入。#include<absacc.h>#define8255XBYTE[0xff7f]/*0xff7f為82C55地控制寄存器地址*/#defineucharunsignedchar……voidinit8255(void)19{8255=0x95;/*工作方式選擇控制字寫入82C55地控制寄存器*/……}2.PC口按位置位/復(fù)位控制字82C55地另一個控制字為PC口按位置位/復(fù)位控制字。即PC口8位中地任何一位,可用一個寫入82C55控制口地置位/復(fù)位控制字來對PC口按位置"1"或清"0"。該功能主要用于位控。PC口按位置位/復(fù)位控制字地格式如圖9-4所示。例9-2AT89S51單片機向82C55地控制字寄存器寫入工作方式控制字07H,則PC3置1;08H寫入控制口,則PC4清0。假設(shè)82C55地端口寄存器地地址為FF7FH,程序段如下:#include<absacc.h>#define8255XBYTE[0xff7f]/*0xff7f為82C55地控制寄存器地址*/……voidinit8255(void){8255=0x07;/*PC置/復(fù)位控制字寫控制寄存器,PC3=1*/8255=0x08;/*PC置/復(fù)位控制字寫入控制寄存器,PC4=0*/……}21圖9-4PC口按位置位/復(fù)位控制字格式9.2.382C55地3種工作方式1.方式0基本輸入/輸出方式。T89S51可對82C55進行I/O數(shù)據(jù)地?zé)o條件傳送。例如,AT89S51單片機從82C55地某一輸入口讀入一組開關(guān)狀態(tài),從82C55輸出控制一組指示燈地亮,滅。并不需要任何條件,外設(shè)I/O數(shù)據(jù)可在82C55地各端口得到鎖存與緩沖。因此,方式0稱為基本輸入/輸出方式。方式0下,3個端口都可以由軟件設(shè)置為輸入或輸出,不需要應(yīng)答聯(lián)絡(luò)信號。方式0基本功能:23(1)具有兩個8位端口(PA,PB)與兩個4位端口(PC地上半部分與下半部分);(2)任何端口都可以設(shè)定為輸入或輸出,各端口地輸入,輸出共有16種組合。PA口,PB口與PC口均可設(shè)定為方式0,并可根據(jù)需要,向控制寄存器寫入工作方式控制字,規(guī)定各端口為輸入或輸出方式。例9-3假設(shè)82C55地控制字寄存器端口地址為FF7FH,則令PA口與PC口地高4位工作在方式0輸出,PB口與PC口地低4位工作于方式0輸入,初始化程序如下:ucharxdata8255_at_0xff7f/*0xff7f為82C55地控制寄存器地址*/……voidinit8255(void){8255=0x83;/*工作方式選擇控制字寫入控制寄存器*/……}252.方式1應(yīng)答聯(lián)絡(luò)地輸入/輸出工作方式。PA口,PB口皆可設(shè)成這種工作方式。方式1下,82C55地PA口與PB口通常用于I/O數(shù)據(jù)地傳送,PC口用作PA口與PB口地應(yīng)答聯(lián)絡(luò)信號線,以實現(xiàn)采用中斷方式來傳送I/O數(shù)據(jù)。PC口地PC7~PC0地應(yīng)答聯(lián)絡(luò)線是規(guī)定好地,其各位分配如圖9-5與圖9-7所示,圖中,標(biāo)有I/O地各位仍可用作基本輸入/輸出,不作應(yīng)答聯(lián)絡(luò)用。介紹方式1輸入/輸出時地應(yīng)答聯(lián)絡(luò)信號與工作原理。26圖9-5方式1輸入應(yīng)答聯(lián)絡(luò)信號(1)方式1輸入方式1輸入應(yīng)答聯(lián)絡(luò)信號如圖9-5。其中STB*與IBF為一對應(yīng)答聯(lián)絡(luò)信號。各應(yīng)答聯(lián)絡(luò)信號地功能如下。nSTB*:是由輸入外設(shè)發(fā)給82C55地選通輸入信號,低有效。nIBF:輸入緩沖器滿,應(yīng)答信號。82C55通知外設(shè)已收到外設(shè)發(fā)來地且已進入輸入緩沖器地數(shù)據(jù),高有效。nINTR:由82C55向AT89S51單片機發(fā)出地中斷請求信號,高有效。nINTEA:控制PA口是否允許中斷地控制信號,由PC4地置位/復(fù)位來控制。28INTEB:控制PB口是否允許中斷地控制信號,由PC2地置位/復(fù)位來控制。方式1輸入如圖9-6。下面以PA口地方式1輸入為例,介紹方式1輸入地工作過程。當(dāng)外設(shè)向82C55輸入一個數(shù)據(jù)并送到PA7~PA0時,外設(shè)自動在STB*上向82C55發(fā)送一個低電平選通信號。82C55收到STB*后,先把PA7~PA0輸入地數(shù)據(jù)存入PA口地輸入數(shù)據(jù)緩沖/鎖存器,然后使輸出應(yīng)答線IBF變?yōu)楦?通知輸入外設(shè),PA口已收到它送來地數(shù)據(jù)。82C55檢測到STB*由低電平變?yōu)楦唠娖?IBFA(PC5)為"1"狀態(tài)與中斷允許INTEA(PC4)=1時,使INTRA(PC3)29圖9-6PA口方式1輸入工作過程示意圖變?yōu)楦唠娖?向單片機發(fā)出中斷請求。INTEA地狀態(tài)可由用戶通過指令對PC4地單一置位/復(fù)位控制字來控制。④單片機響應(yīng)中斷后,進入中斷服務(wù)子程序來讀取PA口地外設(shè)發(fā)來地輸入數(shù)據(jù)。當(dāng)輸入數(shù)據(jù)被單片機讀走后,82C55撤銷INTRA上地中斷請求,并使IBFA變低,通知輸入外設(shè)可傳送下一個輸入數(shù)據(jù)。31(2)方式1輸出方式1輸出時,應(yīng)答聯(lián)絡(luò)信號如圖9-7。OBF*與ACK*構(gòu)成一對應(yīng)答聯(lián)絡(luò)信號,應(yīng)答聯(lián)絡(luò)信號功能如下。nOBF*:端口輸出緩沖器滿信號,低有效,它是82C55發(fā)給外設(shè)地聯(lián)絡(luò)信號,表示外設(shè)可以將數(shù)據(jù)取走。nACK*:外設(shè)應(yīng)答信號,低有效。表示外設(shè)已把82C55發(fā)出地數(shù)據(jù)取走。nINTR:中斷請求信號,高有效。表示該數(shù)據(jù)已被外設(shè)取走,向單片機發(fā)中斷請求,如果AT89S51響應(yīng)該中斷,在中斷服務(wù)子程序中向82C55寫入要輸出地下一數(shù)據(jù)。32圖9-7方式1輸出應(yīng)答聯(lián)絡(luò)信號INTEA—控制PA口是否允許中斷,由PC6控制。INTEB—控制PB口是否允許中斷,由PC2控制。方式1輸出工作示意如圖9-8。以PB口地方式1輸出為例,介紹工作過程。AT89S51可以通過"MOVX@Ri,A"指令把輸出數(shù)據(jù)送到B口地輸出數(shù)據(jù)鎖存器,82C55收到后便令輸出緩沖器滿引腳OBF*(PC1)變低,以通知輸出設(shè)備輸出地數(shù)據(jù)已在PB口地PB7~PB0上。②輸出外設(shè)收到OBF*上低電平后,先從PB7~PB0上取走輸出數(shù)據(jù),然后使ACKB*變低電平,以通知82C55輸出外設(shè)已收到82C55輸出地數(shù)據(jù)。34圖9-8PB口方式1輸出工作過程示意圖3582C55從應(yīng)答輸入線ACKB*收到低電平后就對OBF*與中斷允許控制位INTEB狀態(tài)進行檢測,若皆為高電平,則INTRB變?yōu)楦唠娖蕉騿纹瑱C請求中斷。AT89S51單片機響應(yīng)INTRB上中斷請求后便可通過中斷服務(wù)程序把下一個輸出數(shù)據(jù)送到PB口地輸出數(shù)據(jù)鎖存器。重復(fù)上述過程,完成數(shù)據(jù)地輸出。例9-4設(shè)置PA口為應(yīng)答方式輸入,PB口為應(yīng)答方式輸出。假設(shè)82C55地端口寄存器地地址為FF7FH,程序如下:ucharxdata8255_at_0xff7f/*0xff7f為82C55地控制寄存器地址*/……36voidinit8255(void){8255=0xb4;/*工作方式選擇控制字寫入控制寄存器*/……}3.方式2只有PA口有方式2。圖9-9為工作示意圖。方式2是方式1輸入與輸出組合。PA7~PA0為雙向I/O總線。當(dāng)作為輸入口使用,PA7~PA0受STBA與IBFA控制;當(dāng)作輸出端口使用,PA7~PA0受OBFA*,ACKA*控制。圖9-9PA口在方式2下地工作示意圖方式2特別適用于像鍵盤,顯示器一類地外部設(shè)備,因為有時需要把鍵盤上輸入地編碼信號通過PA口送給單片機,有時又需把單片機發(fā)出地數(shù)據(jù)通過PA口送給顯示器顯示。9.2.4AT89S51單片機與82C55地接口設(shè)計1.硬件接口電路如圖9-10為AT89S51擴展一片82C55地電路。P0.1,P0.0經(jīng)74LS373與82C55地A1,A0連接;P0.7經(jīng)74LS373與片選端CS*相連,其它地址線懸空;82C55地控制線RD*,WR*直接與單片機RD*與WR*端相連;單片機數(shù)據(jù)總線P0.0~P0.7與82C55數(shù)據(jù)線D0~D7連接。402.確定82C55端口地址圖9-10中82C55只有3條線與AT89S51地址線相接,片選端CS*,端口地址選擇端A1,A0,分別接于P0.7,P0.1與P0.0,其它地址線全懸空。顯然只要保證P0.7為低電平時,即可選中82C55;若P0.1,P0.0再為"00",則選中82C55地PA口。同理P0.1,P0.0為"01","10","11"分別選中PB口,PC口及控制口。若端口地址用16位表示,其它無用端全設(shè)為"1"(也可把無用端全設(shè)為"0"),則82C55地A,B,C及控制口地址分別為FF7CH,FF7DH,FF7EH,FF7FH。41圖9-10AT89S51單片機擴展一片82C55地接口電路42如果沒有用到地位取"0",則4個端口地址分別為0000H,0001H,0002H,0003H,只要保證,A1,A0地狀態(tài),無用位設(shè)為"0"或"1"均可。3.軟件編程在實際設(shè)計中,須根據(jù)外設(shè)地類型選擇82C55地操作方式,并在初始化程序中把相應(yīng)控制字寫入控制口。下面根據(jù)圖9-10,介紹對82C55進行操作地編程。例9-5根據(jù)圖9-10,要求82C55地PC口工作在方式0,并從PC5腳輸出連續(xù)地方波信號,頻率為500Hz,參考程序如下:43#include<reg51.h>#include<absacc.h>#definePA8255XBYTE[0xff7c] /*0xff7c為82C55PA端口地址*/#definePB8255XBYTE[0xff7d] /*0xff7d為82C55PB端口地址*/#definePC8255XBYTE[0xff7e] /*0xff7e為82C55PC端口地址*/#define8255XBYTE[0xff7f]/*0xff7f為82C55控制寄存器地址*/#defineucharunsignedcharexternvoiddelay_1000us();44voidinit8255(void){ 8255=0x85; /*工作方式選擇控制字寫入控制寄存器*/}voidmain(void){init8255(void)for(;;){8255=0x0b;/*PC5腳為高電平*/delay_1000us();/*高電平持續(xù)1000微秒*/8255=0x0a;/*PC5腳為低電平*/delay_1000us();}}
/*低電平持續(xù)1000微秒*/9.3 利用74LSTTL電路擴展并行I/O口在AT89S51系統(tǒng)中,有些場合可采用TTL電路,OS電路鎖存器或三態(tài)門電路也可構(gòu)成各種類型地簡單輸入/輸出口。通常這種I/O都是通過P0口擴展。由于P0口只能分時復(fù)用,故構(gòu)成輸出口時,接口芯片應(yīng)具有鎖存功能;構(gòu)成輸入口時,要求接口芯片應(yīng)能三態(tài)緩沖或鎖存選通。圖9-11利用74LS244與74LS373芯片,擴展簡單地I/O口地電路。74LS244與74LS373地工作受單片機P2.7,RD*,WR*3條控制線控制。74LS244是緩沖驅(qū)動器,作為擴展地輸入口,它地8個輸入端分別接8個開關(guān)S7~S0。46圖9-1174LSTTLI/O擴展舉例74LS373是8D鎖存器,作為擴展地輸出口,輸出端接8個發(fā)光二極管LED7-LED0。當(dāng)某輸入口線地開關(guān)按下時,該輸入口線為低電平,讀入單片機后,其相應(yīng)位為"0",然后再將口線地狀態(tài)經(jīng)74LS373輸出,某位低電平時二極管發(fā)光,從而顯示出按下地開關(guān)地位置。由圖9-11可以確定擴展地74LS244與74LS373芯片具有相同地端口地址:F7FFH,只不過讀入時,P2.0與有效,選中74LS244;輸出時P2.0與有效選中74LS373。例9-6電路如圖9-11,編程把開關(guān)S7-S0狀態(tài)通過74LS373輸出端地8個發(fā)光二極管顯示出來。程序如下:48#include<absacc.h>#defineucharunsignedchar……ucharii=XBYTE[0xf7ff]XBYTE[0xf7ff]=i……由程序可看出,對所擴展接口地輸入/輸出如同對外部RAM讀/寫數(shù)據(jù)一樣方便。圖9-11僅擴展了1片輸出芯片與1片輸入芯片,如果仍不夠用,還可仿照上述思路,根據(jù)需要來擴展多片74LS244,74LS373之類地芯片,但需要在端口地址上對各芯片加以區(qū)分。499.4用AT89S51單片機地串行口擴展并行口AT89S51單片機串行口地方式0用于I/O擴展。在方式0時,串行口為同步移位寄存器工作方式,其波特率是固定地,為fosc/12(fosc為系統(tǒng)地振蕩器頻率)。數(shù)據(jù)由RXD端(P3.0)輸入,同步移位時鐘由TXD端(P3.1)輸出。發(fā)送,接收地數(shù)據(jù)是8位,低位在先。9.4.1用74LS165擴展并行輸入口圖9-12所示為串行口外接兩片74LS165擴展兩個8位并行輸入口地接口電路。74LS165是8位并行輸入串行輸出地寄存器。當(dāng)74LS165地S/L*端由高到低時,并行輸入端數(shù)據(jù)被置入寄存器;50圖9-12利用74LS165擴展并行輸入口當(dāng)S/L*=1,且時鐘禁止端(第15腳)為低電平時,允許TXD(P3.1)移位時鐘輸入,這時在時鐘脈沖作用下,數(shù)據(jù)由右向左方向移動。在圖9-12中,TXD(P3.1)作為移位脈沖輸出與所有74LS165地移位脈沖輸入端CP相連;RXD(P3.0)作為串行數(shù)據(jù)輸入端與74LS165地串行輸出端QH相連;P1.0與S/相連,用來控制74LS165地串行移位或并行輸入;74LS165地時鐘禁止端(第15腳)接地,表示允許時鐘輸入。當(dāng)擴展多個8位輸入口時,相鄰兩芯片地首尾(QH與SIN)相連。52例9-10下面地程序是從16位擴展口讀入4組數(shù)據(jù)(每組2B),并存入到內(nèi)部RAM緩沖區(qū)。參考程序如下。#include<reg51.h>typedefunsignedcharBYTE;BYTErx_data[8];sbittest_flag; /*定義讀入字節(jié)地奇偶標(biāo)志*/sbitP1_0=P1^0; /*定義工作狀態(tài)控制端*//*讀入數(shù)據(jù)函數(shù)*/BYTEreceive(void){BYTEtemp;while(RI==0);RI=0;temp=SBUF;returntemp;}53/*主程序*/voidmain(void){BYTEi;test_flag=1;/*奇偶標(biāo)志初始值為1,表示讀地是奇數(shù)字節(jié)*/for(i=0;i<4;i++) /*循環(huán)讀入10個字節(jié)數(shù)據(jù)*/{if(test_flag==1){P1_0=0;/*并行置入2字節(jié)數(shù)據(jù)*/P1_0=1;}/*允許串行移位讀入*/SCON=0x10;/*設(shè)置串行口方式0*/rx_data[i]=receive();/*接收1字節(jié)數(shù)據(jù)*/test_flag=~test_flag;/*改寫讀入字節(jié)地奇偶性,以決定是否重新并行置入*/}}54程序中串行接收過程采用地是查詢等待地控制方式,如有必要,也可改用中斷方式。理論上講,按圖9-12方法擴展地輸入口幾乎是無限地,但擴展地越多,口地操作速度也就越慢。9.4.2 用74LS164擴展并行輸出口圖9-13所示為串行口外接兩片74LS164擴展兩個8位并行輸出口地接口電路。74LS164是8位串入并出移位寄存器。55圖9-13 利用74LS164擴展并行輸出口當(dāng)AT89S51單片機串行口工作在方式0地發(fā)送狀態(tài)時,串行數(shù)據(jù)由P3.0(RXD)送出,移位時鐘由P3.1(TXD)送出。在移位時鐘地作用下,串行口發(fā)送緩沖器地數(shù)據(jù)一位一位地從P3.0移入74LS164中。需要指出地是,由于74LS164無并行輸出控制端,因而在串行輸入過程中,其輸出端地狀態(tài)會不斷變化,故在某些應(yīng)用場合,在74LS164地輸出端應(yīng)加接輸出三態(tài)門控制,以便保證串行輸入結(jié)束后再輸出數(shù)據(jù)。例9-11下面是將內(nèi)部RAM緩沖區(qū)地8個字節(jié)地內(nèi)容經(jīng)串行口由74LS164并行輸出,參考程序如下。#include<reg51.h>typedefunsignedcharBYTE;BYTEi; /*i為右邊地74LS164地輸出*/BYTEj; /*j為左邊地74LS164地輸出*/BYTEdata[8]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08}/*主程序*/voidmain(void){ SCON=0x00; /*設(shè)置串行口方式0*/{for(i=0;i<=8;i++)/*輸出8個字節(jié)數(shù)據(jù)*/{for(j=0;j<=8;j++);SBUF=data[j]while(TI==0);TI=0;SBUF=data[i]while(TI==0);TI=0;}}while(1);}test_flag=1; /*奇偶標(biāo)志初始值為1,表示讀地是奇數(shù)字節(jié)*/{if(test_flag==1){P1_0=0;/*并行置入2字節(jié)數(shù)據(jù)*/P1_0=1;}/*允許串行移位讀入*/rx_data[i]=receive();/*接收1字節(jié)數(shù)據(jù)*/test_flag=~test_flag;定是否重新并行置入*/
/*改寫讀入字節(jié)地奇偶性,以決}}9.5用I/O口控制地聲音報警接口當(dāng)單片機測控系統(tǒng)發(fā)生故障或處于某種緊急狀態(tài)時,單片機系統(tǒng)應(yīng)能發(fā)出提醒人們警覺地聲音報
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 買車轉(zhuǎn)訂金合同范本
- 體育訂購合同范本
- 下學(xué)期安全工作總結(jié)
- 分期貸款正規(guī)合同范本
- 三年級班主任工作計劃
- 中醫(yī)基礎(chǔ)學(xué)模擬考試題含參考答案
- 廚房維修合同范本模板
- 產(chǎn)業(yè)調(diào)研合同范本
- 單位安裝鍋爐合同范例
- 廠車出租合同范本
- 2025年版護理法律法規(guī)
- DB3305T 261-2023 湖州湖羊種羊等級評定
- 房屋市政工程生產(chǎn)安全重大事故隱患排查表(2024版)
- 《心力衰竭護理》課件
- 2024年牡丹江大學(xué)單招職業(yè)適應(yīng)性測試題庫帶答案
- 2025江蘇連云港市贛榆城市建設(shè)發(fā)展集團限公司招聘人員暫時高頻重點提升(共500題)附帶答案詳解
- 內(nèi)保單位培訓(xùn)
- 客戶服務(wù)部崗位手冊
- 統(tǒng)編版(2024新版)七年級下冊道德與法治期末復(fù)習(xí)背誦知識點提綱
- 健康體檢報告解讀頁課件
- 火電工程達標(biāo)投產(chǎn)考核標(biāo)準(zhǔn)(2024版)
評論
0/150
提交評論