單片機(jī)原理與嵌入式設(shè)計(jì) 課件 第4-6章 單片機(jī)最小系統(tǒng)設(shè)計(jì)、定時(shí)器與計(jì)數(shù)器中斷、串行通信_(tái)第1頁
單片機(jī)原理與嵌入式設(shè)計(jì) 課件 第4-6章 單片機(jī)最小系統(tǒng)設(shè)計(jì)、定時(shí)器與計(jì)數(shù)器中斷、串行通信_(tái)第2頁
單片機(jī)原理與嵌入式設(shè)計(jì) 課件 第4-6章 單片機(jī)最小系統(tǒng)設(shè)計(jì)、定時(shí)器與計(jì)數(shù)器中斷、串行通信_(tái)第3頁
單片機(jī)原理與嵌入式設(shè)計(jì) 課件 第4-6章 單片機(jī)最小系統(tǒng)設(shè)計(jì)、定時(shí)器與計(jì)數(shù)器中斷、串行通信_(tái)第4頁
單片機(jī)原理與嵌入式設(shè)計(jì) 課件 第4-6章 單片機(jī)最小系統(tǒng)設(shè)計(jì)、定時(shí)器與計(jì)數(shù)器中斷、串行通信_(tái)第5頁
已閱讀5頁,還剩240頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

單片機(jī)原理與嵌入式設(shè)計(jì)單片機(jī)最小系統(tǒng)設(shè)計(jì)第四章電子設(shè)計(jì)系列教材01最小系統(tǒng)原理圖繪制最小系統(tǒng)原理圖繪制01常見的繪制電路原理圖的軟件有Protel、AltiumDesigner、PowerPCB等,其中AltiumDesigner是由Protel軟件開發(fā)商Altium公司推出的一體化的電子產(chǎn)品開發(fā)系統(tǒng),主要運(yùn)行于Windows操作系統(tǒng)。與原先的Protel軟件相比,AltiumDesigner操作界面更加人性化,AltiumDesigner的使用讓電子設(shè)計(jì)人員能夠高效、快捷地完成電路的設(shè)計(jì)。AltiumDesigner的主要功能如下。電路原理圖設(shè)計(jì):SCH、SCHLIB、各種文本編輯器。電路原理圖是說明電路中各個(gè)元器件的電氣連接關(guān)系的圖紙。印制電路板設(shè)計(jì):PCB、PCBLIB、電路板組件管理器。印制電路板是用來安裝、固定各個(gè)實(shí)際電路元器件并利用銅箔走線實(shí)現(xiàn)其正確連接關(guān)系的一塊基板。最小系統(tǒng)原理圖繪制01常見的繪制電路原理圖的軟件有Protel、AltiumDesigner、PowerPCB等,其中AltiumDesigner是由Protel軟件開發(fā)商Altium公司推出的一體化的電子產(chǎn)品開發(fā)系統(tǒng),主要運(yùn)行于Windows操作系統(tǒng)。與原先的Protel軟件相比,AltiumDesigner操作界面更加人性化,AltiumDesigner的使用讓電子設(shè)計(jì)人員能夠高效、快捷地完成電路的設(shè)計(jì)。AltiumDesigner的主要功能如下。FPGA及邏輯器設(shè)計(jì)。在線仿真與調(diào)試。最小系統(tǒng)原理圖繪制01本節(jié)主要介紹使用AltiumDesigner14繪制單片機(jī)最小系統(tǒng)原理圖,主要包括STC89C51單片機(jī)、電源接口、復(fù)位電路、晶振電路及點(diǎn)亮LED電路。通過單片機(jī)最小系統(tǒng)的繪制,讓讀者了解使用AltiumDesigner14繪制電路原理圖的基本方法,想要熟練掌握AltiumDesigner14這一強(qiáng)大的電路設(shè)計(jì)工具,需要讀者多動(dòng)手練習(xí)。最小系統(tǒng)原理圖繪制01新建工程打開AltiumDesigner14軟件,進(jìn)入AltiumDesigner主界面,如圖所示。最小系統(tǒng)原理圖繪制01新建工程選擇【DXP】→【Preference】,彈出如圖所示參數(shù)設(shè)置對(duì)話框,找到【System】→【General】→【Localization】,然后勾選【Uselocalizedresources】前面的復(fù)選框,單擊【Apply】按鈕后再單擊【OK】按鈕,即可將軟件進(jìn)行本地化,將軟件語言設(shè)置為中文,重啟軟件后生效。最小系統(tǒng)原理圖繪制01新建工程重新打開軟件,選擇【File】→【New】→【Project...】,彈出新建工程對(duì)話框,如圖所示。在【Name】處可更改工程的名稱,在【Location】處選擇保存工程的位置,其他保持默認(rèn)參數(shù),然后單擊【OK】按鈕,新建工程完畢。最小系統(tǒng)原理圖繪制01新建工程此時(shí)在左側(cè)快捷菜單欄中可看到剛剛新建的工程PCB_Projectl.PrjPcb,右擊此工程,選擇【AddNewtoProject】→【Schematic】,即可建立一個(gè)新的原理圖文檔。按照此步驟重復(fù)進(jìn)行,選擇【AddNewtoProject】→【PCBLibraryY、【AddNewtoProject】→【SchematicLibrary】。這樣就建立了三個(gè)文檔,依次右擊每個(gè)文檔,選擇【Save】進(jìn)行保存,可以修改文檔名稱,但不可以修改文檔后綴。保存完畢后,右擊PCB_Projectl.PrjPcb工程,選擇【SaveProject】,工程保存完畢。此時(shí)一個(gè)工程已經(jīng)建立好了,工程的信息如圖所示。最小系統(tǒng)原理圖繪制01添加元件雙擊原理圖文件Sheet1.SchDoc,進(jìn)入原理圖繪制界面,如圖所示。最小系統(tǒng)原理圖繪制01添加元件在窗口右側(cè)有一個(gè)按鈕【庫..】,單擊它后彈出庫列表,如圖所示,默認(rèn)含有兩個(gè)元件庫:【MiscellaneousDevices】和【MiscellaneousConnectors】。最小系統(tǒng)原理圖繪制01添加元件這兩個(gè)庫中含有常用的元件,由于默認(rèn)的初始庫所含元件并不全面,所以需要用到自己創(chuàng)建的庫或從其他地方下載的庫,單擊【Libraries】按鈕,然后在彈出的對(duì)話框中單擊【添加庫】按鈕,即可從計(jì)算機(jī)文件夾中進(jìn)行庫的選擇與添加,如圖所示。最小系統(tǒng)原理圖繪制01添加元件添加電源接口。單擊【庫...】按鈕,在彈出的對(duì)話框中選擇【MiscellaneousConnectors】,從下拉菜單中選擇(Header2】,Header2為電源接口的標(biāo)簽,這時(shí)可看到電源接口的模型圖,鼠標(biāo)左擊【Header2】并按住不動(dòng)即可將此元件拖曳到原理圖工作空間中。通過左擊拖曳即可隨意調(diào)整元件的位置,按空格鍵可以進(jìn)行元件的旋轉(zhuǎn)。另外,鼠標(biāo)左擊元件的同時(shí),按鍵盤上的X鍵可沿X軸鏡像該元件,按鍵盤上的Y鍵可沿Y軸鏡像該元件。最小系統(tǒng)原理圖繪制01添加元件添加電源接口。庫列表中第二個(gè)框中有個(gè)*號(hào),可通過更改*號(hào)在庫中快速搜索到需要的元件。有的讀者可能會(huì)發(fā)現(xiàn)右側(cè)沒有【庫...】按鈕,這時(shí)需要選擇最上方菜單欄中的【設(shè)計(jì)】→【瀏覽庫】,然后在界面的右側(cè)就會(huì)出現(xiàn)【庫..】按鈕了。元件的位置擺好后,雙擊此元件,彈出元件參數(shù)設(shè)置對(duì)話框,一般我們只是對(duì)其進(jìn)行【Designator】即標(biāo)簽代號(hào)的更改。例如,我們?cè)贒esignator處將代號(hào)P?改名為Dianyuan,單擊【OK】按鈕完成。最小系統(tǒng)原理圖繪制01添加元件添加STC89C51單片機(jī)。【MiscellaneousDevices】和【MiscellaneousConnectors】這兩個(gè)庫中并沒有單片機(jī)元件,需要自己在Schlib1.SchLib元件庫文件中繪制。如果用戶有單片機(jī)元件的庫,則直接添加庫即可。最小系統(tǒng)原理圖繪制01制作元件庫雙擊左側(cè)工程信息欄的Schlib1.SchLib元件庫文件,工作空間切換到繪制元件界面,如圖所示。最小系統(tǒng)原理圖繪制01制作元件庫選擇【工具】→【重新命名器件】,彈出重命名對(duì)話框,將新元件重命名為STC89C51,單擊【確定】按鈕。選擇【放置】→【矩形】,此時(shí)將鼠標(biāo)指針移到工作空間,即可看到有一個(gè)矩形吸附在鼠標(biāo)指針上,找好位置后,鼠標(biāo)左擊放置矩形,右擊取消這一狀態(tài)。放置好矩形后,可使用鼠標(biāo)左擊選中矩形,拖曳其邊緣進(jìn)行高度調(diào)整和寬度調(diào)整。另外,雙擊矩形,可調(diào)整其屬性,如顏色、寬度、位置等。選擇工程信息欄右下角的【SCHLibrary】,結(jié)果如圖所示。最小系統(tǒng)原理圖繪制01制作元件庫選擇【放置】→【引腳】,為元件添加引腳。引腳放置在矩形上之前按下Tab鍵即可修改引腳的屬性,另外,引腳放置在矩形上后雙擊引腳也可修改引腳的屬性。我們將第一個(gè)引腳的【顯示名字】修改為P1.0,【標(biāo)識(shí)】改為1,其他參數(shù)為默認(rèn)值,然后單擊【確定】按鈕,如圖4-11所示。顯示名字為對(duì)引腳功能的注釋,最好按標(biāo)準(zhǔn)起名;引腳標(biāo)識(shí)為引腳的序號(hào),不能隨便寫,要與PCB上的封裝對(duì)應(yīng)。將引腳移動(dòng)到矩形左上角,鼠標(biāo)左擊放置。然后鼠標(biāo)左擊選中矩形,按鍵盤上的空格鍵進(jìn)行引腳方向的調(diào)整,一定要將引腳標(biāo)識(shí)放置在矩形外面,引腳顯示名字放置在矩形內(nèi)部,如圖所示。否則,生成PCB時(shí),無法與封裝對(duì)應(yīng)。最小系統(tǒng)原理圖繪制01制作元件庫接著選擇【放置】→【引腳】,序號(hào)會(huì)自動(dòng)遞增,只需修改引腳名稱,依次添加單片機(jī)其他引腳。繪制好的STC89C51元件庫如圖所示。單擊界面上方菜單欄的保存按鈕日,保存文件和工程。單擊界面右側(cè)的【庫...】按鈕,從下拉菜單中選擇Schlib1.SchLib元件庫,即可看到里面含有單片機(jī)元件STC89C51,如圖所示。最小系統(tǒng)原理圖繪制01原理圖繪制完成后,我們要對(duì)其進(jìn)行編譯,檢查錯(cuò)誤。鼠標(biāo)右擊原理圖文件,選擇【CompileDocumentSheet1.SchDoc】,開始對(duì)文件進(jìn)行編譯,查看編譯信息選擇右下角【System】→【Messages】,如圖所示。最小系統(tǒng)原理圖繪制01系統(tǒng)對(duì)原理圖編譯的結(jié)果如圖所示。從編譯結(jié)果中可以看出,信息顯示為“Compilesuccessful,noerrorsfounds”,這說明原理圖編譯成功,無錯(cuò)誤,下一步就可以進(jìn)行PCB的設(shè)計(jì)了。02最小系統(tǒng)PCB設(shè)計(jì)最小系統(tǒng)PCB設(shè)計(jì)02雙擊打開自建的封裝庫【PcbLib1.PcbLib】,其初始化界面如圖所示。繪制STC89C51的封裝最小系統(tǒng)PCB設(shè)計(jì)02單擊工程信息欄下方的【PCBLibrary】,切換到PCBLibrary信息欄,在信息欄空白處右擊,在列表中選擇【元件向?qū)А?,如圖所示。繪制STC89C51的封裝最小系統(tǒng)PCB設(shè)計(jì)02然后單擊【下一步】按鈕,彈出器件圖案對(duì)話框。由于我們要?jiǎng)?chuàng)建的是PDIP封裝形式的51單片機(jī),所以在器件圖案中選擇【DualIn-linePackages(DIP)】,即DIP形式的模型,下面的選擇單位為【Imperial(mil),如圖所示。繪制STC89C51的封裝最小系統(tǒng)PCB設(shè)計(jì)02單擊【下一步】按鈕,進(jìn)入焊盤尺寸編輯對(duì)話框。經(jīng)查閱STC官網(wǎng)的STC89C51參考手冊(cè),得知其焊盤的孔徑為21mil(實(shí)際設(shè)計(jì)時(shí)可比手冊(cè)值稍大,以便于安裝),外徑為50mil,如圖所示。繪制STC89C51的封裝最小系統(tǒng)PCB設(shè)計(jì)02單擊【下一步】按鈕,進(jìn)入焊盤間距編輯對(duì)話框。經(jīng)查閱STC官網(wǎng)的STC89C51參考手冊(cè),得知它的焊盤縱向間距即同列的相鄰兩引腳間距為100mil,橫向間距即兩列引腳的間距為600mil,如圖所示。繪制STC89C51的封裝最小系統(tǒng)PCB設(shè)計(jì)02單擊【下一步】按鈕,進(jìn)入外框?qū)挾染庉媽?duì)話框。默認(rèn)外框?qū)挾葹?0mil,如圖所示。繪制STC89C51的封裝最小系統(tǒng)PCB設(shè)計(jì)02單擊【下一步】按鈕,編輯DP名稱為C51,如圖所示。單擊【下一步】按鈕,在彈出對(duì)話框中單擊【完成】按鈕。繪制STC89C51的封裝最小系統(tǒng)PCB設(shè)計(jì)02STC89C51的封裝已經(jīng)創(chuàng)建完成,在左側(cè)PCBLibrary信息欄中可以看到多了一個(gè)元件,名稱為C51,焊盤為40,右側(cè)工作空間可看到其封裝,如圖所示。繪制STC89C51的封裝最小系統(tǒng)PCB設(shè)計(jì)02雙擊打開原理圖文件【Sheet1.SchDoc】,找到STC89C51單片機(jī),雙擊單片機(jī),彈出屬性設(shè)置對(duì)話框,單擊【Add...】按鈕,在彈出的對(duì)話框中選擇【Footprint》,如圖所示。繪制STC89C51的封裝最小系統(tǒng)PCB設(shè)計(jì)02單擊【確定】按鈕,彈出PCB模型選擇對(duì)話框,單擊名稱后面的【瀏覽】按鈕,從彈出的對(duì)話框中選擇【C51】,如圖所示。繪制STC89C51的封裝最小系統(tǒng)PCB設(shè)計(jì)02單擊【確定】按鈕后,回到如圖所示對(duì)話框,封裝模型中的名字為我們選擇的C51,描述為空,我們可以對(duì)其添加文字用于說明模型的作用,其他參數(shù)不更改。繪制STC89C51的封裝最小系統(tǒng)PCB設(shè)計(jì)02單擊【確定】按鈕后,又回到了單片機(jī)屬性設(shè)置對(duì)話框,這時(shí)我們可以發(fā)現(xiàn),在右下方框中已經(jīng)添加了C51模型,如圖所示,單擊【OK】按鈕完成。繪制STC89C51的封裝最小系統(tǒng)PCB設(shè)計(jì)02單擊【確定】按鈕后,又回到了單片機(jī)屬性設(shè)置對(duì)話框,這時(shí)我們可以發(fā)現(xiàn),在右下方框中已經(jīng)添加了C51模型,如圖所示,單擊【OK】按鈕完成。繪制STC89C51的封裝保存原理圖,再次對(duì)其進(jìn)行編譯,檢查錯(cuò)誤。編譯信息為“Compilesuccessful,noerrorsfounds”,則表示編譯成功,無錯(cuò)誤。最小系統(tǒng)PCB設(shè)計(jì)02首先新建一個(gè)PCB文件。與建立原理圖類似,右擊此工程,選擇【AddNewtoProject】→【PCB,即可建立一個(gè)新的PCB文件。生成PCB然后單擊保存按鈕或使用快捷鍵【Ctr+S》,彈出文件保存對(duì)話框,可以修改文件名稱,但不可以修改文件后綴,我們命名此PCB文件為PCB1.PcbDoc。然后右擊工程【PCB_Project1.PrjPcb】,選擇【SaveProject】。最小系統(tǒng)PCB設(shè)計(jì)02雙擊PCB文件【PCB1.PcbDoc】,PCB初始化界面如圖所示。生成PCB最小系統(tǒng)PCB設(shè)計(jì)02選擇菜單欄中的【設(shè)計(jì)】→【UpdateSchematicsinPCB_Project1.PrjPcb】,在彈出的對(duì)話框中單擊【Yes】按鈕,打開如圖所示對(duì)話框。生成PCB最小系統(tǒng)PCB設(shè)計(jì)02選擇菜單欄中的【設(shè)計(jì)】+【ImportChangesFromPCB_Project1.PrjPcb】,彈出如圖所示對(duì)話框。生成PCB最小系統(tǒng)PCB設(shè)計(jì)02至此,可以看到原理圖中的所有元件都被一個(gè)陰影層包圍,如圖所示。單擊陰影層,按下鍵盤上的Delete鍵將陰影刪除,生成PCB最小系統(tǒng)PCB設(shè)計(jì)02此時(shí)的所有元件均在工作空間外,用鼠標(biāo)將所有元件拖曳到PCB工作空間中,然后雙擊元件,即可進(jìn)入元件參數(shù)調(diào)整界面,這里主要是對(duì)元件及其標(biāo)識(shí)進(jìn)行旋轉(zhuǎn),修改其旋轉(zhuǎn)角度,如圖所示。生成PCB最小系統(tǒng)PCB設(shè)計(jì)02調(diào)整好元件的位置及旋轉(zhuǎn)角度的PCB如圖所示。生成PCB最小系統(tǒng)PCB設(shè)計(jì)02然后,需要為PCB設(shè)置一個(gè)邊框,限制其尺寸。選擇下方布線層的【Keep-OutLayer】即禁止布線層,然后選擇菜單欄中的【放置】→【走線】,此時(shí)鼠標(biāo)指針在PCB工作空間中的狀態(tài)變?yōu)橐粋€(gè)十字線,每單擊一次則可以固定一個(gè)點(diǎn),我們繪制一個(gè)矩形框,如圖所示。生成PCB最小系統(tǒng)PCB設(shè)計(jì)02在PCB界面下選擇菜單欄中的【設(shè)計(jì)】→【規(guī)則】,我們只設(shè)置電氣規(guī)則【Electrical】和布線規(guī)則【Routing】。設(shè)置布線電氣特性首先設(shè)置電氣規(guī)則,選擇【Electrical】一【Clearance】-→【Clearance】,將最小間隔設(shè)為20mil,即導(dǎo)線間的最小距離為20mil,超出則會(huì)出現(xiàn)綠色線警告,如圖所示。最小系統(tǒng)PCB設(shè)計(jì)02設(shè)置布線電氣特性然后設(shè)置布線規(guī)則,選擇【Routing】→【W(wǎng)idth】→【W(wǎng)idth】,將線寬設(shè)置為20mil,如圖所示。最小系統(tǒng)PCB設(shè)計(jì)02設(shè)置布線電氣特性線寬設(shè)置為40mil,如圖所示。最小系統(tǒng)PCB設(shè)計(jì)02設(shè)置布線電氣特性最后,選擇【Routing】→【Placement】→【ComponentClearance】-【ComponentClearance】,將元件的最小水平間距和最小垂直間距均設(shè)置為20mil,如圖所示。最小系統(tǒng)PCB設(shè)計(jì)02自動(dòng)布線在PCB界面下選擇菜單欄中的【自動(dòng)布線】→【全部】,彈出如圖所示對(duì)話框。直接單擊【RouteAll】按鈕,開始自動(dòng)布線。最小系統(tǒng)PCB設(shè)計(jì)02自動(dòng)布線自動(dòng)布線后的PCB如圖所示。從圖中可看出,自動(dòng)布線的走線較亂,不夠美觀。這就是自動(dòng)布線的特點(diǎn):布線速度快,但走線較亂,原理圖正確則PCB正確。最小系統(tǒng)PCB設(shè)計(jì)02手動(dòng)布線首先取消自動(dòng)布線,選擇菜單欄中的【工具】→【取消布線】→【全部】。然后選擇【TopLayer】或【BottomLayer】,用于不同層面的布線。這里正常布線時(shí)選擇【BottomLayer】層即藍(lán)色線,單擊交叉式布線連接按鈕眇進(jìn)行手動(dòng)布線,手動(dòng)布線的PCB如圖所示。最小系統(tǒng)PCB設(shè)計(jì)02手動(dòng)布線繪制完成后,進(jìn)行設(shè)計(jì)規(guī)則檢測(cè),選擇菜單欄中的【工具】→【設(shè)計(jì)規(guī)則檢測(cè)》,彈出對(duì)話框,如圖所示。最小系統(tǒng)PCB設(shè)計(jì)02手動(dòng)布線單擊【運(yùn)行DRC】按鈕,檢測(cè)結(jié)果如圖所示。檢測(cè)結(jié)果中含有不合格之處,不合格信息為SilkToSolderMask,即絲印與焊盤間距太小,這個(gè)問題可以忽略,最小系統(tǒng)PCB設(shè)計(jì)完成。值得說明的是,這里最小系統(tǒng)PCB的設(shè)計(jì)僅考慮完成其功能部分,重點(diǎn)介紹了設(shè)計(jì)流程。實(shí)際上PCB設(shè)計(jì)是電子系統(tǒng)設(shè)計(jì)中的重要環(huán)節(jié),內(nèi)容眾多,進(jìn)一步的設(shè)計(jì)要求可參考相關(guān)資料。03軟件平臺(tái)Keil的使用軟件平臺(tái)Keil的使用03KeiluVision5的下載與安裝首先打開Keil官網(wǎng),從【Download】→【ProductDownloads】中選擇C51,填寫注冊(cè)信息并提交后,頁面中會(huì)出現(xiàn)一個(gè)C51的下載鏈接,本書下載的是C51V960A.EXE,將此文件下載到計(jì)算機(jī)中。下載完畢后,計(jì)算機(jī)中會(huì)有一個(gè)C51V960a.EXE的安裝文件,雙擊此安裝文件,在彈出界面中單擊【Next】按鈕,進(jìn)入軟件協(xié)議界面,勾選【IagreetoallthetermsoftheprecedingLicenseAgreement】復(fù)選框,如圖所示。軟件平臺(tái)Keil的使用03KeiluVision5的下載與安裝單擊【Next】按鈕,進(jìn)入軟件安裝路徑選擇界面,如圖所示。軟件平臺(tái)Keil的使用03KeiluVision5的下載與安裝單擊【Next】按鈕,進(jìn)入用戶信息填寫界面,如圖所示。軟件平臺(tái)Keil的使用03KeiluVision5的下載與安裝繼續(xù)單擊【Next】按鈕,軟件開始安裝,如圖所示。軟件平臺(tái)Keil的使用03KeiluVision5的下載與安裝軟件安裝完成后,進(jìn)入如圖所示界面,取消【ShowReleaseNotes】與【Addexampleprojectstotherecentlyusedprojectlist】復(fù)選框的選中狀態(tài),單擊【Finish】按鈕完成KeiluVision5的安裝。軟件平臺(tái)Keil的使用03建立工程KeiluVision5集成環(huán)境初始化界面分為6部分。標(biāo)題欄:顯示工程的名稱與所在位置。菜單欄:主要功能為文件的建立、保存、編輯,工程的建立、調(diào)試,窗口的排列等。工具欄:主要功能為包含文件的建立與保存,操作的撤銷與恢復(fù),編譯調(diào)試,仿真,輸出HEX文件等快捷按鈕。工程管理窗口:顯示工程所含有的文件信息,如.c和.h文件等。工作窗口:進(jìn)行程序代碼的編寫。編譯信息窗口:對(duì)程序進(jìn)行編譯后,在此處顯示錯(cuò)誤與警告信息。軟件平臺(tái)Keil的使用03建立工程建立新工程選擇菜單欄中的【Project】→【NewuVisionProject】,彈出工程命名與保存對(duì)話框,如圖所示。因?yàn)橐粋€(gè)工程中含有很多小文件,所以通常將一個(gè)工程保存到一個(gè)獨(dú)立的文件夾下。在此給工程起名為test,文件的保存類型為默認(rèn)的.uvproj即可,單擊【保存】按鈕。軟件平臺(tái)Keil的使用03建立工程選擇器件保存后彈出微控制器(單片機(jī))選擇對(duì)話框,選擇【Microchip】下的【AT89C51】。這里需要注意,Keil軟件中沒有提供STC系列單片機(jī)的微控制器,雖然我們使用的是宏晶公司的STC系列單片機(jī),但這里選擇的是Atmel公司的AT單片機(jī),不管哪個(gè)品牌的單片機(jī),只要是以8051為核心的51單片機(jī),系統(tǒng)就能夠兼容。從右邊的【Description】中可看到對(duì)所選器件結(jié)構(gòu)的描述,單擊【OK】按鈕。軟件平臺(tái)Keil的使用03建立工程新建源文件現(xiàn)在已經(jīng)創(chuàng)建好了一個(gè)空的工程,源代碼組【SourceGroup1】中沒有任何源程序文件,接下來需要給工程新建源文件。選擇菜單欄中的【File】→【New】或單擊工具欄的新建文件按鈕,工作空間中出現(xiàn)了一個(gè)名為【Text1】的文本文件,如圖所示。軟件平臺(tái)Keil的使用03建立工程新建源文件單擊工具欄的保存按鈕日,彈出Textl文件保存對(duì)話框,將其命名為【test.c】,這里的命名我們給其加了后綴.c,表明它是一個(gè)C程序文件,程序的代碼將在這里編寫,如圖所示,單擊【保存】按鈕。注意這里的test.c文件與test.uvproj工程同屬一個(gè)文件夾下。軟件平臺(tái)Keil的使用03建立工程給工程添加C文件在工程管理窗口中展開Project,右擊【SourceGroup1】,在彈出的快捷菜單中選擇【AddExistingFilestoGroup'SourceGroup1'】,如圖所示。軟件平臺(tái)Keil的使用03建立工程給工程添加C文件然后彈出如圖所示對(duì)話框,在文件中找到需要添加的【test.c】,單擊【Add】按鈕即可將test.c文件添加到SourceGroup1中,然后單擊【Close】按鈕關(guān)閉這個(gè)對(duì)話框。軟件平臺(tái)Keil的使用03建立工程給工程添加C文件此時(shí)我們創(chuàng)建好了一個(gè)可編寫C程序的工程,如圖所示。從標(biāo)題欄中可看到此工程的位置信息。單擊工程管理窗口中的“+”號(hào)可將工程展開,能夠看到SourceGroup1文件夾下包含了子文件test.c。軟件平臺(tái)Keil的使用03程序編譯與測(cè)試在KeilC51環(huán)境下,工程建立好后,需要在C源文件中添加程序代碼,然后對(duì)C源文件進(jìn)行編譯、鏈接與調(diào)試,生成可執(zhí)行文件.hex。使用到的主要按鈕如下。編譯按鈕,編譯當(dāng)前改動(dòng)的源文件,檢查語法錯(cuò)誤,但并不能生成.hex可執(zhí)行文件。鏈接按鈕,只編譯工程中上次修改的文件及其他依賴于這些修改過的文件的模塊,并對(duì)當(dāng)前編譯的文件進(jìn)行鏈接,用于生成.hex文件。謚按鈕含有編譯與鏈接的功能。重新鏈接按鈕,編譯鏈接當(dāng)前工程中的所有文件,用于生成.hex文件。設(shè)置工程按鈕。調(diào)試按鈕,用于軟件仿真調(diào)試。軟件平臺(tái)Keil的使用03程序編譯與測(cè)試程序編譯雙擊【test.c】源文件,在工作窗口中編寫程序,編寫完成后單擊工具欄保存按鈕顯,然后單擊編譯按鈕多或選擇【Project】-【Translate】,,對(duì)當(dāng)前文件進(jìn)行編譯,在下方的編譯信息窗口中即可看到編譯結(jié)果信息,如圖所示。軟件平臺(tái)Keil的使用03程序編譯與測(cè)試程序編譯但程序的編寫往往是一個(gè)不斷改進(jìn)的過程,有時(shí)會(huì)出現(xiàn)錯(cuò)誤信息,如圖所示。一般情況下錯(cuò)誤必須更改,一些不影響功能的警告可以忽略。軟件平臺(tái)Keil的使用03程序編譯與測(cè)試程序鏈接編譯無誤后,單擊工具欄中的鏈接按鈕臼或選擇【Project】→【BuildTarget】,對(duì)編譯過的文件進(jìn)行鏈接,在編譯信息窗口中即可看到鏈接信息,如圖所示。鏈接按鈕臼包括編譯與鏈接兩個(gè)功能,可直接單擊此按鈕代替編譯按鈕多。軟件平臺(tái)Keil的使用03程序編譯與測(cè)試程序鏈接程序鏈接成功后,如果不進(jìn)行仿真調(diào)試,則可以生成.hex文件。單擊設(shè)置工程按鈕器,彈出設(shè)置工程對(duì)話框,選擇【Output】選項(xiàng)卡,勾選【CreateHEXFile】復(fù)選框,如圖所示,單擊【OK】按鈕。軟件平臺(tái)Keil的使用03程序編譯與測(cè)試程序鏈接然后單擊鏈接按鈕臼再次進(jìn)行工程的編譯鏈接,則在編譯信息窗口中看到生成HEX文件信息,如圖所示。注意,設(shè)置工程后一定要單擊鏈接按鈕出,否則將不會(huì)生成HEX文件。軟件平臺(tái)Keil的使用03程序編譯與測(cè)試程序調(diào)試程序編譯與鏈接無錯(cuò)誤后,即可進(jìn)行軟件調(diào)試與仿真。單擊工具欄的調(diào)試按鈕@或選擇【Debug】→【Start/StopDebugSession】,進(jìn)入軟件調(diào)試狀態(tài),如圖所示。軟件平臺(tái)Keil的使用03程序編譯與測(cè)試程序調(diào)試在軟件調(diào)試狀態(tài)下,可以設(shè)置斷點(diǎn)、單步、全速、進(jìn)入函數(shù)內(nèi)部運(yùn)行程序,查看變量變化過程、模擬IO口電平狀態(tài)變化、查看程序代碼執(zhí)行時(shí)間等。用到的按鈕主要為工具欄中新增的一些調(diào)試按鈕,如圖所示。04單片機(jī)應(yīng)用I/O操作單片機(jī)應(yīng)用I/O操作0451單片機(jī)I/O口原理介紹51單片機(jī)內(nèi)部有4個(gè)并行的IO口,分別為PO(P0.0~P0.7)、P1(P1.0~P1.7)、P2(P2.0~P2.7)、P3(P3.0~P3.7),共32個(gè)引腳。I/O口是單片機(jī)內(nèi)部與外設(shè)(外部設(shè)備)間交換信息的主要通道,可以作為輸出口,直接連接輸出設(shè)備(如發(fā)光二極管、數(shù)碼管、顯示器等),也可以作為輸入口,直接連接輸入設(shè)備(如按鍵)。單片機(jī)應(yīng)用I/O操作0451單片機(jī)I/O口原理介紹單片機(jī)與IO外設(shè)通信的關(guān)系如圖所示。P0~P3口的結(jié)構(gòu)基本相同但又有差別,我們先講解一下共同之處:數(shù)據(jù)鎖存器(即專用寄存器PO~P3)、輸入緩沖器和輸出驅(qū)動(dòng)電路。單片機(jī)應(yīng)用I/O操作0451單片機(jī)I/O口原理介紹數(shù)據(jù)鎖存器——D觸發(fā)器。數(shù)據(jù)鎖存器的圖形符號(hào)如圖所示。對(duì)于D觸發(fā)器來說,當(dāng)D輸入端有一個(gè)輸入信號(hào)時(shí),如果這時(shí)控制端CP沒有信號(hào)(也就是時(shí)序脈沖沒有到來),那么輸入端D的數(shù)據(jù)是無法傳輸?shù)捷敵龆薗及反相輸出端Q的。如果控制端CP的時(shí)序脈沖到了,那么輸入端D的數(shù)據(jù)就會(huì)傳輸?shù)絈及Q端。數(shù)據(jù)傳輸過來后,當(dāng)CP端的時(shí)序信號(hào)消失了,輸出端還會(huì)保持著上次輸入端D的數(shù)據(jù)(即把上次的數(shù)據(jù)鎖存起來了)。如果下一個(gè)時(shí)序控制脈沖信號(hào)來了,那么D端的數(shù)據(jù)才再次傳送到Q端,從而改變Q端的狀態(tài)。單片機(jī)應(yīng)用I/O操作0451單片機(jī)I/O口原理介紹即當(dāng)CP=0時(shí),Q保持不變;當(dāng)CP由0變1時(shí),On+1=Dn。D觸發(fā)器狀態(tài)表如表所示。所以D觸發(fā)器具有接收并記憶信號(hào)的功能。單片機(jī)應(yīng)用I/O操作0451單片機(jī)I/O口原理介紹輸入緩沖器——受控三態(tài)門。輸入緩沖器的圖形符號(hào)如圖所示。三態(tài)門有三個(gè)狀態(tài),即在其輸出端可以是高電平、低電平,同時(shí)還有一種就是高阻態(tài)??刂贫薊N=1時(shí),Y=A;控制端EN=0時(shí),Y=Z。受控三態(tài)門狀態(tài)表如表所示。受控三態(tài)門具有對(duì)數(shù)據(jù)傳送起協(xié)調(diào)和緩沖作用的功能。單片機(jī)應(yīng)用I/O操作0451單片機(jī)I/O口原理介紹輸出驅(qū)動(dòng)電路——場(chǎng)效應(yīng)管。輸出驅(qū)動(dòng)電路的狀態(tài)表如表所示。輸出驅(qū)動(dòng)電路具有反相器的作用。單片機(jī)應(yīng)用I/O操作0451單片機(jī)I/O口原理介紹51單片機(jī)4個(gè)IO口的工作原理如下。P0口其中一位的結(jié)構(gòu)圖如圖所示,它由一個(gè)鎖存器、兩個(gè)三態(tài)輸入緩沖器和一個(gè)輸出驅(qū)動(dòng)電路及多路開關(guān)組成。PO口由8個(gè)這樣的電路組成,從圖中可以看出,PO口既可以作為通用I/O口用,也可以作為地址/數(shù)據(jù)總線用。PO口單片機(jī)應(yīng)用I/O操作0451單片機(jī)I/O口原理介紹PO口作為通用IO口時(shí)工作原理如下。PO口作為輸出口當(dāng)PO口作為輸出口使用時(shí),內(nèi)部總線將數(shù)據(jù)送入鎖存器,CPU發(fā)出控制信號(hào)“0”封鎖“與”門,將輸出上拉場(chǎng)效應(yīng)管VT1截止,同時(shí)多路開關(guān)MUX打向下面,把鎖存器與輸出驅(qū)動(dòng)場(chǎng)效應(yīng)管VT2柵極接通。單片機(jī)應(yīng)用I/O操作0451單片機(jī)I/O口原理介紹PO口作為通用IO口時(shí)工作原理如下。PO口作為輸入口在讀輸入數(shù)據(jù)時(shí),由于輸出驅(qū)動(dòng)電路并接在PO.X引腳上,如果VT2導(dǎo)通,就會(huì)將引腳輸入的高電平拉成低電平,產(chǎn)生誤讀,所以在端口進(jìn)行輸入操作前,應(yīng)先向端口鎖存器寫“1”,使VT2截止。單片機(jī)應(yīng)用I/O操作0451單片機(jī)I/O口原理介紹PO口作為通用IO口時(shí)工作原理如下。PO口作為輸入口當(dāng)PO口作為輸入口使用時(shí),有兩種讀入方式:讀鎖存器和讀引腳。當(dāng)CPU發(fā)出讀鎖存器指令時(shí),鎖存器的狀態(tài)由Q端經(jīng)上方的三態(tài)輸入緩沖器1進(jìn)入內(nèi)部總線;當(dāng)CPU發(fā)出讀引腳指令時(shí),鎖存器的輸出狀態(tài)Q=1、=0,場(chǎng)效應(yīng)管VT2截止,引腳的狀態(tài)由三態(tài)輸入緩沖器2進(jìn)入內(nèi)部總線。單片機(jī)應(yīng)用I/O操作0451單片機(jī)I/O口原理介紹PO口作為地址/數(shù)據(jù)總線時(shí)工作原理如下。P0口作為輸入口在PO口連接外部存儲(chǔ)器時(shí),CPU使控制端保持高電平,此時(shí)與門打開,控制權(quán)交給了地址/數(shù)據(jù)端,同時(shí)控制端的高電平使多路開關(guān)MUX打向上面,接通非門,VT2始終保持截止?fàn)顟B(tài),VT1的狀態(tài)取決于地址/數(shù)據(jù)端。此時(shí)PO口工作在地址/數(shù)據(jù)分時(shí)復(fù)用方式:若地址/數(shù)據(jù)端為1,則VT1導(dǎo)通,PO.X引腳輸出高電平;若地址/數(shù)據(jù)端為0,則VT1截止,P0.X引腳輸出低電平。即PO.X引腳的電平始終與地址/數(shù)據(jù)端電平相同,這樣就將地址/數(shù)據(jù)的信號(hào)輸出了。單片機(jī)應(yīng)用I/O操作0451單片機(jī)I/O口原理介紹P1口P1口其中一位的結(jié)構(gòu)圖如圖所示,它由一個(gè)鎖存器、兩個(gè)三態(tài)輸入緩沖器和一個(gè)輸出驅(qū)動(dòng)電路組成。P1口由8個(gè)這樣的電路組成,從圖中可以看出,P1口只能作為通用I/O口用。單片機(jī)應(yīng)用I/O操作0451單片機(jī)I/O口原理介紹P1口P1口工作原理如下。作為輸出口。P1口工作在輸出方式時(shí),數(shù)據(jù)經(jīng)內(nèi)部總線送入鎖存器,數(shù)據(jù)為1時(shí),鎖存器輸出端Q為1,Q端為0,VT截止,P1.X引腳輸出高電平;數(shù)據(jù)為0時(shí),鎖存器輸出端Q為0,Q端為1,VT導(dǎo)通,P1.X引腳輸出低電平。單片機(jī)應(yīng)用I/O操作0451單片機(jī)I/O口原理介紹P1口P1口工作原理如下。作為輸入口。P1口工作在輸入方式時(shí),有兩種讀入方式:讀鎖存器和讀引腳。當(dāng)CPU發(fā)出讀鎖存器指令時(shí),鎖存器的狀態(tài)由Q端經(jīng)上方的三態(tài)輸入緩沖器1進(jìn)入內(nèi)部總線;當(dāng)CPU發(fā)出讀引腳指令時(shí),先向鎖存器寫“1”,鎖存器的輸出狀態(tài)@=0,場(chǎng)效應(yīng)管VT截止,引腳的狀態(tài)由三態(tài)輸入緩沖器2進(jìn)入內(nèi)部總線。單片機(jī)應(yīng)用I/O操作0451單片機(jī)I/O口原理介紹P2口P2口作為通用I/O口時(shí)工作原理如下。作為輸出口。在控制信號(hào)的作用下,多路開關(guān)與鎖存器的輸出端Q接通,數(shù)據(jù)經(jīng)內(nèi)部總線送入鎖存器,當(dāng)CPU輸出數(shù)據(jù)為1時(shí),鎖存器輸出端Q為1,經(jīng)過非門,輸出到VT柵極上為0,VT截止,P2.X輸出為高電平;當(dāng)CPU輸出數(shù)據(jù)為0時(shí),鎖存器輸出端Q為0,經(jīng)過非門,輸出到VT柵極上為1,VT導(dǎo)通,P2.X輸出為低電平。單片機(jī)應(yīng)用I/O操作0451單片機(jī)I/O口原理介紹P2口P2口作為通用I/O口時(shí)工作原理如下。作為輸入口。P2口工作在輸入方式時(shí),有兩種讀入方式:讀鎖存器和讀引腳。當(dāng)CPU發(fā)出讀鎖存器指令時(shí),鎖存器的狀態(tài)由Q端經(jīng)上方的三態(tài)輸入緩沖器1進(jìn)入內(nèi)部總線;當(dāng)CPU發(fā)出讀引腳指令時(shí),先向鎖存器寫“1”,鎖存器的輸出狀態(tài)=1,經(jīng)過非門后變?yōu)?,場(chǎng)效應(yīng)管VT截止,P2.X引腳的電平由三態(tài)輸入緩沖器2進(jìn)入內(nèi)部總線。單片機(jī)應(yīng)用I/O操作0451單片機(jī)I/O口原理介紹P2口P2口作為地址總線口時(shí)工作原理如下。在控制信號(hào)的作用下,多路開關(guān)與地址線接通,此時(shí)輸出外部存儲(chǔ)器的高8位地址。當(dāng)?shù)刂肪€信號(hào)輸出為1時(shí),經(jīng)過非門后輸出變?yōu)?,VT截止,P2.X輸出高電平;當(dāng)?shù)刂肪€信號(hào)輸出為0時(shí),經(jīng)過非門后輸出變?yōu)?,VT導(dǎo)通,P2.X輸出低電平。即P2.X引腳的電平始終與地址端電平相同,這樣就將地址端的信號(hào)輸出了。單片機(jī)應(yīng)用I/O操作0451單片機(jī)I/O口原理介紹P3口P3口其中一位的結(jié)構(gòu)圖如圖所示,它由一個(gè)鎖存器、三個(gè)三態(tài)輸入緩沖器和一個(gè)輸出驅(qū)動(dòng)電路組成。P3口由8個(gè)這樣的電路組成,P3口相比其他I/O口增加了引腳的第二輸入/輸出功能。單片機(jī)應(yīng)用I/O操作0451單片機(jī)I/O口原理介紹P3口P3口用作第一功能——通用1/O口的工作原理如下。當(dāng)P3口用作第一功能輸出時(shí),第二功能輸出端應(yīng)保持高電平,與非門為開啟狀態(tài)。當(dāng)CPU通過內(nèi)部總線向鎖存器輸出1時(shí),鎖存器輸出端Q為1,經(jīng)過與非門,輸出變?yōu)?,VT截止,P3.X引腳輸出高電平;當(dāng)CPU通過內(nèi)部總線向鎖存器輸出0時(shí),鎖存器輸出端Q為0,經(jīng)過與非門,輸出變?yōu)?,VT導(dǎo)通,P3.X引腳輸出低電平。單片機(jī)應(yīng)用I/O操作0451單片機(jī)I/O口原理介紹P3口P3口用作第一功能——通用1/O口的工作原理如下。當(dāng)P3口用作第一功能輸入時(shí),該位的鎖存器輸出端Q和第二輸出功能端均需要置“1",經(jīng)過與非門后輸出變?yōu)?,保證VT一直處于截止?fàn)顟B(tài),P3.X引腳的信息通過三態(tài)輸入緩沖器3和2進(jìn)入內(nèi)部總線,完成讀引腳操作。當(dāng)P3口用作第一功能輸入時(shí),CPU發(fā)出讀鎖存器指令,鎖存器Q端信息通過三態(tài)輸入緩沖器1進(jìn)入內(nèi)部總線,完成讀鎖存器操作。單片機(jī)應(yīng)用I/O操作0451單片機(jī)I/O口原理介紹P3口P3口用作第二輸入/輸出功能的工作原理如下。當(dāng)選擇第二輸出功能時(shí),該位的鎖存器輸出端Q需要置“1”,與非門為開啟狀態(tài)。當(dāng)?shù)诙敵鰹?時(shí),經(jīng)過與非門,輸出變?yōu)?,VT截止,P3.X引腳輸出高電平;當(dāng)?shù)诙敵鰹?時(shí),經(jīng)過與非門,輸出變?yōu)?,VT導(dǎo)通,P3.X引腳輸出為低電平。當(dāng)選擇第二輸入功能時(shí),該位的鎖存器輸出端Q和第二輸出功能端均需要置“1”,此時(shí)經(jīng)過與非門后,輸出信號(hào)為0,保證VT一直處于截止?fàn)顟B(tài),P3.X引腳的信息經(jīng)過三態(tài)輸入緩沖器3得到。單片機(jī)應(yīng)用I/O操作04端口輸入與輸出程序單片機(jī)的I/O口PO~P3是單片機(jī)與外設(shè)進(jìn)行信息交換的橋梁,一方面單片機(jī)可向IO口發(fā)出命令來控制外設(shè),另一方面可以通過讀取IO口的狀態(tài)來了解外設(shè)的狀態(tài)。下面通過一個(gè)例子來了解單片機(jī)端口的輸入與輸出程序。如圖所示,按鍵K1連接最小系統(tǒng)的P1.5引腳,LED連接P2.0引腳,編程實(shí)現(xiàn)按下按鍵K1,LED的狀態(tài)一直取反,即亮滅閃爍。單片機(jī)應(yīng)用I/O操作04端口輸入與輸出程序程序代碼如下。單片機(jī)應(yīng)用I/O操作04最小系統(tǒng)的軟件驗(yàn)證首先打開KeiluVision5,建立好工程,將程序代碼寫入工作空間。單擊工具欄中的設(shè)置工程參數(shù)按鈕惑,進(jìn)行參數(shù)設(shè)置,單擊【Target】選項(xiàng)卡,將【Xtal(MHz)】晶振中的值改為11.0592MHz,如圖所示。單片機(jī)應(yīng)用I/O操作04最小系統(tǒng)的軟件驗(yàn)證然后單擊【Debug】選項(xiàng)卡,選中【UseSimulator】單選項(xiàng)即軟件調(diào)試,一般默認(rèn)為選中狀態(tài),如圖所示。單片機(jī)應(yīng)用I/O操作04最小系統(tǒng)的軟件驗(yàn)證接下來使用KeiluVision5對(duì)程序進(jìn)行軟件調(diào)試。單擊工具欄中的調(diào)試按鈕R,程序調(diào)試窗口如圖所示。單片機(jī)應(yīng)用I/O操作04最小系統(tǒng)的軟件驗(yàn)證然后單擊工具欄的分析按鈕酈,選擇【LogicAnalyzer】,彈出如圖所示對(duì)話框,單擊左上角的【Setup】按鈕,彈出信號(hào)分析設(shè)置列表,如圖所示。單擊插入按鈕點(diǎn),根據(jù)程序建立名稱為k1與led的信號(hào),k1信號(hào)用紅色線表示,led信號(hào)用綠色線表示,其他參數(shù)不變。設(shè)置完成后單擊【Close】按鈕關(guān)閉此列表,在左下角【Command】命令窗口中可看到出現(xiàn)了k1與led,表明我們可以在命令行對(duì)k1與led進(jìn)行寫入指令操作。單片機(jī)應(yīng)用I/O操作04最小系統(tǒng)的硬件調(diào)試單片機(jī)的安裝單片機(jī)在其頂部位置有一個(gè)缺口,這個(gè)缺口是用來定位方向的,缺口的左上方為單片機(jī)的1號(hào)引腳,然后依次逆時(shí)針編號(hào)。在將單片機(jī)安裝到IC插座上時(shí),單片機(jī)的缺口方向要與IC插座缺口方向一致,并且缺口所在位置遠(yuǎn)離晶振。另外,有些IC插座可能沒有缺口,可以按照單片機(jī)缺口所在位置遠(yuǎn)離晶振進(jìn)行安裝。單片機(jī)及IC插座如圖所示。單片機(jī)應(yīng)用I/O操作04最小系統(tǒng)的硬件調(diào)試最小系統(tǒng)與STC下載器的連接最小系統(tǒng)如圖4-89(a)所示,STC(USB轉(zhuǎn)TTL)下載器如圖4-89(b)所示。最小系統(tǒng)與STC下載器的連接示意圖如圖所示實(shí)際連接圖如圖所示。單片機(jī)應(yīng)用I/O操作04最小系統(tǒng)的硬件調(diào)試最小系統(tǒng)的調(diào)試將STC下載器插入計(jì)算機(jī)的USB口,下載器開始給單片機(jī)供電。用萬用表電壓擋檢測(cè)電源是否接通,主要是查看VCC引腳和GND引腳之間是否有5V電壓。用萬用表直流電壓擋檢測(cè)EA引腳,查看是否有5V電壓,目的是確保使用了片內(nèi)程序存儲(chǔ)器。用萬用表檢測(cè)復(fù)位電路,通過復(fù)位按鍵,檢測(cè)RST引腳的電壓是否會(huì)變化。按鍵沒有按下時(shí),RST引腳電壓為OV;按鍵按下后,電壓立刻變?yōu)?V,之后很快降為0V,表示復(fù)位電路正常。用示波器檢測(cè)晶振電路,主要檢測(cè)XTAL1、XTAL2引腳。檢測(cè)是否有振蕩波產(chǎn)生。如果有振蕩波產(chǎn)生,則表示晶振電路正常工作。單片機(jī)應(yīng)用I/O操作04程序的燒寫與驗(yàn)證STC-ISP的下載登錄STC宏晶科技的官網(wǎng),在主頁右側(cè)的【STC-ISP下載編程燒錄軟件】目錄中選擇燒錄軟件,如圖所示(網(wǎng)站會(huì)不斷更新,顯示會(huì)不同),本書使用的版本為STC-ISP軟件V6.86S完整版。單片機(jī)應(yīng)用I/O操作04程序的燒寫與驗(yàn)證程序的燒寫將連接好的USB轉(zhuǎn)TTL下載器插入計(jì)算機(jī)的USB口,打開STC-ISP,首先選擇單片機(jī)的型號(hào),本書所用的單片機(jī)硬件型號(hào)為STC89C51RC-40I-PDIP40,這里我們選擇【STC89C52RC系列】→【STC89C51RC/LE51RC】,如圖所示。單片機(jī)應(yīng)用I/O操作04程序的燒寫與驗(yàn)證程序的燒寫接下來為串口的選擇,單擊【掃描】按鈕后,在下拉列表中會(huì)出現(xiàn)多個(gè)串口,根據(jù)自己所連接的串口進(jìn)行選擇。一般情況下,如果用戶使用的USB轉(zhuǎn)TTL下載器的主芯片為CH340芯片,則在串口下拉列表中選擇【CH340】字樣的選項(xiàng),如圖所示。單片機(jī)應(yīng)用I/O操作04程序的燒寫與驗(yàn)證程序的燒寫接下來設(shè)置波特率,默認(rèn)最低波特率為2400(單位默認(rèn)為bit/s),最高波特率為115200。波特率影響程序燒寫的速度,測(cè)試時(shí),從最大值115200開始,不成功則減小波特率,直至成功,燒寫成功時(shí)使用的波特率就是用戶硬件支持的最大波特率。這里選擇默認(rèn)最低波特率、最高波特率即可,如圖所示。單片機(jī)應(yīng)用I/O操作04程序的燒寫與驗(yàn)證程序的燒寫接下來進(jìn)行HEX文件的選擇,單擊【打開程序文件】按鈕,從文件中找到程序的HEX文件,雙擊HEX文件或單擊【打開】按鈕均可,如圖所示。單片機(jī)應(yīng)用I/O操作04程序的燒寫與驗(yàn)證程序的燒寫然后單擊【下載/編程】按鈕,注意在使用USB轉(zhuǎn)TTL下載器進(jìn)行串口下載時(shí),先單擊【下載/編程】按鈕,然后再給單片機(jī)上電,即使用此種方式燒錄程序時(shí)單片機(jī)要冷啟動(dòng)(斷電狀態(tài)→下載→上電)。程序下載后,STC-ISP界面如圖所示。單片機(jī)應(yīng)用I/O操作04程序的燒寫與驗(yàn)證程序的驗(yàn)證下面將單片機(jī)最小系統(tǒng)與放置在面包板上的元件連接,如圖所示。面包板上的元件清單如表所示。單片機(jī)應(yīng)用I/O操作04程序的燒寫與驗(yàn)證程序的驗(yàn)證系統(tǒng)整體的連接圖如圖所示。實(shí)驗(yàn)現(xiàn)象如下。上電后,LED為熄滅狀態(tài);第一次按鍵,LED亮起,第二次按鍵,LED熄滅,按照此規(guī)律按鍵,LED由亮到滅,又由滅到亮;一直按住按鍵,LED則一直閃爍。實(shí)驗(yàn)現(xiàn)象示意圖如圖所示。感謝觀看,再見!單片機(jī)原理與嵌入式設(shè)計(jì)電子設(shè)計(jì)系列教材單片機(jī)原理與嵌入式設(shè)計(jì)定時(shí)器/計(jì)數(shù)器與中斷第五章電子設(shè)計(jì)系列教材01中斷系統(tǒng)中斷系統(tǒng)01中斷概述中斷的定義計(jì)算機(jī)的中斷是指CPU正在處理某件事情時(shí),由于內(nèi)部/外部發(fā)生了某一事件(如一個(gè)電平的變化、一個(gè)脈沖沿的發(fā)生或定時(shí)器/計(jì)數(shù)器的溢出等)或由程序預(yù)先安排的事件,請(qǐng)求CPU迅速去處理,于是CPU暫時(shí)中斷當(dāng)前的工作,轉(zhuǎn)入處理所發(fā)生的事情或轉(zhuǎn)入預(yù)先安排的程序中。中斷服務(wù)處理完成后,再回到原來被中斷的地方,繼續(xù)原來的工作,這樣的過程稱為中斷。實(shí)現(xiàn)這種功能的部件稱為中斷系統(tǒng),產(chǎn)生中斷的請(qǐng)求稱為中斷源。中斷系統(tǒng)01中斷概述中斷響應(yīng)過程中斷源提出中斷申請(qǐng),并建立相應(yīng)的中斷標(biāo)志。斷點(diǎn)保護(hù):CPU結(jié)束當(dāng)前工作,響應(yīng)該中斷申請(qǐng),同時(shí)把主程序斷點(diǎn)地址(PC值)壓入堆棧。斷點(diǎn)是指當(dāng)前指令的下一條指令地址。保護(hù)現(xiàn)場(chǎng):把斷點(diǎn)處的有關(guān)信息(如工作寄存器、累加器、標(biāo)志位的內(nèi)容)壓入堆棧。中斷系統(tǒng)01中斷概述中斷響應(yīng)過程清除中斷請(qǐng)求標(biāo)志(中斷撤銷)。識(shí)別中斷源:被響應(yīng)的中斷源所對(duì)應(yīng)的中斷服務(wù)程序的入口地址送入PC,程序轉(zhuǎn)入中斷服務(wù)程序入口處。執(zhí)行中斷服務(wù)程序。中斷系統(tǒng)01中斷概述中斷響應(yīng)過程恢復(fù)現(xiàn)場(chǎng):執(zhí)行中斷返回指令,把斷點(diǎn)地址從棧頂彈出。返回主程序,從斷點(diǎn)處繼續(xù)執(zhí)行主程序。中斷系統(tǒng)01中斷概述中斷源基礎(chǔ)的5個(gè)中斷請(qǐng)求可分為內(nèi)部中斷源和外部中斷源,外部中斷源包括NTO和INTi,內(nèi)部中斷包括兩個(gè)定時(shí)器/計(jì)數(shù)器(TO和T1)的溢出中斷TFO和TF1及串行口發(fā)送/接收中斷TI/RI。INTO:外部中斷О請(qǐng)求,外部中斷請(qǐng)求信號(hào)由NTO(P3.2)引腳輸入,中斷請(qǐng)求標(biāo)志為IE0。INT1:外部中斷1請(qǐng)求,外部中斷請(qǐng)求信號(hào)由INT1(P3.3)引腳輸入,中斷請(qǐng)求標(biāo)志為IE1。中斷系統(tǒng)01中斷概述中斷源基礎(chǔ)的5個(gè)中斷請(qǐng)求可分為內(nèi)部中斷源和外部中斷源,外部中斷源包括NTO和INTi,內(nèi)部中斷包括兩個(gè)定時(shí)器/計(jì)數(shù)器(TO和T1)的溢出中斷TFO和TF1及串行口發(fā)送/接收中斷TI/RI。定時(shí)器/計(jì)數(shù)器TO溢出中斷請(qǐng)求,中斷請(qǐng)求標(biāo)志為TFO。定時(shí)器/計(jì)數(shù)器T1溢出中斷請(qǐng)求,中斷請(qǐng)求標(biāo)志為TF1。中斷系統(tǒng)01中斷概述中斷源基礎(chǔ)的5個(gè)中斷請(qǐng)求可分為內(nèi)部中斷源和外部中斷源,外部中斷源包括NTO和INTi,內(nèi)部中斷包括兩個(gè)定時(shí)器/計(jì)數(shù)器(TO和T1)的溢出中斷TFO和TF1及串行口發(fā)送/接收中斷TI/RI。串行口中斷請(qǐng)求TIRI,串行口發(fā)送中斷請(qǐng)求標(biāo)志為TI,串行口接收中斷請(qǐng)求標(biāo)志為RI。其中INTO和NTi可以由低電平觸發(fā)或下降沿觸發(fā),觸發(fā)方式可以由用戶通過設(shè)置TCON來實(shí)現(xiàn)。單片機(jī)加入中斷系統(tǒng)后能實(shí)現(xiàn)分時(shí)操作、實(shí)時(shí)處理和故障處理。中斷系統(tǒng)01中斷系統(tǒng)的結(jié)構(gòu)如圖所示,8051單片機(jī)的中斷系統(tǒng)中有5個(gè)基本中斷源,優(yōu)先級(jí)有兩個(gè),圖5-1所示的中斷響應(yīng)過程可以實(shí)現(xiàn)兩級(jí)的中斷嵌套。其中,每個(gè)中斷源都可以通過軟件來設(shè)置優(yōu)先級(jí),并控制該中斷的開啟或關(guān)閉。中斷系統(tǒng)01中斷控制定時(shí)器/計(jì)數(shù)器控制寄存器(TCON)TCON是定時(shí)器/計(jì)數(shù)器控制寄存器,在片內(nèi)RAM的字節(jié)地址為88H,可以位尋址。TCON用于控制定時(shí)器/計(jì)數(shù)器TO和T1的啟/停、定時(shí)器/計(jì)數(shù)器的溢出中斷請(qǐng)求標(biāo)志位(TFO和TF1),兩個(gè)外部中斷請(qǐng)求的中斷觸發(fā)方式(低電平觸發(fā)或下降沿觸發(fā))選擇(由ITO和IT1位控制)。中斷系統(tǒng)01中斷控制串行口控制寄存器(SCON)SCON是串行口控制寄存器,在片內(nèi)RAM的字節(jié)地址為98H,可以位尋址。SCON的格式如表所示。中斷系統(tǒng)01中斷控制串行口控制寄存器(SCON)SCON中高6位用于串行口控制,其功能在后面串行口部分進(jìn)行介紹;低2位用于中斷控制。TI:串行口發(fā)送中斷請(qǐng)求標(biāo)志位。當(dāng)CPU將一個(gè)字節(jié)的數(shù)據(jù)寫入串行口的SBUF時(shí),就會(huì)啟動(dòng)一幀串行數(shù)據(jù)的發(fā)送,每發(fā)送完一幀串行數(shù)據(jù)后,硬件把TI位自動(dòng)置1。CPU響應(yīng)串行口發(fā)送中斷時(shí),并不能清除TI位,TI位必須在中斷服務(wù)程序中用指令對(duì)其清零。RI:串行口接收中斷請(qǐng)求標(biāo)志位。串行口接收完一個(gè)串行數(shù)據(jù)幀,硬件自動(dòng)把RI位置1。CPU響應(yīng)串行口接收中斷時(shí),并不能清除RI位,RI位必須在中斷服務(wù)程序中用指令對(duì)其清零。中斷系統(tǒng)01中斷控制中斷允許控制寄存器(IE)IE的片內(nèi)字節(jié)地址為A8H,可以進(jìn)行位尋址。中斷允許控制寄存器中有6位用于中斷控制,其格式如表所示。中斷系統(tǒng)01中斷控制中斷允許控制寄存器(IE)正中各位的功能如表所示。中斷系統(tǒng)01中斷控制中斷優(yōu)先級(jí)控制寄存器(IP)8051單片機(jī)的中斷請(qǐng)求設(shè)置了兩個(gè)優(yōu)先級(jí),由P把各中斷源的優(yōu)先級(jí)分為高、低。中斷優(yōu)先級(jí)的提出方便實(shí)現(xiàn)兩級(jí)中斷嵌套,即單片機(jī)在執(zhí)行低優(yōu)先級(jí)的中斷服務(wù)時(shí),高優(yōu)先級(jí)的中斷可以打斷低優(yōu)先級(jí)的中斷,待高優(yōu)先級(jí)中斷執(zhí)行完畢后,CPU再返回執(zhí)行低優(yōu)先級(jí)的中斷服務(wù)。中斷優(yōu)先級(jí)關(guān)系遵循以下兩條規(guī)則。低優(yōu)先級(jí)中斷可以被高優(yōu)先級(jí)中斷打斷,但高優(yōu)先級(jí)中斷不能被低優(yōu)先級(jí)中斷打斷。中斷系統(tǒng)01中斷控制中斷優(yōu)先級(jí)控制寄存器(IP)8051單片機(jī)的中斷請(qǐng)求設(shè)置了兩個(gè)優(yōu)先級(jí),由P把各中斷源的優(yōu)先級(jí)分為高、低。中斷優(yōu)先級(jí)的提出方便實(shí)現(xiàn)兩級(jí)中斷嵌套,即單片機(jī)在執(zhí)行低優(yōu)先級(jí)的中斷服務(wù)時(shí),高優(yōu)先級(jí)的中斷可以打斷低優(yōu)先級(jí)的中斷,待高優(yōu)先級(jí)中斷執(zhí)行完畢后,CPU再返回執(zhí)行低優(yōu)先級(jí)的中斷服務(wù)。中斷優(yōu)先級(jí)關(guān)系遵循以下兩條規(guī)則。所有中斷得到響應(yīng)后,不能被同級(jí)中斷源所中斷。因此,一個(gè)中斷源被設(shè)置為高優(yōu)先級(jí)后,在執(zhí)行該中斷源的服務(wù)程序時(shí),不會(huì)再被任何中斷請(qǐng)求中斷。中斷系統(tǒng)01中斷響應(yīng)的處理過程中斷響應(yīng)中斷響應(yīng)的條件中斷響應(yīng)處于開放狀態(tài):E的中斷允許總控制位EA=1,相應(yīng)的中斷允許控制位都處于開放狀態(tài)。中斷源發(fā)出中斷請(qǐng)求:中斷源對(duì)應(yīng)的中斷請(qǐng)求標(biāo)志位為“1”。中斷系統(tǒng)01中斷響應(yīng)的處理過程中斷響應(yīng)中斷響應(yīng)的條件無同級(jí)或更高級(jí)中斷正在被服務(wù)。執(zhí)行完當(dāng)前指令,如果CPU處于正在執(zhí)行中斷返回指令(匯編語言為RETI指令)或訪問IP、E寄存器的指令狀態(tài),則CPU必須等待,直到當(dāng)前指令的下一條指令后,才響應(yīng)其中斷請(qǐng)求。中斷系統(tǒng)01中斷響應(yīng)的處理過程中斷響應(yīng)中斷響應(yīng)內(nèi)容8051單片機(jī)在每個(gè)機(jī)器周期的第5個(gè)狀態(tài)周期的第2個(gè)節(jié)拍會(huì)順序采樣各個(gè)中斷源,并將相應(yīng)的中斷標(biāo)志置位。CPU響應(yīng)中斷時(shí),首先要進(jìn)行斷點(diǎn)保護(hù),將PC值進(jìn)行堆棧(先進(jìn)棧低8位,后進(jìn)棧高8位),然后根據(jù)中斷標(biāo)志,即將相應(yīng)的中斷服務(wù)程序的入口地址送入PC,CPU轉(zhuǎn)去執(zhí)行中斷服務(wù)程序。由于8051單片機(jī)的CPU自動(dòng)保護(hù)的功能僅限于斷點(diǎn),其他信息(如寄存器內(nèi)容)都沒有進(jìn)行保護(hù),所以需要用戶在中斷服務(wù)程序中進(jìn)行現(xiàn)場(chǎng)保護(hù)。注意,使用匯編語言時(shí),中斷服務(wù)程序執(zhí)行完畢,其最后一條指令是RETI(不是RET),RETI指令使CPU將堆棧的斷點(diǎn)地址取出,送回PC,程序繼續(xù)從斷點(diǎn)處執(zhí)行。中斷系統(tǒng)01中斷響應(yīng)的處理過程中斷響應(yīng)中斷響應(yīng)被封鎖的三種情況1CPU正在處理相同的或更高優(yōu)先級(jí)的中斷。2所查詢的機(jī)器周期不是所執(zhí)行指令的最后一個(gè)機(jī)器周期,為了保證指令執(zhí)行的完整性,只有在執(zhí)行完該指令后,才能響應(yīng)中斷。3正在執(zhí)行中斷返回指令或是訪問IE、P的指令,需要再執(zhí)行一條指令才能響應(yīng)新的中斷請(qǐng)求。中斷系統(tǒng)01中斷請(qǐng)求的撤銷定時(shí)器/計(jì)數(shù)器溢出中斷請(qǐng)求的撤銷TF0和TF1是定時(shí)器/計(jì)數(shù)器溢出中斷請(qǐng)求標(biāo)志位,它們由定時(shí)器/計(jì)數(shù)器溢出中斷源的中斷請(qǐng)求的輸入而置位,因?yàn)槎〞r(shí)器/計(jì)數(shù)器溢出中斷得到響應(yīng)而自動(dòng)復(fù)位為“0”狀態(tài),所以定時(shí)器/計(jì)數(shù)器溢出中斷源的中斷請(qǐng)求是自動(dòng)撤銷的(也可由軟件查詢清零)。中斷系統(tǒng)01中斷請(qǐng)求的撤銷串行口中斷請(qǐng)求的撤銷TI和RI是串行口中斷的標(biāo)志位,CPU不能自動(dòng)將它們撤銷,這是因?yàn)?051單片機(jī)進(jìn)入串行口中斷服務(wù)程序后,CPU無法知道是接收中斷還是發(fā)送中斷,常需要對(duì)這兩個(gè)標(biāo)志位進(jìn)行檢測(cè),以測(cè)定串行口發(fā)生了接收中斷還是發(fā)送中斷,響應(yīng)串行口中斷后,只能由用戶在中斷服務(wù)程序的適當(dāng)位置將它們撤銷。中斷系統(tǒng)01中斷請(qǐng)求的撤銷外部中斷請(qǐng)求的撤銷外部中斷請(qǐng)求有兩種觸發(fā)方式:電平觸發(fā)和下降沿觸發(fā)。不同觸發(fā)方式的中斷撤銷方法不同。在下降沿觸發(fā)方式的中斷請(qǐng)求撤銷包括兩項(xiàng):中斷請(qǐng)求標(biāo)志位清零和外部中斷信號(hào)的撤銷。外部中斷標(biāo)志IEO/E1是依靠CPU兩次檢測(cè)到INTO/NT1上的觸發(fā)電平狀態(tài)不同而置位的。因此,芯片設(shè)計(jì)者使CPU在響應(yīng)中斷時(shí)自動(dòng)復(fù)位IEO/E1,就撤銷了IEO/E1上的中斷請(qǐng)求。此外,外部中斷請(qǐng)求是下降沿信號(hào),由于下降沿信號(hào)在觸發(fā)過后就會(huì)消失,所以下降沿觸發(fā)方式的外部中斷請(qǐng)求也是自動(dòng)撤銷的。中斷系統(tǒng)01中斷請(qǐng)求的撤銷外部中斷請(qǐng)求的撤銷在電平觸發(fā)方式的中斷請(qǐng)求撤銷:中斷標(biāo)志IEO/IE1是依靠CPU檢測(cè)NTO/NTi上低電平狀態(tài)而置位的。盡管CPU響應(yīng)中斷時(shí),相應(yīng)中斷標(biāo)志IEO/E1能自動(dòng)復(fù)位為“0”狀態(tài)。但若外部中斷源不能及時(shí)撤銷它在INTO/NTi上的低電平,則該電平就會(huì)再次使已經(jīng)變?yōu)椤?”的中斷標(biāo)志IEO/E1置位,重復(fù)進(jìn)入中斷。因此,電平觸發(fā)方式的外部中斷請(qǐng)求撤銷必須使INTO/INT1上的低電平隨著其中斷被CPU響應(yīng)而變?yōu)楦唠娖健?2定時(shí)器/計(jì)數(shù)器定時(shí)器/計(jì)數(shù)器02概述定時(shí)器/計(jì)數(shù)器實(shí)際上是加1計(jì)數(shù)器,當(dāng)它對(duì)外部脈沖計(jì)數(shù)時(shí),由于其頻率不固定,所以稱之為計(jì)數(shù)器;當(dāng)對(duì)內(nèi)部固定頻率的時(shí)鐘計(jì)數(shù)時(shí),稱之為定時(shí)器。8051單片機(jī)內(nèi)部有兩個(gè)16位可編程定時(shí)器/計(jì)數(shù)器,即TO和T1(如果是增強(qiáng)型單片機(jī),則內(nèi)部含有3個(gè)定時(shí)器/計(jì)數(shù)器,第3個(gè)稱為定時(shí)器/計(jì)數(shù)器T3)??删幊潭〞r(shí)器/計(jì)數(shù)器是使用專用的定時(shí)器/計(jì)數(shù)器芯片來實(shí)現(xiàn)的,其特點(diǎn)是通過對(duì)系統(tǒng)時(shí)鐘脈沖進(jìn)行計(jì)數(shù)實(shí)現(xiàn)定時(shí),定時(shí)的時(shí)間長短可以通過程序來設(shè)定,方便靈活。定時(shí)器/計(jì)數(shù)器02概述8051單片機(jī)內(nèi)部的可編程定時(shí)器/計(jì)數(shù)器在計(jì)數(shù)滿值回零時(shí)會(huì)自動(dòng)產(chǎn)生溢出中斷請(qǐng)求,兩個(gè)定時(shí)器/計(jì)數(shù)器均可設(shè)定為定時(shí)器模式和計(jì)數(shù)器模式,在這兩種模式下均可設(shè)定4種工作方式,通過對(duì)控制寄存器的編程,修改特殊功能寄存器中的控制字及狀態(tài),即可實(shí)現(xiàn)各種方式的選擇,此外,計(jì)數(shù)初值也是通過程序?qū)懭攵〞r(shí)器/計(jì)數(shù)器的寄存器來設(shè)定的。定時(shí)器/計(jì)數(shù)器02定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)8051單片機(jī)的定時(shí)器/計(jì)數(shù)器結(jié)構(gòu)框圖如圖所示,定時(shí)器/計(jì)數(shù)器TO由特殊功能寄存器THO(高8位)和TLO(低8位)構(gòu)成,定時(shí)器/計(jì)數(shù)器T1由特殊功能寄存器TH1(高8位)和TL1(低8位)構(gòu)成。定時(shí)器/計(jì)數(shù)器02定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)計(jì)數(shù)器模式當(dāng)TO或T1用作對(duì)外部事件計(jì)數(shù)時(shí),連接單片機(jī)的輸入端P3.4(TO)和P3.5(T1)。在這種情況下,當(dāng)CPU檢測(cè)到輸入端的電平由高變?yōu)榈蜁r(shí),計(jì)數(shù)器就加1。定時(shí)器模式當(dāng)TO和T1作為定時(shí)器使用時(shí),輸入的計(jì)數(shù)脈沖是由晶體振蕩器的輸出經(jīng)12分頻后得到的系統(tǒng)內(nèi)部脈沖信號(hào),所以定時(shí)器可看作對(duì)單片機(jī)內(nèi)部機(jī)器周期的計(jì)數(shù)器,即每經(jīng)過1個(gè)機(jī)器周期的時(shí)間,計(jì)數(shù)器加1。定時(shí)器/計(jì)數(shù)器02TMOD和TCONTMOD主要用于選擇定時(shí)器/計(jì)數(shù)器的工作方式。TMOD的字節(jié)地址為89H,不能進(jìn)行位尋址,其格式如表所示。定時(shí)器/計(jì)數(shù)器模式控制寄存器(TMOD)由表可以得出,TMOD分為兩組,每組4位,高4位控制定時(shí)器/計(jì)數(shù)器T1,低4位控制定時(shí)器/計(jì)數(shù)器T0,每組對(duì)定時(shí)器/計(jì)數(shù)器的控制功能相似,下面以TO為例分析其功能。定時(shí)器/計(jì)數(shù)器02TMOD和TCON定時(shí)器/計(jì)數(shù)器模式控制寄存器(TMOD)GATE:門控位,決定定時(shí)器/計(jì)數(shù)器的啟/停控制由TRO(軟件控制)還是TR0和NTO組合控制(軟硬控制)。定時(shí)器/控制器T0方式控制邏輯圖如圖所示。TMOD各位的功能如下。定時(shí)器/計(jì)數(shù)器02TMOD和TCON定時(shí)器/計(jì)數(shù)器模式控制寄存器(TMOD)GATE:門控位,決定定時(shí)器/計(jì)數(shù)器的啟/??刂朴蒚RO(軟件控制)還是TR0和NTO組合控制(軟硬控制)。定時(shí)器/控制器T0方式控制邏輯圖如圖所示。TMOD各位的功能如下。GATE=0,或門輸出恒為1,INTO無效,定時(shí)器/計(jì)數(shù)器的啟/停只被TCON中的啟/??刂莆籘R0決定。如果TR0=1,則定時(shí)器/計(jì)數(shù)器啟動(dòng),開始做加法計(jì)數(shù);如果TRO=0,則定時(shí)器/計(jì)數(shù)器停止計(jì)數(shù)。定時(shí)器/計(jì)數(shù)器02TMOD和TCON定時(shí)器/計(jì)數(shù)器模式控制寄存器(TMOD)工作方式選擇位MO、M1。TMOD各位的功能如下。MO、M1組合的工作方式選擇對(duì)應(yīng)關(guān)系如表所示。定時(shí)器/計(jì)數(shù)器02TMOD和TCON定時(shí)器/計(jì)數(shù)器模式控制寄存器(TMOD)c/T:定時(shí)器/計(jì)數(shù)器工作方式選擇位。TMOD各位的功能如下。C/T=0時(shí),選擇定時(shí)器工作方式,此時(shí)多路開關(guān)選擇系統(tǒng)內(nèi)部脈沖信號(hào)(系統(tǒng)晶振脈沖12分頻輸出脈沖),對(duì)內(nèi)部脈沖計(jì)數(shù)。C/T=1時(shí),選擇計(jì)數(shù)器工作方式,此時(shí)多路開關(guān)選擇TO(P3.4引腳)輸入的外部脈沖(下降沿)計(jì)數(shù)。定時(shí)器/計(jì)數(shù)器02TMOD和TCON定時(shí)器/計(jì)數(shù)器控制寄存器(TCON)TCON的字節(jié)地址為88H,可位尋址。TCON的格式如表所示。TRO是定時(shí)器/計(jì)數(shù)器TO的啟/停控制位,其狀態(tài)可以通過軟件設(shè)置,由于TRO可以位尋址,所以能通過位操作指令和字節(jié)操作指令來設(shè)置。TRO=1時(shí),定時(shí)器/計(jì)數(shù)器TO開始計(jì)數(shù);TRO=0時(shí),定時(shí)器/計(jì)數(shù)器TO停止計(jì)數(shù)。TR1是定時(shí)器/計(jì)數(shù)器T1的啟/??刂莆?,功能及設(shè)置方式同TRO。定時(shí)器/計(jì)數(shù)器02定時(shí)器/計(jì)數(shù)器的工作方式工作方式0定時(shí)器/計(jì)數(shù)器工作方式0可以通過將M1、M0位設(shè)置為00來實(shí)現(xiàn)。工作方式О控制邏輯結(jié)構(gòu)圖如圖所示,此時(shí)定時(shí)器為由TLO的低5位和THO的高8位構(gòu)成13位定時(shí)器/計(jì)數(shù)器,TLO的高3位未被使用。定時(shí)器/計(jì)數(shù)器02定時(shí)器/計(jì)數(shù)器的工作方式工作方式0C/T決定定時(shí)器/計(jì)數(shù)器的兩種工作方式,而GATE決定定時(shí)器/計(jì)數(shù)器TO的運(yùn)行由TRO決定,還是由TRO和INTO共同決定。無論TO處于哪種工作方式,在計(jì)數(shù)過程中,當(dāng)TL0的低5位發(fā)生計(jì)數(shù)溢出時(shí),都會(huì)向THO進(jìn)位,當(dāng)13位計(jì)數(shù)器溢出時(shí),計(jì)數(shù)器溢出中斷請(qǐng)求標(biāo)志位TF0會(huì)置1進(jìn)位。在工作方式0下,計(jì)數(shù)值范圍為1~213(8192)。當(dāng)C/T=1時(shí),T0為計(jì)數(shù)器模式,計(jì)數(shù)初值范圍為0~213-1。當(dāng)C/T=0時(shí),TO為定時(shí)器模式,定時(shí)時(shí)間=(213-計(jì)數(shù)初值)×內(nèi)部時(shí)鐘脈沖周期。定時(shí)器/計(jì)數(shù)器02定時(shí)器/計(jì)數(shù)器的工作方式工作方式1定時(shí)器/計(jì)數(shù)器工作方式1可以通過將M1、MO位設(shè)置為01來實(shí)現(xiàn),工作方式1控制邏輯結(jié)構(gòu)圖如圖所示,工作方式1為16位定時(shí)器/計(jì)數(shù)器,其特性和工作方式0相同,工作方式0和工作方式1的區(qū)別只有計(jì)數(shù)器的位數(shù)不同。工作方式1控制位的功能及設(shè)置同工作方式0。定時(shí)器/計(jì)數(shù)器02定時(shí)器/計(jì)數(shù)器的工作方式工作方式1在工作方式1下,計(jì)數(shù)值范圍為1~216(65536)。當(dāng)C/T=1時(shí),TO為計(jì)數(shù)器模式,計(jì)數(shù)初值范圍為0~216-1。當(dāng)C/T=0時(shí),TO為定時(shí)器模式,定時(shí)時(shí)間=(26-計(jì)數(shù)初值)×內(nèi)部時(shí)鐘脈沖周期。定時(shí)器/計(jì)數(shù)器02定時(shí)器/計(jì)數(shù)器的工作方式工作方式2定時(shí)器/計(jì)數(shù)器工作方式2可以通過將M1、MO位設(shè)置為10來實(shí)現(xiàn)。工作方式2是自動(dòng)裝入計(jì)數(shù)初值的8位定時(shí)器/計(jì)數(shù)器工作方式。工作方式0和工作方式1在計(jì)數(shù)溢出后,計(jì)數(shù)器全為0。如果將工作方式0或工作方式1用作循環(huán)定時(shí)或循環(huán)計(jì)數(shù),就需要用指令來反復(fù)載入計(jì)數(shù)初值,指令載入計(jì)算初值的過程會(huì)影響精度,而工作方式2無須重新載入計(jì)數(shù)初值,有效地解決了此問題。工作方式2控制邏輯結(jié)構(gòu)圖如圖所示。定時(shí)器/計(jì)數(shù)器02定時(shí)器/計(jì)數(shù)器的工作方式工作方式2工作方式2將16位定時(shí)器/計(jì)數(shù)器拆為兩個(gè)8位寄存器TLO和THO。TLO作為常數(shù)緩沖器,當(dāng)定時(shí)器/計(jì)數(shù)器啟動(dòng)后,TLO按8位計(jì)數(shù)器進(jìn)行加1計(jì)數(shù),當(dāng)TLO計(jì)數(shù)溢出時(shí),溢出中斷請(qǐng)求標(biāo)志位TF0置1的同時(shí)將THO中的8位初值送入TLO,使TLO從初值重新開始計(jì)數(shù),兩個(gè)寄存器中應(yīng)裝入同樣的定時(shí)器/計(jì)數(shù)器初值。相對(duì)于程序不斷重新裝入計(jì)數(shù)初值,采用工作方式2的精度更高,但其缺點(diǎn)是計(jì)數(shù)器只有8位,計(jì)數(shù)值有限。工作方式2常用作固定頻率的脈沖發(fā)生器或串行通信中的波特率發(fā)生器。定時(shí)器/計(jì)數(shù)器02定時(shí)器/計(jì)數(shù)器的工作方式工作方式2在工作方式2下,計(jì)數(shù)值范圍為1~28(256)。當(dāng)C/T-1時(shí),TO為計(jì)數(shù)器模式,計(jì)數(shù)初值范圍為0~28-1。當(dāng)C/T-0時(shí),T0為定時(shí)器模式,定時(shí)時(shí)間=(28計(jì)數(shù)初值)×內(nèi)部時(shí)鐘脈沖周期。定時(shí)器/計(jì)數(shù)器02定時(shí)器/計(jì)數(shù)器的工作方式工作方式3定時(shí)器/計(jì)數(shù)器工作方式3可以通過將M1、M位設(shè)置為11來實(shí)現(xiàn)。工作方式3只適用于TO,此時(shí)將T1也設(shè)置為工作方式3的控制字會(huì)使T1停止計(jì)數(shù)(相當(dāng)于TR1=0),T1可以用于串行口波特率發(fā)生器。工作方式3為了增加一個(gè)8位定時(shí)器/計(jì)數(shù)器,將定時(shí)器/計(jì)數(shù)器TO分成兩個(gè)獨(dú)立的8位計(jì)數(shù)器。定時(shí)器/計(jì)數(shù)器02定時(shí)器/計(jì)數(shù)器的工作方式工作方式3如圖所示,TLO既可以作為定時(shí)器使用,也可以作為計(jì)數(shù)器使用,TLO使用了定時(shí)器/計(jì)數(shù)器О所有的控制位(GATE、C/T、INTO、TRO)及引腳信號(hào),其功能與使用方法與工作方式0及工作方式1相同。定時(shí)器/計(jì)數(shù)器02定時(shí)器/計(jì)數(shù)器的工作方式工作方式3如圖所示,此時(shí)THO因?yàn)椴荒苁褂猛獠繒r(shí)鐘而被固定為1個(gè)8位定時(shí)器,并使用了定時(shí)器/計(jì)數(shù)器T1的控制位TR1,同時(shí)占用定時(shí)器T1的中斷請(qǐng)求源TF1,由TR1控制THO定時(shí)器的啟/停,THO溢出時(shí)置位TF1。定時(shí)器/計(jì)數(shù)器02定時(shí)器/計(jì)數(shù)器的工作方式工作方式3當(dāng)TO在工作方式3時(shí),T1可以作為串行口的波特率發(fā)生器或不需要中斷的場(chǎng)合。由于TF1被TO占用,T1的計(jì)數(shù)溢出只能輸出給串行口,此時(shí)的T1為波特率發(fā)生器,T1設(shè)定好工作方式后,無中斷允許,如果要使其停止,則只需把T1的工作方式改為工作方式3的控制字即可。T1在工作方式0。將TMOD的M1(D5位)、MO(D4位)設(shè)置為00,T1在工作方式0。T1在工作方式1。將TMOD的M1(D5位)、MO(D4位)設(shè)置為01,T1在工作方式1。將TMOD的M1(D5位)、MO(D4位)設(shè)置為10,T1在工作方式2。03中斷系統(tǒng)軟件設(shè)計(jì)中斷系統(tǒng)軟件設(shè)計(jì)03中斷系統(tǒng)軟件設(shè)計(jì)概述51單片機(jī)的中斷系統(tǒng)包括4個(gè)特殊功能寄存器:定時(shí)器/計(jì)數(shù)器控制寄存器(TCON)、串行口控制寄存器(SCON)、中斷允許控制寄存器(E)和中斷優(yōu)先級(jí)控制寄存器(IP)。中斷系統(tǒng)在使用前需要對(duì)其進(jìn)行初始化,即對(duì)這4個(gè)特殊功能寄存器的控制位進(jìn)行賦值。由于TCON.SCON、IE及P都能進(jìn)行位尋址,所以除字節(jié)操作外,也可以使用位操作指令來實(shí)現(xiàn)中斷系統(tǒng)的初始化。中斷系統(tǒng)的初始化步驟如下。開中斷,包括總中斷和與之相對(duì)的所有中斷。設(shè)置中斷優(yōu)先級(jí)。若存在外部中斷請(qǐng)求,則設(shè)置中斷請(qǐng)求觸發(fā)方式。中斷系統(tǒng)軟件設(shè)計(jì)03中斷函數(shù)中斷函數(shù)的格式為:函數(shù)類型

函數(shù)名([參數(shù)])

interrupt

中斷類型號(hào)

using

工作寄存器組號(hào)由于中斷函數(shù)不會(huì)返回任何值,所以函數(shù)類型通常用“void”;函數(shù)名可以是C語言中關(guān)鍵字以外的任意名;由于中斷函數(shù)不帶任何參數(shù),所以參數(shù)項(xiàng)為空。中斷系統(tǒng)軟件設(shè)計(jì)03中斷系統(tǒng)的應(yīng)用用中斷方式控制兩組發(fā)光二極管交替閃爍。如圖所示,51單片機(jī)的P0.0~P0.7引腳接入8個(gè)發(fā)光二極管,外部中斷0的輸入引腳INTO上接入按鍵開關(guān),要求外部中斷0采用下降沿觸發(fā)方式。程序啟動(dòng)后,P0的8個(gè)發(fā)光二極管全部點(diǎn)亮。按下一次中斷請(qǐng)求開關(guān),NTO接入低電平,產(chǎn)生一個(gè)低電平外部中斷請(qǐng)求信號(hào),讓8個(gè)發(fā)光二極管中序號(hào)為奇數(shù)的4個(gè)與序號(hào)為偶數(shù)的4個(gè)交替閃爍,直到完成第3次時(shí)中斷返回,8個(gè)發(fā)光二極管全亮。中斷系統(tǒng)軟件設(shè)計(jì)03中斷系統(tǒng)的應(yīng)用參考程序:中斷系統(tǒng)軟件設(shè)計(jì)03中斷系統(tǒng)的應(yīng)用參考程序:中斷系統(tǒng)軟件設(shè)計(jì)03中斷系統(tǒng)的應(yīng)用仿真:中斷系統(tǒng)軟件設(shè)計(jì)03外部中斷輸入口擴(kuò)充查詢法擴(kuò)充外部中斷源多于兩個(gè)時(shí),可以將中斷請(qǐng)求源通過邏輯門輸出給INTO或NT1,并把中斷請(qǐng)求源連接到IO口上,當(dāng)中斷源引起中斷時(shí),在中斷函數(shù)中編寫查詢語句,判斷中斷源。如圖所示,由或非門連接4個(gè)故障中斷請(qǐng)求信號(hào),當(dāng)4個(gè)故障源都為低電平時(shí),或非門輸出高電平,不會(huì)引起中斷;當(dāng)某一個(gè)中斷源由低電平變?yōu)楦唠娖綍r(shí),或非門輸出電平發(fā)生跳變,觸發(fā)外部中斷0,引起單片機(jī)中斷;中斷函數(shù)查詢P1口的輸入電平的狀態(tài)即可判斷故障中斷請(qǐng)求信號(hào)的來源,點(diǎn)亮對(duì)應(yīng)的發(fā)光二極管進(jìn)行故障指示。中斷系統(tǒng)軟件設(shè)計(jì)03外部中斷輸入口擴(kuò)充專用芯片擴(kuò)充查詢法的中斷響應(yīng)速度比較慢,對(duì)于外部中斷請(qǐng)求源較多且要求中斷系統(tǒng)能快速響應(yīng)時(shí),查詢法擴(kuò)充外部中斷請(qǐng)求輸入口的方法很難滿足需求,此時(shí)可以采用專用的74LS148解碼芯片來擴(kuò)充外部中斷請(qǐng)求輸入口。74LS148外部中斷源擴(kuò)充邏輯圖如圖所示。04定時(shí)器/計(jì)數(shù)器軟件設(shè)計(jì)定時(shí)器/計(jì)數(shù)器軟件設(shè)計(jì)04概述51單片機(jī)有兩個(gè)定時(shí)器/計(jì)數(shù)器TO和T1,共4種工作方式。其中,工作方式0與工作方式1僅有計(jì)數(shù)位數(shù)的差異,工作方式0的13位計(jì)數(shù)是為了兼容MCS-48系列而設(shè)計(jì)的,由于13位計(jì)數(shù)的計(jì)數(shù)初值計(jì)算復(fù)雜,所以常用工作方式1的16位計(jì)數(shù)。定時(shí)器/計(jì)數(shù)器的工作方式和工作過程都可以使用軟件進(jìn)行設(shè)置和控制,與中斷系統(tǒng)一樣,定時(shí)器/計(jì)數(shù)器在工作前必須對(duì)其初始化,設(shè)置好工作方式并計(jì)算出計(jì)數(shù)初值。定時(shí)器/計(jì)數(shù)器軟件設(shè)計(jì)04定時(shí)器/計(jì)數(shù)器初始化初始化過程根據(jù)設(shè)計(jì)需求,選擇合適的工作方式,確定工作方式控制字,寫入TMOD中設(shè)置定時(shí)器/計(jì)數(shù)器的工作方式。根據(jù)設(shè)計(jì)需求,計(jì)算出計(jì)數(shù)初值并寫入初值寄存器(TLO、THO或TL1、TH1)。根據(jù)設(shè)計(jì)需求,設(shè)置中斷允許控制寄存器IE和中斷優(yōu)先級(jí)控制寄存器IP,開放中斷并設(shè)置中斷優(yōu)先級(jí)。設(shè)置TMOD,啟動(dòng)定時(shí)器/計(jì)數(shù)器。定時(shí)器/計(jì)數(shù)器軟件設(shè)計(jì)04定時(shí)器/計(jì)數(shù)器初始化計(jì)數(shù)初值計(jì)算定時(shí)器/計(jì)數(shù)器工作方式0為13位定時(shí)器/計(jì)數(shù)器,計(jì)數(shù)范圍為1~213,工作方式1為16位定時(shí)器/計(jì)數(shù)器,計(jì)數(shù)范圍為1~216;工作方式2和工作方式3都是8位定時(shí)器/計(jì)數(shù)器,計(jì)數(shù)范圍為1~28。定時(shí)器/計(jì)數(shù)器在計(jì)數(shù)器模式工作前要設(shè)定計(jì)數(shù)初值,寫入初值寄存器中,計(jì)數(shù)初值為該工作方式計(jì)數(shù)最大值減去設(shè)計(jì)所需要計(jì)數(shù)的值。計(jì)數(shù)器從計(jì)數(shù)初值開始進(jìn)行計(jì)數(shù),計(jì)滿后歸零。X-M-計(jì)數(shù)值定時(shí)器/計(jì)數(shù)器軟件設(shè)計(jì)04定時(shí)器/計(jì)數(shù)器初始化計(jì)數(shù)初值計(jì)算X-M-計(jì)數(shù)值式中X——計(jì)數(shù)初值;M——計(jì)數(shù)器在當(dāng)前模式的最大計(jì)數(shù)值。定時(shí)器/計(jì)數(shù)器軟件設(shè)計(jì)04定時(shí)器/計(jì)數(shù)器初始化計(jì)數(shù)初值計(jì)算定時(shí)器/計(jì)數(shù)器的定時(shí)器模式的計(jì)數(shù)脈沖為片內(nèi)系統(tǒng)計(jì)數(shù)脈沖,該脈沖為系統(tǒng)時(shí)鐘脈沖12分頻后獲得的,時(shí)長上等于1個(gè)機(jī)器周期。X=M-t/T式中X—計(jì)數(shù)初值;M——計(jì)數(shù)器在當(dāng)前模式的最大計(jì)數(shù)值;t—定時(shí)器的定時(shí)時(shí)間;T——內(nèi)部計(jì)時(shí)脈沖的周期,等于機(jī)器周期。定時(shí)器/計(jì)數(shù)器軟件設(shè)計(jì)04定時(shí)器/計(jì)數(shù)器的應(yīng)用定時(shí)器控制發(fā)光二極管閃爍如圖所示,51單片機(jī)的PO口上接入8只發(fā)光二極管,單片機(jī)的系統(tǒng)時(shí)鐘頻率為12MHz。要求采用定時(shí)器/計(jì)數(shù)器TO工作方式1,使8只發(fā)光二極管每1s閃爍一次。定時(shí)器/計(jì)數(shù)器軟件設(shè)計(jì)04定時(shí)器/計(jì)數(shù)器的應(yīng)用由于采用定時(shí)器/計(jì)數(shù)器的工作方式1,時(shí)鐘頻率為12MHz,所以單片機(jī)的系統(tǒng)計(jì)數(shù)脈沖周期T-=12×[1/(12×10')]=1us,定時(shí)器/計(jì)數(shù)器工作方式1的最大定時(shí)為246×T=65.536ms,無法直接獲得1s的定時(shí)。因此采用軟件循環(huán)重載計(jì)數(shù)初值,先使用TO實(shí)現(xiàn)一個(gè)10ms的定時(shí)器,然后將軟件收到TO的計(jì)數(shù)溢出中斷使計(jì)數(shù)初值復(fù)原,直到循環(huán)達(dá)到100,完成1000ms定時(shí)計(jì)數(shù)后再將PO口的狀態(tài)取反。定時(shí)器初值:x=216-10ms/1us=65536-10000=55536=D8FOH。定時(shí)器/計(jì)數(shù)器軟件設(shè)計(jì)04定時(shí)器/計(jì)數(shù)器的應(yīng)用參考程序:感謝觀看,再見!單片機(jī)原理與嵌入式設(shè)計(jì)電子設(shè)計(jì)系列教材單片機(jī)原理與嵌入式設(shè)計(jì)串行通信第六章電子設(shè)計(jì)系列教材01串行通信原理串行通信原理01概述并行通信與串行通信并行通信:計(jì)算機(jī)的并行通信的各數(shù)據(jù)位同時(shí)進(jìn)行發(fā)送或接收,通常使用多條數(shù)據(jù)傳輸線路將數(shù)據(jù)字節(jié)的各個(gè)位同時(shí)發(fā)送,數(shù)據(jù)的每一位都要占用一條數(shù)據(jù)傳輸線,同時(shí)還需要一條或多條控制線路來控制通信。并行通信示意圖如圖所示。串行通信原理01概述并行通信與串行通信并行通信可以同時(shí)發(fā)送多位數(shù)據(jù),相比于串行通信來說其傳輸速率高、通信效率高,但數(shù)據(jù)位數(shù)決定了傳輸線的數(shù)量,在長距離傳輸時(shí)使用并行通信將

溫馨提示

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

評(píng)論

0/150

提交評(píng)論