簡(jiǎn)易蘋(píng)果機(jī)的設(shè)計(jì)(軟件部分)
《簡(jiǎn)易蘋(píng)果機(jī)的設(shè)計(jì)(軟件部分)》由會(huì)員分享,可在線閱讀,更多相關(guān)《簡(jiǎn)易蘋(píng)果機(jī)的設(shè)計(jì)(軟件部分)(47頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、簡(jiǎn)易蘋(píng)果 機(jī)的設(shè)計(jì)(軟件部分) 摘 要 IT行業(yè)飛速發(fā)展的今天,單片機(jī)在測(cè)控和低速信號(hào)處理等方面的應(yīng)用越來(lái)越廣泛。由于單片機(jī)采用大規(guī)模集成電路器件,集成度極高,因而具有結(jié)構(gòu)緊湊、功能強(qiáng)、體積小、可靠性高、面向控制和價(jià)格低廉等一系列優(yōu)點(diǎn),特別適合于控制型應(yīng)用領(lǐng)域。基于PIC的單片機(jī)系統(tǒng)具有體積小、成本低、易維護(hù)、性能穩(wěn)定等特點(diǎn),得到了越來(lái)越多的應(yīng)用。本文重點(diǎn)闡述了基于PIC16F877單片機(jī)的蘋(píng)果機(jī)系統(tǒng)的軟件設(shè)計(jì),首先對(duì)系統(tǒng)要求進(jìn)行了分析,設(shè)計(jì)了系統(tǒng)的總體框架。以匯編語(yǔ)言為工具,進(jìn)行了詳細(xì)設(shè)計(jì)和編碼。采用了HD7279 為驅(qū)動(dòng)的44 鍵盤(pán)和LED數(shù)碼顯示管以及揚(yáng)聲器
2、組成良好的“人機(jī)對(duì)話”模塊,實(shí)現(xiàn)了音樂(lè)播放功能。 關(guān)鍵詞: PIC 音樂(lè)播放 HD7279 II 簡(jiǎn)易蘋(píng)果機(jī)的設(shè)計(jì)(軟件部分) Abstract Because of its small size, functionality, low price, Single-Chip Microcomputer has been widely applied. In addition, the single-chip control System is more flexible than analog control; Second, it has high re
3、liability due to fewer components, digital signal processing; Third, it can set the parameter simply, and makes the system testing convenient. Therefore, the single-chip control system is very suitable for control systems of application areas. In this paper the software design of apple_ game play
4、er ,which was design Based on the design with the PIC16F877 MCU is mainly explained. Requirement of the system have been analyzed firstly. The general aim of the soft ware system is to realize reliability stability safety and economization. Then have designed the whole frame work of the system. At l
5、ast the author makes full use of assemble language to implement the detailed design and coding. Moreover it adopts the HD7279 as the driver of 44keyboards and the LG5641AH LED and the loud speaker which holds the excellent part of man-machine conversation and carries out the function of music play
6、ing. Key words: PIC ,music playing,HD7279 目 錄 IV 第一章 前 言 1 第二章 系統(tǒng)設(shè)計(jì)方案分析 2 2.1 課題待解決的問(wèn)題 2 2.2 總體設(shè)計(jì)方案 2 2.3 工作流程分析 2 2.4 設(shè)計(jì)具體方案 3 第三章 PIC 單片機(jī)基礎(chǔ) 4 3.1 I/O 口介紹 4 3.2 關(guān)于 BANK 和 PAGE 的概念 5 3.3 定時(shí)器/計(jì)數(shù)器 6 3.3.1 定時(shí)器的 3 大用途 7 3.3.2 相關(guān)寄存器介紹 7 3.4 中斷系統(tǒng): 8 3.4.1 中斷活動(dòng)的 9 個(gè)階段 9 3.4.2 PI
7、C16F877 的中斷邏輯 9 3.4.3 中斷處理 10 3.4.4 中斷的優(yōu)先級(jí)控制 10 3.5.5 中斷的現(xiàn)場(chǎng)保護(hù) 11 3.5.6 幾種常用的中斷 11 3.5.7 使用中斷時(shí)需要注意的一些問(wèn)題 14 3.5 軟件延時(shí)程序的設(shè)計(jì) 15 3.5.1 三類(lèi)指令的執(zhí)行時(shí)間 15 3.5 .2 延時(shí)軟件的設(shè)計(jì)方案實(shí)例 16 3.6 查表程序設(shè)計(jì) 16 第四章 各子模塊的實(shí)現(xiàn)及其說(shuō)明 21 4.1 鍵盤(pán)顯示處理 HD7279 21 4.2 顯示譯碼芯片 MAX7219 29 4.2.1 管腳描述 29 4.2.2 典型應(yīng)用 30 4.3 音樂(lè)播放子程序 33 4
8、.3.1 音樂(lè)播放發(fā)聲的原理 33 4.3.2 音樂(lè)播放的實(shí)現(xiàn)過(guò)程 34 4.4 E2PROM 擴(kuò)展及 I2C 總線協(xié)議 41 第五章 結(jié)束語(yǔ) 42 參 考 文 獻(xiàn) 43 致 謝 44 第一章 前 言 單片機(jī)自問(wèn)世以來(lái),以其極高的性能價(jià)格比,受到人們的重視和關(guān)注,應(yīng)用很廣,發(fā)展很快。單片機(jī)體積小,重量輕,抗干擾能力強(qiáng),環(huán)境要求不高,價(jià)格低廉, 可靠性高,靈活性好,開(kāi)發(fā)較為容易。由于具有上述優(yōu)點(diǎn),在我國(guó),單片機(jī)已廣泛地應(yīng)用在工業(yè)自動(dòng)化控制、自動(dòng)檢測(cè)、智能儀器儀表、家用電器、電力電子、機(jī)電一體化設(shè)備等各個(gè)方面。它可以應(yīng)用于產(chǎn)品的內(nèi)部取代部分老式機(jī)械,電子零件或元器件,可使
9、產(chǎn)品縮小體積,增強(qiáng)功能,實(shí)現(xiàn)不同程度的智能化。單片機(jī)的應(yīng)用從根本上改變著傳統(tǒng)的控制系統(tǒng)設(shè)計(jì)思想和設(shè)計(jì)方法,已成為現(xiàn)代機(jī)械電子工程,制動(dòng)控制等相關(guān)專(zhuān)業(yè)知識(shí)結(jié)構(gòu)中必不可少的一部分。 單片機(jī)應(yīng)用的意義不僅僅在限于它的廣闊范圍以及所帶來(lái)的經(jīng)濟(jì)效益,更重要的還在于它從根本上改變了傳統(tǒng)的控制系統(tǒng)設(shè)計(jì)思想和設(shè)計(jì)方法。從前必須由模擬電路或數(shù)字電路實(shí)現(xiàn)的大部分控制功能,現(xiàn)在已能使用單片機(jī)通過(guò)軟件方法來(lái)實(shí)現(xiàn)了。這種以軟件取代硬件并能提高系統(tǒng)性能的控制技術(shù)稱(chēng)為微控制技術(shù)。微控制技術(shù)標(biāo)志著一種全新的概念,隨著單片機(jī)應(yīng)用的推廣普及,微控制技術(shù)將不斷發(fā)展和日趨完善,而單片機(jī)的應(yīng)用則將更加深入,更加廣泛。換而言之,單片機(jī)
10、的應(yīng)用是對(duì)傳統(tǒng)控制技術(shù)的一場(chǎng)革命。因此學(xué)習(xí)單片機(jī)的原理,掌握好單片機(jī)的應(yīng)用技術(shù)是現(xiàn)代工科類(lèi)學(xué)生必備的基本素質(zhì)。 單片機(jī)在近30年發(fā)展中已有70多個(gè)系列的進(jìn)500多個(gè)機(jī)種相繼誕生,國(guó)際比較知名,影響比較大的公司的單片機(jī)有:MOTOROLA公司的MOTOROLA單片機(jī),INTEL 公司的51系列單片機(jī),MICROCHIP公司的PIC系列單片機(jī),ZILOG公司的Z8系列單片機(jī),以及NEC,富士通,EPSON等其它品牌。其中美國(guó)Microchip公司推出的PIC8 位單片機(jī)系列是業(yè)內(nèi)首先采用RISC結(jié)構(gòu)的高性?xún)r(jià)比嵌入式控制器,其高速度、低電壓工作、低功耗、強(qiáng)大驅(qū)動(dòng)能力、低價(jià)OTP技術(shù)、體積小巧等都體
11、現(xiàn)了單片機(jī)工業(yè)的新趨勢(shì)。 PIC系列單片機(jī)是一種采用精簡(jiǎn)指令集RSIC結(jié)構(gòu)的易學(xué)易用,輸入/輸出靈活多樣,功能強(qiáng)大的單片機(jī)。PIC中檔產(chǎn)品,是近年來(lái)重點(diǎn)發(fā)展的系列產(chǎn)品,品種最為豐富,性能優(yōu)于初級(jí)產(chǎn)品,增加了中斷功能,帶A/D轉(zhuǎn)換器,內(nèi)部EEPROM數(shù)據(jù)存儲(chǔ)器,與程序存儲(chǔ)器FLASH,有比較/捕獲/脈寬調(diào)制CCP模塊,IIC和SPI接口, 通用同步異步接收發(fā)送器USART,模擬電壓比較器,及LCD驅(qū)動(dòng)等,性能價(jià)格比高, 可廣泛用于高,中檔各類(lèi)電子產(chǎn)品設(shè)計(jì)中,是很值得學(xué)習(xí)和掌握的一種單片機(jī)。 43 第二章 系統(tǒng)設(shè)計(jì)方案分析 2.1 課題待解決的問(wèn)題: 整體實(shí)現(xiàn)簡(jiǎn)易蘋(píng)果
12、機(jī)的軟件設(shè)計(jì),熟悉 PIC 單片機(jī)的硬件資源,熟悉基本的控制接口電路,掌握單片機(jī)的串并行通信方式,以及端口拓展的方法。能夠通過(guò)認(rèn)真的分析設(shè)計(jì)要求,選擇最簡(jiǎn)單,經(jīng)濟(jì),穩(wěn)定的方案實(shí)現(xiàn)該設(shè)計(jì)。從整體上提高控制電路的設(shè)計(jì)水平。 2.2 總體設(shè)計(jì)方案: 簡(jiǎn)易蘋(píng)果機(jī)的整體系統(tǒng)大致可以分為以下幾個(gè)模塊:游戲的鍵盤(pán)輸入部分, 輸入幣值,及獲獎(jiǎng)分值等的顯示部分,音樂(lè)播放部分,存儲(chǔ)空間的擴(kuò)展部分,以及對(duì)數(shù)據(jù)進(jìn)行一系列預(yù)算處理的中央處理單元。如圖 2.2 所示: 圖 2.1 總體設(shè)計(jì)框圖 2.3 工作流程分析: 1) 電源開(kāi)啟,播放開(kāi)啟音樂(lè),三個(gè)分值顯示數(shù)碼官狀態(tài)為 EEE,三個(gè)中獎(jiǎng)顯示數(shù)
13、碼管狀態(tài)也為 EEE,其他 8 個(gè)投注顯示數(shù)碼管狀態(tài)也均為E。 2) 游戲未開(kāi)始前,顯示燈呈現(xiàn)跑馬燈狀態(tài),并能播放等候操作音樂(lè)。 3) 玩家投幣,等候音樂(lè)停止,顯示燈全部熄滅,同時(shí),分值顯示數(shù)碼管顯示出相應(yīng)分?jǐn)?shù),投幣一次,揚(yáng)聲器發(fā)聲一次。(或由莊家開(kāi)啟注入分值按鍵)。投注顯 示和中獎(jiǎng)顯示清 0。 4) 游戲開(kāi)始,玩家通過(guò)投注按鍵進(jìn)行投注,短按投注顯示加 1,長(zhǎng)按則迅速增加(每秒加 3)。投注完畢,可按下啟動(dòng)按鈕,開(kāi)始游戲,顯示燈循環(huán)點(diǎn)亮,經(jīng)過(guò) 5 秒,老虎機(jī)顯示停留在相應(yīng)位置,顯示中獎(jiǎng)分?jǐn)?shù)。同時(shí)投注顯示數(shù)碼管未壓中的數(shù)碼管全部熄滅。 5) 玩家可通過(guò)按鍵(TURN)將分?jǐn)?shù)直接
14、轉(zhuǎn)至投幣分值顯示,也可按 EXIT 鍵將分值轉(zhuǎn)成硬幣通過(guò)退幣口退出(不足已退幣分值自動(dòng)加到投幣顯示區(qū)顯示)。 6) 此時(shí),若分值顯示區(qū)顯示值高于上輪投注分值,可直接按開(kāi)始鍵(play),重復(fù)剛才下注,開(kāi)始新一輪游戲。也可以重新下注,開(kāi)始新游戲。 7) 玩家結(jié)束游戲,可按 Exit 鍵將分值折合成硬幣后退出。播放待機(jī)音樂(lè)。 2.4 設(shè)計(jì)具體方案: 1 中央處理單元:通過(guò)對(duì)系統(tǒng)的性能和成本各方面進(jìn)行整體分析,使用單片機(jī)來(lái)做處理器是最合理的方案。在總類(lèi)繁多的單片機(jī)中,PIC16F877 單片機(jī)有以下優(yōu)越之處,是最適合本設(shè)計(jì)。采用哈佛體系結(jié)構(gòu)和哈佛總線結(jié)構(gòu),指令單字節(jié)化, 精簡(jiǎn)指令集(
15、RISC)技術(shù),尋址方式簡(jiǎn)單,運(yùn)行速度高,功耗低,驅(qū)動(dòng)能力強(qiáng),I2C 和 SPI 串行總線端口,尋址空間設(shè)計(jì)簡(jiǎn)潔,外接電路簡(jiǎn)潔,開(kāi)發(fā)方便。 2 鍵盤(pán)部分:使用 HD7279 芯片對(duì)鍵盤(pán)輸入進(jìn)行譯碼處理,并且該芯片可以直接驅(qū)動(dòng) LED 數(shù)碼管顯示。 3 顯示部分:使用 MAX7219 芯片,LED 數(shù)碼顯示管,八個(gè)發(fā)光二極管。 4 音樂(lè)播放部分:只需通過(guò)一個(gè)音頻放大器再外接一個(gè)揚(yáng)聲器。 圖 2.2 具體設(shè)計(jì)框圖 第三章 PIC 單片機(jī)基礎(chǔ) 3.1 I/O 口介紹: 輸入輸出端口(也簡(jiǎn)稱(chēng)為 I/O 口)是單片機(jī)內(nèi)部電路與外部世界交換信息的通道。輸入端口負(fù)責(zé)
16、從外界接收檢測(cè)信號(hào),鍵盤(pán)信號(hào)等各種開(kāi)關(guān)量信號(hào)。輸出端口負(fù)責(zé)向外界輸送由內(nèi)部電路產(chǎn)生的處理結(jié)果,顯示信息,控制命令,驅(qū)動(dòng)信號(hào)等。 在 PIC16F87X 系列單片機(jī)中 28 腳封裝的型號(hào)具有 3 個(gè)輸入輸出端口,40 腳封裝的PIC16F87X 系列都有 5 個(gè)輸入 / 輸出端口。由于 PIC16F87X 屬于 8 位單片機(jī),因此每個(gè)端口都由數(shù)量不超過(guò) 8 條的端口引腳(或稱(chēng)口線)構(gòu)成。每個(gè)端口中的每條引腳都可以用軟件的方式,由用戶(hù)按需要單獨(dú)編程,設(shè)定為輸出引腳或者輸入引腳。 28 腳 PIC16F87X 的 3 個(gè)端口,分別是 RA,RB,和 RC;40 腳 PIC16F87X 的 5
17、個(gè)端口,分別是RA,RB,RC,RD 和 RE。RA 包含 6 根引腳,RE 包含 3 根引腳, RB,RC,RD 都包含 8 根引腳。其中有些 I/O 口引腳和單片機(jī)內(nèi)部的某些功能部件或(I/O 模塊之外)其他外圍模塊的外接引腳信號(hào)線進(jìn)行了復(fù)用。也就是說(shuō),既可以作為普通的I/O 引腳,又可以作為某些功能部件或外圍模塊的外接引腳,并由用戶(hù)以軟件的方式定義。 圖 3.1 PIC16877 管腳分部圖 在 PIC 單片機(jī)中,每個(gè)端口都至少對(duì)應(yīng)著兩個(gè)在 RAM 數(shù)據(jù)存儲(chǔ)器中統(tǒng)一編址的寄存器,分別是數(shù)據(jù)寄存器和方向控制寄存器。也就是 PIC 單片機(jī)把端口都當(dāng)作寄存器來(lái)訪問(wèn)(即讀出或
18、寫(xiě)入),這樣有利于減少指令集的指令類(lèi)型和數(shù)量,為用戶(hù)的記憶和編程也帶來(lái)了方便。 例:初始化,使C 口為輸出,B 口為輸入 BSF STATUS , RP0 ;設(shè)置文件寄存器的體一 MOVLW 00H MOVWF TRISC ;設(shè)置端口 C 為輸出 MOVLW 0FFH MOVWF TRISB ;設(shè)置端口 B 為輸入 BCF STATUS , RP0 ;恢復(fù)到文件寄存器的體 0 3.2 關(guān)于 BANK 和 PAGE 的概念: 在指令編碼中,只有最低的 7 位數(shù)據(jù)代表了尋址操作數(shù)的地址,位操作也不例外。7 位地址只能描述
19、的空間范圍為 128 字節(jié),因此,通過(guò)指令能直接尋址的范圍只有 0X00~0X7F 的 128 字節(jié)空間,PIC 中檔單片機(jī)結(jié)構(gòu)能支持的數(shù)據(jù)空間尋址范圍為 512 字節(jié),這需要 9 位的地址描述。所以要能尋址這 512 字節(jié)全地址空 間,就必須找一個(gè)方法提供額外的兩個(gè)地址位,用完整的 9 位地址來(lái)尋址。PIC 中檔系列的單片機(jī)就利用了 STATUS 狀態(tài)寄存器的 RP1 和 RP0 這兩個(gè)位 來(lái)實(shí)現(xiàn)這“額外”的尋址地址位。按照 7 位地址所描述的 128 字節(jié)為一個(gè) BANK 的劃分,PIC16F877 被分為4 個(gè)BANK,分別冠以BANK0~3。下表為STATUS 中RP0:RP1和各
20、 BANK 之間的對(duì)應(yīng)關(guān)系。 表 3.1 BNAK 和 STATUS 的對(duì)應(yīng)關(guān)系 RP1:RP0 BANK 的編號(hào) 0 0 BANK 0 0 1 BANK 1 1 0 BANK 2 1 1 BANK 3 例:寄存器直接尋址的 BANK 設(shè)定 BSF STATUS , RP0 ;RP0=1 BCF DATUS , RP1 ;RP1=0 ,當(dāng)前 BANK 設(shè)定于 BANK1 CLRF TRISB BCF STATUS , RP0 ;RP0=0,回到 BANK0 MOVLW 0XFF MOVWF PORTB 如果 PIC 單片機(jī)內(nèi)只有兩個(gè)
21、BANK 空間的數(shù)據(jù)寄存器,那么直接尋址時(shí) RP1 位將被視為無(wú)效位,不參與尋址時(shí)的地址合成,編程時(shí)只需簡(jiǎn)單的設(shè)定 RP0 即可。 同理,在 PIC 單片機(jī)的 35 條指令當(dāng)中,只有 CALL 和 GOTO 兩條為直接跳轉(zhuǎn)指令。這兩條指令有一個(gè)共同點(diǎn),即在指令中有 11 個(gè)數(shù)據(jù)位描述了跳轉(zhuǎn)的目的 地址。這 11 位長(zhǎng)的地址所能描述的空間范圍是 2048 字。PIC 中檔系列單片機(jī)結(jié)構(gòu)能支持的程序空間最大有 8K 字代碼長(zhǎng)度,要尋址 8K 字的范圍必須有 13 位的地址。如果這 13 位地址數(shù)據(jù)全部在指令中描述的話,那么只有 1 一位代表操作碼,這樣的編碼方式是行不通的。為此 PIC 單片機(jī)
22、采取了與數(shù)據(jù)寄存器類(lèi)似的方法:對(duì)程序空間分頁(yè),每頁(yè)長(zhǎng)度位 2K 指令字,最多 4 個(gè)頁(yè)面。跳轉(zhuǎn)指令自身提供 11 位地址,高兩位地址來(lái)自特殊寄存器 PCLATH 的位 4:3.當(dāng)執(zhí)行 CALL 和 GOTO指令時(shí)單片機(jī)的指令執(zhí)行機(jī)構(gòu)會(huì)自動(dòng)把二者合在一起,構(gòu)成 13 位的完整地址一次送入程序計(jì)數(shù)器 PC 中,程序隨之跳轉(zhuǎn)到新的指令位置繼續(xù)執(zhí)行。PCLATH[4:3 ] 兩位的組合構(gòu)成了單片機(jī)程序頁(yè)面的編號(hào),如表 3.3 所示: 表 3.2 PAGE 與 PCLATH 的關(guān)系 PCLATH[4:3] 頁(yè)編號(hào) 起止地址 0 0 第 0 頁(yè) 0X0000~0X07FF 0 1
23、 第 1 頁(yè) 0X0800~0X0FFF 1 0 第 2 頁(yè) 0X1000~0X17FF 1 1 第 3 頁(yè) 0X1800~0X1FFF 3.3 定時(shí)器/計(jì)數(shù)器 在許多世界著名的半導(dǎo)體制造公司開(kāi)發(fā)的型號(hào)繁多的單片機(jī)內(nèi)部,定時(shí)器/ 計(jì)數(shù)器模塊是一種基本上普遍配置的常用外圍設(shè)備模塊,只是配備的數(shù)量和規(guī)格不同而已。其中,規(guī)格的不同指的是:寬度不同。是否附帶預(yù)分頻器,是否附帶后分頻器,是否同時(shí)附帶預(yù)分頻器和后分頻器,以及預(yù)分頻器或后分頻器的分頻比不同,等等。 3.3.1 經(jīng)過(guò)歸納和比較定時(shí)器一般有一下 3 大用途: (1) 在一些單片機(jī)應(yīng)用項(xiàng)目中,有時(shí)要求單片
24、機(jī)在其端口引腳,向外部電路送出一系列符合一定時(shí)序規(guī)范的方波信號(hào)。在本設(shè)計(jì)中的音樂(lè)功能部分就是利用此功能向揚(yáng)聲器送出特定頻率的方波信號(hào),使揚(yáng)聲器播放出不同的音符。 (2) 在另外一些應(yīng)用項(xiàng)目中,經(jīng)常要求單片機(jī)在其引腳上,檢測(cè)外部電路送來(lái)的一系列的方波信號(hào)的脈寬,周期或頻率,以便單片機(jī)接收外部電路的輸入信號(hào)或通信信號(hào)。例如:遙控電視機(jī)中的紅外遙控信號(hào)的接收,速度里程表中的轉(zhuǎn)速檢測(cè),等等。這類(lèi)應(yīng)用程序的編寫(xiě),會(huì)用定時(shí)器來(lái)對(duì)“事先未知”的時(shí)間間隔進(jìn)行精確計(jì)時(shí)。 (3) 還有一些單片機(jī)應(yīng)用項(xiàng)目中,須要單片機(jī)對(duì)其端口引腳上輸入的由外部事件產(chǎn)生的觸發(fā)信號(hào)進(jìn)行準(zhǔn)確的計(jì)數(shù),依據(jù)計(jì)數(shù)結(jié)果來(lái)控制完成相應(yīng)的動(dòng)作。
25、 由于單片機(jī)的型號(hào)不同,定時(shí)器的數(shù)量是不同的。例如:PIC116F84 只有兩個(gè)定時(shí)器,而16F877 有三個(gè)定時(shí)器。而且16F877 的三個(gè)定時(shí)TMR0 ,TMR1,TMR2 這三個(gè)定時(shí)/計(jì)數(shù)模塊的電路結(jié)構(gòu)上均不相同。 TMR0:為 8 位寬,有一個(gè)可選的預(yù)分頻器,用于通用的目的; TMR1:為 16 位寬,附帶一個(gè)可編程的預(yù)分頻器,還附帶一個(gè)可選的低頻時(shí)基振蕩器,適合 CCP(捕捉\比較\脈寬調(diào)制)模塊配合使用來(lái)實(shí)現(xiàn)輸入捕捉或輸出比較功能; TMR2:為 8 位寬,同時(shí)附帶一個(gè)可編程的預(yù)分頻器和一個(gè)可編程的后分頻器, 還附帶一個(gè)周期寄存器和比較器,適合與 CCP 模塊配合使用來(lái)實(shí)現(xiàn)
26、PWM 脈沖寬度調(diào)制信號(hào)的產(chǎn)生。 但是它們之間也有相同點(diǎn),它們的核心部分都是一個(gè)由時(shí)鐘信號(hào)觸發(fā)的按遞增規(guī)律(即累加工作方式)工作的循環(huán)計(jì)數(shù)器;都是從預(yù)先設(shè)定的某一初始值(或0)開(kāi)始記起,在累積超過(guò)最大值(或預(yù)先設(shè)定的某一終了值)時(shí)產(chǎn)生溢出,并且同時(shí)會(huì)建立一個(gè)相應(yīng)的溢出標(biāo)志(即中斷標(biāo)志位);對(duì)于它們的編程方法也大同小異。 3.3.2 幾個(gè)起到控制作用的相關(guān)寄存器介紹: 1.選項(xiàng)寄存器 OPTION_REG BIT7 BIT6 BIT5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 RBPU INTEDG T0CS T0SE PSA PS2 P
27、S1 PS0 PS2~PS0:分頻器分頻比選擇位 PSA:分頻器分配位。 1=分配給 WDT 0=分配給 TMR0 TOSE:TMR0 的時(shí)鐘源觸發(fā)邊沿選擇位。1=外部時(shí)鐘 T0CKI 下降沿 TMR0 遞增0=外部時(shí)鐘 T0CKI 上升沿 TMR0 遞增 TOCS:TMR0 的時(shí)鐘選擇位。 1=外部引腳輸入的脈沖信號(hào)作為計(jì)數(shù)器的時(shí)鐘源 BIT7 BIT6 BIT5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 GIE PEIE TOIE INTE RBIE TOIF INTF RBIF 0=由內(nèi)部提供的指令周
28、期信號(hào)作為時(shí)中源。中斷控制寄存器:INTCON 有關(guān)的各位的含義如下: T0IF:TMR0 溢出標(biāo)志位 1=TMR0 發(fā)生溢出 0= TMR0 未發(fā)生溢出 T0IE:TMR0 溢出中斷使能位 1= 允許 TMR0 發(fā)生溢出后產(chǎn)生中斷 0= 屏蔽 TMR0 發(fā)生溢出后產(chǎn)生中斷 GIE:全局中斷總使能位 1=允許 CPU 響應(yīng)所有的外圍設(shè)備模塊產(chǎn)生的中斷請(qǐng)求 0= 禁止 CPU 響應(yīng)所有的外圍設(shè)備模塊產(chǎn)生的中斷請(qǐng)求 3.4 中斷系統(tǒng): 中斷,是計(jì)算機(jī)理論和計(jì)算機(jī)技術(shù)中很重要的一個(gè)概念,是提高計(jì)算機(jī)工作效率的一項(xiàng)重要功能,以至于中斷功能是所有的微
29、處理器(CPU 和 MPU) 和微控制器(MCU,μ C 或單片機(jī))幾乎都會(huì)配置的一項(xiàng)基本功能。中斷功能的強(qiáng)弱已經(jīng)構(gòu)成了衡量一種微處理器和微控制器的功能是否強(qiáng)大的重要指標(biāo)之一。 當(dāng)計(jì)算機(jī)系統(tǒng)正在執(zhí)行程序時(shí),出現(xiàn)了某種特殊情況,例如定時(shí)時(shí)間到,有鍵盤(pán)信號(hào)輸入等,此時(shí) CPU 需要暫時(shí)停止當(dāng)前的程序,轉(zhuǎn)去執(zhí)行處理定時(shí)時(shí)間到或鍵盤(pán)信號(hào)輸入等情況的某特定程序,待這段特定的程序執(zhí)行完畢以后,再回 到原先的程序去執(zhí)行,這就形成了一次中斷過(guò)程。 3.4.1 中斷活動(dòng)的全過(guò)程大致可以歸納成一下 9 個(gè)階段: (1) 中斷請(qǐng)求 (2) 中斷屏蔽 (3) 中斷響應(yīng) (4) 保護(hù)現(xiàn)場(chǎng)
30、 (5) 調(diào)查中斷源 (6) 中斷處理 (7) 清除標(biāo)志 (8) 恢復(fù)現(xiàn)場(chǎng) (9) 中斷返回 上述的九個(gè)階段中,第 1,2,3 和 9 階段是由硬件自動(dòng)實(shí)現(xiàn)的,而第 4,5, 6,7,8 階段則是用戶(hù)軟件完成的。 PIC 系列單片機(jī)是當(dāng)今世界上很有影響力的精簡(jiǎn)指令微控制器,具有豐富的中斷功能,其中功能強(qiáng)大的中,高檔型號(hào)的中斷源有 18 種之多。(但是具體型號(hào)不同中斷源的個(gè)數(shù)也存在著差異)。不過(guò)它們也存在著一定的局限性,例如:中斷矢量只有一個(gè),并且各個(gè)中斷源之間也沒(méi)有優(yōu)先級(jí)別之分,不具備非屏蔽中斷。 3.4.2 PIC16F877 的中斷邏輯: 圖 3.2 PIC 16F88
31、7 的中斷邏輯圖 所有的中斷源都受全局中斷屏蔽位(也可稱(chēng)為總屏蔽位)GIE 的控制;第一隊(duì)的中斷源不僅受全局中斷屏蔽位的控制,還要受各自中斷屏蔽位的控制;第二 隊(duì)的中斷源不僅受到全局中斷屏蔽位和各自中斷屏蔽位的控制,還要額外多收到一個(gè)外設(shè)中斷的屏蔽位PEIE 的控制。按照?qǐng)D中描繪的邏輯電路,可以得到以下邏輯表達(dá)式: GIE*(T0IF*T0IE+INTF*INTE+RBIF*RBI E+PEIE*(EEIF*EEIE+PSPIF*PSPIE+ADIF*ADIF+ RCIF*RCIE+TXIF*TXIE+SSPIF*SSPIE+CCP1IF*CCP1IE+CCP2IF*CCP2
32、IE+TMR1IF*TMR1 IE+TMR2IF*TME2IE+BCLIF*BCLIE)=1 當(dāng)該邏輯表達(dá)式計(jì)算結(jié)果為“1”時(shí)表明至少有一個(gè)中斷源向 CPU 發(fā)出了中 斷請(qǐng)求信號(hào),并且請(qǐng)求信號(hào)傳遞途徑中各關(guān)卡全部都放行,使該中斷請(qǐng)求信號(hào)一路暢通無(wú)阻地被傳遞到CPU,于是該中斷請(qǐng)求就得到了CPU 的響應(yīng)。如果該邏輯表達(dá)式的計(jì)算結(jié)果為“0”時(shí),則表示所有的中斷源設(shè)備都沒(méi)有請(qǐng)求中斷信號(hào)發(fā)出,或者是各個(gè)中斷源對(duì)應(yīng)的中斷屏蔽位都被關(guān)掉,或者是被開(kāi)放的部分中斷源又沒(méi)有發(fā)出中斷請(qǐng)求,或者是全局中斷屏蔽位GIE 被關(guān)掉。 3.4.3 中斷處理: 單片機(jī)復(fù)位后,由硬件自動(dòng)對(duì)全局中斷屏蔽位進(jìn)行設(shè)置 G
33、IE=0,將屏蔽所有的中斷源;中斷返回指令“RETFIE”執(zhí)行后,也由硬件自動(dòng)對(duì)總屏蔽位進(jìn)行設(shè)置GIE=1,重新開(kāi)放所有的中斷源。不論各種中斷屏蔽位和全局中斷屏蔽位 GIE 處于何種狀態(tài)(是開(kāi)放還是禁止),某一中斷源的中斷條件滿足時(shí),都會(huì)發(fā)出中斷請(qǐng)求,相應(yīng)的中斷標(biāo)志位都會(huì)被置位(=1)。但是是否能夠得到 CPU 的響應(yīng),則要根據(jù)該中斷源的中斷屏蔽位的狀態(tài)來(lái)決定。 3.4.4 中斷的優(yōu)先級(jí)控制: PIC 單片機(jī)的入口地址只有一個(gè),故對(duì)中斷優(yōu)先級(jí)的控制也由編程人員通過(guò)軟件來(lái)實(shí)現(xiàn)。當(dāng)某一時(shí)刻有兩個(gè)中斷同時(shí)發(fā)生時(shí),單片機(jī)會(huì)進(jìn)入 0X0004 處的中斷服務(wù)子程序開(kāi)始判別中斷源類(lèi)型,判別一個(gè)就做一
34、個(gè)中斷服務(wù)。這樣的軟件處理流程決定了先被判別的中斷其優(yōu)先級(jí)為高,后判別的優(yōu)先級(jí)為低,這就是用軟件優(yōu)先級(jí)的概念。 例如: ;中斷服務(wù)代碼,開(kāi)始判別中斷源 BTFSC INTCON , T0IF ;判別是否為 TMRO 產(chǎn)生的中斷GOTO TMRO_INTF ;是轉(zhuǎn)去做 TMR0 的中斷服務(wù) BTFSC INTCON , INTF ;不是 TMR0 中斷,繼續(xù)判別是否為 RB0/INT 中斷GOTO RB0_INT ;繼續(xù)判別是否為其它中斷源 在上例中,TMR0 的中斷優(yōu)先級(jí)就比 INT/RB0 中斷的優(yōu)先級(jí)要高。如果 TMR0 和INT/RB0 同時(shí)發(fā)生中斷請(qǐng)求,TMR
35、0 的中斷將優(yōu)先于 INT/RB0 得到服務(wù)。 PIC 單片機(jī)的如此中斷優(yōu)先級(jí)的控制還有個(gè)關(guān)鍵的地方,就是高低優(yōu)先級(jí)一般不考慮嵌套。如果現(xiàn)在正在處理低優(yōu)先級(jí)的中斷,就算有高優(yōu)先級(jí)的中斷發(fā)生, 也必須等到低優(yōu)先級(jí)的中斷處理完畢后才能響應(yīng),這是由 PIC 單片機(jī)的中斷機(jī)制決定的。在響應(yīng)任何中斷請(qǐng)求時(shí),PIC 單片機(jī)會(huì)自動(dòng)把全局中斷使能位(INTCON 的第七位 GIE)清除。這樣其他中斷請(qǐng)求就暫時(shí)不被響應(yīng)。以上例代碼來(lái)分析, 假定現(xiàn)在 INT/BB0 發(fā)生了中斷,TMR0 沒(méi)有中斷請(qǐng)求,則程序進(jìn)入中斷服務(wù),并轉(zhuǎn)到 RB0-INT 處,開(kāi)始執(zhí)行外部引腳中斷服務(wù);而當(dāng)程序正忙于執(zhí)行 RB0-INT
36、的程序,即中斷沒(méi)有退出前,TMR0 發(fā)生了中斷請(qǐng)求,盡管在軟件優(yōu)先級(jí) TMR0 的中斷要比 RB0_INT 的優(yōu)先級(jí)高,但這時(shí) TMR0 中斷將不會(huì)得到響應(yīng)。TMR0 的中斷請(qǐng)求將一直被掛起直到現(xiàn)行的中斷服務(wù)結(jié)束且退出中斷。一旦中斷退出,單片機(jī)將馬上響應(yīng)被掛起的 TMR0 中斷。 3.5.5 中斷的現(xiàn)場(chǎng)保護(hù): 一般單片機(jī)中斷現(xiàn)場(chǎng)保護(hù)都是把關(guān)鍵的寄存器放到堆棧中,中斷退出前再?gòu)亩褩V谢謴?fù)其原先的內(nèi)容。PIC 單片機(jī)無(wú)法實(shí)現(xiàn)這種現(xiàn)場(chǎng)保護(hù),因?yàn)?PIC 單片機(jī)內(nèi)沒(méi)有可供用戶(hù)使用的數(shù)據(jù)堆棧。PIC 單片機(jī)內(nèi)的堆棧區(qū)是硬件堆棧,其唯一用途是保存程序計(jì)數(shù)器 PC 的值。所以,進(jìn)入中斷時(shí)保護(hù)普通寄存
37、器的唯一辦法是將其內(nèi)容復(fù)制到其它數(shù)據(jù)寄存器(RAM 變量)作備份,在中斷結(jié)束前再把這些備份寄存器中斷的內(nèi)容復(fù)制回原先對(duì)應(yīng)的寄存器。 哪些寄存器需要在進(jìn)入中斷時(shí)保護(hù)呢?這完全取決于自己的設(shè)計(jì)。最基本的當(dāng)然是工作寄存器W 和狀態(tài)寄存器 STATUS,因?yàn)檫@兩個(gè)寄存器在中斷服務(wù)子程序中是必然用到的。有一個(gè)基本的原則必須遵循:如果要在中斷服務(wù)子程序中改變一個(gè)寄存器的值,那么在中斷服務(wù)開(kāi)始之初就要把它的內(nèi)容復(fù)制到備份寄存器中保護(hù);待中斷結(jié)束時(shí)再恢復(fù)其原有內(nèi)容。除了 W 和 STATUS 寄存器,PCLATH 和 FSR 這兩個(gè)重要的寄存器也經(jīng)常需要保護(hù)。 3.5.6 幾種常用的中斷: (1)
38、RB0/INT 引腳的中斷: 所有中檔以上的PIC 單片機(jī),其 PORTB 的 RB0 口引腳可以作為一個(gè)外部中斷信號(hào)輸入,可以對(duì)輸入信號(hào)上升沿或下降沿跳變產(chǎn)生一個(gè)中斷響應(yīng)。要能實(shí)現(xiàn)RB0/INT 中斷源,軟件初始化的設(shè)定步驟如下: ① 設(shè)定 RB0/INT 引腳為輸入模式,TRISB<0>=1 ② 配置 OPTION-REG<6>即 INTEDG 位:INTEDG=1,RB0/INT 引腳輸入 信號(hào)上升沿產(chǎn)生中斷;INTEDG=0,下降沿中斷。 ③ 清除 INTCON<1>INTF=0,確保在有效中斷發(fā)生前中斷標(biāo)志位為 0。 ④ 設(shè)定 INTCON<4>INTF=1,允許
39、 RB0/INT 中斷響應(yīng)。 ⑤ 設(shè)定 INTCON<7>GIE=1,打開(kāi)全局中斷允許使能位。 ⑥ 中斷信號(hào)出現(xiàn)后,進(jìn)入中斷服務(wù)程序,查詢(xún)INTF 中斷標(biāo)志。 ⑦ 若 INTF=1,則處理 RB0/INT 中斷,處理完畢后(或處理前)軟件必須清除 INTF 中斷標(biāo)志位。 例:RB0/INT 引腳中斷初始化 ;初始化 RB0/INT 引腳的中斷功能 BANKSE1 TRISB ;切換到 TRISB 所在的 BANK1 BSF TRISB , 0 ;確保 RB0 為輸入狀態(tài) BCF OPTION-REG , INTEDG ;選擇下降沿中斷, BCF OPTION-REG , RB
40、PU ;選擇使用 PROTB 內(nèi)部弱上拉 BANKSE INTCON ;切換到INTCON 所在的 BANK0 CLRF INTCON ;INTCON 內(nèi)全部數(shù)據(jù)位清 0 BSF INTCON , INTE ;允許 RB0/INT 中斷 BSF INTCON ,GIE ;打開(kāi)全局中斷使能位 ;其它代碼 此引腳也可以讓處于睡眠狀態(tài)的單片機(jī)在有效的條邊沿出現(xiàn)時(shí)被喚醒。 (2) RB 口的 RB7~RB4 引腳變化中斷: PORTB 的最高 4 個(gè)引腳,即 RB7~RB4,在設(shè)為輸入模式下,當(dāng)輸入電平由高到低,或由地到高發(fā)生變化時(shí),可以讓單片機(jī)產(chǎn)生中斷。這就是通常所說(shuō)的引腳狀態(tài)變
41、化中斷。為了實(shí)現(xiàn) PORTB 引腳狀態(tài)變化中斷,一般需遵循一下的操作步驟: ① 設(shè)置 TRISB 寄存器,使 RB7~RB4 相關(guān)的引腳處于輸入狀態(tài); ② 檢查是否需要使用 PORTB 的內(nèi)部弱上拉電阻,通過(guò) OPTION-REG<7>控制; ③ INTCON<0>RBIF=0; ④ INTCON<4>RBIE=1; ⑤ INTCON<7>GIE=1; 響應(yīng)狀態(tài)變化后的中斷服務(wù)程序其執(zhí)行流程通常如下: ① 檢查 INTCON<0>RBIF=0,進(jìn)入中斷服務(wù); ② 讀一次 PORTB,更新引腳鎖存器的狀態(tài),消除產(chǎn)生中斷的硬件條件; ③ INTCON<0>RBIF=0
42、,軟件清除中斷標(biāo)志。 編程實(shí)例:閃爍式跑馬燈 8 只 LED 中只有一只點(diǎn)亮,點(diǎn)亮的位置與循環(huán)的方式不停地移動(dòng),移動(dòng)的速度取決于在各個(gè)位置上停留的時(shí)間,即在兩步之間插入一個(gè)約 196MS 的延時(shí), 并且在每一個(gè)位置上LED 都保持閃爍。 圖 3.3 跑馬燈流程圖 ORG 000H NOP GOTO MAIN ORG 004H ;中斷向量,中斷服務(wù)子程序入口地址 TMR0SERV MOVWF W-TEMP ;復(fù)制 W 到它的臨時(shí)備份寄存器 W-TEMP 中BCF INTCON , TOIF ;清除 TMR0 中斷標(biāo)志位 INCF FLAG , F ;亮滅標(biāo)志位反轉(zhuǎn) B
43、TFSS FLAG ,0 ;標(biāo)識(shí)位=1?是!跳一步,到熄滅GOTO JUMP0 ;否!跳到點(diǎn)亮 CLRF PORTC ;熄滅 GOTO JUMP1 ;跳過(guò)下面的程序 JUMP0 MOVF PROTC-B,W ;點(diǎn)亮,即將緩沖寄存器內(nèi)先傳入 W MOVWF PROTC ;再由 W 轉(zhuǎn)入端口寄存器送顯 JUMP1 MOVLW TMR0-B ;TMR0 賦初值 MOVWF TMR0 ;重新啟動(dòng)定時(shí)器MOVF W-TEMP ,W ;恢復(fù)現(xiàn)場(chǎng) RETFIE ;中斷返回 ;——————————主程序—————————————— MAIN BSF STATUS ,
44、RP0 MOVLW 0 MOVWF TRISC MOVLW 07H MOVWF OPTION_REG ;分頻比設(shè)置為 256 BCF STATUS , RP0 MOVLW 0A0H MOVWF INCTION ;開(kāi)放全局中斷使能位 BCF INCTION , T0IF ;清除 TMR0 溢出中斷標(biāo)志位MOVLW TMR0_B ;TMR0 賦初值 MOVWF TMR0 ;啟動(dòng)定時(shí)計(jì)數(shù)器MOVLW B’10000000’ ;將顯示碼送 W MOVWF PORTC_B ;將顯示碼送顯示緩沖寄存器LOOP CALL DELAY ;調(diào)用延時(shí)子程
45、序 RRF PORTC-B , F ;帶進(jìn)位標(biāo)志位右移緩沖區(qū)寄存器GOTO LOOP ;———————延時(shí)子程序略——————————— 3.5.7 使用中斷時(shí)需要注意的一些問(wèn)題: (1) 單片機(jī)初次上電復(fù)位,電源跌落復(fù)位和其它情況之下的復(fù)位,均會(huì)導(dǎo)致總屏蔽位的和其他所有中斷屏蔽位都被清 0,也就是在默認(rèn)狀態(tài)下,禁止CPU 響應(yīng)所有中斷。 (2) 中斷標(biāo)志位的狀態(tài)與該中斷源是否被屏蔽無(wú)關(guān),也與全局中斷屏蔽位無(wú)關(guān)。也就是說(shuō)不管 CPU 是否響應(yīng)中斷請(qǐng)求,只要滿足了中斷條件,中斷標(biāo)志位就會(huì)被置位。 (3) 如果在中斷被禁止的情況下,中斷標(biāo)志位已經(jīng)被置位,只要不被清除就會(huì)
46、 一直潛伏下來(lái),那么一但解除禁止,就會(huì)立即產(chǎn)生中斷響應(yīng)。 (4) 如果同時(shí)發(fā)生多個(gè)中斷請(qǐng)求,到底哪個(gè)中斷會(huì)優(yōu)先得到處理,完全取決于在中斷服務(wù)子程序中檢查中斷源的順序,原因是各個(gè)中斷源之間不純?cè)趦?yōu)先級(jí)之分。 (5) 如果清除中斷標(biāo)志位的指令應(yīng)安排在中斷服務(wù)子程序的尾部,就有可能會(huì)丟失響應(yīng)在處理中斷期間該中斷源第 2 次出現(xiàn)中斷請(qǐng)求的機(jī)會(huì)。 (6) 對(duì)于中斷響應(yīng)和處理時(shí)間有嚴(yán)格的應(yīng)用,保護(hù)現(xiàn)場(chǎng)的指令安排也應(yīng)考慮延時(shí)問(wèn)題。 (7) 響應(yīng)中斷時(shí)產(chǎn)生的延時(shí)時(shí)間,會(huì)隨著中斷源被開(kāi)放的個(gè)數(shù)不同而不同。開(kāi)放中斷源個(gè)數(shù)越多,延時(shí)時(shí)間越長(zhǎng)。 3.5 軟件延時(shí)程序的設(shè)計(jì) 在編程時(shí)經(jīng)常需要在程
47、序的執(zhí)行過(guò)程中插入一段延時(shí)時(shí)間,對(duì)此有 2 種方案可供選擇:一是利用片內(nèi)的硬件資源——可編程定時(shí)器,二是利用軟件手段—— 插入一段延時(shí)程序。在此僅先介紹后面一種方法。如果延時(shí)時(shí)間較短,可以連續(xù)插入幾條空操作指令 NOP;如果延時(shí)時(shí)間較長(zhǎng)可以插入一段單一循環(huán)或多重循環(huán)的循環(huán)結(jié)構(gòu)延時(shí)程序。 3.5.1 三類(lèi)指令的執(zhí)行時(shí)間 在編寫(xiě)延時(shí)程序程序之前,必須對(duì) PIC 單片機(jī)指令系統(tǒng)中的每一條指令的執(zhí)行時(shí)間(即指令周期)了如指掌。 在 35 條指令構(gòu)成的指令系統(tǒng)中,5 條實(shí)現(xiàn)無(wú)條件跳轉(zhuǎn)的必然引起程序執(zhí)行順序發(fā)生變化的指令(即:GOTO,CALL,RETURN,RETLW,RETEFIE)占用 2
48、 個(gè)指令周期;還有改寫(xiě) PCL 的指令也占用兩個(gè)指令周期,(如 ADDWF PCL,1 或 MOVWF PCL或 BCF PCL,B 等)。 而有可能引起程序執(zhí) 行順序發(fā)生變化 的 4 條條件跳 轉(zhuǎn)指令( 即DECFSZ,INCFSZ,BTFSC,BTFSS)DE 執(zhí)行時(shí)間隨著條件而定,當(dāng)條件為發(fā)生真發(fā)生跳轉(zhuǎn)時(shí)需要占用 2 個(gè)指令周期,當(dāng)條件為假不發(fā)生跳轉(zhuǎn)時(shí)僅占一個(gè)指令周期。 其余指令全部?jī)H僅占用一個(gè)指令周期;其余指令全部?jī)H僅占用一個(gè)周期。但由于采用流水作業(yè)方式,即取指和執(zhí)行重疊進(jìn)行,這樣使得每一條指令占 用時(shí)間平均降為一個(gè)指令周期??墒窃诔绦蛴龅教D(zhuǎn)指令時(shí),流水作業(yè)方式被打破,在執(zhí)行該
49、指令的同時(shí)所抓取的下一條指令不在是下一部將要執(zhí)行的指令,必須將其丟棄,從跳轉(zhuǎn)目的地從新抓取,因此而多占用了一個(gè)指令周期。另外還應(yīng) 搞清楚單片機(jī)時(shí)基振蕩器外接的頻率 fsoc,以便確定時(shí)鐘周期(Tosc=1/fosc) 和指令周期(Tc=4Tosc)以及程序執(zhí)行時(shí)間的累計(jì)。 3.5 .2 延時(shí)軟件的設(shè)計(jì)方案實(shí)例: 首先定義 2 個(gè)循環(huán)控制變量 N 和 M ,用于保存和決定延時(shí)時(shí)間長(zhǎng)短的時(shí)間常數(shù)。為了便于計(jì)算,每條指令后面的注釋部分中的括號(hào)內(nèi)都給出了指令周期數(shù)。例一: N EQU 20H ;定義寄存器 N M EQU 21H ;定義寄存器 M DELAY MOVELW X
50、;(1)循環(huán)變量初始值 X(待定)經(jīng) W 轉(zhuǎn)送 N MOVWF N ;(1) LOOP DECFSZ N,1 ;(1\2)N-1 送 N 并判斷結(jié)果=0?是!跳出循環(huán)GOTO LOOP ;(2)否!循環(huán)回去 RETURN ;返回調(diào)用程序 執(zhí)行上述延時(shí)子程序 DELAY1 所需要指令周期個(gè)數(shù)=1+1+[(1+2)*(x-1)+2]+2。式中的“1+1”對(duì)應(yīng)兩條 MOV 指令;“1+2”對(duì)應(yīng) DECFZ(非跳轉(zhuǎn))和 GOTO 指令;“X”是循環(huán)變量遞減的次數(shù),“X-1”是循環(huán)次數(shù),由于 DECFSZ 指令的執(zhí)行過(guò)程是先遞減后判斷再跳轉(zhuǎn),所以循環(huán)的次數(shù)比遞減的次數(shù)??;接下來(lái)的“2”對(duì)應(yīng)DEC
51、FSZ(成功跳轉(zhuǎn))指令;最后的“2”對(duì)應(yīng) RETURN 指令。當(dāng)時(shí)鐘晶振的頻率選用“4MHZ”時(shí),每個(gè)指令周期 Tcyc 為 1μ s( Tcyc=4Tosc=4/fosc)。在上面的計(jì)算式中: 當(dāng)時(shí)間常數(shù) X=1 時(shí),延時(shí)=(1+1+2+2)Tcyc =6Tcyc=6μ s; 當(dāng) X=99 時(shí),延時(shí)=[1+1+(1+2)*(99-1)+2+2]Tcyc=300Tcyc=300μ s=0.3ms 3.6 查表程序設(shè)計(jì): 在單片機(jī)的開(kāi)發(fā)應(yīng)用中,經(jīng)常用到查表程序,來(lái)實(shí)現(xiàn)代碼轉(zhuǎn)換,索引,或翻譯等。下面就以LED 數(shù)碼管顯示驅(qū)動(dòng)程序設(shè)計(jì)作為講解的范例。LED 數(shù)碼管內(nèi)部包含8 只發(fā)光二
52、極管,其中 7 只發(fā)光二極管構(gòu)成字形筆段,(A~G),1 只發(fā)光二極管構(gòu)成小數(shù)點(diǎn)(dp)。對(duì)于任何一只發(fā)光二極管,只要陽(yáng)極為高電平,陰極為低電平,并且電位差高于其閾值電壓(約為 1.7~2.1V)就會(huì)被點(diǎn)亮。根據(jù)個(gè)二極管公共端連接的方式不同,又有共陰極和共陽(yáng)極 LED 數(shù)碼管之分,如圖 3.6 所示。驅(qū)動(dòng) LED 點(diǎn)亮的筆段碼和 LED 所顯示字符之間的關(guān)系如表 3.6 所示。 圖 3.5 數(shù)碼管結(jié)構(gòu)示意圖 表 3.6 LED 點(diǎn)亮的筆段碼和 LED 所顯示字符之間的關(guān)系 顯示字符 共陰極筆段碼 共陽(yáng)極筆段碼 顯示字符 共陰極筆段碼 共陽(yáng)極筆
53、段碼 0 3FH C0H A 77H 88H 1 06H F9H B 7CH 83H 2 5BH A4H C 39H C6H 3 4FH B0H D 5EH A1H 4 66H 99H E 79H 86H 5 6DH 92H F 71H 8EH 6 7DH 82H P 73H 8CH 7 07H F8H U 3EH C1H 8 7FH 80H 全熄 00H FFH 9 6FH 90H 全亮 FFH 00H PIC 單片機(jī)的查表程序,可以利用其子程序帶返回值指令RET
54、LW 來(lái)實(shí)現(xiàn)。思路是采用若干條攜帶著筆段碼的RETLW 指令按索引值的順序排列在一起,來(lái)構(gòu)成一張數(shù)據(jù)表;然后以表頭為參照,以被顯示數(shù)字為索引值,到表中查找對(duì)應(yīng)被顯數(shù)字的筆段碼。具體方法是采用帶有入口參數(shù)和出口參數(shù)的子程序結(jié)構(gòu),用數(shù)據(jù)表來(lái)構(gòu)成子程序的主體部分。在子程序的開(kāi)頭放一條修改程序計(jì)數(shù)器 PC 值的指令,來(lái)實(shí)現(xiàn)子程序內(nèi)部的跳轉(zhuǎn),以實(shí)現(xiàn)索引。 查表過(guò)程是,在主程序中先把被顯數(shù)字——索引值,作為筆段碼在數(shù)據(jù)表中的地址偏移量存入 W,以便向子程序傳遞參數(shù),接著調(diào)用子程序。子程序的第 1 條指令將 W 中的地址偏移量取出并與程序計(jì)數(shù)器 PC 當(dāng)前值疊加,則子程序就會(huì)跳到攜帶著所需筆段碼
55、的 RETLW 指令處。由指令將筆段碼裝入 W 中,以便向主程序傳遞參數(shù),然后返回子程序。 例:假設(shè)用 8 位端口 RB 作為一只共陰極 LED 數(shù)碼管的驅(qū)動(dòng)端口?,F(xiàn)在要求把寄存器單元 20H 中的低半字節(jié)作為一位十六進(jìn)制數(shù)送到 LED 顯示。欲采用端口 RB 作驅(qū)動(dòng)。需要將該端口的個(gè)引腳全部設(shè)置為輸出,方法是將RB 端口的方向控制寄存器 TRISB 的各位全部清零。另外從主程序到子程序傳遞參數(shù)(就是被顯示數(shù)字,也是用于查表的地址偏移量)以及從子程序到主程序返回參數(shù)(即查到的被顯數(shù)字的筆段碼)用的都是 W。下面是實(shí)現(xiàn)這一功能的程序流程圖和程序段。
56、 圖 3.6 主程序流程圖 圖 3.7 子程序流程圖 程序段: PCL EQU 02H ;聲明寄存器PCL 的地址為 02H STATUS EQU 03H ;聲明寄存器 STATUS 的地址為 03H RP0 EQU 06H ;聲明 RP0 的位地址為 06H RB EQU 06H TRISB EQU 86H ;————————主程序——————————————— ORG 0000H GOTO MAIN ORG 0005H MAI BSF STAT US , RP0 C
57、LRF TRISB BCF STATUS , RP0 MOVF 20H , 0 ANDLW 0FH CALL CONVERT MOVWF RB STOP GOTO STOP ;———————查表(即轉(zhuǎn)換子程序)—————————————— CONVERT ;子程序名稱(chēng) ADDWF PCL , 1 ;把W 內(nèi)容疊加到 PC 的低 8 位上 TABLE RETLW 3FH ;“0”的筆段碼 RETLW 06H ;“1”的筆段碼 RETLW 5BH ;“2”的筆段碼 RETLW 4FH ;“
58、3”的筆段碼 RETLW 66H ;“4”的筆段碼 RETLW 6DH ;“5”的筆段碼 RETLW 7DH ;“6”的筆段碼 RETLW 07H ;“7”的筆段碼 RETLW 7FH ;“8”的筆段碼 RETLW 6FH ;“9”的筆段碼 RETLW 77H ;“a”的筆段碼 RETLW 7CH ;“b”的筆段碼 RETLW 39H ;“c”的筆段碼 RETLW 5EH ;“d”的筆段碼 RETLW 79H ;“e”的筆段碼 RETLW 71H ;“f”的筆段碼 ;—————————————
59、————————————————— END ;程序全部結(jié)束 數(shù)據(jù)表可以看成是由 16 條 RETLW 指令構(gòu)成,表頭為 TABEL.當(dāng)程序跳轉(zhuǎn)到子程序便開(kāi)始執(zhí)行 ADDWF 指令,同時(shí)程序計(jì)數(shù)器的當(dāng)前值已經(jīng)指向表頭。在此基礎(chǔ)上在疊加存在W 的表內(nèi)地址偏移量,假設(shè)該偏移量為 8 ,則疊加后的PC 指向 RETLW 7FH 指令(其中 7FH 即為數(shù)字 8 的顯示筆段碼);使程序跳轉(zhuǎn)到該指令并執(zhí)行它,執(zhí)行后便返回到主程序,并同時(shí)將 7FH 裝入 W 中。 第四章 各子模塊的實(shí)現(xiàn)及其說(shuō)明 4.1 鍵盤(pán)顯示處理 HD7279 在設(shè)計(jì)單片機(jī)系統(tǒng)時(shí),要求選用合適的單
60、片機(jī),在保證功能實(shí)現(xiàn)的情況下, 力求外圍不在擴(kuò)展元件,或者少擴(kuò)展,盡可能突出其“單片”的優(yōu)勢(shì),進(jìn)一步簡(jiǎn)化系統(tǒng),提高系統(tǒng)的穩(wěn)定性。通常單片機(jī)系統(tǒng)在許多場(chǎng)合需要鍵盤(pán)輸入和數(shù)碼顯示功能,在需要鍵盤(pán)和數(shù)碼管較多時(shí),若選用并行總線的 8279 鍵盤(pán)顯示芯片配合74LS138 譯碼器來(lái)擴(kuò)展單片機(jī)鍵盤(pán)顯示電路,將占用數(shù)據(jù)總線和許多個(gè)I/O 口, 硬件較為復(fù)雜。而利用串行鍵盤(pán)顯示芯片HD7279A 來(lái)擴(kuò)展單片機(jī)系統(tǒng)只需要占用 4 個(gè) I/O 口,因此這里我們選用HD7279 來(lái)擴(kuò)展單片機(jī)的鍵盤(pán)顯示電路。 HD7279是一片具有串行接口的,可同時(shí)驅(qū)動(dòng)8位共陰式數(shù)碼管,或64只獨(dú)立LED的智能顯示驅(qū)動(dòng)芯。片該芯
61、片同時(shí)還可連接多達(dá)64鍵的鍵盤(pán)矩陣。單片即可完成LED顯示鍵盤(pán)接口的全部功能。HD7279內(nèi)部含有譯碼器可直接接受BCD碼或16 進(jìn)制碼并同時(shí)具有2種譯碼方式。此外還具有多種控制指令,如消隱,閃爍,左移,右移,段尋址等。HE7279具有片選信號(hào),可方便地實(shí)現(xiàn)多于8位的顯示或多于64鍵的鍵盤(pán)接口。 圖 4.1 HD7279 管腳分布圖 表 4.1 HD7279 引腳說(shuō)明 4.1.1 程序中應(yīng)用的重要控制指令: HD7279的控制指令分為兩大類(lèi)——純指令,和帶有數(shù)據(jù)的指令。1純指令: ① 復(fù)位(清除)指令A(yù)4H 當(dāng)HD7279收到該指令后,將所有的顯示清除,
62、所有設(shè)置的字符消隱,閃爍等字符也被一起清除。執(zhí)行該指令后,芯片所處的狀態(tài)和上電所處的狀態(tài)一樣。 ② 測(cè)試指令BFH 該指令所有的LED全部點(diǎn)亮,并處于閃爍狀態(tài),主要用于測(cè)試。 ③ .左移指令A(yù)1H 所有的顯示自右向左(從第一位向第八位)移動(dòng),包括處于消隱狀態(tài)的顯示 位。但對(duì)各位所設(shè)置的消隱及閃爍屬性不變。移動(dòng)后最右邊一位為空(無(wú)顯示)。 ④ .右移指令A(yù)0H 與左移指令類(lèi)似,但所作的移動(dòng)為至左向右(從第8位向第一位)移動(dòng)。移動(dòng)后,最左邊一位為空。 ⑤ .循環(huán)左移指令A(yù)3H 與左移指令類(lèi)似,不同之處在于移動(dòng)后原最左邊一位(第8位)的內(nèi)容顯示于最右邊(第一位) ⑥
63、.循環(huán)右移指令A(yù)2H 與循環(huán)左移指令類(lèi)似,但是方向相反。 2 帶有數(shù)據(jù)的指令: ① .下載數(shù)據(jù)且按方式0譯碼 X =無(wú)影響 命令由兩個(gè)字節(jié)組成,前半部分為指令,其中a1,a2,a0為位地址,具體分配如下: d 0 ~d 3 為數(shù)據(jù),收到此指令時(shí),HD7279按以下規(guī)則(譯碼方式0)進(jìn)行譯碼, 如表4.2。 表4.2 HD7279譯碼真值表: 小數(shù)點(diǎn)顯示由dp位控制,DP=1時(shí),小數(shù)點(diǎn)顯示。DP=0時(shí)小數(shù)點(diǎn)不顯示 ② .閃爍控制88H 此命令控制各個(gè)譯碼管的顯示屬性。D1~D8分別代表數(shù)碼管1~8,0閃爍,1不閃爍。開(kāi)機(jī)后缺省的狀態(tài)為各位均不閃爍。 ③
64、.消隱控制98H 此命令控制各個(gè)數(shù)碼管的消隱屬性。D0~D8分別對(duì)應(yīng)數(shù)碼管1~8。1顯示,0消隱。當(dāng)某位賦予了消隱屬性以后,HD7279在掃描時(shí)將跳過(guò)該位,因此在這種情況下無(wú)論對(duì)該位寫(xiě)入何值,均不會(huì)被顯示,但寫(xiě)入的值將被保留,在將該位重新設(shè)為顯示狀態(tài)后,最后一次寫(xiě)入的數(shù)據(jù)將被顯示出來(lái)。當(dāng)無(wú)需用到全部8個(gè)數(shù)碼管顯示的時(shí)候,將不用的位設(shè)為消隱屬性,可提高顯示的亮度。 注意:至少有一位要處于顯示的狀態(tài),如果消隱控制指令中D1~D8全為0將不被接受,HD7279將保持原來(lái)的消隱狀態(tài)不變。 ④ .讀鍵盤(pán)數(shù)據(jù)指令15H 該指令從HD7279讀出當(dāng)前的按鍵代碼。與其它的指令不同,此命令的前一
65、個(gè)字節(jié)00010101B為微控制器,傳送到HD7279的指令,而后面一個(gè)字節(jié)D0~D7則為HD7279返回的按鍵代碼,其范圍是0~3FH(無(wú)鍵按下時(shí)為0XFF) 當(dāng)HD7279檢測(cè)到有效的按鍵時(shí),KEY引腳從高電平變成低電平,并一直保持到按鍵結(jié)束。在此期間,如果HD7279接收到“讀鍵盤(pán)數(shù)據(jù)指令”,則輸出當(dāng)前按鍵的鍵盤(pán)代碼,如果在收到:“讀鍵盤(pán)指令”時(shí)沒(méi)有有效按鍵,HD7279輸出FFH(11111111B) HD7279應(yīng)連接共陰式數(shù)碼管。無(wú)需用到的數(shù)碼管和鍵盤(pán)可以不接,省去數(shù)碼管,或設(shè)置數(shù)碼管消隱屬性均不會(huì)影響鍵盤(pán)的使用。 實(shí)際應(yīng)用中8只下拉電阻和八只鍵盤(pán)連接位選線,DIGO~DIG
66、7的八只電阻 (一下稱(chēng)為選電阻),應(yīng)準(zhǔn)從一定的比例關(guān)系,下拉電阻應(yīng)大于位選電阻的5倍小于50倍,典型值為10倍,下拉電阻的取值范圍是10K~100K,位選電阻的取值范圍是1K~10K。在不影響顯示的前提下,下拉電阻應(yīng)盡可能的取較小的值。這樣可以提高鍵盤(pán)部分的抗干擾能力。 因?yàn)椴捎醚h(huán)掃描的工作方式,如果采用普通數(shù)碼管亮度有可能不夠,采用高亮或超量的型號(hào),可以解決這個(gè)問(wèn)題。數(shù)碼管的尺寸亦不宜選得過(guò)大,一般字符高度不應(yīng)超過(guò)1英寸。 HD 7279的RESET復(fù)位端在一般應(yīng)用的情況下,可以直接與正電源連接,在需要較高可靠的情況下,可以連接一外部的復(fù)位電路,或直接由單片機(jī)控制。在上電或RESET端由低電平變成高電平后HD7279大約需要18~25MS的時(shí)間才會(huì)進(jìn)入正常的工作狀態(tài)。 上電后所有的顯示均為空,所有顯示位的屬性均為“顯示”及“不閃爍”。當(dāng)有鍵按下時(shí),KEY引腳輸出變?yōu)榈碗娖?,此時(shí)如果接收到“讀鍵盤(pán)”指令, HD7279將輸出所按下的按鍵代碼。如果在沒(méi)有按下的情況下收到“讀鍵盤(pán)”指令,HD7279將輸出FFH(255) 程
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識(shí)競(jìng)賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫(kù)試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫(kù)試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫(kù)試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識(shí)測(cè)試題庫(kù)及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測(cè)工種技術(shù)比武題庫(kù)含解析
- 1 礦山應(yīng)急救援安全知識(shí)競(jìng)賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案