畢業(yè)設(shè)計(jì)--ps2鍵盤鼠標(biāo)識(shí)別器的設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩37頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  畢業(yè)設(shè)計(jì)說(shuō)明書(論文)</p><p>  學(xué) 院: 信息工程學(xué)院 </p><p>  專 業(yè): 通信工程 </p><p>  題 目: PS/2鍵盤鼠標(biāo)識(shí)別器的設(shè)計(jì) </p><p>  畢業(yè)設(shè)計(jì)說(shuō)明

2、書(論文)中文摘要</p><p> 鍵盤是嵌入式系統(tǒng)的最重要的輸入設(shè)備之一,是實(shí)現(xiàn)人機(jī)交互的重要途徑,設(shè)計(jì)者除了可以自行設(shè)計(jì)掃描式矩陣鍵盤之外,還可以選擇標(biāo)準(zhǔn)PS/2鍵盤實(shí)現(xiàn)人機(jī)交互。標(biāo)準(zhǔn)PS/2鍵盤由于接口通信協(xié)議簡(jiǎn)單,在系統(tǒng)中占用軟硬件資源少,高可靠性,表達(dá)信息量大而得到了越來(lái)越廣泛的應(yīng)用。PS/2接口作為傳統(tǒng)的鼠標(biāo)鍵盤接口已經(jīng)被大部分人所熟知,雖然隨著USB接口鍵鼠的普及,絕大多數(shù)PC用戶均選擇了USB的

3、鍵鼠,但目前主流PC中依舊保留了PS/2鍵鼠的接口,由于PS/2接口實(shí)現(xiàn)簡(jiǎn)單,使用方便的特點(diǎn),在許多領(lǐng)域如工控機(jī)等仍舊采用PS/2接口來(lái)完成基本的人機(jī)交互。本文分析了當(dāng)前市場(chǎng)上主流PS/2鍵盤鼠標(biāo)的工作協(xié)議,闡述了PS/2接口鍵盤識(shí)別器的工作原理。關(guān)鍵詞 嵌入式系統(tǒng) PS/2鍵盤鼠標(biāo) 矩陣鍵盤 通信協(xié)議</p><p>  畢業(yè)設(shè)計(jì)說(shuō)明書(論文)外文摘要</p><p><b

4、>  目 錄</b></p><p><b>  摘要I</b></p><p>  AbstractII</p><p>  第1章 緒 論1</p><p>  1.1 選題的背景1</p><p>  1.2 課題研究的目的和意義2</p>&l

5、t;p>  1.3 PS/2的現(xiàn)狀與發(fā)展3</p><p>  第2章 PS/2鼠標(biāo)、鍵盤協(xié)議4</p><p>  2.1 PS/2的物理接口 4</p><p>  2.2 PS/2鍵盤鼠標(biāo)協(xié)議4</p><p>  2.3 設(shè)備到主機(jī)的通訊過(guò)程5</p><p>  2.4 主機(jī)到設(shè)備的通訊7&

6、lt;/p><p>  2.5 本章小結(jié) 9</p><p>  第3章 PS/2鍵盤接口設(shè)計(jì)10</p><p>  3.1 PS/2鍵盤接口特性10</p><p>  3.1.1 PS/2鍵盤接口概述10</p><p>  3.1.2 掃描碼10</p><p>  3.1.3 通

7、碼斷碼和機(jī)打重復(fù)率10</p><p>  3.2 硬件接口設(shè)計(jì)11</p><p>  3.2.1 單片機(jī)的基礎(chǔ)知識(shí)11</p><p>  3.2.2 單片機(jī)的發(fā)展12</p><p>  3.2.3 單片機(jī)AT89C51的特性12</p><p>  3.2.4 硬件電路圖16</p>

8、<p>  3.3 軟件程序設(shè)計(jì)17</p><p>  3.3.1 單片機(jī)與鍵盤間的PS/2通信程序的設(shè)計(jì)17</p><p>  3.3.2 鍵盤鍵盤初始化程序19</p><p>  3.4 本章小結(jié)20</p><p>  第4章 PS/2鼠標(biāo)接口設(shè)計(jì)21</p><p>  4.1 PS/

9、2鼠標(biāo)接口特性21</p><p>  4.1.1 輸入、分辨率和縮放比例21</p><p>  4.1.2 位移數(shù)據(jù)包21</p><p>  4.1.3 PS/2鼠標(biāo)工作模式22</p><p>  4.1.4 PS/2鼠標(biāo)的數(shù)據(jù)傳送幀過(guò)程詳解22</p><p>  4.2 單片機(jī)和PS/2鼠標(biāo)的硬件

10、接口23</p><p>  4.3 PS/2鼠標(biāo)的軟件設(shè)計(jì)24</p><p>  4.4 本章小結(jié)25</p><p><b>  總 結(jié)26</b></p><p><b>  參考文獻(xiàn)27</b></p><p><b>  致謝28</

11、b></p><p><b>  附錄29</b></p><p><b>  第1章 緒 論</b></p><p><b>  1.1 選題的背景</b></p><p>  PS/2接口是計(jì)算機(jī)發(fā)展到一定階段的一種接口規(guī)范,是1987年,IBM推出的鍵盤接口標(biāo)準(zhǔn)

12、,支持雙向串行通訊協(xié)議。鍵盤和鼠標(biāo)上的口是Male(公的),稱為Plug(插頭)。主板上的接口是Female(母的),稱為Socket(插座)。因此,這兩個(gè)就分別是Plug Socket,簡(jiǎn)稱PS而已,又因?yàn)槠渲С蛛p向通信協(xié)議,故稱為PS/2接口。PS/2是在較早電腦上常見(jiàn)的接口之一,用于鼠標(biāo)、鍵盤等設(shè)備。一般情況下,PS/2接口的鼠標(biāo)為綠色,鍵盤為紫色。以前完全開(kāi)放的PC標(biāo)準(zhǔn)讓IBM覺(jué)得利益受了損失。所以IBM設(shè)計(jì)了PS/2這種電腦,

13、目的是重新定義PC標(biāo)準(zhǔn),不再采用開(kāi)放標(biāo)準(zhǔn)的方式。在這種電腦上IBM使用了新型MCA總線,新的OS/2操作系統(tǒng)。PS/2電腦上使用的鍵盤鼠標(biāo)接口就是現(xiàn)在的PS/2接口。因?yàn)闃?biāo)準(zhǔn)不開(kāi)放,PS/2電腦在市場(chǎng)中失敗了。只有PS/2接口一直沿用到今天[1]。</p><p>  PS/2設(shè)備接口用于許多的現(xiàn)代的鼠標(biāo)和鍵盤,它是由IBM開(kāi)發(fā)并且最初出現(xiàn)在IBM技術(shù)參考手冊(cè)里。標(biāo)準(zhǔn)PS/2鍵盤由于接口通信協(xié)議簡(jiǎn)單,在系統(tǒng)中占用

14、的軟硬件資源少,可靠性高,表達(dá)信息量大而得到越來(lái)越廣泛的應(yīng)用[2]。</p><p>  目前,在嵌入式智能儀器儀表中,常用LCD加鍵盤實(shí)現(xiàn)人機(jī)接口,在實(shí)際應(yīng)用中人機(jī)界面需要顯示漢字,筆者從事的一個(gè)電力保護(hù)項(xiàng)目中還需要輸入并保存漢字以標(biāo)注線路號(hào)的信息,如果用簡(jiǎn)單的控制鍵盤實(shí)現(xiàn)英文甚至漢字的輸入,則程序比較復(fù)雜,筆者考慮到PC上用的標(biāo)準(zhǔn)PS/2鍵盤,可通過(guò)簡(jiǎn)單的接口實(shí)現(xiàn)與MCU的連接,利用成熟且普及的PC鍵盤,可實(shí)

15、現(xiàn)復(fù)雜的輸入,對(duì)于MCU并不占用很多口線,甚至口線復(fù)用,可僅在需要輸入時(shí)再接上鍵盤,是一種廉價(jià)的鍵盤解決方案。</p><p>  鍵盤是嵌入式系統(tǒng)的重要的輸入設(shè)備,是實(shí)現(xiàn)人機(jī)交互的重要的手段之一,隨著標(biāo)準(zhǔn)PS/2鍵盤急速成熟和價(jià)格不斷下降,在嵌入式系統(tǒng)的設(shè)計(jì)中,用標(biāo)準(zhǔn)PS/2鍵盤取代自制簡(jiǎn)易的掃描式矩陣式鍵盤稱為可能[3]。在單片機(jī)系統(tǒng)中,經(jīng)常使用的鍵盤都是專用鍵盤。此類鍵盤為單獨(dú)設(shè)計(jì)制作的,成本高,使用硬件連

16、接線多,而且可靠性不高,這一狀況在那些要求鍵盤按鍵較多的應(yīng)用系統(tǒng)中更為突出。與此相比,在PC系統(tǒng)中廣泛應(yīng)用PS/2鍵盤具有價(jià)格低,通用可靠而且連接線少(僅使用2根信號(hào)線)的特點(diǎn),并且可滿足多種系統(tǒng)的要求。因此在單片機(jī)系統(tǒng)中應(yīng)用PS/2鍵盤是一種很好的選擇。</p><p>  1.2 課題研究的目的和意義</p><p>  PS/2接口是輸入裝置接口,而不是傳輸接口。所以PS/2口根本沒(méi)

17、有傳輸速率的概念,只有掃描速率。在Windows環(huán)境下,PS/2鼠標(biāo)的采樣率默認(rèn)為60次/秒,USB鼠標(biāo)的采樣率為120次/秒。較高的采樣率理論上可以提高鼠標(biāo)的移動(dòng)精度。PS/2接口設(shè)備不支持熱插拔,強(qiáng)行帶電插拔有可能燒毀主板。</p><p>  PS/2可以與USB接口互轉(zhuǎn),即PS/2接口設(shè)備可以轉(zhuǎn)成USB,USB接口設(shè)備也可以轉(zhuǎn)成PS/2。早期,在PS/2鍵盤中,包含了一個(gè)嵌入式的微控制器(如InDl,80

18、48系列),以用來(lái)執(zhí)行各項(xiàng)的工作并減少整個(gè)系統(tǒng)工作中的負(fù)擔(dān)。微控制器所要作的工作就是監(jiān)測(cè)所有的按鍵,以及當(dāng)按鍵被按下或放開(kāi)時(shí),就回報(bào)給主機(jī)。</p><p>  在單片機(jī)的嵌入式應(yīng)用中,有時(shí)需要輸入較多的參數(shù),來(lái)完成程序或數(shù)據(jù)參數(shù)的設(shè)定操作,在對(duì)信息安全要求較高的場(chǎng)所(比如銀行系統(tǒng)的一些智能設(shè)備),有時(shí)需要輸入一些敏感的數(shù)字或字母資料,有十多個(gè)按鍵的位置及常規(guī)輸入設(shè)備由于很容易被別人看到操作作者按按鍵的位置及順序

19、從而使得數(shù)據(jù)失密。PS/2接口的鼠標(biāo)是被現(xiàn)代個(gè)人微機(jī)廣泛采用的外部定點(diǎn)輸入設(shè)備,它易于操作而且價(jià)格廉價(jià)。如果能夠利用PS/2鼠標(biāo)的標(biāo)準(zhǔn)接口特性,在單片機(jī)應(yīng)用系統(tǒng)中設(shè)計(jì)一個(gè)PS/2接口作為系統(tǒng)的輸入設(shè)備,不僅占用資源少,成本低而且操作簡(jiǎn)單,同時(shí)具有保密性好的優(yōu)點(diǎn)。</p><p>  1.3 PS/2的現(xiàn)狀與發(fā)展</p><p>  隨著計(jì)算機(jī)工業(yè)的發(fā)展,作為計(jì)算機(jī)最常用輸入設(shè)備的鍵盤也日新

20、月異。1981年IBM推出了IBM PC/XT鍵盤及其接口標(biāo)準(zhǔn)。該標(biāo)準(zhǔn)定義了83鍵,采用5腳DIN連接器和簡(jiǎn)單的串行協(xié)議。實(shí)際上,第一套鍵盤掃描碼集并沒(méi)有主機(jī)到鍵盤的命令。為此,1984年IBM推出了IBM AT鍵盤接口標(biāo)準(zhǔn)。該標(biāo)準(zhǔn)定義了84-101鍵,采用5腳DIN連接器和雙向串行通訊協(xié)議,此協(xié)議依照第二套鍵盤掃描碼集設(shè)有8個(gè)主機(jī)到鍵盤的命令。到了1987年,IBM又推出了PS/2鍵盤接口標(biāo)準(zhǔn)。該標(biāo)準(zhǔn)仍舊定義了84-101鍵,但是采用

21、6腳mini-DIN連接器,該連接器在封裝上更小巧,仍然用雙向串行通訊協(xié)議并且提供有可選擇的第三套鍵盤掃描碼集,同時(shí)支持17個(gè)主機(jī)到鍵盤的命令?,F(xiàn)在,市面上的鍵盤都和PS/2及AT鍵盤兼容,只是功能不同而已。一般,具有五腳連接器的鍵盤稱之為AT鍵盤,而具有六腳mini-DIN連接器的鍵盤則稱之為PS/2鍵盤。其實(shí)這兩種連接器都只有四個(gè)腳有意義。它們分別是Clock(時(shí)鐘腳)、DATA(數(shù)據(jù)腳)、+5V(電源腳)和Ground(電源地)。

22、在PS/2鍵盤與PC機(jī)的物理連接上只要保證這四根線一一對(duì)應(yīng)就可</p><p>  PS/2接口是一種PC兼容電腦系統(tǒng)上的接口,可以用來(lái)鏈接鍵盤及鼠標(biāo)。PS/2的命名來(lái)自于1987年IBM所推出的個(gè)人電腦:PS/2系列。PS/2鼠標(biāo)連接通常用來(lái)取代舊式的串行鼠標(biāo)接口(DB -9 RS-232);而PS/2鍵盤連接則是用來(lái)取代為IBM PC/AT所設(shè)計(jì)的大型5-pin DIN接口。PS/2的鍵盤及鼠標(biāo)接口在電氣特性

23、上十分相似,其中主要的差別在于鍵盤接口需要雙向溝通。在早期如果對(duì)調(diào)鍵盤和鼠標(biāo)的插槽,大部分的臺(tái)式機(jī)主板將不能識(shí)別出鍵盤及鼠標(biāo)?,F(xiàn)在已經(jīng)沒(méi)有關(guān)系了[4]。目前PS/2接口已經(jīng)慢慢的被USB所取代,只有少部分的臺(tái)式機(jī)仍然提供PS/2接口。有些鼠標(biāo)可以使用轉(zhuǎn)換器將接口由USB轉(zhuǎn)換成PS/2,亦有可以從USB分接成鍵盤鼠標(biāo)用PS/2接口的轉(zhuǎn)接線。PS/2接口不支持熱插拔。</p><p>  可以說(shuō),二十世紀(jì)跨越了三個(gè)“

24、電”的時(shí)代,即電氣時(shí)代、電子時(shí)代和現(xiàn)已進(jìn)入的電腦時(shí)代。不過(guò),這種電腦,通常是指?jìng)€(gè)人計(jì)算機(jī),簡(jiǎn)稱PC機(jī)。它由主機(jī)、鍵盤、顯示器等組成。還有一類計(jì)算機(jī),大多數(shù)人卻不怎么熟悉。這種計(jì)算機(jī)就是把智能賦予各種機(jī)械的單片機(jī)(亦稱微控制器)。顧名思義,這種計(jì)算機(jī)的最小系統(tǒng)只用了一片集成電路,即可進(jìn)行簡(jiǎn)單運(yùn)算和控制。因?yàn)樗w積小,通常都藏在被控機(jī)械的“肚子”里。它在整個(gè)裝置中,起著有如人類頭腦的作用,它出了毛病,整個(gè)裝置就癱瘓了?,F(xiàn)在,這種單片機(jī)的使用

25、領(lǐng)域已十分廣泛,如智能儀表、實(shí)時(shí)工控、通訊設(shè)備、導(dǎo)航系統(tǒng)、家用電器等。各種產(chǎn)品一旦用上了單片機(jī),就能起到使產(chǎn)品升級(jí)換代的功效,常在產(chǎn)品名稱前冠以形容詞——“智能型”,如智能型洗衣機(jī)等?,F(xiàn)在有些工廠的技術(shù)人員或其它業(yè)余電子開(kāi)發(fā)者搞出來(lái)的某些產(chǎn)品,不是電路太復(fù)雜,就是功能太簡(jiǎn)單且極易被仿制。究其原因,可能就卡在產(chǎn)品未使用單片機(jī)或其它可編程邏輯器件上。</p><p>  第2章 PS/2鼠標(biāo)、鍵盤協(xié)議</p&g

26、t;<p>  2.1 PS/2的物理接口</p><p>  物理上的PS/2端口是兩類連接器中的一種:5腳的DIN或6腳的Mini-DIN。這兩種連接器(在電氣特性上)是十分類似的,實(shí)際上兩者只有一點(diǎn)不同那就是管腳的排列。這就意味著這兩類連接器可以很容易用一種簡(jiǎn)單的硬件連線的適配器來(lái)轉(zhuǎn)換。這種適配器大約每個(gè)值6美元,或者你可以根據(jù)任意兩種連接器的對(duì)應(yīng)管腳關(guān)系做你自己的適配器。DIN標(biāo)準(zhǔn)是由德國(guó)標(biāo)

27、準(zhǔn)化組織(Deutsches Institut Fuer Norm)建立的。</p><p>  PC鍵盤可以有6腳的mini-DIN或5腳的DIN連接器[6]。如果你的鍵盤是6腳的mini-DIN而你的計(jì)算機(jī)是5腳的DIN(或者相反),這兩類連接器可以用上面提到的適配器來(lái)兼容。具有6腳mini-DIN的鍵盤通常被叫做“PS/2”鍵盤,而那些有5腳DIN叫做“AT”設(shè)備(“XT”鍵盤也使用5腳DIN,但它們非常古

28、老并且多年前就不生產(chǎn)了)。所有現(xiàn)代的為PC建造的鍵盤不是PS/2,AT就是USB的。這篇文章不適用于USB,設(shè)備它們使用了一種完全不同的接口。</p><p>  鼠標(biāo)流行著大量的形狀和大小(和接口),最流行的類型可能算是PS/2鼠標(biāo),現(xiàn)在USB鼠標(biāo)漸漸開(kāi)始流行起來(lái)了。串行鼠標(biāo)同樣非常流行,但計(jì)算機(jī)工業(yè)放棄了它們轉(zhuǎn)而支持USB和PS/2設(shè)備。</p><p>  每種連接器的引腳定義如下所

29、示</p><p>  圖2-1 5腳DIN連接器</p><p>  圖2-2 6腳DIN連接器</p><p>  2.2 PS/2鍵盤鼠標(biāo)協(xié)議</p><p>  在剛才提到連接器上有四個(gè)有趣的管腳;電源地、5V、數(shù)據(jù)和時(shí)鐘。Host(計(jì)算機(jī))提供+5V,并且鍵盤/鼠標(biāo)的地連接到host的電源地上。數(shù)據(jù)和時(shí)鐘都是集電極開(kāi)路的,這就意味著

30、它們通常保持高電平而且很容易下拉到地(邏輯0)。任何你連接到PS/2鼠標(biāo)、鍵盤或host的設(shè)備在時(shí)鐘和數(shù)據(jù)線上要有一個(gè)大的上拉電阻。置“0” 就把線拉低,置“1”就讓線上浮成高電平。(注意:如果你打算使用象PIC這樣的微控制器,由于它們的I/O管腳是雙向的,你可以跳過(guò)晶體管和緩沖門,并且通用同一個(gè)管腳進(jìn)行輸入和輸出。在這種組態(tài)情況下,要設(shè)置管腳為輸入就寫入1使得電阻上拉線上的電平,要改變管腳為輸出就寫入0到那個(gè)管腳,把線路下拉到地。)&

31、lt;/p><p>  PS/2鼠標(biāo)和鍵盤履行一種雙向同步串行協(xié)議。換句話說(shuō),每次數(shù)據(jù)線上發(fā)送一位數(shù)據(jù)并且每在時(shí)鐘線上發(fā)一個(gè)脈沖就被讀入。鍵盤、鼠標(biāo)可以發(fā)送數(shù)據(jù)到主機(jī),而主機(jī)也可以發(fā)送數(shù)據(jù)到設(shè)備,但主機(jī)總是在總線上有優(yōu)先權(quán),它可以在任何時(shí)候抑制來(lái)自于鍵盤/鼠標(biāo)的通訊,只要把時(shí)鐘拉低即可。</p><p>  從鍵盤、鼠標(biāo)發(fā)送到主機(jī)的數(shù)據(jù)在時(shí)鐘信號(hào)的下降沿(當(dāng)時(shí)鐘從高變到低的時(shí)候)被讀??;從主機(jī)

32、發(fā)送到鍵盤、鼠標(biāo)的數(shù)據(jù)在上升沿(當(dāng)時(shí)鐘從低變到高的時(shí)候)被讀取。不管通訊的方向怎樣,鍵盤、鼠標(biāo)總是產(chǎn)生時(shí)鐘信號(hào)。如果主機(jī)要發(fā)送數(shù)據(jù),它必須首先告訴設(shè)備開(kāi)始產(chǎn)生時(shí)鐘信號(hào)(這個(gè)過(guò)程在下一章節(jié)中被描述)最大的時(shí)鐘頻率是 33KHZ,而且大多數(shù)設(shè)備工作在10-20KHZ。如果你要制作一個(gè)PS/2設(shè)備,我推薦你把頻率控制在15KHZ左右。這就意味著時(shí)鐘應(yīng)該是高40微秒低40微秒。</p><p>  所有數(shù)據(jù)安排在字節(jié)中,

33、每個(gè)字節(jié)為一幀,包含了11-12個(gè)位。這些位的含義如下:</p><p>  表2-1 數(shù)據(jù)幀格式說(shuō)明</p><p>  如果數(shù)據(jù)位中包含偶數(shù)個(gè)1,校驗(yàn)位就會(huì)置1;如果數(shù)據(jù)位中包含奇數(shù)個(gè)1,校驗(yàn)位就會(huì)置0。數(shù)據(jù)位中1的個(gè)數(shù)加上校驗(yàn)位總是為奇數(shù)(這就是奇校驗(yàn))這是用來(lái)進(jìn)行錯(cuò)誤檢測(cè)的。</p><p>  當(dāng)主機(jī)發(fā)送數(shù)據(jù)給鍵盤、鼠標(biāo)時(shí),設(shè)備回送一個(gè)握手信號(hào)來(lái)應(yīng)答數(shù)據(jù)包

34、已經(jīng)收到。這個(gè)位不會(huì)出現(xiàn)在設(shè)備發(fā)送數(shù)據(jù)到主機(jī)的過(guò)程中。</p><p>  2.3 設(shè)備到主機(jī)的通訊過(guò)程</p><p>  數(shù)據(jù)和時(shí)鐘線都是集電極開(kāi)路結(jié)構(gòu)(正常保持高電平)。當(dāng)鍵盤或鼠標(biāo)等待發(fā)送數(shù)據(jù)時(shí),它首先檢查時(shí)鐘以確認(rèn)它是否是高電平。如果不是,那么是主機(jī)抑制了通訊,設(shè)備必須緩沖任何要發(fā)送的數(shù)據(jù)直到重新獲得總線的控制權(quán)(鍵盤有16字節(jié)的緩沖區(qū),而鼠標(biāo)的緩沖區(qū)僅存儲(chǔ)最后一個(gè)要發(fā)送的數(shù)據(jù)包

35、)。如果時(shí)鐘線是高電平,設(shè)備就可以開(kāi)始傳送數(shù)據(jù)。</p><p>  如我在上一節(jié)提及的,鍵盤和鼠標(biāo)使用一種每幀包含11位的串行協(xié)議[7]。這些位含義是:</p><p>  表2-2 數(shù)據(jù)幀格式說(shuō)明</p><p>  每位在時(shí)鐘的下降沿被主機(jī)讀入,如圖2-3:</p><p>  圖2-3:設(shè)備到主機(jī)</p><p&g

36、t;  當(dāng)時(shí)鐘為高時(shí),設(shè)備驅(qū)動(dòng)數(shù)據(jù)線改變狀態(tài),在時(shí)鐘信號(hào)的下降沿?cái)?shù)據(jù)被控制器鎖存。</p><p>  時(shí)鐘頻率為10—16.7KHZ,從時(shí)鐘脈沖的上升沿到一個(gè)數(shù)據(jù)轉(zhuǎn)變的時(shí)間至少要有5微秒。數(shù)據(jù)變化到時(shí)鐘脈沖的下降沿的時(shí)間至少要有5微秒并且不大于25微秒。這個(gè)定時(shí)非常重要。主機(jī)可以在第11個(gè)時(shí)鐘脈沖(停止位)之前把線拉低,導(dǎo)致設(shè)備放棄發(fā)送當(dāng)前字節(jié)(這是非常罕見(jiàn)的)。在停止位發(fā)送之后,設(shè)備在發(fā)送下個(gè)包前至少應(yīng)該等待

37、50毫秒。這將給主機(jī)時(shí)間當(dāng)它處理接收到的字節(jié)時(shí)抑制發(fā)送(主機(jī)在收到每個(gè)包時(shí),通常自動(dòng)做這個(gè))。在主機(jī)釋放抑制后,設(shè)備至少應(yīng)該在發(fā)送任何數(shù)據(jù)前等50毫秒。</p><p>  按下面的過(guò)程發(fā)送一個(gè)單一字節(jié)從PS/2到主機(jī):</p><p> ?。?)檢測(cè)時(shí)鐘線電平,如果時(shí)鐘線為低,則延時(shí)50微秒;</p><p>  檢測(cè)判斷時(shí)鐘信號(hào)是否為高,為高,則向下執(zhí)行,為低,

38、則轉(zhuǎn)到(1);</p><p> ?。?)檢測(cè)數(shù)據(jù)線是否為高,如果為高則繼續(xù)執(zhí)行,如果為低,則放棄發(fā)送(此時(shí)PC機(jī)在向PS/2設(shè)備發(fā)送數(shù)據(jù),所以PS/2設(shè)備要轉(zhuǎn)移到接收程序處接收數(shù)據(jù));</p><p> ?。?)延時(shí)20微秒(如果此時(shí)正在發(fā)送起始位,則應(yīng)延時(shí)40微秒);</p><p>  (4)輸出起始位(0)到數(shù)據(jù)線上。這里要注意的是:在送出每一位后都要檢測(cè)時(shí)

39、鐘線,以確保PC機(jī)沒(méi)有抑制PS/2設(shè)備,如果有則中止發(fā)送;</p><p> ?。?)輸出8個(gè)數(shù)據(jù)位到數(shù)據(jù)線上;</p><p><b> ?。?)輸出校驗(yàn)位;</b></p><p> ?。?)輸出停止位(1);</p><p> ?。?)延時(shí)30微秒(如果在發(fā)送停止位時(shí)釋放時(shí)鐘信號(hào)則應(yīng)延時(shí)50微秒);</p&g

40、t;<p>  按如下的過(guò)程發(fā)送單個(gè)位:</p><p> ?。?)準(zhǔn)備數(shù)據(jù)位(將需要發(fā)送的數(shù)據(jù)位放到數(shù)據(jù)線上)</p><p><b> ?。?)延遲20微秒</b></p><p><b> ?。?)把時(shí)鐘拉低</b></p><p><b> ?。?)延遲40微秒<

41、;/b></p><p><b> ?。?)釋放時(shí)鐘</b></p><p><b> ?。?)延遲20微秒</b></p><p>  2.4 主機(jī)到設(shè)備的通訊</p><p>  被發(fā)送的包有點(diǎn)不同于主機(jī)到設(shè)備通訊過(guò)程。首先,PS/2設(shè)備總是產(chǎn)生時(shí)鐘信號(hào)。如果主機(jī)要發(fā)送數(shù)據(jù),它必須首先把時(shí)

42、鐘和數(shù)據(jù)線設(shè)置為“請(qǐng)求發(fā)送”狀態(tài),如下示:</p><p>  1)通過(guò)下拉時(shí)鐘線至少100微秒來(lái)抑制通訊。</p><p>  2)通過(guò)下拉數(shù)據(jù)線來(lái)應(yīng)用“請(qǐng)求發(fā)送”然后釋放時(shí)鐘。</p><p>  設(shè)備應(yīng)該在不超過(guò)10毫秒的間隔內(nèi)就要檢查這個(gè)狀態(tài)。當(dāng)設(shè)備檢測(cè)到這個(gè)狀態(tài),它將開(kāi)始產(chǎn)生時(shí)鐘信號(hào),并且時(shí)鐘脈沖標(biāo)記下輸入八個(gè)數(shù)據(jù)位和一個(gè)停止位。主機(jī)僅當(dāng)時(shí)鐘線為低的時(shí)候改

43、變數(shù)據(jù)線,而數(shù)據(jù)在時(shí)鐘脈沖的上升沿被鎖存。當(dāng)發(fā)生在設(shè)備到主機(jī)通訊的過(guò)程中時(shí)正好相反。</p><p>  在停止位發(fā)送后,設(shè)備要應(yīng)答接收到的字節(jié),就把數(shù)據(jù)線拉低并產(chǎn)生最后一個(gè)時(shí)鐘脈沖。如果主機(jī)在第11個(gè)時(shí)鐘脈沖后不釋放數(shù)據(jù)線,設(shè)備將繼續(xù)產(chǎn)生時(shí)鐘脈沖直到數(shù)據(jù)線被釋放(然后設(shè)備將產(chǎn)生一個(gè)錯(cuò)誤)。</p><p>  主機(jī)可以在第11個(gè)時(shí)鐘脈沖(應(yīng)答位)前中止一次傳送,只要下拉時(shí)鐘線至少100微

44、秒。</p><p>  要使得這個(gè)過(guò)程易于理解,主機(jī)必須按下面的步驟發(fā)送數(shù)據(jù)到PS/2設(shè)備:</p><p> ?。?)把時(shí)鐘線拉低至少100微秒</p><p> ?。?) 把數(shù)據(jù)線拉低</p><p><b> ?。?) 釋放數(shù)據(jù)線</b></p><p> ?。?) 等待設(shè)備把時(shí)鐘線拉低&

45、lt;/p><p> ?。?) 設(shè)置/復(fù)位數(shù)據(jù)線發(fā)送第一個(gè)數(shù)據(jù)位</p><p>  (6) 等待設(shè)備把時(shí)鐘拉高 </p><p> ?。?) 等待設(shè)備把時(shí)鐘拉低</p><p> ?。?) 重復(fù)5-7步 發(fā)送剩下的7個(gè)數(shù)據(jù)位和校驗(yàn)位</p><p><b> ?。?) 釋放數(shù)據(jù)線</b><

46、/p><p> ?。?0)等待設(shè)備把數(shù)據(jù)線拉低</p><p> ?。?1)等待設(shè)備把時(shí)鐘線拉低</p><p>  (12) 等待設(shè)備釋放數(shù)據(jù)線和時(shí)鐘線。</p><p>  圖2-4用圖形表示,圖2-5以單獨(dú)的時(shí)序表示了由主機(jī)產(chǎn)生的信號(hào)及由PS/2設(shè)備產(chǎn)生的信號(hào)。注意應(yīng)答位時(shí)序的改變,數(shù)據(jù)的改變發(fā)生在時(shí)鐘線為高的時(shí)候,不同于其它11位是當(dāng)它為

47、低的時(shí)候。</p><p>  圖2-4 主機(jī)到設(shè)備的通信</p><p>  圖2-5 主機(jī)到設(shè)備通訊的詳細(xì)過(guò)程</p><p>  圖3-5描述了兩個(gè)重要的定時(shí)條件(a)和(b)。(a)在主機(jī)最初把數(shù)據(jù)線拉低后,設(shè)備開(kāi)始產(chǎn)生時(shí)鐘脈沖的時(shí)間,必須不大于15毫秒;(b)數(shù)據(jù)包被發(fā)送的時(shí)間必須不大于2ms。如果這兩個(gè)條件不滿足,主機(jī)將產(chǎn)生一個(gè)錯(cuò)誤。在包收到后,主機(jī)為了

48、處理數(shù)據(jù)立刻把時(shí)鐘線拉低來(lái)抑制通訊。如果主機(jī)發(fā)送的命令要求有一個(gè)回應(yīng),這個(gè)回應(yīng)必須在主機(jī)釋放時(shí)鐘線后20毫秒之內(nèi)被收到。如果沒(méi)有收到,則主機(jī)產(chǎn)生一個(gè)錯(cuò)誤。在設(shè)備到主機(jī)通訊的情況中,時(shí)鐘改變后的5微秒內(nèi)不應(yīng)該發(fā)生數(shù)據(jù)改變的情況。</p><p>  如果要仿真一個(gè)鼠標(biāo)或鍵盤,則按如下的過(guò)程從主機(jī)讀入數(shù)據(jù):</p><p>  在你的主程序中,至少每10毫秒檢測(cè)數(shù)據(jù)線是否為低,如果數(shù)據(jù)線已被主

49、機(jī)拉低,則從主機(jī)讀取一個(gè)字節(jié)。</p><p> ?。?)等待時(shí)鐘線為高電平; </p><p> ?。?)判斷數(shù)據(jù)線是否為低,為高則錯(cuò)誤退出,否則繼續(xù)執(zhí)行;</p><p> ?。?)讀地址線上的數(shù)據(jù)內(nèi)容,共8個(gè)Bit,每讀完一個(gè)位,都應(yīng)檢測(cè)時(shí)鐘線是否被PC機(jī)拉低,如果被拉低則要中止接收 ;</p><p>  (4)讀地址線上的校驗(yàn)位內(nèi)

50、容,1個(gè)Bit; </p><p> ?。?)讀入停止位; </p><p> ?。?)如果數(shù)據(jù)線上為0(即還是低電平),PS/2設(shè)備繼續(xù)產(chǎn)生時(shí)鐘,直到接收到1</p><p>  且產(chǎn)生出錯(cuò)信號(hào)為止(因?yàn)橥V刮皇?,如果PS/2設(shè)備沒(méi)有讀到停止位,則表明此次傳輸出錯(cuò));</p><p>

51、;<b> ?。?)輸出應(yīng)答位;</b></p><p> ?。?)檢測(cè)奇偶校驗(yàn)位,如果校驗(yàn)失敗,則產(chǎn)生錯(cuò)誤信號(hào)以表明此次傳輸出現(xiàn)錯(cuò)誤;</p><p> ?。?)延時(shí)45微秒,以便PC機(jī)進(jìn)行下一次傳輸 [8] 。 </p><p>  按如下次序讀取每位(8個(gè)數(shù)據(jù)位、檢驗(yàn)位和停止位):</p><p><b>

52、;  (1)延遲20微秒</b></p><p> ?。?)把時(shí)鐘拉低 </p><p><b>  (3)延遲40微秒</b></p><p><b> ?。?)釋放時(shí)鐘</b></p><p><b>  (5)延遲20微秒</b></p>&

53、lt;p><b>  (6)讀數(shù)據(jù)線</b></p><p>  按如下次序發(fā)送應(yīng)答位:</p><p> ?。?) 延遲15微秒</p><p><b> ?。?)把數(shù)據(jù)線拉低</b></p><p><b> ?。?)延遲5微秒</b></p><

54、p><b> ?。?)把時(shí)鐘線拉低</b></p><p><b>  (5)延遲40微秒</b></p><p><b> ?。?)釋放時(shí)鐘線</b></p><p><b>  (7)延遲5微秒</b></p><p><b>  (8

55、)釋放數(shù)據(jù)</b></p><p><b>  2.5 本章小結(jié)</b></p><p>  PS/2鍵盤、鼠標(biāo)協(xié)議包括物理上的連接器以及它的電氣特性。具體分為設(shè)備到主機(jī)的通訊和主機(jī)到設(shè)備的通訊。本章節(jié)還具體闡述了兩者之間的不同點(diǎn)和工作流程以及工作原理。</p><p>  第3章 PS/2鍵盤接口設(shè)計(jì)</p><

56、;p>  3.1 PS/2鍵盤接口特性</p><p>  現(xiàn)今仍在使用中的絕大多數(shù)流行的鍵盤包括:USB鍵盤,它最后出現(xiàn)的鍵盤被所有新式的計(jì)算機(jī)支持(Macintosh和IBM/及其兼容機(jī))。它們有自己相關(guān)的復(fù)雜接口并且不包含這篇文章中。IBM機(jī)器兼容鍵盤,也叫做“AT鍵盤”或“PS/2鍵盤”,所有現(xiàn)代的PC都支持這個(gè)設(shè)備。它們是最容易使用的接口,也是本文的主題。ADB鍵盤,連接到老式Macintosh系

57、統(tǒng)的Apple桌面總線。</p><p>  3.1.1 PS/2鍵盤接口概述</p><p>  鍵盤上包含了一個(gè)大型的按鍵矩陣,它們是由安裝在電路板上的處理器(叫做“鍵盤編碼器”)來(lái)監(jiān)視的。具體的處理器在鍵盤與鍵盤之間是多樣化的,大概好似它們基本上都做著同樣的事情:監(jiān)視哪些按鍵被按下或釋放了,并傳送適當(dāng)?shù)臅r(shí)候到主機(jī)。如果有必要,處理器處理所有的去抖動(dòng)并在它的16 字節(jié)緩沖區(qū)里緩沖數(shù)據(jù)[

58、9]。你的主板包含了一個(gè)“鍵盤控制器”負(fù)責(zé)解碼所有來(lái)自鍵盤的數(shù)據(jù),并告訴你的軟件什么事件發(fā)生了。在主機(jī)和鍵盤之間的通訊使用IBM 的協(xié)議。</p><p><b>  3.1.2 掃描碼</b></p><p>  鍵盤的處理器花費(fèi)很多的時(shí)間來(lái)掃描或監(jiān)視按鍵矩陣。如果它發(fā)現(xiàn)有鍵被按下,釋放或按住,鍵盤將發(fā)送“掃描碼”的信息包到計(jì)算機(jī)。掃描碼有兩種不同的類型:“通碼”和

59、“斷碼”。當(dāng)一個(gè)鍵被按下或按住就發(fā)送通碼;當(dāng)一個(gè)鍵被釋放就發(fā)送斷碼。每個(gè)按鍵被分配了唯一的通碼和斷碼,這樣主機(jī)通過(guò)查找唯一的掃描碼就可以測(cè)定是哪個(gè)按鍵。每個(gè)鍵一整套的通斷碼組成了“掃描碼集”。有三套標(biāo)準(zhǔn)的掃描碼集,分別是第一套、第二套和第三套。所有現(xiàn)代的鍵盤默認(rèn)使用第二套掃描碼。</p><p>  第一套掃描碼集:原始的XT掃描碼集;現(xiàn)在某些鍵盤還支持;</p><p>  第二套掃描碼

60、集:所有現(xiàn)代鍵盤默認(rèn)的掃描碼集;</p><p>  第三套掃描碼集:可選的PS/2掃描碼集(很少使用);</p><p>  3.1.3 通碼斷碼和機(jī)打重復(fù)率</p><p>  只要一個(gè)鍵被按下,這個(gè)鍵的通碼就被發(fā)送到計(jì)算機(jī)。記住通碼只表示鍵盤上的一個(gè)按鍵,它不表示印刷在按鍵上的那個(gè)字符。這就意味著在通碼和ASCII 碼之間沒(méi)有已定義的關(guān)聯(lián)。直到主機(jī)把掃描碼翻譯

61、成一個(gè)字符或命令。雖然多數(shù)第二套通碼都只有一個(gè)字節(jié)寬,但也有少數(shù)“擴(kuò)展按鍵”的通碼是兩字節(jié)或四字節(jié)寬。這類的通碼第一個(gè)字節(jié)總是為E0h。</p><p>  正如鍵按下通碼就被發(fā)往計(jì)算機(jī)一樣,只要鍵一釋放,斷碼就會(huì)被發(fā)送。每個(gè)鍵都有它自己唯一的通碼,它們也都有唯一的斷碼。幸運(yùn)的是,你不用總是通過(guò)查表來(lái)找出按鍵的斷碼,在通碼和斷碼之間存在著必然的聯(lián)系。多數(shù)第二套斷碼有兩字節(jié)長(zhǎng),它們的第一個(gè)字節(jié)是F0h,第二個(gè)字節(jié)是

62、這個(gè)鍵的通碼。擴(kuò)展按鍵的斷碼通常有三個(gè)字節(jié),它們前兩個(gè)字節(jié)是E0h,F(xiàn)0h,最后一個(gè)字節(jié)是這個(gè)按鍵通碼的最后一個(gè)字節(jié)。作為一個(gè)例子,我在下面列出了幾個(gè)按鍵的第二套通碼和斷碼:</p><p>  表3-1 個(gè)別第二套的通碼斷碼</p><p>  例如:通碼和斷碼是以什么樣的序列發(fā)送到你的計(jì)算機(jī),使得字符“G”出現(xiàn)在你的字處理軟件里呢?因?yàn)檫@是一個(gè)大寫字母,需要發(fā)生這樣的事件次序:按下“S

63、hift”鍵按下“G”鍵,釋放“G”鍵,釋放“Shift”鍵。與這些時(shí)間相關(guān)的掃描碼如下“Shift”鍵的通碼(12h),“G”鍵的通碼(34h),“G”鍵的斷碼(F0h,34h),“Shift”鍵的斷碼(F0h,12h)。因此,發(fā)送到你的計(jì)算機(jī)的數(shù)據(jù)應(yīng)該是:12h,34h ,F(xiàn)0h,34h,F(xiàn)0h,12h。</p><p>  如果你按了一個(gè)鍵,這個(gè)鍵的通碼被發(fā)送到計(jì)算機(jī)。當(dāng)你按下并按住這個(gè)鍵,則這個(gè)鍵就變成了

64、機(jī)打,這就意味著鍵盤將一直發(fā)送這個(gè)鍵的通碼直到它被釋放或者其他鍵被按下。要想證實(shí)這點(diǎn),只要打開(kāi)一個(gè)文本編輯器并按下“A”鍵。當(dāng)你首先按下這個(gè)鍵,字符“a ”立刻出現(xiàn)在你的屏幕上。在一個(gè)短暫的延遲后,接著出現(xiàn)一整串的“a ”直到你釋放“A ”鍵。這里有兩個(gè)重要的參數(shù):機(jī)打延時(shí),是第一個(gè)和第二個(gè)“a”之間的延遲:機(jī)打速率是在機(jī)打延時(shí)后每秒有多少字符出現(xiàn)你的屏幕上。機(jī)打延時(shí)的范圍可以從0.25 秒到1.00 秒;機(jī)打速率的范圍可以從2.0cp

65、s(字符每秒)到30.0cps。你可以用“Set Typematic Rate/Delay ”(0xF3)命令來(lái)改變機(jī)打速率和延時(shí)[10]。</p><p>  機(jī)打的數(shù)據(jù)不被鍵盤所緩沖。在多個(gè)鍵被按下的情況下,只有最后一個(gè)按下的鍵變成機(jī)打。當(dāng)這個(gè)鍵被釋放時(shí),機(jī)打重復(fù)就停止了,甚至于其他的鍵依然還按著。</p><p>  3.2 硬件接口設(shè)計(jì) </p><p> 

66、 總體來(lái)說(shuō)本文本研究課題所設(shè)計(jì)的PS/2鍵盤鼠標(biāo)識(shí)別器是基于單片機(jī)控制的,并且是以美國(guó)ATMEL公司的AT89C51為核心。</p><p>  3.2.1 單片機(jī)的基礎(chǔ)知識(shí)</p><p>  單片機(jī)就是在一塊半導(dǎo)體硅片上集成了微處理器(CPU),存儲(chǔ)器(RAM,ROM,EPROM)和各種輸入、輸出接口(定時(shí)器/計(jì)數(shù)器,并行I/O口,串行口,A/D轉(zhuǎn)換器以及脈寬調(diào)制器PWM等),這樣一塊

67、集成電路芯片具有一臺(tái)計(jì)算機(jī)的特性,因而被稱為單片微型計(jì)算機(jī),簡(jiǎn)稱單片機(jī)。</p><p>  單片機(jī)主要應(yīng)用于測(cè)控領(lǐng)域,用以實(shí)現(xiàn)各種測(cè)試和控制功能。為了強(qiáng)調(diào)其控制屬性,在國(guó)際上,多把單片機(jī)稱為微控制器MCU(MicroController Unit)。由于單片機(jī)在使用時(shí),通常是處于測(cè)控系統(tǒng)的核心地位并嵌入其中,所以,通常也把單片機(jī)稱為嵌入式控制器EMCU(Embedded MicroController Unit

68、)。通常,單片機(jī)由單塊集成電路芯片構(gòu)成,內(nèi)部包含有計(jì)算機(jī)的基本功能部件:CPU(Central Processing Unit,中央處理器)、存儲(chǔ)器和I/O接口電路等。因此,單片機(jī)只需要與適當(dāng)?shù)能浖巴獠吭O(shè)備相結(jié)合,便可成為一個(gè)單片機(jī)控制系統(tǒng)。單片機(jī)內(nèi)部也用和電腦功能類似的模塊,比如CPU,內(nèi)存,并行總線,還有和硬盤作用相同的存儲(chǔ)器件,不同的是它的這些部件性能都相對(duì)我們的家用電腦弱很多,不過(guò)價(jià)錢也是低的,一般不超過(guò)10元即可。</

69、p><p>  3.2.2 單片機(jī)的發(fā)展</p><p>  早期的單片機(jī)都是8位或4位的。其中最成功的是INTEL的8031,因?yàn)楹?jiǎn)單可靠而性能不錯(cuò)獲得了很大的好評(píng)[11] 。此后在8031上發(fā)展出了MCS51系列單片機(jī)系統(tǒng)?;谶@一系統(tǒng)的單片機(jī)系統(tǒng)直到現(xiàn)在還在廣泛使用。隨著工業(yè)控制領(lǐng)域要求的提高,開(kāi)始出現(xiàn)了16位單片機(jī),但因?yàn)樾詢r(jià)比不理想并未得到很廣泛的應(yīng)用。90年代后隨著消費(fèi)電子產(chǎn)品大發(fā)

70、展,單片機(jī)技術(shù)得到了巨大的提高。隨著INTEL i960系列特別是后來(lái)的ARM系列的廣泛應(yīng)用,32位單片機(jī)迅速取代16位單片機(jī)的高端地位,并且進(jìn)入主流市場(chǎng)。而傳統(tǒng)的8位單片機(jī)的性能也得到了飛速提高,處理能力比起80年代提高了數(shù)百倍。目前,高端的32位單片機(jī)主頻已經(jīng)超過(guò)300MHz,性能直追90年代中期的專用處理器,而普通的型號(hào)出廠價(jià)格跌落至1美元,最高端的型號(hào)也只有10美元。當(dāng)代單片機(jī)系統(tǒng)已經(jīng)不再只在裸機(jī)環(huán)境下開(kāi)發(fā)和使用,大量專用的嵌入

71、式操作系統(tǒng)被廣泛應(yīng)用在全系列的單片機(jī)上。而在作為掌上電腦和手機(jī)核心處理的高端單片機(jī)甚至可以直接使用專用的Windows和Linux操作系統(tǒng)。</p><p>  單片機(jī)比專用處理器更適合應(yīng)用于嵌入式系統(tǒng),因此它得到了最多的應(yīng)用。事實(shí)上單片機(jī)是世界上數(shù)量最多的計(jì)算機(jī)?,F(xiàn)代人類生活中所用的幾乎每件電子和機(jī)械產(chǎn)品中都會(huì)集成有單片機(jī)。手機(jī)、電話、計(jì)算器、家用電器、電子玩具、掌上電腦以及鼠標(biāo)等電腦配件中都配有1-2部單片機(jī)

72、[12]。而個(gè)人電腦中也會(huì)有為數(shù)不少的單片機(jī)在工作。汽車上一般配備40多部單片機(jī),復(fù)雜的工業(yè)控制系統(tǒng)上甚至可能有數(shù)百臺(tái)單片機(jī)在同時(shí)工作!單片機(jī)的數(shù)量不僅遠(yuǎn)超過(guò)PC機(jī)和其他計(jì)算的綜合,甚至比人類的數(shù)量還要多。</p><p>  3.2.3 單片機(jī)AT89C51的特性</p><p>  AT89C系列單片機(jī)是ATMEL公司生產(chǎn)的一款標(biāo)準(zhǔn)型單片機(jī)。其中數(shù)字9表示內(nèi)含F(xiàn)lash存儲(chǔ)器,C表示C

73、MOS工藝。AT89C51是美國(guó)ATMEL公司生產(chǎn)的低電壓,高性能CMOS 8位單片機(jī),片內(nèi)含4k bytes的可反復(fù)擦寫的只讀程序存儲(chǔ)器(PEROM)和128 bytes的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM),器件采用ATMEL公司的高密度、非易失性存儲(chǔ)技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器(CPU)和Flash存儲(chǔ)單元,功能強(qiáng)大AT89C51單片機(jī)可為您提供許多高性價(jià)比的應(yīng)用場(chǎng)合,可靈活應(yīng)用于各種控制領(lǐng)域。<

74、/p><p><b>  1.主要性能參數(shù)</b></p><p>  與MCS-51產(chǎn)品指令系統(tǒng)完全兼容;4k字節(jié)可重擦寫Flash閃速存儲(chǔ)器;1000次擦寫周期;有10年數(shù)據(jù)保留時(shí)間;全靜態(tài)操作:0Hz-24MHz;三級(jí)加密程序存儲(chǔ)器;128×8字節(jié)內(nèi)部RAM;32個(gè)可編程I/O口線;2個(gè)16位定時(shí)/計(jì)數(shù)器;6個(gè)中斷源;可編程串行UART通道;低功耗空閑和掉

75、電模式;片內(nèi)振蕩器和時(shí)鐘電路[13]。</p><p>  AT89C51管腳圖如圖3-1所示。</p><p>  圖3-1 AT89C51單片機(jī)管腳圖</p><p><b>  2.功能引腳說(shuō)明</b></p><p><b>  VCC:電源電壓。</b></p><p&

76、gt;<b>  GND:接地。</b></p><p>  P0:P0口是一組8位漏極開(kāi)路型雙向I/O口,也即地址/數(shù)據(jù)總線復(fù)用口。作為輸出口用時(shí),每位能吸收電流的方式驅(qū)動(dòng)8個(gè)TTL邏輯門電路,對(duì)端口P0寫“1”時(shí),可作為高阻抗輸入端用。在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器或程序存儲(chǔ)器時(shí),這組口線分時(shí)轉(zhuǎn)換地址(低8位)和數(shù)據(jù)總線復(fù)用,在訪問(wèn)期間激活內(nèi)部上拉電阻。在FLASH編程時(shí),P0口接收指令字節(jié),而在

77、程序校驗(yàn)時(shí),輸出指令字節(jié),校驗(yàn)時(shí),要求外接上拉電阻。</p><p>  P1口:P1口是一個(gè)帶內(nèi)部上拉電阻的8位雙向I/O口,Pl口的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門電路。對(duì)端口寫“1”,通過(guò)內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口。作輸入口使用時(shí),因?yàn)閮?nèi)部存在上拉電阻某個(gè)引腳被外部信號(hào)拉低時(shí)會(huì)輸出一個(gè)電流ILL。Flash編程和程序校驗(yàn)期間,P1接收低8位地址。</p>

78、<p>  P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門電流,當(dāng)P2口被寫“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢(shì),當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫時(shí),P2口輸出其特殊功能

79、寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和控制信號(hào)。FLASH編程或校驗(yàn)時(shí),P2亦接收高位地址和一些控制信號(hào)。</p><p>  P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。</p><p> 

80、 P3口除了作為一般的I/0口線外,更重要的用途是它的第二功能,如下表所示:</p><p>  表3-2 引腳及其功能</p><p>  此外,P3口還接收一些用于FLASH閃速存儲(chǔ)器編程和程序校驗(yàn)的控制信號(hào)。</p><p>  RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器周期的高電平時(shí)當(dāng)8051通電,時(shí)鐘電路開(kāi)始工作,在RESET引腳上出現(xiàn)2

81、4個(gè)時(shí)鐘周期以上的高電平,系統(tǒng)即初始復(fù)位。初始化后,程序計(jì)數(shù)器PC指向0000H,P0-P3輸出口全部為高電平,堆棧指鐘寫入07H,其它專用寄存器被清“0”。RESET由高電平下降為低電平后,系統(tǒng)即從0000H地址開(kāi)始執(zhí)行程序。然而,初始復(fù)位不改變RAM(包括工作寄存器R0-R7)的狀態(tài),</p><p>  表3-3 8051的初始態(tài)</p><p>  ALE/PROG:當(dāng)訪問(wèn)外部程序

82、存儲(chǔ)器或數(shù)據(jù)存儲(chǔ)器時(shí),ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低8位字節(jié)。一般情況下,ALE仍以時(shí)鐘振蕩頻率的1/6輸出固定的脈沖信號(hào),因此它可對(duì)外輸出時(shí)鐘或用于定時(shí)目的。要注意的是:每當(dāng)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí)將跳過(guò)一個(gè)ALE脈沖。對(duì)Flash存儲(chǔ)器編程期間,該引腳還用于輸入編程脈沖(PROG)。如有必要,可通過(guò)對(duì)特殊功能寄存器(SFR)區(qū)中的8EH單元的D0位置位??山笰LE操作。該位置位后,只有一條MOVX和MOVC指令才能將A

83、LE激活,此外,該引腳會(huì)被微弱拉高,單片機(jī)執(zhí)行外部程序時(shí),應(yīng)設(shè)置ALE禁止位無(wú)效[14]。</p><p>  PSEN:程序儲(chǔ)存允許PSEN輸出是外部程序存儲(chǔ)器的讀選通信號(hào),當(dāng)AT89C51 由外部程序存儲(chǔ)器取指令(或數(shù)據(jù))時(shí),每個(gè)機(jī)器周期兩次PSEN有效,即輸出兩個(gè)脈沖。在此期間,當(dāng)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器,將跳過(guò)兩次PSEN信號(hào)。</p><p>  EA/VPP:當(dāng)/EA保持低電平時(shí),則

84、在此期間外部程序存儲(chǔ)器(0000H-FFFFH),不管是否有內(nèi)部程序存儲(chǔ)器。注意加密方式1時(shí),/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時(shí),此間內(nèi)部程序存儲(chǔ)器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。</p><p>  XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。</p><p>  XTAL1:來(lái)自反向振蕩器的輸出。</p>

85、<p>  3.振蕩器特性及芯片擦除</p><p>  AT89C5l 中有一個(gè)用于構(gòu)成內(nèi)部振蕩器的高增益反相放大器,引腳XTAL1 和XTAL2 分別是該放大器的輸入端和輸出端。這個(gè)放大器與作為反饋元件的片外石英晶體或陶瓷諧振器一起構(gòu)成自激振蕩器。</p><p>  整個(gè)PEROM陣列和三個(gè)鎖定位的電擦除可通過(guò)正確的控制信號(hào)組合,并保持ALE管腳處于低電平10ms來(lái)完成。在

86、芯片擦操作中,代碼陣列全被寫“1”且在任何非空存儲(chǔ)字節(jié)被重復(fù)編程以前,該操作必須被執(zhí)行。</p><p>  此外,AT89C51設(shè)有穩(wěn)態(tài)邏輯,可以在低到零頻率的條件下靜態(tài)邏輯,支持兩種軟件可選的掉電模式。在閑置模式下,CPU停止工作。但RAM、定時(shí)器、計(jì)數(shù)器、串口和中斷系統(tǒng)仍在工作。在掉電模式下,保存RAM的內(nèi)容并且凍結(jié)振蕩器,禁止所用其他芯片功能,直到下一個(gè)硬件復(fù)位為止。</p><p&g

87、t;  3.2.4 硬件電路圖</p><p>  PS/2鍵盤與AT89C51單片機(jī)的連接方式如圖4-2所示。P3.0接PS/2數(shù)據(jù)線;P3.2(INT0)接PS/2時(shí)鐘線。因?yàn)閱纹瑱C(jī)的P3口內(nèi)部是帶上拉電阻的,所以PS/2的時(shí)鐘線和數(shù)據(jù)線可以直接與單片機(jī)的P.0,P3.2相連接。</p><p>  圖3-2 PS/2鍵盤與單片機(jī)連接圖</p><p>  考慮

88、到時(shí)鐘脈沖信號(hào)總由鍵盤產(chǎn)生,因此,采用這種方案:鍵盤的CLOCK接主機(jī)的一外部中斷(INTO),數(shù)據(jù)線,接任一I/O口線(P3.0,為兼容用串口方式故接在RxD0上)。在數(shù)據(jù)線及時(shí)鐘線上加10K的大電阻上拉,試驗(yàn)中,首先使用最原始的查尋方式,即MCU在釋放總線控制權(quán)后(置CLOCK為高),一直查詢CLOCK狀態(tài),由圖3知鍵盤需要發(fā)送數(shù)據(jù)時(shí),取得總線控制權(quán),產(chǎn)生時(shí)鐘的下降沿,主機(jī)繼續(xù)查詢CLOCK當(dāng)檢測(cè)到下降沿,即從DATA讀入一個(gè)數(shù)據(jù),

89、循環(huán)往復(fù),直至接收完8位數(shù)據(jù)位,一個(gè)奇校驗(yàn)位,一個(gè)停止位。</p><p>  此種方式通過(guò)后,即在程序中改為CLOCK觸發(fā)產(chǎn)生中斷方式,即主機(jī)釋放總線控制權(quán)后,開(kāi)外部中斷,CLOCK下降沿產(chǎn)生中斷信號(hào),進(jìn)人中斷服務(wù)程序接收數(shù)據(jù),但此種方案的不足在于,中斷頻繁,耗費(fèi)資源??紤]到鍵盤與主機(jī)采用串行傳輸,類似于MCU的UART傳輸,故可DAT接MCU的RxD0這樣主機(jī)每接收到數(shù)據(jù)才中斷一次,減少了資源的耗費(fèi),不過(guò),鍵

90、盤等 PS/2設(shè)備一般工作在10-20kHz(依廠家設(shè)備不同),故要求主機(jī)與設(shè)備的波特率同步自適應(yīng),才能正確接收數(shù)據(jù)(波特率自適應(yīng)的實(shí)現(xiàn):鍵盤上電自檢時(shí)要發(fā)送狀態(tài)碼,利用時(shí)鐘脈沖的中斷,由定時(shí)器測(cè)量脈沖周期,可得時(shí)鐘頻率,從而得到波特率,實(shí)現(xiàn)波特率的自適應(yīng))</p><p>  3.3 軟件程序設(shè)計(jì)</p><p>  PS/2 104鍵盤驅(qū)動(dòng)程序主要任務(wù)是實(shí)現(xiàn)單片機(jī)與鍵盤鍵的PS/2通信

91、,同時(shí)將接受到的按鍵掃描碼轉(zhuǎn)換為該鍵盤的鍵值,提供給系統(tǒng)上層軟件使用。</p><p>  軟件流程圖如下圖3-3所示,驅(qū)動(dòng)及鍵盤碼的映射和部分按鍵服務(wù)程序由中斷服務(wù)程序完成,鍵盤鍵值通過(guò)全局變量傳遞給主程序,主程序只要查詢標(biāo)志位,當(dāng)有鍵按下時(shí),執(zhí)行相應(yīng)的程序,在這里,筆者完成了全拼的輸入法程序,并通過(guò)了試驗(yàn)驗(yàn)證。</p><p>  圖3-3 軟件設(shè)計(jì)流程圖</p><

92、;p>  3.3.1 單片機(jī)與鍵盤間的PS/2通信程序的設(shè)計(jì)</p><p>  在PS/2通信過(guò)程中,主設(shè)備(文中是單片機(jī))是在時(shí)鐘信號(hào)為低時(shí)發(fā)送和接收數(shù)據(jù)信號(hào)。因?yàn)閱纹瑱C(jī)向鍵盤發(fā)送的是指令,需要鍵盤回應(yīng),所以這部分程序采用查詢方式;而單片機(jī)接收鍵盤數(shù)據(jù)時(shí),數(shù)據(jù)線上的信號(hào)在時(shí)鐘為低時(shí)已經(jīng)穩(wěn)定,所以這部分程序采用中斷方式,且不需要在程序中加入延時(shí)程序。</p><p>  單片機(jī)向

93、PS/ 2 鍵盤發(fā)送數(shù)據(jù)程序代碼為:</p><p>  Void PS2_sent char(unsigned char sent char){ //PS/2主設(shè)備向從設(shè)備發(fā)送數(shù)據(jù)</p><p>  unsigned char sent bit_CNT= 0x00;</p><p>  unsigned char sent char_CHK = 0x00;&

94、lt;/p><p>  EX0=0; //關(guān)外部中斷0</p><p>  // 發(fā)起一個(gè)傳送 ,發(fā)起始位</p><p>  PS2_SGN_CLOCK = 0; //將時(shí)鐘線拉低并保持100微妙</p><p>  delay1

95、00us();</p><p>  PS2_SGN_DATA=0;//起始位</p><p>  PS2_SGN_CLOCK=1;</p><p>  // 發(fā)送DATA 0-7</p><p>  for(sent bit_CNT=0;sent bit_CNT< 8;sent bit_CNT++) {</p><p

96、>  while(PS2_SGN_CLOCK)_NOP_(); //等待時(shí)鐘線變?yōu)榈?lt;/p><p>  PS2_SGN_DATA=sent char & 0x01; //發(fā)送數(shù)據(jù)</p><p>  if (PS2_SGN_DATA) sent char_CHK+ +; //計(jì)算校驗(yàn)</p><p>  while

97、 (! PS2_SGN_CLOCK)_NOP_(); //等待時(shí)鐘線變高</p><p>  Sent char>>=1; //待發(fā)送數(shù)據(jù)右移一位</p><p><b>  }</b></p><p><b>  // 發(fā)送校驗(yàn)位</b></p>

98、<p>  while (PS2_SGN_CLOCK)_NOP_(); //等待時(shí)鐘線變低</p><p>  switch (sent char_CNK) {</p><p><b>  case 0 :</b></p><p><b>  case 2 :</b></p><p&

99、gt;<b>  case 4 :</b></p><p>  case 6 : PS2_SGN_DATA =1;break; //奇校驗(yàn)</p><p><b>  case 1 :</b></p><p><b>  case 3 :</b></p><p><

100、;b>  case 5 :</b></p><p>  case 7 :PS2_SGN_DATA = 0;break; //奇校驗(yàn)</p><p>  default :break;</p><p><b>  }</b></p><p>  while (!PS2_SGN_CLOCK)_NOP

101、_(); //等待時(shí)鐘線變高</p><p>  while ( PS2_SGN_CLOCK)_NOP_(); //等待時(shí)鐘線變低</p><p>  PS2_SGN_DATA=1; //發(fā)送停止位停止位總為1</p><p>  while (! PS2_SGN_CLOCK)_NOP_(); //等

102、待時(shí)鐘線變高</p><p>  while (PS2_SGN_CLOCK)_NOP_(); //等待時(shí)鐘線變低</p><p><b>  //接收 ACK</b></p><p>  //if (PS2_SGN_DATA) error () ;</p><p>  //ACK信號(hào)由鍵盤發(fā)出 ,總為低電平&

103、lt;/p><p>  while(!PS2_SGN_CLOCK)_NOP_(); //等待時(shí)鐘線變高</p><p>  EX0=1; //開(kāi)外部中斷0</p><p><b>  }</b></p><p>  單片機(jī)由PS/2鍵盤接收數(shù)據(jù)程序:外

104、部中斷0設(shè)置為下降沿觸發(fā)</p><p>  void int0()interrupt 0 using 0{</p><p>  EX0=0; //關(guān)外部中斷 0</p><p>  switch(PS2_rev char_CNT) {</p><p><b>  case

105、 1:</b></p><p><b>  …</b></p><p>  case 8:MCU_rev char<<=1 ;</p><p>  if (PS2_SGN_DATA) MCU_rev char= 0x01 ;</p><p>  ps2_rev char_CNT++;</p&

106、gt;<p><b>  Break;</b></p><p>  Case 0: PS2_rev char_CNT + +;break;//開(kāi)始位,</p><p>  Case 9 : PS2_rev char_CNT+ +;break;//校驗(yàn)位,可添加校驗(yàn)程序</p><p>  Case 10 : _NOP_ ();

107、 //停止位</p><p>  PS2_rev char_NOP=0;</p><p>  Rev char_flag=1; //置接收到數(shù)據(jù)標(biāo)識(shí)位</p><p><b>  Break;</b></p><p>  default:break;</p>

108、<p><b>  }</b></p><p>  EX0=1; //開(kāi)外部中斷 0</p><p><b>  }</b></p><p>  3.3.2 鍵盤鍵盤初始化程序</p><p>  (1)上電后,接收鍵盤上電自檢通過(guò)

109、信號(hào)0xAA,或者自檢出錯(cuò)信號(hào)0xFC。單片機(jī)接收為0xAA則進(jìn)入下一步,否則進(jìn)行出錯(cuò)處理;</p><p> ?。?)關(guān)LED指示,單片機(jī)發(fā)送0xED,然后接收鍵盤回應(yīng),0xFA,接著發(fā)送0x00接收 0xFA;</p><p> ?。?)設(shè)置機(jī)打延時(shí)和速率:?jiǎn)纹瑱C(jī)發(fā)送0xF3,接收0xFA,發(fā)送0x00(250ms ,2.0 cps),接收0xFA;</p><p&

110、gt; ?。?)檢查L(zhǎng)ED,發(fā)送0xED,接收0xFA,發(fā)送0x07(開(kāi)所有LED),接收0xFA,發(fā)送0xED,接收0xFA,發(fā)送0x00(關(guān)LED),接收0xFA;</p><p> ?。?)允許鍵盤,發(fā)送0xF4,接收0xFA。鍵盤LED改變ps2_led change()函數(shù)流程:發(fā)送0xED;接收0xFA;發(fā)送led_stat us;接收0xFA;</p><p><b&g

111、t;  3.4 本章小結(jié)</b></p><p>  本章節(jié)主要敘述了PS/2鍵盤接口的軟硬件的實(shí)現(xiàn)。對(duì)本次課題主要用到的AT89C51進(jìn)行了詳細(xì)的介紹。從性能參數(shù)到引腳說(shuō)明再到它的振蕩特性都進(jìn)行了詳細(xì)的解釋,單片機(jī)與鍵盤鍵的PS/2通信程序的編程設(shè)計(jì)也很詳細(xì)。在硬件方面更是給出了元器件間的電子連接圖,并對(duì)用到的引腳進(jìn)行了解釋說(shuō)明。</p><p>  第4章 PS/2鼠標(biāo)接口

112、設(shè)計(jì)</p><p>  4.1 PS/2鼠標(biāo)接口特性</p><p>  PS/2鼠標(biāo)與主機(jī)接口遵循雙向異步串行通信協(xié)議。PS/2鼠標(biāo)在時(shí)鐘信號(hào)的作用下串行發(fā)送或者接受數(shù)據(jù)。</p><p>  4.1.1 輸入、分辨率和縮放比例</p><p>  標(biāo)準(zhǔn)的PS/2鼠標(biāo)支持下面的輸入:X(左右)位移,Y(上下)位移,左鍵,中鍵和右鍵。鼠標(biāo)以

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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)論