已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第一天 認(rèn)識(shí)單片機(jī)一、什么是單片機(jī) 什么是單片機(jī)?按照比較正規(guī)的定義,所謂單片機(jī),就是把中央處理器、存儲(chǔ)器、定時(shí)器、I/O接口等一些計(jì)算機(jī)功能部件集成在一塊電路芯片上的微型計(jì)算機(jī)。什么又是中央處理器、存儲(chǔ)器、定時(shí)器和I/O接口呢?簡單來說,中央處理器就是所謂的CPU,就相當(dāng)于人的大腦。存儲(chǔ)器顧名思義就是一種能存儲(chǔ)數(shù)據(jù)的元件,比如我們寫的程序就可以存放在這里面。I/O接口就是輸入/輸出端口,數(shù)據(jù)可以通過這樣的端口輸入或輸出CPU。我們把這些東西整合到一塊很小的芯片上,就成為了單片機(jī)。二、單片機(jī)可以做什么單片機(jī)用來干什么呢?用最通俗的話講,它的作用就是實(shí)現(xiàn)智能控制。什么是智能控制呢?舉個(gè)簡單的例子,讓單片機(jī)按照我自己的想法來控制一個(gè)發(fā)光二極管的亮滅就是智能控制,那么我如何來做到呢?我將發(fā)光二極管的正極分別連在單片機(jī)一個(gè)引腳上,當(dāng)連正極的引腳輸出高電平(可以暫時(shí)理解為高電壓),連負(fù)極的引腳輸出低電平(同上,低電壓)時(shí),由于二極管兩端電壓差,因此二極管點(diǎn)亮,當(dāng)兩個(gè)引腳都是相同電壓,發(fā)光二極管熄滅。單片機(jī)如何知道我希望二極管什么時(shí)候點(diǎn)亮,亮多久呢?這就需要我們將自己的意愿通過編寫程序下載進(jìn)入單片機(jī)中進(jìn)行執(zhí)行,讓它按照我們的意愿在引腳輸出高低電平,從而控制發(fā)光二極管的亮滅。三、單片機(jī)結(jié)構(gòu)單片機(jī)長什么樣?如圖所示就是一個(gè)單片機(jī)的外形,我們可以看到,單片機(jī)不過就是一塊有很多腳的芯片,我們稱這些“腳”叫做“引腳”。單片機(jī)就是通過這些引腳對(duì)外界進(jìn)行智能控制的。圖1- 1我們學(xué)習(xí)單片機(jī),首先要知道這些引腳的作用是什么,如圖所示,讓我們一起來認(rèn)識(shí)這些引腳。1、區(qū)分芯片引腳序號(hào)我們可以在單片機(jī)表面上找到一個(gè)凹進(jìn)去的小圓坑,這個(gè)小圓坑所對(duì)應(yīng)的引腳就是第1引腳,然后按逆時(shí)針方向數(shù)下去,一直到最后一個(gè)引腳。如圖所示一共有40個(gè)引腳。2、 電源引腳和時(shí)鐘引腳圖中第20腳GND和第40腳Vcc為電源引腳,給單片機(jī)供電。第18腳和19腳為時(shí)鐘引腳,大家可以暫時(shí)不用了解。3、I/O口引腳圖1- 2 四、學(xué)習(xí)單片機(jī)必備基礎(chǔ)知識(shí)1、電平的概念什么是電平?“電平”就是指電路中兩點(diǎn)在相同阻抗(“阻抗”可以理解為電阻)下電量的相對(duì)比值。舉個(gè)例子,人們?cè)诔鯇W(xué)“電”的時(shí)候,往往把往往把抽象的電學(xué)概念用水的具體現(xiàn)象進(jìn)行比喻。如水流比電流、水壓似電壓。解釋“電平”不妨如法炮制。我們用“水平”來比喻“電平”如人們常說到張某工作很有水平、李某辦事水平很差。這樣的話都知其含義所在。即指“張某”與“李某”相比而言。電平就是指電路中兩點(diǎn)電量(“電量”可理解為電壓)的比較。學(xué)習(xí)單片機(jī)只需了解兩種電平:高電平和低電平,我們定義單片機(jī)輸入與輸出的為TTL電平,其中高電平為+5V,低電平為0V。什么是TTL電平?TTL電平采用二進(jìn)制規(guī)定,+5V等價(jià)于邏輯“1”,0V等價(jià)于邏輯“0”。這樣一來,我們?cè)诰帉懗绦蛑腥绻麑?duì)某個(gè)引腳賦值為“1”那個(gè)引腳就輸出高電平,同理,若我們賦值為“0”,對(duì)應(yīng)的引腳就輸出低電平。2、二進(jìn)制與十六進(jìn)制 邏輯運(yùn)算大家都知道,十進(jìn)制的特點(diǎn)是“逢十進(jìn)一,借一當(dāng)十”。同理,二進(jìn)制的特點(diǎn)就是“逢二進(jìn)一,借一當(dāng)二”。在二進(jìn)制中只有“0”和“1”,比如1110 0101B(“B”為二進(jìn)制后綴)就是二進(jìn)制。那么,二進(jìn)制和十進(jìn)制如何轉(zhuǎn)化呢?舉個(gè)例子,二進(jìn)制11010011B轉(zhuǎn)化為十進(jìn)制就是 十六進(jìn)制與二進(jìn)制大同小異,十六進(jìn)制為“逢十六進(jìn)一,借一當(dāng)十六”。十進(jìn)制中0-15用十六進(jìn)制表示為0-9,A,B,C,D,E,F,即十進(jìn)制中10對(duì)應(yīng)十六進(jìn)制A,11對(duì)應(yīng)B當(dāng)我們寫的是十六進(jìn)制時(shí),要在前面加上0x(注意0是“零”不是字母O),舉個(gè)例子,十六進(jìn)制0x7f換算成二進(jìn)制為“0111 1111”換算成十進(jìn)制為715十進(jìn)制二進(jìn)制十六進(jìn)制十進(jìn)制二進(jìn)制十六進(jìn)制0008100081119100192102101010A3113111011B41004121100C51015131101D61106141110E71117151111F表1- 1邏輯運(yùn)算“與”運(yùn)算是實(shí)現(xiàn)“必須都有,否則就沒有”這種邏輯關(guān)系的運(yùn)算,其運(yùn)算符為“&”,運(yùn)算規(guī)則為:0&0=0,0&1=1&0=0,1&1=1. “或”運(yùn)算是實(shí)現(xiàn)“只要其中之一有就有”這種邏輯關(guān)系的運(yùn)算,其運(yùn)算符為“|”,運(yùn)算規(guī)則為:0|0=0,0|1=1|0=1,1|1=1 “非”運(yùn)算是實(shí)現(xiàn)“求反”這種邏輯關(guān)系的運(yùn)算,其運(yùn)算符為“!”,運(yùn)算規(guī)則為:!0=1,!1=03、單片機(jī)最小系統(tǒng)很多初學(xué)者容易把單片機(jī)開發(fā)板誤認(rèn)作單片機(jī),實(shí)際上這是不對(duì)的,單片機(jī)只是一塊小小的集成芯片,但如果只是一塊芯片無法實(shí)現(xiàn)其功能, 我們要想要單片機(jī)運(yùn)行起來,至少應(yīng)該給它提供一個(gè)電源吧?下面所講的單片機(jī)最小基本電路就是一個(gè)單片機(jī)能運(yùn)行的最基本條件。我們平時(shí)所使用的單片機(jī)開發(fā)板,無非就是把這個(gè)基本電路和一些其他電路整合在一塊電路板上,有了這些基本電路,你們自己都可以設(shè)計(jì)制作出單片機(jī)開發(fā)板。圖1- 3在上圖中,除了單片機(jī)外實(shí)際上只有三個(gè)電路,分別是電源電路、晶振電路和復(fù)位電路,下面簡單介紹這三個(gè)電路,大家只需要知道其作用就行了。1) 電源電路電源電路非常簡單,就是給單片機(jī)提供電源。2) 晶振電路晶振電路的作用就是為系統(tǒng)系統(tǒng)提供基本的時(shí)鐘信號(hào),形象的說,晶振電路就像單片機(jī)的心臟一樣,如果沒有晶振,單片機(jī)就停滯在那里不能一步步執(zhí)行程序。3) 復(fù)位電路復(fù)位電路就是讓單片機(jī)能夠進(jìn)行清零復(fù)位,讓單片機(jī)重新開始從頭開始執(zhí)行程序(從頭工作),它分為上電復(fù)位和按鍵復(fù)位兩種,也就是說,當(dāng)你剛剛給單片機(jī)通電時(shí),它就進(jìn)行了一次復(fù)位,當(dāng)有電時(shí)你按下復(fù)位鍵,它也能進(jìn)行復(fù)位。第二天 I/O口介紹及其應(yīng)用一、什么是I/O口我們的單片機(jī)能接收到外部的輸入信號(hào)(包括數(shù)據(jù)、指令等),并能對(duì)其進(jìn)行處理,再輸出信號(hào),控制其外圍連接電路,以實(shí)現(xiàn)我們想要實(shí)現(xiàn)的功能。但單片機(jī)怎樣與外圍電路進(jìn)行通訊呢?這就需要用到I/O。什么又是I/O口呢?它的中文全稱叫作輸入與輸出端口,也就是說我們的數(shù)據(jù)是通過I/O口傳輸?shù)?。單片機(jī)包括四個(gè)I/O口,分別是P0,P1,P2,P3,每個(gè)口有8個(gè)引腳。什么又是引腳呢?所謂單片機(jī)的引腳,就是連接單片機(jī)內(nèi)部電路和外部電路的橋梁,就像電阻的兩支管腳。但單片機(jī)的引腳不止2個(gè),我們較常用的AT89C51型號(hào)的單片機(jī)就有40個(gè)引腳(如圖2.1)。圖2- 1 AT89C51單片機(jī)的引腳以AT89C51型號(hào)的單片機(jī)為例(較常用的都是40支引腳的51單片機(jī),但也有20,28,32,44等不同引腳數(shù)的51單片機(jī),這些大家在以后的學(xué)習(xí)過程中也要了解,不要只見了40引腳的芯片才認(rèn)為它是51單片機(jī))。四個(gè)I/O口,共32支引腳。其余8支引腳有著其他的功能,如電源引腳(VCC,GND)、時(shí)鐘引腳(XTAL1、XTAL2)等。在這兒,我們主要了解I/O口引腳。二、I/O口的工作原理 I/O口它們是怎樣工作的呢? 單片機(jī)是一種數(shù)字集成芯片,而數(shù)字電路只認(rèn)兩種電平:高電平(二進(jìn)制代碼為1)、低電平(二進(jìn)制代碼為0)。我們就是通過給I/O口賦高低電平來控制外圍電路。舉個(gè)點(diǎn)亮發(fā)光二極管的簡單例子來說明I/O口的工作原理。大家都知道二極管具有單向?qū)щ娦?,只有?dāng)二極管正極電壓高于負(fù)極電壓,發(fā)光二極管才能發(fā)光。如圖:圖2- 2 單片機(jī)控制發(fā)光二極管電路二極管的正極連在電源上,負(fù)極接在單片機(jī)的P2.0引腳上,若此時(shí)P2.0為低電平(0V),則二極管導(dǎo)通,二極管發(fā)光。若P2.0為高電平(+5V),二極管不能導(dǎo)通,則不能發(fā)光。從點(diǎn)亮一個(gè)發(fā)光二極管的例子,我們了解到,通過給單片機(jī)的一個(gè)I/O口的引腳賦高、低電平這種控制手段,我們可以使單片機(jī)控制一個(gè)簡單的外圍電路(發(fā)光二極管電路)。但我們?cè)趺磥砜刂茝?fù)雜的外圍電路呢?上面的例子怎么才用到32支I/O口引腳中的一支呢?4個(gè)I/O口共32個(gè)引腳,試想,一個(gè)引腳控制一個(gè)簡單的外圍電路,一個(gè)外圍電路不外乎就兩種情況,引腳為高電平或低電平。4個(gè)I/O口(32個(gè)引腳)同時(shí)用上,用排列組合的知識(shí)就可以算出,這4個(gè)I/O口控制的結(jié)果將會(huì)是多少種情況,控制的電路將會(huì)是多么的復(fù)雜,由此我們也可以看出單片機(jī)的功能是多么的強(qiáng)大。上面說了這么多,我們可以將其歸根到一點(diǎn),就是:我們是通過給I/O口賦值(賦1或0),使I/O口輸出高、低電平,從而控制外圍電路。三、怎樣使用I/O口上面我們介紹了什么是I/O口及其工作原理,下面我們就來實(shí)踐演練一下。1、先來看點(diǎn)亮一個(gè)發(fā)光二極管的實(shí)例,硬件連接如圖圖2- 3 LED連接圖分析:二極管負(fù)極連在P1.0上,我們只需給P1.0一個(gè)低電平即可點(diǎn)亮它。程序如下:#include /52系列單片機(jī)頭文件sbit led1=P10; /聲明單片機(jī)P1口的第一位void main() /主函數(shù) Led1=0; /*點(diǎn)亮發(fā)光二極管*/也許大家看到這個(gè)簡單的C程序,也是一頭霧水。它為什么要聲明單片機(jī)P1口的第一位P1.0呢?(注:P1.0口在C程序中是用P10來表示的)。為什么不直接使P10=0呢?這是因?yàn)槲覀內(nèi)粢刂颇硞€(gè)發(fā)光二極管(上圖是D1),也就是要控制單片機(jī)I/O口的某一位(上圖是P1.0),必定要聲明這一位,否則單片機(jī)不知道我們要操作的是什么東西,所以我們?cè)诔绦蛑新暶髁藛纹瑱C(jī)P1口的第一位(sbit是一個(gè)聲明位的操作,相當(dāng)于C程序中要用到整型時(shí),用int來聲明)。比如,我們想給P1.0一個(gè)高電平,我們直接給led1賦值1就行了。由于LED正常發(fā)光時(shí)其兩端的電壓約為1.7V,如果不接限流電阻,LED兩端的電壓要么為5V,要么為0V,當(dāng)5V時(shí)很可能燒壞LED,所以我們還得給它加上一個(gè)限流電阻R(一般為1K)。2、點(diǎn)亮多個(gè)LED如圖,我們要控制第1, 3, 5,7個(gè)亮,第2,4,6,8個(gè)滅該怎么辦呢?當(dāng)然,我們可以以上面的方法(單獨(dú)控制一個(gè)引腳)來實(shí)現(xiàn),下面我們介紹一種更為簡單的方法(同時(shí)控制一個(gè)I/O口的8個(gè)引腳)。圖2- 4 單片機(jī)控制流水的電路圖P1口共8個(gè)引腳,每個(gè)引腳對(duì)應(yīng)一個(gè)二進(jìn)制位。8個(gè)引腳即八個(gè)二進(jìn)制位。P1.0對(duì)應(yīng)最低位,P1.7對(duì)應(yīng)第8位。如我們對(duì)P1口賦值1011 1110,則P1口的第一引腳和第七引腳為低電平,其它引腳為高電平。上面的電路圖我們只畫了控制外圍電路部分,而單片機(jī)自身的電源電路等都沒畫出來,但不等于沒有,因?yàn)樗残枰娫唇o其供電才能正常工作。如上圖所示, 8個(gè)LED正極端已于+5V的直流電源相連(我們稱之為共陽極接法),都獲得了一個(gè)高電平,它們的負(fù)極端又分別與P1端口的8個(gè)引腳相連,只要我們控制P1端口八個(gè)引腳的電平輸入,我們就能分別控制8個(gè)LED的亮與滅。程序如下:#include /52系列單片機(jī)頭文件void main() /主函數(shù) P1=0xaa; /*對(duì)P1口的8個(gè)引腳進(jìn)行位操作*/ 注意區(qū)別上一個(gè)C程序,這里不再對(duì)P1口的某一位進(jìn)行聲明,而是在主函數(shù)中直接對(duì)單片機(jī)P1口的8個(gè)引腳進(jìn)行操作,“0x”表示十六進(jìn)制數(shù),轉(zhuǎn)換成二進(jìn)制是10101010,那么對(duì)應(yīng)的發(fā)光二極管負(fù)極端獲得的高低電平如表1.4。 LEDD1D2D3D4D5D6D7D8負(fù)極端電平01010101表2- 1這就實(shí)現(xiàn)了1, 3, 5,7亮,2,4,6,8滅。我們將0xaa轉(zhuǎn)換成十進(jìn)制后為170,也可以直接對(duì)P1口進(jìn)行十進(jìn)制數(shù)的賦值,如“P1=170;”,其效果是一樣的,只是麻煩了許多。因?yàn)闊o論是幾進(jìn)制的數(shù),在單片機(jī)內(nèi)部都是以二進(jìn)制數(shù)形式存在的,只要是同一個(gè)數(shù)值的數(shù),其在單片機(jī)內(nèi)部都是用二進(jìn)制的同一種形態(tài)來表示。上面介紹了如何點(diǎn)亮一個(gè)發(fā)光二極管,如何控制流水燈的亮與滅。如果你能控制流水燈,使它們能按你的意愿亮與滅,可以這么說,你對(duì)單片機(jī)已經(jīng)入門了。第三天 按鍵原理及其應(yīng)用一、什么是按鍵提到按鍵大家都不會(huì)陌生,如圖所示為51單片機(jī)開發(fā)板上的按鍵實(shí)物圖和電路圖,它可以通過跳帽(就是一根短接線)切換成獨(dú)立按鍵或矩陣鍵盤兩種模式,J11是由三根插針(圖中標(biāo)號(hào)1、2、3)組成。當(dāng)我們使用獨(dú)立按鍵時(shí),應(yīng)該把跳帽跳到左端(相當(dāng)于讓1、2短接),當(dāng)我們使用矩陣鍵盤時(shí),應(yīng)該把跳帽跳到右端(相當(dāng)于讓2、3短接)。圖3- 1 按鍵實(shí)物圖圖3- 2 按鍵電路圖大家可能會(huì)問,什么又是獨(dú)立按鍵和矩陣按鍵呢?當(dāng)我們使用獨(dú)立按鍵時(shí),只有S1、S2、S3、S4四個(gè)按鍵能夠工作,其他按鍵是不工作的。當(dāng)我們需要多于四個(gè)按鍵的時(shí)候,我們可以使用矩陣鍵盤,也就是一共4*4=16個(gè)按鍵可以工作。當(dāng)然,矩陣鍵盤的程序要復(fù)雜的多。二、按鍵是如何工作的按鍵原理非常簡單,當(dāng)你用手按下時(shí)開關(guān)閉合,線路導(dǎo)通,松手時(shí)開關(guān)斷開,線路斷開。它是如何與單片機(jī)聯(lián)系起來,達(dá)到控制的目的呢?這里我們就需要按鍵檢測(cè)程序,我們知道,I/O口既可以做輸入口又可以做輸出口,在這里我們就要用到其輸入功能,我們可以把按鍵的一端接地,另一端與單片機(jī)某個(gè)I/O口相連,開始時(shí)先給該I/O口賦一高電平(實(shí)際上如果沒有對(duì)I/O口賦值,I/O口都默認(rèn)為高電平),然后讓單片機(jī)不斷檢測(cè)該I/O口是否變?yōu)榈碗娖?,?dāng)按鍵閉合時(shí),即相當(dāng)于該I/O口通過按鍵與地相連,變?yōu)榈碗娖剑坏┏绦驒z測(cè)到I/O口變?yōu)榈碗娖絼t說明按鍵被按下,然后執(zhí)行相應(yīng)的指令。 按鍵連接方法很簡單,如圖所示,按鍵一端接地,另一端接與單片機(jī)任一I/O口相連,按鍵在被按下時(shí),其觸電電壓變化過程如圖圖3- 3 從圖中可以看出,在實(shí)際情況下,我們?cè)诎聪潞歪尫虐存I的瞬間都會(huì)有抖動(dòng)現(xiàn)象,抖動(dòng)時(shí)間一般在5-10ms。在抖動(dòng)的這段時(shí)間里電壓是不穩(wěn)定的,因此單片機(jī)在檢測(cè)鍵盤是否按下時(shí)都要加上去抖動(dòng)操作,也就是把抖動(dòng)時(shí)間給排除掉,一般我們用軟件延時(shí)的方法就能解決這個(gè)問題。在編寫按鍵程序時(shí),需要在檢測(cè)按下時(shí)加入去抖動(dòng)的延時(shí)函數(shù)。三、如何編寫按鍵檢測(cè)程序 如圖所示為按鍵檢測(cè)流程圖開始延時(shí)檢測(cè)是否有鍵按下檢測(cè)是否有鍵按下執(zhí)行相應(yīng)程序YYNN四、按鍵檢測(cè)實(shí)例程序圖3- 4 按鍵控制LED電路圖如圖3-4所示是一個(gè)用S1、S2兩個(gè)按鍵控制LED亮滅的電路仿真圖,它實(shí)現(xiàn)的功能是:按下S1,LED亮,按下S2,LED滅。我們結(jié)合這個(gè)電路的程序,讓大家對(duì)按鍵有一個(gè)基本的認(rèn)識(shí)。程序如下:#include /包含頭文件,一般情況不需要改動(dòng),寫在程序最前面sbit S1=P10; /定義按鍵S1位置,將S1與P1.0口相連sbit S2=P11; /定義按鍵S2位置,將S2與P1.1口相連sbit LED1=P20; /定義LED1位置,將其與P2.0相連/*- 延時(shí)子程序-*/void delay(unsigned int i) while(i-); /循環(huán)i次,當(dāng)i減小到0時(shí)跳出循環(huán)/*- 主函數(shù)-*/main() while(1) if(S1=0) /如果S1等于0,說明按鍵1被按下 delay(1000); /進(jìn)行去抖動(dòng)處理 if(S1=0) LED1=0; /檢測(cè)按鍵確實(shí)按下,點(diǎn)亮LED1 if(S2=0) /如果S2等于0,說明按鍵2被按下 delay(1000); /去抖動(dòng)處理 if(S2=0) LED1=1; /檢測(cè)按鍵確實(shí)按下,熄滅LED1 程序分析:主程序進(jìn)來就一個(gè)while(1)死循環(huán),循環(huán)中檢測(cè)是S1還是S2按下,如果第一個(gè)按鍵S1按下,則S1等于0,然后延時(shí)一段時(shí)間再檢測(cè)S1是否還等于0,即去抖處理,如果S1還等于0,說明S1確實(shí)按下,就點(diǎn)亮LED1。如果第二個(gè)按鍵S2按下,則S2等于0,r然后延時(shí)一段時(shí)間再檢測(cè)S2是否還等于0,即去抖處理,如果S2還等于0,說明S2確實(shí)按下,就熄滅LED1。延時(shí)函數(shù)的原理就是,當(dāng)單片機(jī)執(zhí)行一個(gè)while(i-)循環(huán)語句時(shí),就消耗了一部分時(shí)間,時(shí)間的多少有i的初始值決定。第四天 數(shù)碼管介紹及其應(yīng)用一、什么是數(shù)碼管圖4- 1 數(shù)碼管實(shí)物圖 數(shù)碼管是單片機(jī)系統(tǒng)中常用的顯示器件,每個(gè)數(shù)碼管由8段LED構(gòu)成,組合起來可以顯示0,1,2,3,4,5,6,7,8,9和部分英文字母。二、數(shù)碼管的硬件結(jié)構(gòu)共陽極共陰極 圖(a)是數(shù)碼管外觀圖,一位數(shù)碼管含有10個(gè)引腳,a,b,c,d,e,f,g,dp,和兩個(gè)GND,兩個(gè)GND是連在一起的。圖(b)是數(shù)碼管的內(nèi)部結(jié)構(gòu)圖。 圖(b)中又有兩種接法,一種是將8段LED的陰極(負(fù)極)一起連在接地端,稱為共陰極接法,一種是將8段LED的陽極(正極)一起連在+5V的電源上,稱為共陽極接法。三、數(shù)碼管的顯示原理使用LED顯示器時(shí),要注意區(qū)分這兩種不同的接法。下面我們以共陽極數(shù)碼管為例介紹數(shù)碼管的編碼原理。假設(shè)我們要數(shù)碼管顯示2,那么就是要讓a,b,d,e,g亮,其它的不亮。若顯示8,那么就讓a,b,c,d,e,f,g亮,dp不亮。為了顯示數(shù)字或字符,必須對(duì)數(shù)字或字符進(jìn)行編碼。七段數(shù)碼管加上一個(gè)小數(shù)點(diǎn),共計(jì)8段。因此為LED顯示器提供的編碼正好是一個(gè)字節(jié)(8位)。每一位控制一段LED,對(duì)應(yīng)關(guān)系如下表:D8D7D6D5D4D3D2D1dpgfedcba表4- 1其中,D1表示8位二進(jìn)制位的第一位,D2表示8位二進(jìn)制位的第二位,以此類推。如果我們要數(shù)碼管顯示2,即a,b,d,e,g亮,其它的不亮。因?yàn)閿?shù)碼管是共陰的,所以給a,b,d,e,g賦0才亮,即1010 0100,即0xa4。 如果顯示8,即a,b,c,d,e,f,g亮,dp不亮。編碼1000 0000,即0x80。以下是共陽極編碼列表:顯示的數(shù)0123456789編碼0xc00xf90xa40xb00x990x920x820xf80x800x90表4- 2會(huì)編共陽的,就會(huì)編共陰的, 共陰極編碼列表如下:顯示的數(shù)0123456789編碼0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f表4- 3四、程序示例 讓數(shù)碼管重復(fù)顯示0,1,28,9。數(shù)碼管(共陽)接在P2口上。硬件示意圖如下:圖4- 2 數(shù)碼管硬件電路圖分析:我們控制數(shù)碼管的顯示,數(shù)碼管的八個(gè)引腳是連在P2口的,所以就是對(duì)P2口賦值的過程。程序如下:#include void delay(int x) /延時(shí)函數(shù) while(x-); main() while(1) P2=0x c0; /顯示0delay(8000); /延時(shí)P2=0xf9; /顯示1delay(8000); /延時(shí)P2=0xa4; /顯示2delay(8000); /延時(shí)P2=0xb0; /顯示3delay(8000); /延時(shí)P2=0x99; /顯示4delay(8000); /延時(shí)P2=0x92; /顯示5delay(8000); /延時(shí)P2=0x82; /顯示6delay(8000); /延時(shí)P2=0xf8; /顯示7delay(8000); /延時(shí)P2=0x80; /顯示8delay(8000); /延時(shí)P2=0x90; /顯示9 delay(8000); /延時(shí) 程序分析:主程序中就一個(gè)大循環(huán),循環(huán)為P2口賦值,從而顯示0到9。每兩個(gè)數(shù)之間有個(gè)延時(shí),為什么要延時(shí)呢? 是因?yàn)槲覀兊膯纹瑱C(jī)處理速度是非??斓?,不延時(shí)我們根本沒法看清數(shù)碼管顯示的是什么,所以必須要有延時(shí)。五、數(shù)碼管的動(dòng)態(tài)掃描上面我們只講到了用一個(gè)I/O口控制1位數(shù)碼管的顯示,若是要控制兩個(gè)數(shù)碼管的顯示呢?很多人說用兩個(gè)I/O口,這個(gè)是可以實(shí)現(xiàn)的,但我們要控制8個(gè)數(shù)碼管呢,豈不是要8個(gè)I/O口嗎?51單片機(jī)只有4個(gè)I/O口,那不是不能控制8個(gè)數(shù)碼管了?所以為了節(jié)約51單片機(jī)的引腳資源,我們引入了數(shù)碼管的動(dòng)態(tài)掃描。1、什么是動(dòng)態(tài)掃描數(shù)碼管的動(dòng)態(tài)掃描就是先讓第一位數(shù)碼管顯示,然后第一位滅,再讓第二位顯示,然后第二位滅,第n位數(shù)碼管顯示,然后第八位滅。然后重復(fù)上述狀態(tài),當(dāng)顯示速度非??斓臅r(shí)候,我們看到的就是n位數(shù)碼管同時(shí)顯示。2、怎么實(shí)現(xiàn)動(dòng)態(tài)掃描下面我們以四個(gè)數(shù)碼管(共陽極)的顯示為例講述動(dòng)態(tài)掃描的使用方法四個(gè)數(shù)碼管的引腳連接圖如下:圖4- 3 四位數(shù)碼管電路圖四個(gè)數(shù)碼管的a腳連在一起,b腳連在一起,dp腳連在一起,每個(gè)數(shù)碼管的公共引腳(com)獨(dú)立,com腳接在一個(gè)三極管(Q3)上,大家先不用管三極管是怎么用的,你只需知道掃描信號(hào)有高電平時(shí),掃描信號(hào)的那個(gè)端子就與(com)連通了,如掃描信號(hào)的A端為高電平,那么A端就與第四個(gè)數(shù)碼管的(com)接通了。如果我們要第一個(gè)數(shù)碼管顯示1,第一個(gè)數(shù)碼管顯示2,第一個(gè)數(shù)碼管顯示3,第一個(gè)數(shù)碼管顯示4。我們?cè)撛趺醋??用?dòng)態(tài)掃描的方法第一步:先讓第一個(gè)數(shù)碼管顯示1,其它的關(guān)閉。給a,b,c,d,e,f,g,dp賦值,即0xf9,再給D端一個(gè)高電平(打開第一個(gè)數(shù)碼管),給ABC端低電平(關(guān)閉其它3個(gè)數(shù)碼管)。 第二步:先讓第二個(gè)數(shù)碼管顯示2,其它的關(guān)閉。給a,b,c,d,e,f,g,dp賦值,即0xa4,再給C端一個(gè)高電平(打開第二個(gè)數(shù)碼管),給ABD端低電平(關(guān)閉其它3個(gè)數(shù)碼管)。 第三步:先讓第三個(gè)數(shù)碼管顯示3,其它的關(guān)閉。給a,b,c,d,e,f,g,dp賦值,即0xb0,再給B端一個(gè)高電平(打開第三個(gè)數(shù)碼管),給ACD端低電平(關(guān)閉其它3個(gè)數(shù)碼管)。 第四步:先讓第四個(gè)數(shù)碼管顯示4,其它的關(guān)閉。給a,b,c,d,e,f,g,dp賦值,即0x99,再給A端一個(gè)高電平(打開第四個(gè)數(shù)碼管),給BCD端低電平(關(guān)閉其它3個(gè)數(shù)碼管)。重復(fù)上面四步,這就實(shí)現(xiàn)了動(dòng)態(tài)掃描。3、應(yīng)用實(shí)例假設(shè)a,b,c,d,e,f,g,dp接在P2口,信號(hào)端ABCD分別接在P3.0,P3.1,P3.2,P3.3上,硬件連接如圖所示:圖4- 4 四位數(shù)碼管仿真電路圖實(shí)現(xiàn)動(dòng)態(tài)掃描的源程序如下:#includemain() int i; int dat=0xf9,0xa4,0xb0,0x99; /數(shù)組定義顯示數(shù)據(jù)1,2,3,4的編碼 int wei=0x01,0x02,0x04,0x08; /數(shù)碼管位數(shù)的編碼 for(i=0;i4;i+) P3=weii; /只打開第i個(gè)數(shù)碼管 P2=dati; /給數(shù)碼管顯示i的編碼 if(i= =4) i=0; /當(dāng)i等于4時(shí),讓i=0,從而不讓程序跳出for循環(huán) 程序分析: 主函數(shù)進(jìn)來定義了兩個(gè)數(shù)組,dat用來顯示數(shù)據(jù),wei用來控制顯示哪個(gè)數(shù)碼管。dat0表示數(shù)組中第一個(gè)數(shù)據(jù),即0xf9, dat1表示數(shù)組中第二個(gè)數(shù)據(jù),即0xa4, dat2表示數(shù)組中第三個(gè)數(shù)據(jù),即0xb0, dat3表示數(shù)組中第四個(gè)數(shù)據(jù),即0x99, 對(duì)于wei也是同樣的道理。 然后有個(gè)for循環(huán),i等于0時(shí),第一個(gè)數(shù)碼管顯示1,i等于1時(shí),即第二個(gè)數(shù)碼管顯示2,i等于2時(shí),即第三個(gè)數(shù)碼管顯示3,i等于3時(shí),即第一個(gè)數(shù)碼管顯示4,當(dāng)i等于4時(shí),給i賦值,讓i等于0,繼續(xù)下一次循環(huán)。因?yàn)閱纹瑱C(jī)運(yùn)算速度非???,如此循環(huán)下去,我們看到的就是四個(gè)數(shù)碼管同時(shí)顯示1234。第五天 中斷系統(tǒng)一、什么是中斷 單片機(jī)CPU在處理某一事件A時(shí),發(fā)生了另一事件B請(qǐng)求CPU迅速去處理(中斷發(fā)生);CPU暫時(shí)中斷當(dāng)前的工作,轉(zhuǎn)去處理事件B(中斷響應(yīng)和中斷服務(wù));待CPU將事件B處理完畢后,再回到原來事件A被中斷的地方繼續(xù)處理事件A(中斷返回),這一過程稱為中斷。 例如:當(dāng)你正在洗衣時(shí),突然手機(jī)響了(中斷發(fā)生),你暫時(shí)中斷洗衣的工作,轉(zhuǎn)去接電話(中斷響應(yīng)和中斷服務(wù)),待你接完后,再回來繼續(xù)洗衣(中斷返回),這一過程就是中斷。二、中斷系統(tǒng)中斷系統(tǒng)結(jié)構(gòu)圖如下:圖5- 1 中斷示意引起單片機(jī)的CPU中斷的根源,稱為中斷源。中斷源向CPU提出的中斷請(qǐng)求。CPU暫時(shí)中斷原來的事務(wù)A,轉(zhuǎn)去處理事件B,對(duì)事件B處理完畢后,再回到原來被中斷的地方(即斷點(diǎn)),稱為中斷返回。實(shí)現(xiàn)上述中斷功能的部件稱為中斷系統(tǒng)(中斷機(jī)構(gòu))。80C51的中斷系統(tǒng)有5個(gè)中斷源,也就是說有5種情況發(fā)生時(shí),會(huì)使單片機(jī)停下來去處理中斷程序,5種中斷源分別為外部中斷0(INT0),外部中斷1(INT1),定時(shí)器中斷0(T0),定時(shí)器中斷1(T1)和串行口中斷。三、中斷的優(yōu)先級(jí)但兩個(gè)中斷同時(shí)發(fā)生時(shí),我們的CPU會(huì)先響應(yīng)哪個(gè)中斷呢?這就涉及到中斷優(yōu)先級(jí)的問題。默認(rèn)狀態(tài)下,CPU會(huì)優(yōu)先響應(yīng)中斷優(yōu)先級(jí)別高的中斷,當(dāng)把優(yōu)先級(jí)高的中斷執(zhí)行完后,在回來執(zhí)行優(yōu)先級(jí)級(jí)別低的中斷。圖5- 2 中斷優(yōu)先級(jí)次示意圖51單片機(jī)的中斷級(jí)別如下:中斷源中斷優(yōu)先級(jí)級(jí)別中斷序號(hào)INT0(外部中斷0)最高0T0(定時(shí)器中斷0)第21INT1(外部中斷1)第32T1(定時(shí)器中斷1)第43TI/RI(串行口中斷)最低4表5- 180C51單片機(jī)的中斷優(yōu)先級(jí)有三條原則: CPU同時(shí)接收到幾個(gè)中斷時(shí),首先響應(yīng)優(yōu)先級(jí)別最高的中斷請(qǐng)求。 正在進(jìn)行的中斷過程不能被新的同級(jí)或低優(yōu)先級(jí)的中斷請(qǐng)求所中斷。 正在進(jìn)行的低優(yōu)先級(jí)中斷服務(wù),能被高優(yōu)先級(jí)中斷請(qǐng)求所中斷。四、中斷的優(yōu)點(diǎn)對(duì)于單片機(jī)初學(xué)者會(huì)問到個(gè)問題:“中斷就是處理一事件(中斷子程序),用戶自定義一個(gè)子函數(shù)也可以處理呀,這中斷不就和子函數(shù)沒區(qū)別嗎?那還有什么用呢?”其實(shí)中斷的功能遠(yuǎn)遠(yuǎn)強(qiáng)于普通的子函數(shù),下面我們來看看中斷的優(yōu)點(diǎn) 分時(shí)操作:CPU可以分時(shí)為多個(gè)I/O設(shè)備服務(wù),提高了計(jì)算機(jī)的利用率 實(shí)時(shí)響應(yīng):CPU能夠及時(shí)處理應(yīng)用系統(tǒng)的隨機(jī)事件,系統(tǒng)的實(shí)時(shí)性大大增強(qiáng); 可靠性高:CPU具有處理設(shè)備故障及掉電等突發(fā)性事件能力,從而使系統(tǒng)可靠性提高。五、中斷響應(yīng)條件 中斷源有中斷請(qǐng)求 此中斷源的中斷允許位為1 CPU開中斷(即EA=1)以上三條同時(shí)滿足時(shí),CPU才有可能響應(yīng)中斷。六、怎么使用中斷要使用中斷,首先要學(xué)會(huì)使用中斷允許寄存器,首先解釋一下什么叫寄存器。寄存器: 在單片機(jī)中,寄存器是個(gè)高頻詞,很多初學(xué)者不理解它,寄存器實(shí)質(zhì)是一個(gè)存儲(chǔ)單元,51單片機(jī)的寄存器是8位的,可以存0000 00001111 1111,但寄存器的功能又比普通的存儲(chǔ)單元的功能強(qiáng),向寄存器寫如不同的數(shù),就能完成不同的動(dòng)作,讓單片機(jī)實(shí)現(xiàn)不同的功能,這是普通存儲(chǔ)器所不能做到的。中斷允許寄存器如下:位序號(hào)76543210位符號(hào)EAET2ESET1EX1ET0EX0中斷允許位名稱總中斷無效位Timer2中斷串行口中斷Timer0中斷外部中斷0Timer0中斷外部中斷0表5- 2中斷寄存器共8位,每一位表示控制不同的子中斷。我們要開哪個(gè)中斷,就將該中斷的允許位賦1,要關(guān)哪個(gè)中斷,就將該中斷允許位賦0。如我們開串行口中斷,首先開總中斷,即EA=1;再開串行口中斷,即ES=1。這樣我們就完成了開串行口中斷的動(dòng)作。大家很可能會(huì)問到:當(dāng)中斷發(fā)生時(shí),CPU怎么處理呢?這就涉及到中斷子程序了,中斷發(fā)生時(shí)CPU就立即停下當(dāng)前動(dòng)作,立刻跳至中斷子程序中。中斷子程序就是中斷時(shí)CPU要做的動(dòng)作。下面介紹中斷子程序的寫法 void 函數(shù)名() interrupt 中斷號(hào) 中斷服務(wù)程序的內(nèi)容 說明:中斷函數(shù)無返回值,所以最前面用void,中斷函數(shù)無任何參數(shù),所以()中無任何內(nèi)容,interrupt為中斷的英文名,中斷號(hào)是指單片機(jī)中幾種中斷源的序號(hào)。中斷的具體運(yùn)用(定時(shí)器中斷)我們將在下一章介紹。第六天 定時(shí)器/計(jì)數(shù)器一、什么是定時(shí)器/計(jì)數(shù)器定時(shí)器/計(jì)數(shù)器是集成在單片機(jī)內(nèi)部,能夠?qū)崿F(xiàn)定時(shí)和計(jì)數(shù)的硬件結(jié)構(gòu)(8051有兩個(gè)定時(shí)器Timer0和Timer1)。與軟件定時(shí)相比,增大了定時(shí)精確度,提高了CPU的利用率。二、定時(shí)器是怎么定時(shí)的定時(shí)器的實(shí)質(zhì)是一個(gè)加1計(jì)數(shù)器(16位),加1計(jì)數(shù)器每個(gè)機(jī)器周期完成加1的動(dòng)作,它由高8位和低8位兩個(gè)寄存器組成,最多能裝1111 1111 1111 1111。計(jì)數(shù)器從初始值開始不斷的加1,加到溢出值(上限值),定時(shí)時(shí)間就到了,此過程經(jīng)歷的時(shí)間就是我們所定的時(shí)間。 說明:1個(gè)機(jī)器周期等于12個(gè)振蕩周期,振蕩周期即晶振振蕩的周期,也就是1/晶振頻率。 1、 計(jì)數(shù)原理 加1計(jì)數(shù)器(16位)每隔一個(gè)機(jī)器周期就加1,當(dāng)加到計(jì)數(shù)器為全1時(shí),即1111 1111 1111 1111。再過一個(gè)機(jī)器周期(再加1)就使計(jì)數(shù)器就溢出(溢出就是計(jì)數(shù)已經(jīng)滿了,再加1就計(jì)數(shù)器容納不下了,這就是溢出), 如果定時(shí)/計(jì)數(shù)器工作于定時(shí)模式,則表示定時(shí)時(shí)間已到;如果工作于計(jì)數(shù)模式,則表示計(jì)數(shù)值已滿??梢?,由溢出時(shí)計(jì)數(shù)器的值減去計(jì)數(shù)初值才是加1計(jì)數(shù)器的計(jì)數(shù)值。說明: 讀者可能有疑問,上面不是說了寄存器是8位的嗎,這計(jì)數(shù)器為什么就16位呢?這其實(shí)是兩個(gè)寄存器(TLX和THX)組成一個(gè)16位的計(jì)數(shù)器。TLX計(jì)數(shù)器的低8位(16位二進(jìn)制位的后8位),THX計(jì)數(shù)器的高8位(16位二進(jìn)制位的前8位)說明:X可以是0或1,若計(jì)數(shù)器是Timer0,則X為0;若計(jì)數(shù)器是Timer1,則X為12、 定時(shí)原理設(shè)置為定時(shí)器模式時(shí),加1計(jì)數(shù)器是對(duì)內(nèi)部機(jī)器周期計(jì)數(shù)。計(jì)數(shù)值N乘以機(jī)器周期Tcy就是定時(shí)時(shí)間t 。例 利用定時(shí)/計(jì)數(shù)器T1的方式1,產(chǎn)生10ms的定時(shí),設(shè)晶振頻率為12 MHz,計(jì)算計(jì)數(shù)初值X解:由于晶振為12 MHz,所以機(jī)器周期Tcy為1 ms。工作方式1,查表4-1知計(jì)數(shù)上限值為65536。所以:計(jì)數(shù)值Nt/ Tcy 10000/110000X計(jì)數(shù)上限值N=655361000055536三、 怎么使用定時(shí)器/計(jì)數(shù)器1、8051有兩個(gè)定時(shí)器Timer0和Timer1,每個(gè)定時(shí)器有四種工作模式。不同模式的計(jì)數(shù)范圍不同,其它區(qū)別大家現(xiàn)在不用關(guān)心。模式位數(shù)計(jì)數(shù)范圍Mode0130213(8191)Mode1160216(65536)Mode28028(255)Mode38028(255)表6- 1從上一章中斷的使用中,大家知道控制中斷就是向中斷允許寄存器寫數(shù),那么同理可知,控制定時(shí)器就是向定時(shí)器控制寄存器(TCON)中寫數(shù)。我們可以單獨(dú)取一位處理寫,也可對(duì)T CON整體賦值。 定時(shí)器控制寄存器如下位序號(hào)76543210控制位名稱TR1TR0表6- 2TR1(TCON.6):T1(定時(shí)器1)運(yùn)行控制位。TR1置1時(shí),T1開始工作;TR1置0時(shí),T1停止工作。TR1由軟件置1或清0。所以,用軟件可控制定時(shí)/計(jì)數(shù)器的啟動(dòng)與停止。TR0(TCON.4):T0(定時(shí)器0)運(yùn)行控制位,其功能與TR1類同。 我們只需掌握這兩位就夠了。2 、定時(shí)器是使用步驟:1) 設(shè)置定時(shí)器的工作方式。2) 計(jì)算初值,并將其寫入計(jì)數(shù)器。3) 開中斷。4) 開定時(shí)器。在此我們只介紹Timer0的工作模式1的使用,這個(gè)會(huì)了其它的也都會(huì)了,因?yàn)槭褂梅椒愃啤?四、程序?qū)嵗嚎刂芁ED每間隔50ms閃爍一次,即亮50ms滅50ms。LED連在P1.0上。用Timer0的工作方式1控制,晶振頻率12MHz。程序流程如如下:開始定時(shí)器初始化(開定時(shí)器)定時(shí)時(shí)間是否到 ?while(1)等待中斷中斷子程序(LED取反)YN首先,要計(jì)算定時(shí)器的計(jì)算初值,由于晶振為12 MHz,所以機(jī)器周期Tcy為1 ms。工作方式1,查表5-3知計(jì)數(shù)上限值為65536。所以:計(jì)數(shù)值Nt/ Tcy 50ms/1us50000X計(jì)數(shù)上限值N=655365000015536=0x3CB0將高8位賦給TH0,即TH0=0x3C,將低8位賦給TL0,即TL0=0xB0。程序如下:#include /包含頭文件,一般情況不需要改動(dòng)。sbit LED=P10; /定義LED端口/*- 定時(shí)器初始化子程序-*/void Init_Timer0(void) TMOD = 0x01; /設(shè)定定時(shí)器為工作方式1,TMOD是設(shè)置定時(shí)器工作方式的寄存器,設(shè)置定時(shí)器方式的過程就是給TMOD賦值的過程。 TH0=0x3C; /將計(jì)數(shù)初值寫入計(jì)數(shù)器,這里使用定時(shí)器從15536開始計(jì)數(shù)一直到65535溢出 TL0=0xB0; EA=1; /打開總中斷,EA是總中斷的允許位,給EA賦1,就完成了開總中斷的動(dòng)作 ET0=1; /打開定時(shí)器0中斷,E是中斷英文的首字母,T0是Timer0.組合以來就是ET0,ET0是定時(shí)器0中斷的一個(gè)允許位,給它賦1,就打開定時(shí)器0中斷 TR0=1; /打開定時(shí)器,同上,TR0是定時(shí)器0的允許位,給它賦1,打開定時(shí)器0 /* 注意,此初始化函數(shù)寫法完全符合上面說的定時(shí)器的使用步驟*/main() Init_Timer0(); /定時(shí)器初始化,利用函數(shù)調(diào)用的知識(shí) while(1); /等待定時(shí)器中斷/*- 定時(shí)器中斷子程序-*/void Timer0_isr(void) interrupt 1 TH0=0x3C; /重新賦值,高8位為0x3C,即0011 1100 TL0=0xB0; / 低8位為0xB0,即1011 0000 LED=LED; /指示燈反相,可以看到閃爍程序解釋:main()主函數(shù)進(jìn)來首先執(zhí)行Init_Timer0()定時(shí)器初始化子函數(shù),即初始化定時(shí)器,什么是初始化定時(shí)器呢,就是設(shè)置好定時(shí)器的初始狀態(tài)。我們來看看Init_Timer0()是怎樣初始化的,首先,我們定義了Init_Timer0(),在定時(shí)器初始化子程序中,第一行TMOD = 0x01用于設(shè)定定時(shí)器工作模式為工作模式1,即16位計(jì)數(shù)器。TH0=0x3C定時(shí)器計(jì)數(shù)初值的高8位為0011 1100,TL0=0xB0定時(shí)器計(jì)數(shù)初值的低8位為1011 0000,TH0和TL0組合起來就16位,即計(jì)數(shù)器初值為0011 1100 1011 0000, 從0開始計(jì)數(shù)一直到1111 1111 1111 1111,即65535溢出。我們用到了定時(shí)器中斷,所以要開中斷,開中斷的順序是先開總中斷,即EA=1,再開定時(shí)器中斷,即ET0=1;最后打開定時(shí)器,讓定時(shí)器開始計(jì)時(shí),即TR0=1.主函數(shù)第二條語句,while(1);是一個(gè)死循環(huán),一直執(zhí)行;即一直執(zhí)行空語句,什么也不做。既然什么都不做,那還要什么用呢,用處當(dāng)然大了,它的作用是讓程序停止這里一直等待定時(shí)器中斷,即等到時(shí)間到后去執(zhí)行定時(shí)器中斷子程序。那么有人會(huì)問,時(shí)間到了干什么呢?這就要說到我們中斷子程序的作用了,定時(shí)時(shí)間一到,程序就不管while(1)這個(gè)死循環(huán)了,而是馬上跳到中斷子程序void Timer0_isr(void) interrupt 1中,跳進(jìn)去后執(zhí)行TH0=0x3C;TL0=0xB0; 為計(jì)數(shù)器重新賦值,時(shí)間到后是1111 1111 1111 1111,我們要它重新計(jì)時(shí),當(dāng)然要重新賦初值0011 1100 1011 0000。重賦初值后LED=LED;是取反運(yùn)算符,若起始狀態(tài)LED為1,取反后則為0,即實(shí)現(xiàn)了由亮到滅或由滅到亮的翻轉(zhuǎn)。執(zhí)行完LED=LED后跳出中斷等待下一次中斷的到來,從而實(shí)現(xiàn)了燈間隔1s閃爍的功能。第七天 串行口一、什么是串行口串行口(也叫串口)就是51單片機(jī)用于與其他外部設(shè)備通訊的一個(gè)接口,所以它的作用就是向外部發(fā)送數(shù)據(jù)和接收外部設(shè)備發(fā)來的數(shù)據(jù)。二、串行口是怎么工作的51單片機(jī)的串行口的基本工作原理是:通過數(shù)據(jù)發(fā)送引腳(TXD)將數(shù)據(jù)發(fā)送出去,通過數(shù)據(jù)接收引腳(RXD)接收外部數(shù)據(jù)。串行口的TXD(或RXD)只是一個(gè)引腳,是一位的,所以收發(fā)數(shù)據(jù)只能一位一位的進(jìn)行。這就好比火車進(jìn)隧道一樣,隧道的進(jìn)口相當(dāng)于RXD,最先進(jìn)隧道的是火車頭(起始位),然后進(jìn)去的是第一節(jié)車廂,第二節(jié)車廂第八節(jié)車廂,最后一節(jié)車廂(停止位),這樣一個(gè)過程就是接收數(shù)據(jù)的過程。隧道的出口相當(dāng)于TXD,最先出隧道的是火車頭(起始位),然后出去的是第一節(jié)車廂,第二節(jié)車廂第八節(jié)車廂,最后一節(jié)車廂(停止位),這樣一個(gè)過程就是發(fā)送數(shù)據(jù)的過程。三、串行口的工作方式51單片機(jī)的串行口的工作方式有四種,方式0、方式1、方式2和方式3。最常用的是方式1,所以我們只介紹方式1的應(yīng)用,實(shí)際方式1也完全夠用了。方式1是10位數(shù)據(jù)的異步通信口(就是說單片機(jī)每次只能接受或者發(fā)送10位數(shù)據(jù))。10位數(shù)據(jù)中有1位起始位,8位數(shù)據(jù)位(實(shí)際傳送的數(shù)據(jù)),1位停止位。傳送一幀數(shù)據(jù)(一次發(fā)送的數(shù)據(jù)叫一幀)的格式如圖所示。 圖7- 1 數(shù)據(jù)傳送示意圖 說明:串行口實(shí)際傳輸?shù)臄?shù)據(jù)是中間8位(D0D7),數(shù)據(jù)位前面一位(D0前一位)是起始位,表明這幀數(shù)據(jù)的開始,數(shù)據(jù)位后面一位(D7后一位)是停止位,表明數(shù)據(jù)傳送的結(jié)束??臻e的地方表示沒有數(shù)據(jù)的傳輸。方式1的數(shù)據(jù)輸出時(shí)序圖圖7- 2 方式1的數(shù)據(jù)輸出時(shí)序圖單片機(jī)要發(fā)送數(shù)據(jù)出去,必須先把要發(fā)送的數(shù)據(jù)寫入發(fā)送緩沖器(SBUF)中,再由SBUF將數(shù)據(jù)傳到TXD引腳上,最后把數(shù)據(jù)發(fā)送出去。如圖,首先看圖的最上面,寫入SBUF,左邊有個(gè)突起的部分,這表示我們把數(shù)據(jù)寫入SBUF中了,然后看圖的中間部分TXD,寫入數(shù)據(jù)到SBUF后,TXD開始發(fā)一幀數(shù)據(jù)的起始位,然后發(fā)D0、D1、D2D7、停止位。最后看圖的最下方TI,當(dāng)數(shù)據(jù)發(fā)送到停止位時(shí)TI的圖像就有個(gè)上升的變化,其實(shí)是TI置1,TI起初是
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度高端美發(fā)店品牌加盟股份投資合同3篇
- 影視項(xiàng)目投資方與制片方2025年度融資變更合同3篇
- 2025年度二零二五年度綠化苗木產(chǎn)業(yè)投資基金合作協(xié)議3篇
- 2025版五年期限內(nèi)員工持股計(jì)劃勞動(dòng)合同3篇
- 2025版全面型國際教育項(xiàng)目兼職外教招聘服務(wù)合同3篇
- 2025年度個(gè)人購房擔(dān)保借款合同房產(chǎn)交易合同生效條件4篇
- 2025年度環(huán)保節(jié)能建筑材料采購合同模板4篇
- 2025年度住宅小區(qū)地下車庫車位使用權(quán)購買協(xié)議4篇
- 萬科2024住宅租賃管理合同標(biāo)準(zhǔn)版版B版
- 2025版船舶航行監(jiān)控與運(yùn)輸安全協(xié)議示范3篇
- 2025年山東浪潮集團(tuán)限公司招聘25人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2024年財(cái)政部會(huì)計(jì)法律法規(guī)答題活動(dòng)題目及答案一
- 2025年江西省港口集團(tuán)招聘筆試參考題庫含答案解析
- (2024年)中國傳統(tǒng)文化介紹課件
- 液化氣安全檢查及整改方案
- 《冠心病》課件(完整版)
- 2024年云網(wǎng)安全應(yīng)知應(yīng)會(huì)考試題庫
- 公園保潔服務(wù)投標(biāo)方案
- 光伏電站項(xiàng)目合作開發(fā)合同協(xié)議書三方版
- 2024年秋季新滬教版九年級(jí)上冊(cè)化學(xué)課件 第2章 空氣與水資源第1節(jié) 空氣的組成
- 香港中文大學(xué)博士英文復(fù)試模板
評(píng)論
0/150
提交評(píng)論