




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、我的畢業(yè)論文(二) : Keil 軟件的基本用法2007 年 07 月 02 日 星期一 13:11Keil Vision 是 Keil 公司( ARM 子公司)開發(fā)的一款用于 MCS-51 單片機開發(fā)的應用 十分廣泛的編譯和調試軟件。該軟件可以編輯、編譯匯編語言、 C51 語言,連接定位目標文 件和庫文件,創(chuàng)建 HEX 文件,調試目標程序等。 Keil 軟件功能強大,包含很多部分,本文 我們主要使用 Keil Vision 來開發(fā) C51 項目、 調試程序并生成 HEX 文件來用于單片機開發(fā)。 Keil Vision 是一款在 Windows 下使用的集成開發(fā)環(huán)境, 目前最新版本為 V3 ,
2、本文中我們?yōu)?了簡便選用 V2.0 。下面我們就來熟悉一下 Keil 軟件。首先安裝軟件,它的安裝與 MedWin 一樣簡單,我們不做過多介紹。 安裝完成后,我們就可以使用軟件了,打開軟件,我們可以看到其界面,如下圖所示:下面我們就來使用 Keil 軟件開發(fā)我們的第一個項目。點擊 “Project”(工程)菜單下面 的“New Project ”(新建工程) ,我們來新建一個工程。軟件彈出 “Create New Project ”(創(chuàng)建新 工程)窗口。如下圖所示:我們?yōu)楣こ梯斎胛募?,點擊 “保存 ”按鈕, 軟件將彈出 “Select Device for Target ”(選 擇 MCU
3、 )窗口,如下圖所示。 我們只需根據自己工程的需要選擇相應的MCU ,然后點擊 “確定”按鈕就可以了。在這里我們選擇 Atmel 公司的 AT89C51 ,這種類型的單片機與 Intel 的 8051 單片機完 全兼容,但是它內含 4KB Flash 存儲器,使用非常方便,而且在我國也較為流行。事實上, 目前 AT89C51 已經被 AT89S51 所淘汰,因為 AT89S51 加入了 ISP(在線可編程)功能,通 過 Atmel 公司或者自制的下載線就可以對片內 Flash 進行編程,使用更為方便。 然而 AT89S51 與 AT89C51 除了 ISP 以外完全兼容,而且下面我們要說明的P
4、roteus 軟件目前只能支持AT89C51 ,所以本文將以 AT89C51 來代替 8051 使用,請大家注意。選擇好相應的 MCU ,點擊窗口中的 “確定 ”按鈕以后, 軟件會彈出一個窗口詢問是否將 8051 啟動代碼加入工程(如下圖) ,由于我們不需要這段代碼,所以我們點擊 “否 ”跳過就可 以了。至此,我們完成了整個工程的初步建立。下面我們需要做的就是創(chuàng)建源文件并將我們 的源文件加入工程。首先點擊 “File ”下面的 “New ”菜單,或者直接點擊工具欄中的新建按鈕,軟件將彈出源 文件編輯窗口,我們可以在窗口中編輯源文件。編輯好的源文件如下圖所示。接下來的操作有兩點需要注意:1、加入
5、 AT89C51 的頭文件(當然,如果你選擇了其他的MCU ,則加入相應的頭文件):在要加入頭文件的地方(一般是文件開頭) ,點擊右鍵,選擇點擊彈出菜單(如下圖) 中的 “Insert #include 即”完成了頭文件的添加。我們可以看到源文件中多了一 行頭文件包含代碼 “#include ”。2、保存源文件:注意保存源文件時所書寫的源文件擴展名決定了源文件的類型( C51 文件或者匯編語1 / 18 言源文件)。這里我們將源文件保存為 “main.c ”。你可以看出在源文件保存以后, 文件中的關 鍵字已經高亮顯示,可以幫助我們及時發(fā)現錯誤。源文件編輯好以后,我們就可以將其添加到工程中了。如
6、下圖所示,右鍵點擊 “Project Workspace ”窗口中的 “Source Group 1 ”(如果你不能看到 這個項目, 你可以點擊一下圖中 “Target 1”前面的 “+”號展開文件夾 ),這時軟件將彈出如圖所 示的菜單。我們選擇 “Add Files to Group Source Group 1 ,”軟件彈出添加源文件窗口,我們 就可以將相應的源文件加入到工程了。下面我們還需要對工程作一些設置,以使其滿足我們的要求。右鍵點擊上圖中的 “Target 1”,軟件將彈出工程菜單,如下圖所示。我們選擇點擊 “Options for Target Target1,”軟件將彈出工程設
7、置窗口。在工程設置中其他的 我們暫時不管,只需將 “Output ”選項卡下面的 “Create HEX File ”選中就可以了,如下圖所示。 這樣,當我們調試工程項目時,軟件將能夠生成 HEX 文件,用來裝入單片機,使之運行我 們的指令。設置好以后,我們就可以編譯、鏈接、調試我們的工程項目了。 首先讓我們來熟悉一下調試工具欄。在這個工具欄中我們只需了解左邊的三個按鈕。其中,調試工具欄中最左側的按鈕是“Translate current file ”按鈕,即編譯按鈕,用來編譯當前文件;中間的按鈕是 “Build target ”按鈕,即建立工程按鈕,用來編譯、連接當前的工程, 產生相應的工程
8、目標文件,比如 HEX 文件;最右側的按鈕是 “Rebuild all target files ”按鈕, 即全部重建按鈕,主要在工程文件有改動時使用,作用是全部重建整個工程,產生相應的目 標文件。在整個工程生成 HEX 文件以后,我們在 Keil 中的任務就算完成了。當然,你可以在Keil 中進行各種調試。事實上, Keil 的功能十分強大,它能仿真單片機的各種功能。但是我 們在此并不討論它的這些功能。如果你想深入地學習 Keil 的各種功能和使用方法,請參閱相關參考文獻。我的畢業(yè)論文(三) : Proteus 軟件使用簡介Proteus 軟件是 Labcenter Electronics
9、公司的一款電路設計與仿真軟件,它包 括 ISIS 、 ARES等軟件模塊, ARES模塊主要用來完成 PCB的設計,而 ISIS 模塊 用來完成電路原理圖的布圖與仿真。 Proteus 的軟件仿真基于 VSM技術,它與其 他軟件最大的不同也是最大的優(yōu)勢就在于它能仿真大量的單片機芯片,比如 MCS-51系列、PIC 系列等等,以及單片機外圍電路,比如鍵盤、 LED、LCD等等。 通過 Proteus 軟件的使用我們能夠輕易地獲得一個功能齊全、 實用方便的單片機 實驗室。本文中由于我們主要使用 Proteus 軟件在單片機方面的仿真功能,所以我 們重點研究 ISIS 模塊的用法,在下面的內容中,如
10、不特別說明,我們所說的 Proteus 軟件特指其 ISIS 模塊。2 / 18在進行下面的操作前,我先說明一點:我的 Proteus 版本 是 7.1 ,如果你使用的是 6.9 以前的版本,可能你發(fā)現在鼠標操作上會略有不同。 這主要表現在 6.9 以前的版本鼠標左右鍵的作用與一般軟件剛好相反,而 7.0 以后已經完全改過。下面我們首先來熟悉一下 Proteus 的界面。 Proteus 是一個標準的 Windows 窗口程序,和大多數程序一樣,沒有太大區(qū)別,其啟動界面如下圖所示:如圖中所示,區(qū)域為菜單及工具欄,區(qū)域為預覽區(qū),區(qū)域為元器件 瀏覽區(qū),區(qū)域為編輯窗口, 區(qū)域為對象拾取區(qū), 區(qū)域為元
11、器件調整工具欄, 區(qū)域為運行工具條。下面我們就以建立一個和我們在 Keil 簡介中所講的工程項目相配套的Proteus 工程為例來詳細講述 Proteus 的操作方法以及注意事項。首先點擊啟動界面區(qū)域中的“ P”按鈕( Pick Devices ,拾取元器件)來 打開“ Pick Devices ”(拾取元器件)對話框從元件庫中拾取所需的元器件。對 話框如下圖所示:在對話框中的“ Keywords”里面輸入我們要檢索的元器件的關鍵詞,比如 我們要選擇項目中使用的 AT89C51,就可以直接輸入。輸入以后我們能夠在中間 的“ Results ”結果欄里面看到我們搜索的元器件的結果。在對話框的右側
12、,我 們還能夠看到我們選擇的元器件的仿真模型、引腳以及 PCB參數。這里有一點需要注意,可能有時候我們選擇的元器件并沒有仿真模型,對 話框將在仿真模型和引腳一欄中顯示“ No Simulator Model ”(無仿真模型)。 那么我們就不能夠用該元器件進行仿真了, 或者我們只能做它的 PCB板,或者我 們選擇其他的與其功能類似而且具有仿真模型的元器件。搜索到所需的元器件以后,我們可以雙擊元器件名來將相應的元器件加入 到我們的文檔中,那么接著我們還可以用相同的方法來搜索并加入其他的元器 件。當我們已經將所需的元器件全部加入到文檔中時, 我們可以點擊“ OK”按鈕 來完成元器件的添加。添加好元器
13、件以后,下面我們所需要做的就是將元器件按照我們的需要連 接成電路。 首先在元器件瀏覽區(qū)中點擊我們需要添加到文檔中的元器件, 這時我 們就可以在瀏覽區(qū)看到我們所選擇的元器件的形狀與方向, 如果其方向不符合你 的要求,你可以通過點擊元器件調整工具欄中的工具來任意進行調整, 調整完成 之后在文檔中單擊并選定好需要放置的位置即可。 接著按相同的操作即可完成所 有元器件的布置, 接下來是連線。 事實上 Proteus 的自動布線功能是如此的完美 以至于我們在做布線時從來都不會覺得這是一項任務, 而通常像是在享受布線的 樂趣。布線時我們只需要單擊選擇起點, 然后在需要轉彎的地方單擊一下, 按照 你所需走線
14、的方向移動鼠標到線的終點單擊即可。 本例我們布線的結果如下圖所 示(仿真我們在上面的 Keil 操作介紹中的簡單例子)。因為該工程十分簡單,我們沒有必要加上復位電路,所以這點在圖中予以 忽略,請大家注意。除此以外,你可能還發(fā)現,單片機系統(tǒng)沒有晶振,這一點你 需注意。事實上在 Proteus 中單片機的晶振可以省略,系統(tǒng)默認為 12MHz,而且 很多時候,當然也為了方便,我們只需要取默認值就可以了。3 / 18下面我們來添加電源。 先說明一點, Proteus 中單片機芯片默認已經添加電 源與地,所以我們可以省略。 然后在添加電源與地以前, 我們先來看一下上面第 一個圖中區(qū)域的對象拾取區(qū), 我們
15、在這里只說明本文中可能會用得到的以及比 較重要的工具。l :( Selection Mode)。選擇模式,通常情況下我們都需要選中它,比如 布局時和布線時。l :( Component Mode)。組件模式,點擊該按鈕,能夠顯示出區(qū)域中的 元器件,以便我們選擇。l:( Wire Label Mode )。線路標簽模式,選中它并單擊文檔區(qū)電路連線能夠為連線添加標簽。經常與總線配合使用。l:(Text Script Mode )。文本模式,選中它能夠為文檔添加文本。l:( Buses Mode)??偩€模式,選中它能夠在電路中畫總線。關于總線畫法的詳細步驟與注意事項我們在下面會進行專門講解。l :(
16、 Terminals Mode)。終端模式,選中它能夠為電路添加各種終端,比 如輸入、輸出、電源、地等等。l :( Virtual Instruments Mode )。虛擬儀器模式,選中它我們能夠在區(qū) 域中看到很多虛擬儀器,比如示波器、電壓表、電流表等等。關于它們的用法 我們會在后面的相應章節(jié)中詳細講述。好了,下面我們就來添加電源。首先點擊,選擇終端模式,然后在元器件 瀏覽區(qū)中點擊 POWE(R電源)來選中電源,通過區(qū)域中的元器件調整工具進行 適當的調整, 然后就可以在文檔區(qū)中單擊放置電源了。 放置并連接好線路的電路 圖一部分如下圖:連接好電路圖以后我們還需要做一些修改。由上圖我們可以看出,
17、圖中的 R1電阻值為 10k,這個電阻作為限流電阻顯然太大,將使發(fā)光二極管 D1 亮度很 低或者根本就不亮, 影響我們的仿真結果。 所以我們要進行修改。 修改方法如下: 首先我們雙擊電阻圖標,這時軟件將彈出“ Edit Componen”t 對話框(見下圖所 示的對話框),對話框中的“ Component Referer ”是組件標簽之意,可以隨便 填寫,也可以取默認,但要注意在同一文檔中不能有兩個組件標簽相同; Resistance ”就是電阻值了, 我們可以在其后的框中根據需要填入相應的電阻4 / 18 值。填寫時需注意其格式,如果直接填寫數字,則單位默認為 ;如果在數字 后面加上 K或者
18、 k,則表示 k 之意。這里我們填入 270,表示 270。修改好各組件屬性以后就要將程序 (HEX文件)載入單片機了。 首先雙擊單 片機圖標,系統(tǒng)同樣會彈出“ Edit Componen”t 對話框,如下圖。在這個對話框 中我們點擊“ Program files ”框右側的,來打開選擇程序代碼窗口,選中相應 的 HEX文件后返回, 這時, 按鈕左側的框中就填入了相應的 HEX文件,我們點擊 對話框的“ OK”按鈕,回到文檔,程序文件就添加完畢了。裝載好程序,我們就可以進行仿真了。首先來熟悉一下上面第一個圖中區(qū) 域的運行工具條。因為比較簡單,我們只作一下介紹。工具條從左到右依次是“ Play
19、”、“ Step”、“ Pause”、“ Stop”按鈕, 即運行、步進、暫停、停止。下面我們點擊“ Play ”按鈕來仿真運行,效果如下 圖所示,可以看到系統(tǒng)按照我們的程序在運行著, 而且我們還能看到其高低電平 的實時變化。如果我們已經觀察到了結果就可以點擊“ Stop”來停止運行。我的畢業(yè)論文(四) :計算機仿真輔助單片機指令系統(tǒng)的學習2007 年 07 月 04 日 星期三 14:41 計算機仿真對單片機指令系統(tǒng)的學習的幫助主要在于幫助理解,加強記憶,適當應用。能夠在單片機指令系統(tǒng)學習中的軟件主要是MedWin ,因為其操作簡單,而且可以直觀地看到結果。1. 數據傳送指令:數據傳送類指令
20、主要包括: MOV 、MOVX 、MOVC 、PUSH 、POP、XCH 等。 下面我們通過一個簡單的匯編程序來學習這些指令。例 1. 匯編語言源文件如下圖所示:在 MedWin 中編輯好源文件以后,以 “.asm”為后綴保存為匯編源文件。然后進行編譯、 匯編并將代碼裝入內存進行仿真。由于本程序對寄存器、特殊功能寄存器、內部存儲器、外 部數據存儲器都進行了操作,所以需要首先點擊“查看 ”菜單下的相應子菜單打開相應的窗口,即寄存器、特殊功能寄存器、數據區(qū) IData、數據區(qū) XData,并可以根據需要點擊 “窗口 ” 菜單下的選項來橫向或縱向平鋪窗口。因為本程序需要一步一步地詳細查看相應指令執(zhí)行
21、的結果,所以我們需要在執(zhí)行指令 時點擊 “指令跟蹤( F7) ”或 “指令單步( F8) ”按鈕來單步執(zhí)行。指令執(zhí)行中的一個畫面如下圖所示:從圖中我們能夠清晰地觀察到每一條指令執(zhí)行的每一個結果,從而加深我們對這些指 令的理解與記憶。5 / 18MedWin除以上實例程序中所書寫的以外,我們還可以使用其他的指令書寫程序并在中仿真,比如 PUSH、POP、 MOVC 等,相信你會得到一個很好的結果,而且MedWin 肯定會提高你學習指令的興趣。2. 算術操作類指令 算術操作類指令主要有: ADD 、ADDC 、DA A、SUB、INC、DEC、MUL、DIV 等。 算術操作類指令比較復雜,掌握起來
22、比較困難,但在實際的單片機項目應用中很少涉 及,尤其是 MUL 、 DIV 兩條指令,在 51 系列單片機中更是被束之高閣,很少使用。此處,我們不再像上節(jié)那樣逐條書寫并仿真課本上的程序,如果感興趣,你可以仿照 上節(jié)自己書寫程序并進行仿真, 觀察并體會每一條指令執(zhí)行的結果以及對系統(tǒng)的影響。 這里 我們通過一個比較實用的例子來演示仿真算術類指令的操作。例 2. 兩個壓縮 BCD 碼求和:將兩個 BCD 碼(每個占 4 位)分別放在一個字節(jié)的高 4 位和低 4 位即組成壓縮 BCD 碼。 本例中有兩個壓縮 BCD 碼數字, 都是四位數, 第一個數的 高兩位放在 20H,低兩位放在 21H 中; 第二
23、個高低位分別放在 30H、31H 中。要求所得結果 放在 40H、 41H 中。匯編源程序如下圖:在 MedWin 中編輯好源文件后,以 “.asm”為后綴將其保存為匯編文件,然后進行編譯、 匯編并將代碼裝入內存進行仿真。你可以像上例那樣步進觀察其詳細執(zhí)行過程,分析原因; 當然也可以在 “l(fā)jmp $ ”處設置斷點,然后全速運行。需要注意程序中使用到了內部存儲器, 所以你需要將數據區(qū) “IData ”窗口調出來進行觀察。運行的最后結果如下圖所示:從圖中我們能夠很清楚地看到內部存儲器相應單元的內容,進而觀察到程序執(zhí)行的結 果,即: 2097+4559=6656 。3. 邏輯運算指令、控制轉移類指
24、令 邏輯運算指令,顧名思義,是用于邏輯運算的指令。主要包括:CLR、CPL、ANL 、ORL 、 XRL 等常用邏輯指令以及循環(huán)移位指令如: RL、RLC、RR、RRC 等。 控制轉移類指令是指在程序中根據具體的條件(或者沒有條件)使程序轉移到相應的 入口的指令。它主要包括三類指令:一是無條件轉移指令,比如:AJMP 、SJMP、LJMP 等;二是條件轉移指令, 比如: JZ、CJNE、DJNZ 等;三是子程序調用返回指令, 比如: ACALL 、 LCALL 、 RET、 RETI 等。鑒于單獨針對邏輯運算指令進行的仿真十分簡單(事實上與數據傳送類指令相同) ,可 以很容易、很方便地自己針對
25、相應的指令設計程序來觀察結果,進行學習。所以此處不再針 對邏輯運算指令舉例仿真。 而控制轉移類指令又不可能單獨使用, 往往與其他指令結合使用 來組成相應的程序, 所以也無法單獨進行仿真。 所以下面我們就將邏輯運算類指令與控制轉 移類指令相結合來編寫仿真程序,通過一個實例同時來仿真這兩類指令的應用。例 3.十六進制整數轉化為 BCD 碼整數: 4 位十六進制整數高低位依次放在 R3 、R4 中, 要求轉換后的 BCD 整數按高低位順序放在 R5、R6、R7 中。程序源文件如下圖:在 MedWin 中編輯好源文件以后,將其以 “.asm”為后綴保存為匯編源文件,然后編譯、 匯編并將產生的代碼裝入內
26、存進行仿真調試。仿真前需要注意首先輸入R3、R4 設置十六進制初始值,具體設置方法如下。首先調出寄存器窗口,然后在需要修改的寄存器名稱或者數 值上雙擊,這時其內容將變?yōu)榭尚薷?,我們在其中填入需要設置的數值(字母大小寫均可) 即可,如下圖所示:6 / 18設置好初始值以后,你可以單步觀察幾步以便明白其原理,然后就可以設置一個斷點 全速運行了,最后就可以看到所得到的結果,比如我們輸入8FD6 ,將得到結果: R5=03,R6=68 , R7=22 。4. 位操作指令 位操作比較簡單,我們也不再寫實例進行仿真,如果你感興趣,可以自己寫一些針對 相應指令的小程序來仿真之。這里我們主要說明一下仿真位操作
27、指令與其他指令的不同及注意事項。 位操作指令是對單片機內部存儲器的位地址空間進行的相應操作,所以我們查看相應 結果時應該打開相應窗口。 單片機的位地址空間可以這樣來打開: 點擊 “查看 ”菜單下面的 “數 據區(qū) Bit ”子菜單。位地址空間窗口如下圖所示:除此之外,在相應的位操作中如果我們需要查看各種位標志時,可以點擊上圖中下側 的“位”標簽,將 “字節(jié) ”標簽換過來進行查看。我的畢業(yè)論文(五) : Proteus 仿真輔助定時器 /計數器的學習 2007 年 07 月 05 日 星期四 14:23MCS-51 系列單片機內部有兩個定時器 /計數器 T0、T1 ,它們都具有兩種工作模式(定 時
28、器和計數器)以及四種工作方式(方式0、1、2、 3)。定時器 /計數器 T0 由特殊功能寄存器 TH0 和 TL0 構成, T1 由特殊功能寄存器 TH1 和 TL1 構成。除此之外,與定時器 /計數器有關的特殊功能寄存器還有工作方式控制寄存器 TMOD 和控制寄存器 TCON 。關于它們的詳細內容和具體應用請參閱相關參考文獻, 此處不 做探討。由于定時器 /計數器 T0 與 T1 用法幾乎完全相同,所以下面的例子中我們將全部使用 T0。而且定時器 /計數器方式 0和方式 3較少使用,因此我們也將主要仿真說明其方式1和 2的用法,另外我們還會給出一種其計數器的用法。例 1.定時器 /計數器 T
29、0 工作于定時器模式方式 1 ,在 P1.0 端口產生周期為 100ms 的方 波。首先計算計數初值:周期為 100ms,定時應為 50ms(半個周期) 。一個計算公式為: 計數初值 =216-t f/12其中 t 為定時時間(單位為 s), f 為單片機的時鐘頻率(單位為 MHz )。 所以,計數初值為 216-0.05 12M/12=15536=3CB0H 。因此, TH0 的初值應為 3CH ,TL0 的初值應為 B0H 。因此,此例的源代碼如下圖:在 MedWin 中將源文件編輯完成以后,保存為匯編源文件并編譯、匯編產生源代碼( .HEX 文件)。下面我們在 Proteus 中設計電路
30、, 此例電路也比較簡單, 只需在 AT89C51 單片機的 P1.0 口連上一個示波器來觀察產生的相應波形就可以了。 選擇示波器時要注意首先在前面的文章 “我的畢業(yè)論文(三) : Proteus 軟件的基本用法 ”中第一個圖: Proteus 界面里面的區(qū)域點擊7 / 18按鈕選擇虛擬儀器模式,然后在區(qū)域中選擇OSCILLOSCOPE ”(示波器)。完成的電路圖如下圖所示:構建好電路圖以后,下面就可以為單片機添加程序代碼( .HEX 文件)了。雙擊單片機 圖標,添加上面的源文件所生成的程序代碼,添加好以后,接著就可以進行下面的仿真。點 擊運行按鈕, 系統(tǒng)就運行了起來, 我們可以適當調整示波器面
31、板上的按鈕來使波形最有利于 我們觀察。調整好以后,系統(tǒng)產生的波形效果如下圖所示:如果你的 Proteus版本是 7.0 以前的版本, 那么你的示波器和波形效果可能與圖中略有 不同,但并不影響仿真效果;如果是最新版本,則應該完全相同。從圖中我們能夠看出,波形的周期為100ms,這與我們設定的目標相一致;而其幅值則近似為 5V 。例 2.設計一個延時程序, 延時 500ms 。為了能夠清晰地看到延時效果, 我們設計在 P1.0 口連接一個 LED 發(fā)光二極管,使其使用該延時程序每 500ms 閃爍一次。通常情況下,為了簡便,人們會使用軟件延時,即通過執(zhí)行一段沒有意義的程序來達 到延時的目的。 但那
32、樣做會浪費系統(tǒng)資源, 使得系統(tǒng)在延時過程中不能響應任何外部或內部 事件。所以,人們對其做了改進,而通過定時器/ 計數器定時來進行延時。由于方式 2 定時時間過短( 12MHz 下最大 250s 左右),所以,此處我們仍然選用方 式 1。但方式 1 在 12MHz 下的最大定時時間也只有 60 多 ms,仍然不能滿足延時要求。所 以,延時程序需要軟硬件協作。即我們可以這樣去做,通過硬件T0 延時 50ms,然后設置一個計數器,當計數器計到 10 時,我們延時的目標就達到了。源程序如下圖: (計數器初值計算與上例相同)將上面的源文件保存為匯編文件,然后進行編譯/匯編,并生產源代碼裝入內存在MedW
33、in 中仿真運行看延時效果(可以通過指令單步執(zhí)行“l(fā)call dly500 ”一句觀察指令執(zhí)行時間,則實際執(zhí)行時間就是延時時間) 。結果發(fā)現,實際執(zhí)行中該延時程序比我們的要求多延 時了 87s,這是因為延時程序中還插入了其他指令(比如設置T0 模式等),所以我們的延時程序不是十分精確,實際應用中我們可以通過調整 T0 初值來稍作調整,但此處對延時要 求并不精確,所以我們就不再做調整了。下面我們可以在 Proteus 中構建電路來觀察我們的延時效果。 電路圖十分簡單, 如下圖 所示:注意 LED 的陰陽極不要接反, 圖中的限流電阻在模擬時可以略去, 但如果添加上的話, 最好阻值不要設置的過大,以
34、免 LED 發(fā)光太弱,影響觀察效果。設置好電路圖以及各元器件的屬性以后,我們就可以點擊仿真按鈕來觀察效果了。可 以看到, LED 按照大約 0.5s 的周期開始閃爍。例 3.定時器 / 計數器的計數功能。本例使用 T1 對外部脈沖進行計數,每計數一次,與 P1 口相連的 8 個 LED 發(fā)光二極管的亮燈個數和位置就按照它們的順序所表示的 BCD 碼(亮 燈代表 1,滅燈為 0)做加法。比如開始為 29( 00101001),計數一次以后,對應的數字變 為 30( 00110000)。這里我們用按鍵來模擬外部脈沖,每按一次,表示產生一個脈沖。顯然,根據要求,我們可以使 T1 工作于計數器方式 2
35、,而且我們可以設置其初值為 FF,這樣,外部產生一個脈沖, T1 檢查到就會發(fā)生中斷,然后我們在中斷子程序中按要求8 / 18進行處理。其源程序如下圖所示:將上面在 MedWin 中編輯好的源文件保存為匯編文件,然后進行編譯/匯編,并產生相應的源代碼( .HEX 文件)。注意因為 Proteus 仿真電路的按鍵為理想按鍵,所以程序設計時 并沒有考慮按鍵的抖動,但在實際應用中應該注意,否則將可能實現不了預期目的。另外, 本例為了仿真的方便, 設置 T1 計數器的初值為 FFH, 實際應用中可以靈活地根據相關要求進 行改動。然后我們根據題中要求設計電路。設計好的電路圖如下圖所示:設計電路圖時要注意
36、因為本電路圖中需要較多的限流電阻 (如果添加的話) ,所以在繪 制電路圖時考慮用排阻來進行代替。圖中 RP1就是一個 8的排阻。 Proteus 中提供了幾種排 阻,你可以使用關鍵詞 “respack”進行查找。設計好電路圖,我們就可以將上面匯編源文件產生的源代碼裝入單片機,然后進行仿 真。仿真時使用鼠標點擊按鍵,你可以看到 LED 按照 BCD 碼加法的規(guī)律進行變化。仿真中 的一個畫面可以從上圖中看到。我的畢業(yè)論文(六) : Proteus 仿真輔助中斷功能的學習2007 年 07 月 06 日 星期五 13:51MCS-51 系列單片機具有 5個中斷源, 2 個中斷優(yōu)先級, 可以實現 2級
37、中斷服務程序嵌 套。 5個中斷源分別為:兩個外部輸入中斷源INT0 (P3.2)和 INT1 (P3.3),中斷請求標志分別為 IE0 和 IE1;2 個內部定時器 /計數器的溢出中斷源 T0(計數時 P3.4輸入)和 T1(計 數時 P3.5輸入),中斷請求標志分別為 TF0 和 TF1;串口中斷請求源,其中斷請求標志為 RI 或 TI 。中斷請求標志位分布在特殊功能寄存器TCON (IE0 、IE1、TF0、TF1)和 SCON(RI、TI )中。與中斷有關的特殊功能寄存器除它們以外還有中斷允許寄存器 IE 和中斷優(yōu)先級寄 存器 IP。這些寄存器都能夠進行位尋址。 此處不再對它們進行詳細的
38、探討。 關于它們的詳細 情況和具體功能以及中斷的其他知識請參閱相關參考文獻,此處我們從略。事實上,關于中斷我們在上一篇文章中討論定時器/計數器時已經對 T0、 T1 的相關中斷進行過較為詳盡的討論和舉例。 而關于串口中斷, 我們會在下節(jié)講解串口時進行相應的討 論,所以本節(jié)我們只簡單討論一下外部中斷INT0 和 INT1 ,并舉例分析。例 1.外部中斷 INT0 和 INT1 同時存在。 和上篇文章中的例 3 一樣, P1 口連接 8 個 LED 發(fā)光二極管,兩個按鍵分別接到外部中斷 INT0 和 INT1 。正常情況下, 8個 LED 閃爍發(fā)光。9 / 18 當 INT0 發(fā)生中斷時,使 P1
39、 口的 8 個 LED 做一個燈的左移右移兩次;當 INT1 發(fā)生中斷時, 使 P1 口的 8 個 LED 做兩個燈的左移右移兩次。此例的源程序如下圖所示:源文件編輯結束以后,將源文件保存為匯編文件,然后進行編譯/匯編,并產生相應的源代碼以便下面仿真使用。下面我們在 Proteus 中繪制電路,此例電路圖和上篇文章中最后一例的電路圖大體相 同,只不過將接在 P3.5的按鍵改為接在 P3.2和 P3.3的 INT0 和 INT1 的中斷請求輸入端。 繪制好的電路圖如下圖所示:電路設計好以后,我們就可以將上面生成的源代碼裝入單片機,然后進行仿真了???以看到,仿真開始時, 8個 LED 作大約 0
40、.2S 間隔的閃爍;當我們按下 INT0 口的按鍵時, LED 作一個燈的左移右移兩次; 當我們按下 INT1 口的按鍵時, LED 作兩個燈的左移右移兩 次。完全達到了我們預期的設計目的。仿真中的一個畫面如上圖所示。我的畢業(yè)論文(七) : Proteus 仿真輔助串口功能的學習2007 年 07 月 08 日 星期日 12:30MCS-51 系列單片機內部有一個可編程全雙工串行通信接口,具有UART ( UniversalAsynchronous Receiver/Transmitter ,通用異步收發(fā)器)功能。它有四種工作方式,可由軟件 設定;它的波特率也可由軟件設置片內的定時器/ 計數器
41、來進行控制。與串口相關的特殊功能寄存器主要有串口控制寄存器 SCON 和電源控制寄存器 PCON 。其中需要注意的是 PCON 不可位尋址。51 系列單片機的串口主要用來進行串口數據通信,除此以外,它還可以用來非常方便 地擴展并行 IO 口,可以擴充輸入或者輸出。本節(jié)我們主要通過實例來說明其在串行數據通 信的應用及其在擴展 IO 口上的應用,考慮到篇幅,我們只舉以下二例。例 1.兩個 AT89C51 的雙機通信。其中一個單片機 P1口外接 8 個按鍵(事實上可以用 撥碼開關來代替, 但 Proteus中沒有這個器件的仿真模型) ,第二個單片機 P2口外接 8個 LED 燈, 使用雙機串口通信將
42、第一個單片機的撥碼開關的狀態(tài)發(fā)送到第二個,并在第二個單片機的 LED 燈上顯示出相應狀態(tài)。我們取兩機串口都工作于方式 1,由定時器 T1 和 SMOD 控制其波特率,設 T1 工作于 定時模式方式 2, SMOD 取 0,取波特率為 4800bit/s 。則因為計算波特率公式 波特率 =2SMOD/32 f/(12 (28-X)其中, f 為單片機時鐘頻率, X 為定時器初值。所以,我們可以得到 T1 計數初值為: FAH (此處為了精確,我們取 f=11.0592MHz )。 源文件如下所示: 發(fā)送程序如下圖:接收程序如下圖:源文件編輯結束以后,將源文件保存為匯編文件,然后進行編譯/匯編,并
43、產生相應的源代碼,準備用于仿真。下面我們來設計電路。首先在電路圖中放置兩片 AT89C51 芯片,并將它們的 P3.0 (RXD )和 P3.1( TXD )引腳交叉相連。然后在片一的 P1口連接 8個按鍵;片二的 P2口 連接上 8個 LED 。最終結果如下圖所示:10 / 18在進行仿真以前,我們需要來再熟悉一下 Proteus 的按鍵。如上圖所示,仿真時我們可以點擊鍵帽,但當我們松開鼠標時,按鍵就彈開了;我們 還可以點擊鍵帽右側的標有上下箭頭的紅黑色小圓圈, 此時當我們松開鼠標時, 鍵帽不會彈 開,按鍵一直保持著按下的狀態(tài),只有當我們再次點擊小圓圈時,鍵帽才會彈開,按鍵才會 改變狀態(tài)。此
44、例我們就需要這種屬性來根據要求進行我們的仿真。設計好電路圖以后,我們就可以裝入相應的程序了。注意裝入程序時不要發(fā)生錯誤, 要將相應的源代碼裝入相應的單片機。 然后進行仿真, 可以通過點擊相應的按鍵來改變狀態(tài), 進而觀察到 LED 的狀態(tài)。可以看到,串口通信得到了實現。仿真中的一個畫面如上面電路 圖中的效果所示。例 2.串口擴充并行 IO 口輸出。單片機的串口擴充的 8 位并行 IO 口上外接 8 個 LED , 然后從串口輸出數據實現 8個LED 左移 2次,閃爍 2次的循環(huán)。串口擴充并行口時,串口工作于方式0:同步移位寄存器方式,波特率固定,數據由RXD 端輸出,移位時鐘由 TXD 送出。使
45、用 74LS164 串入并出移位寄存器。本例源文件如下圖:源文件編輯結束以后,將其保存為匯編文件,然后進行編譯/匯編,并產生相應的源代碼,準備用于仿真。然后我們來繪制電路圖。電路圖比較簡單,如下圖所示,此處不再詳述。但有一點需 要注意:此前的排阻不能使用了,因為那些都是多輸入單輸出,不能符合此例要求。此處我們換作另外一種 8輸入 8 輸出的排阻(見上圖中 RN1),你可以在 Proteus中用 關鍵詞 “RX8 ”進行查找。設計好的電路圖如上圖所示。電路圖設計好以后, 我們就可以將上面產生的代碼裝入單片機了。 裝入以后進行仿真, 仿真中的一個畫面也可以從上圖看到。11 / 18 我的畢業(yè)論文(
46、九) : Proteus 仿真輔助數碼管的學習2007 年 07 月 10 日 星期二 13:42數碼管又稱 LED 數碼管,它是由 7 段或 8 段 LED 構成的顯示器件。有共陰極和共陽 極兩種。 按其顯示方式則可分為靜態(tài)顯示方式和動態(tài)顯示方式兩種。 關于數碼管的其他知識 請參閱相關參考文獻,此處不作討論。下面我們將主要講述數碼管顯示的仿真。1. 靜態(tài)顯示方式 靜態(tài)顯示方式較為簡單,編程十分容易,但占用 IO 口線較多。實際使用中不太多見。 下面我們就通過一個簡單的例子來予以說明。例 1.單片機的 P2 口接一個共陽極數碼管,利用該數碼管顯示從0 到 9,然后返回到 0的循環(huán)。該例子較為簡
47、單,源文件如下圖: 源文件編輯結束以后,將其保存為匯編文件,然后進行編譯/匯編,并產生相應的源代碼,準備用于仿真。下面我們編輯電路圖。此例的電路圖十分簡單,只需將一個共陽極數碼管連到單片機 的 P2 口即可。數碼管使用關鍵詞 “7Seg”進行查找??梢钥吹接泻芏嘟Y果,注意區(qū)分共陽極 “Anode ”和共陰極 “Cathode”即可。這里我們選用較為簡單的 “7SEG-COM-ANODE ”數碼管。最后得到的電路圖如下圖所示:繪制好電路圖,我們就可以將前面所生成的源代碼裝入單片機,然后點擊仿真按鈕進 行仿真??梢钥吹綌荡a管顯示的數字按照我們程序中設定的要求進行變化著,仿真中的一個畫 面如上圖所示
48、。2. 動態(tài)顯示方式 動態(tài)顯示方式是一種相對較為高級的顯示方式,它編程較為復雜,但占用 IO 口線少, 達到了節(jié)約硬件資源的目的, 實際使用中較多利用。 下面我們也利用一個實例來詳細說明這 種顯示方式。例 2.數碼管動態(tài)顯示方式。單片機 P2 口接一個二位數碼管的 8 位段碼線, P3 口的低 二位接數碼管的兩位位碼線。程序使得二位數碼管做0 到 99 的循環(huán)顯示。該例源文件如下圖所示:源文件編輯結束以后,將其保存為匯編文件,然后進行編譯/匯編,并產生相應的源代碼,準備用于仿真。接下來我們繪制電路圖。此例電路圖比較簡單,如下圖所示,但有幾點需要注意:( 1)單片機的 IO 口的驅動能力有限,所
49、以此例我們選用了大功率晶體管驅動電路, 即圖中的兩個 NPN 三極管,單片機通過控制它們的通斷來達到控制位碼的目的。(2)關于數碼管,此例我們選用了 2 位的共陽極數碼管 7SEG-MPX2-CA ,這樣可以 方便我們連線和使用。而且由于我們的例子中沒有用到小數點(DP),所以為了簡便在圖中我們沒有連接 P2.7和 DP引腳。當然,如果你連接好這個引腳, 仿真結果不會受到任何影響, 因為在段碼表中, P2.7 引腳一直輸出的都是高電平,也就是說小數點一直處于熄滅狀態(tài)。繪制好電路圖,就可以點擊仿真按鈕進行仿真了。仿真中的一個效果如上圖所示。3. 事實上,在實際的應用中我們還可以選用數碼管顯示驅動
50、譯碼芯片來達到控制數碼12 / 18 管顯示的目的。 常用的這類芯片有 CD4511 、MAX7219 等。關于這些芯片的使用方法請參閱 相關參考文獻,此處我們僅以 MAX7219 為例來簡單介紹一下這類芯片的使用。例3.單片機使用 MAX7219 接8個數碼管,初始時利用這些數碼管從左到右顯示 7到 0, 然后依次將最右側的數字移到最左側顯示。鑒于 C51 語言在此類程序編寫中的明顯優(yōu)勢,此例我們將使用 C51 語言進行編寫,源 文件如下:在 Keil 中編輯好源文件以后,進行編譯、鏈接,并生成源代碼( .HEX 文件)。注意生 成 .HEX 文件時要按照前面的文章中的相應介紹進行設置。然后
51、我們來繪制電路圖。 本例的電路圖較為簡單, MAX7219 與數碼管連接的段碼和位 碼在芯片上已經標識明確, 直接相連即可; 唯獨需要注意的就是要按照前面程序中定義的那 樣,將 MAX7219 的 DN、CLK 、LOAD 三引腳分別與單片機 AT89C51 的 P1.0、P1.1、P1.2 引腳相連。如下圖所示,此處我們就不再作其他說明了。繪制好電路圖以后,將我們剛才生成的源代碼裝入單片機,然后仿真運行,就可以看 到我們所希望的效果了,仿真中的一個畫面如上圖所示。我的畢業(yè)論文(十) : Proteus 仿真輔助 LED 點陣的學習2007 年 07 月 12 日 星期四 15:25LED 點
52、陣是由 LED 構成的點數為 88、1616 的點陣顯示器,它可以用來顯示數字、 字母以及漢字等。使用十分靈活,應用較為廣泛,比如大街上隨處可見的 LED 電子廣告牌。下面我們通過一個實例來簡單介紹 LED 點陣的使用和仿真。例.使用一塊 8X8 的 LED 點陣來顯示一個向左循環(huán)移動的數字 “1”。 此例比較簡單,但需要注意的新東西有很多。一是 8X8LED 點陣,它的行列掃描。二 是關于字模,網上有很多字模軟件可供下載,但針對 8X8LED 點陣的比較少。因為數字 “1 的字模比較簡單,我們可以自己寫出來。由于 C51 語言的方便性,此處我們仍然采用其來書寫,源文件如下圖:編輯好源文件以后
53、,在 Keil 中進行編譯、鏈接、并生成相應的工程源代碼。 然后,我們就開始繪制電路圖。關于本例的電路圖,我們需要說明的是,由于采用總 線方式繪制電路可以很大程度上使得電路圖簡化、美觀,所以,此處我們將采用總線方式來 繪制電路。關于總線的知識請參閱相關參考文獻,此處我們只簡單敘述一下在Proteus 中如何繪制我們需要的總線。采用總線方式繪制電路,首先要點擊前面的“Proteus 簡介 ”一文中 Proteus 界面圖區(qū)域對象拾取區(qū)中的總線按鈕, 使系統(tǒng)進入繪制總線模式。 這樣你就可以在你需要繪制總線的 地方單擊像繪制一般連線一樣來繪制總線了, 需要注意在你想要結束總線的地方雙擊才能結 束總線
54、的繪制。 繪制好總線以后, 我們可以先在需要與總線連接的各個線端來添加相應的標 簽( Label )。首先點擊上述區(qū)域對象拾取區(qū)中的添加標簽按鈕,使系統(tǒng)進入添加標簽模式。13 / 18然后你就可以在需要添加標簽的線端上點擊鼠標,系統(tǒng)將會彈出編輯標簽對話框( Edit Wire Label )。我們只需在其中的 “Label ”選項卡的 “String ”框中填入我們需要的標簽并點擊確定 (OK ),就完成了相應標簽的添加。添加好標簽以后,接下來就要繪制各總線分支。繪制總 線分支時需要注意按一下 “Ctrl ”鍵,你會發(fā)現連線方向已經按照你所需要的方向(45)偏轉了。在連接好總線分支以后,總線繪
55、制就完成了。然后再稍作修飾,最后完成的電路圖如下 圖所示:繪制好電路圖,我們就可以將上面產生的源代碼裝入單片機進行模擬仿真了??梢钥吹?8X8LED 點陣已經按照我們的要求開始循環(huán)顯示數字“1 ”。仿真中的一個畫面如上圖所示。我的畢業(yè)論文(十一) : Proteus仿真輔助 LCD (液晶顯示器)的學習2007 年 07 月 13 日 星期五 22:00LCD 就是液晶顯示器,液晶顯示器正在以其低功耗、高性價比以及方便實用的特性而 成為單片機系統(tǒng)的一個重要輸出器件。關于 LCD 顯示器的詳細知識請參閱相關書籍和參考文獻, 此處我們只通過一個簡單實 例來說明 LCD 的用法。例.使用 Prote
56、us中的 12864 點陣圖形液晶顯示器來顯示字符 “鄭州大學物理工程學 院”。首先我們要生成字符的字模,這需要通過字模軟件來完成。網上有很多免費的字模軟 件可供下載使用, 此處使用字模軟件 HZDotReader 來生成。 關于字模軟件的用法請參閱相關 書籍,此處也不再贅言。生成好字模以后,因為軟件設計與電路圖有關,所以,我們首先來繪制例子所需要的 電路圖。此例選用的 LCD 器件是 “AMPIRE128 64”,在 Proteus 中你可以使用該關鍵詞來進 行查找。除此以外,電路圖中還需要一個滑動變阻器,你可以使用關鍵詞“POT-”來查找,并根據需要選擇相應的類型 (POT-HG 、POT
57、-LIN 等)。電路圖中涉及的其他元器件我們在以前 的電路圖中都已經見到過,此處不再敘述。最后繪制好的電路圖如下圖所示:由于 C51 語言在此類程序編寫上具有突出的優(yōu)勢,本例仍然采用C51 語言來書寫。本 例的程序源文件如下面幾個圖所示:編輯好源文件以后,在 Keil 中編譯、鏈接并生成工程代碼( .HEX 文件)。然后將生成 的源代碼裝入上面電路圖里面的單片機中,然后進行仿真,可以看到如圖中所示的結果。當然,你還可以對源程序稍作修改來實現其他你所需要的功能,比如打字效果,或者 字體的移動,等等。14 / 18 我的畢業(yè)論文(十二) : Proteus 仿真輔助 DAC 的學習2007 年 07 月 14 日 星期六 10:55DAC 是將數字信號轉換為模擬信號的一種常用器件??砂雌浞直媛实母叩蛯⑵浞譃?8 位、10 位、12 位、16 位等多種類型。課本中比較偏重講述的是 DAC0832 ,所以這里我們也將以其為重點并舉例來講述 DAC 的使用及模擬仿真。關于其他的類似器件,請查閱相關資料。例 .使用 AT89C51 與 DAC0832 的接口電路來產生三角波。由于在 Proteus 中沒有 DAC0832 器件的仿真模型, 所以這里我們使用一個普適 DAC 模 型,你可以在 Proteus中使用關鍵詞 “DAC_8 ”來進行查找。本例比較簡單,所以仍使用了匯編語言來書寫
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 南京農業(yè)大學《商務應用文寫作》2023-2024學年第二學期期末試卷
- 吉利學院《電波傳播概論雙語》2023-2024學年第二學期期末試卷
- 河北東方學院《數字信號處理課程設計實訓》2023-2024學年第二學期期末試卷
- 香港科技大學(廣州)《新藥研發(fā)的關鍵技術》2023-2024學年第二學期期末試卷
- 武漢電力職業(yè)技術學院《創(chuàng)新思維與教育創(chuàng)新創(chuàng)業(yè)》2023-2024學年第二學期期末試卷
- 昆玉職業(yè)技術學院《混凝土結構與性能A》2023-2024學年第二學期期末試卷
- 醫(yī)用紅外熱像儀項目效益評估報告
- Unit 5 The Monarch's Journey Understanding ideas 教學設計-2024-2025學年高中英語外研版(2019)必修第一冊
- 漳州城市職業(yè)學院《模式識別技術應用》2023-2024學年第二學期期末試卷
- 湖南民族職業(yè)學院《化工軟件概論》2023-2024學年第二學期期末試卷
- 2024年企業(yè)規(guī)章制度修訂方案
- 聚焦任務的學習設計作業(yè)改革新視角
- 血管活性藥物靜脈輸注護理方法(中華護理學會團體標準T CNAS 22-2021)
- 史上最完善IPD培訓資料華為IPD培訓資料
- 2024高二語文期末試卷(選必上、中)及詳細答案
- 《選材專項訓練》課件
- 附著式升降腳手架安裝平臺和架體檢查驗收表
- 小兒麻疹的護理查房
- DL-T 2574-2022 混流式水輪機維護檢修規(guī)程
- 《鋼鐵是怎樣煉成的》讀書分享課件
- GB/T 19830-2023石油天然氣工業(yè)油氣井套管或油管用鋼管
評論
0/150
提交評論