標題: 單片機原理及應(yīng)用實驗指導書(Word文檔下載) [打印本頁]

作者: tlmqq    時間: 2018-9-18 09:05
標題: 單片機原理及應(yīng)用實驗指導書(Word文檔下載)
單片機原理及應(yīng)用
實驗指導書


工業(yè)大學    信息學院
二零零

目錄
第一章 MPC100B-I型單片機實驗箱簡介
1.1系統(tǒng)組成
1.2實驗箱
1.2.1單片機最小系統(tǒng)
1.2.2基礎(chǔ)板
1.3專用開發(fā)工具
第二章 集成開發(fā)環(huán)境介紹
2.1 MedWin概述
2.1.1 MedWin集成開發(fā)環(huán)境的特點
2.1.2快速入門適用范圍
2.1.3 MedWin對系統(tǒng)的要求
2.2安裝MedWin的步驟
2.3 設(shè)置MedWin
2.4 MedWin開發(fā)入門
2.4.1 不使用MedWin集成開發(fā)環(huán)境項目管理方式
2.4.2 使用MedWin集成開發(fā)環(huán)境項目管理方式
2.5 MedWin斷點功能
2.6 MedWin菜單命令
2.7常見問題
第三章 單片機最小系統(tǒng)
實驗一、單片機最小系統(tǒng)的熟悉
一、實驗?zāi)康?/font>
二、實驗設(shè)備
三、實驗要求
四、實驗原理
五、實驗步驟
六、實驗報告
第四章 實驗指導
實驗一 多字節(jié)、多進制加減運算實驗
一、實驗?zāi)康?/font>
二、實驗要求
三、實驗原理
四、實驗步驟
五、實驗報告
實驗二、中斷實驗――中斷優(yōu)先級控制及中斷保護
一、實驗?zāi)康?/font>
二、實驗設(shè)備
三、實驗要求
四、實驗原理
五、實驗步驟
六、實驗報告
實驗三、定時器實驗――低頻脈沖計數(shù)器
一、實驗?zāi)康?/font>
二、實驗設(shè)備
三、實驗要求
四、實驗原理
五、實驗步驟
六、實驗報告
實驗四、雙機串行通訊實驗
一、實驗?zāi)康?/font>
二、實驗設(shè)備
三、實驗要求
四、實驗原理
五、實驗步驟
六、實驗報告
實驗五、SRAM外部數(shù)據(jù)存儲器擴展實驗
一、實驗?zāi)康?/font>
二、實驗設(shè)備
三、實驗要求
四、實驗原理
五、實驗步驟
六、實驗報告
實驗六、矩陣式鍵盤輸入實驗
一、實驗?zāi)康?/font>
二、實驗設(shè)備
三、實驗要求
四、實驗原理
五、實驗步驟
六、實驗報告
實驗七、8255可編程并行I/O擴展接口實驗
一、實驗?zāi)康?/font>
二、實驗設(shè)備
三、實驗要求
四、實驗原理
五、實驗步驟
六、實驗報告
1


單片機原理及應(yīng)用實驗指導書
第一章 MPC100B-I型單片機實驗箱簡介1.1系統(tǒng)組成
整個單片機實驗系統(tǒng)由實驗箱、功能擴展模塊、單片機專用開發(fā)工具、實驗指導書以及配套軟件光盤等部分組成。
1.2實驗箱
實驗系統(tǒng)的基礎(chǔ)平臺采用箱式結(jié)構(gòu),外形美觀大方、便于攜帶、利于教學,操作方便。
1.2.1單片機最小系統(tǒng)
最小系統(tǒng)板是本實驗裝置的核心模塊,它提供了51單片機的一個最小工作系統(tǒng),并充分地擴展了單片機總線和I/O口以便于與其他模塊的電路連接。最小系統(tǒng)板包括的外圍電路有:時鐘電路、復位電路、P0口鎖存電路、撥碼開關(guān)電路。最小系統(tǒng)板上擴展的I/O口,包括P0、P1、P2、P3口的每個管腳獨立都引出,作為數(shù)據(jù)總線(P0口),地址總線低8位(P0口經(jīng)鎖存后的輸出),地址總線高8位用8針的雙排插針座引出;控制總線(WR, RD, ALE等)獨立引出。
由于最小系統(tǒng)板的獨立式可更換設(shè)計,使得本實驗裝置可通過改變這個最小系統(tǒng)板來進行不同家族單片機的實驗教學,如AVR,PIC,96家族單片機等,非常靈活和方便。
1.2.2基礎(chǔ)板
基礎(chǔ)板是本實驗裝置的實驗基礎(chǔ),其內(nèi)容圍繞單片機教學大綱。
它由以下21個模塊組成:
(1)發(fā)光二極管陣列模塊;
(2)鍵盤模塊(獨立式與矩陣式兩用鍵盤);
(3)動態(tài)數(shù)碼管掃描顯示模塊;
(4)靜態(tài)串行顯示模塊;
(5)8155擴展實驗?zāi)K;
(6)8255擴展實驗?zāi)K;
(7)RS232接口實驗?zāi)K;
(8)波形信號發(fā)生器模塊;
(9)外部SRAM實驗?zāi)K(62256);
(10)外部擴展EEPROM實驗?zāi)K(W27C512);
(11)FlashROM實驗?zāi)K(W29C011A);
(12)ADC0809轉(zhuǎn)換實驗?zāi)K;
(13)V/F轉(zhuǎn)換實驗?zāi)K;
(14)DAC0832轉(zhuǎn)換實驗?zāi)K;
(15)F/V轉(zhuǎn)換實驗?zāi)K;
(16)時鐘源模塊;
(17)總線驅(qū)動與總線鎖存模塊(74HC245/74HC573);
(18)微處理器監(jiān)控模塊;
(19)電源模塊(±12V/±5V);
(20)芯片自由擴展實驗?zāi)K(2組);
(21)電位器調(diào)節(jié)模塊(2組);
(22)接口轉(zhuǎn)換模塊。
1.3專用開發(fā)工具
(1)  51系列單片機仿真器;
(2)  匯編、C51編譯器(KEIL C7.0試用版);

第二章 集成開發(fā)環(huán)境介紹
2.1 MedWin概述
MedWin是萬利電子有限公司Insight~系列仿真開發(fā)系統(tǒng)的高性能集成開發(fā)環(huán)境。集編輯、編譯/匯編、在線及模擬調(diào)試為一體,VC風格的用戶界面,內(nèi)嵌自主版權(quán)的宏匯編器和連接器,并完全支持Franklin/KeilC擴展OMF格式文件,支持所有變量類型及表達式,配合Insight系列仿真器,是您開發(fā)80C51系列單片機的理想開發(fā)工具。
2.1.1 MedWin集成開發(fā)環(huán)境的特點
1.完美的Windows版集成開發(fā)環(huán)境MedWin
2.內(nèi)嵌自主版權(quán)的宏匯編器A51和連接器L51,并支持Keil/Franklin編譯、連接工具
3.具有分別獨立控制項目文件的工程項目管理器
4.在工程項目管理下,實現(xiàn)多模塊和混合語言編程調(diào)試
5.VC風格的窗口停駐、窗口切分和工作簿模式界面
6.在線編輯、編譯/匯編、連接下載運行和錯誤關(guān)聯(lián)定位
7.符合編程語言語法的彩色文本顯示
8.完全的表達式分析,支持所有數(shù)據(jù)類型變量的觀察
9.無須點擊的感應(yīng)式鼠標提示功能
10.外部功能部件編程向?qū)?/div>
11.不限制打開數(shù)據(jù)區(qū)觀察窗口的數(shù)目
12.調(diào)試狀態(tài)下用戶程序自動重裝功能
13.提供真實的軟件模擬仿真開發(fā)環(huán)境
2.1.2快速入門適用范圍
1.MedWin集成開發(fā)環(huán)境V2.3x
2. 80C51系列仿真器SE-52/SE-52P/SE-52S,ME-52/ME52NME52P/ME52S,AE-52/AE-52E/AE-52P,ME-52H,PE-52
3.PHILIPS51LPC系列仿真器SE-764/ME-764
2.1.3 MedWin對系統(tǒng)的要求
為使MedWin集成開發(fā)環(huán)境能夠正常地運行,您必須提供以下軟硬件環(huán)境:
1.586以上的PC及兼容機
2.100M以上的剩余硬盤空間
3.分辨率為800x600以上的顯示器
4.具有SPP功能的打印機接口
5.中文或英文Windows95/98,Windows Me,Windows 2000/NT,Windows XP
6.盡量減少DOS自動批處理中關(guān)于系統(tǒng)路徑及環(huán)境變量的設(shè)置,或刪除DOS下的批處理文件Autoexec.bat文件
2.2安裝MedWin的步驟
以下分別是安裝MedWin集成開發(fā)環(huán)境的方法:

第一步:從光盤上安裝或從因特網(wǎng)下載安裝
從光盤上安裝
1.安裝中文MedWin,進入文件夾Manley\MedWin\Chinese
2.安裝英文MedWin,進入文件夾Manley\MedWin\English
3.在文件夾內(nèi),點擊setup。
從因特網(wǎng)上下載安裝
1.下載所需的MedWin中文版Chinese.zip或MedWin英文版English.zip文件
2.雙擊鼠標左鍵,釋放文件Chinese.zip或English.zip
3.將文件釋放到C:\Windows\Temp或其它文件夾
4.進入C:\Windows\Temp\Chinese或C:\Windows\Temp\English文件夾
5.在文件夾內(nèi)點擊setup,安裝MedWin集成開發(fā)環(huán)境。

第二步:安裝文件路徑設(shè)置
為了便于管理和服務(wù),建議安裝MedWin集成開發(fā)環(huán)境時,使用以下缺省路徑安裝:
1.中文版缺省安裝目標路徑:C:\Manley\PMedWin
2.英文版缺省安裝目標路徑:C:\Manley\MedWin
注意安裝MedWin集成開發(fā)環(huán)境路徑選擇。
2.3 設(shè)置MedWin
MedWin集成開發(fā)環(huán)境完成安裝后,如果是第一次安裝,請您務(wù)必注意:必須根據(jù)系統(tǒng)提示,設(shè)置工作目錄、編譯/匯編器、連接器的路徑、環(huán)境以及注冊仿真器,如果是升級安裝,則MedWin集成開發(fā)環(huán)境啟動后出現(xiàn)啟動向?qū)Р藛位蛑苯哟蜷_項目文件。
第一步;啟動MedWin
1由安裝MedWin集成開發(fā)環(huán)境,直接啟動MedWin
2.或點擊Windows[開始/程序/Manley/MedWin中文版]啟動中文版MedWin
3.或點擊Windows[開始/程序/Manley/MedWin]啟動英文版MedWin
4.如果已經(jīng)連接仿真器,屏幕上出現(xiàn)MedWin的初始畫面,進入啟動MedWin的第三步
5.如果沒有連接仿真器,屏幕上出現(xiàn)端口選擇畫面,進入啟動MedWin的第二步
第二步:選擇進入在線仿真或模擬仿真
1.由于仿真器供電電源,通訊電纜連接問題,請檢查并使仿真器工作正常后,點擊對話框中[仿真器]按鈕,進入在線仿真狀態(tài)。
2.如果確認需要進行模擬仿真,點擊[模擬仿真]按鈕,進入模擬仿真狀態(tài)。
經(jīng)過以上步驟,屏幕上出現(xiàn)MedWin集成開發(fā)環(huán)境的初始畫面,并漸漸消失,出現(xiàn)MedWin集成開發(fā)環(huán)境的系統(tǒng)畫面。
第三步:設(shè)置工作目錄
進入MedWin集成開發(fā)環(huán)境后,系統(tǒng)首先提示默認的工作目錄為C:\MedWin。我們建議用戶根據(jù)需要選擇合適的工作目錄,例如將工作目錄改為D:\WorkDir(用戶可自行定義目錄名稱)。注意:不得使用長文件名作為工作目錄!
在MedWin集成開發(fā)環(huán)境工作目錄提示對話框中,更改MedWin集成開發(fā)環(huán)境工作目錄的步驟,必須在Windows環(huán)境下進行:
1.打開Windows的資源管理器
2.選擇本地磁盤(D:)
3.單擊鼠標右鍵,選擇新建文件夾,命名為WorkDir
當建立WorkDir文件夾后,在MedWin集成開發(fā)環(huán)境點中,點擊當前工作目錄左側(cè)按鈕。在開發(fā)環(huán)境工作目錄對話框中選擇驅(qū)動器D盤后,打開文件夾(目錄)WorkDir,確認后,工作目錄設(shè)置即告完成。系統(tǒng)將提示進行下一步設(shè)置:編譯/匯編/連接器的配置。
第四步:配置編譯/匯編/連接器及環(huán)境
MedWin集成開發(fā)環(huán)境初始默認編譯/匯編/連接環(huán)境為使用萬利電子自主版權(quán)的宏匯編和連接器,使用默認設(shè)置,匯編連接信息和錯誤關(guān)聯(lián)均為中文提示。
當選擇用戶設(shè)置編譯/匯編/連接環(huán)境時,必須注意選擇合適的路徑和程序,如
1.編譯器路徑為C:\C51\BIN\C51.exe
2.匯編器路徑為C:\C51\BIN\51.exe
3.連接器路徑為C:\C51\BIN\BL51.exe
系統(tǒng)頭文件、庫文件的環(huán)境為:
1.編譯器系統(tǒng)頭文件路徑為C:\C51\INC
2.編譯器系統(tǒng)庫文件路徑為C:\C51\LIB
MedWin集成開發(fā)環(huán)境默認源程序的擴展名為:
1.C源程序文件的擴展名為.C
2.匯編源程序文件的擴展名為.ASM
當您已經(jīng)存在編譯器/匯編器/連接器時,建議按照下列目錄存放:
1.C:\C51\BIN     存放C51.exe,A51.exe,L51.exe或BL51.exe
2.C:C51\INC     存放C程序的頭文件
3.C:\C51\ASM    存放匯編程序的嵌入文件
4.C:\C51\LIB     存放C程序連接所需的庫文件
用戶可按照上面提示的路徑設(shè)置編譯器/匯編器/連接器及環(huán)境,如編譯器/匯編器/連接器存放在其它目錄,則必須在輸入框中設(shè)置合適的路徑或點擊按鈕選擇相應(yīng)的文件及路徑。
當您使用Keil編譯器時,其連接器應(yīng)設(shè)為BL51.exe,當您使用Franklinl編譯器時,其連接器應(yīng)設(shè)為L51.exe。
第五步:設(shè)置文本編輯器
設(shè)置文本編輯器可以用于設(shè)置文本窗口的前景字符的顏色、背景顏色、字體和編輯文件類型。
2.4 MedWin開發(fā)入門
MedWin集成開發(fā)環(huán)境提供了以下兩種方式開發(fā)用戶應(yīng)用程序,:
1.不使用MedWin集成開發(fā)環(huán)境項目管理方式——對源程序文件直接進行匯編/連接,兼容傳統(tǒng)開發(fā)習慣。
2.使用MedWin集成開發(fā)環(huán)境項目管理方式——可進行多模塊、混合語言編程的,同樣也適合單模塊程序的開發(fā)。
用戶無論是單模塊或多模塊的程序開發(fā),我們都建議使用項目管理方式管理應(yīng)用程序。
2.4.1 不使用MedWin集成開發(fā)環(huán)境項目管理方式
不使用MedWin集成開發(fā)環(huán)境項目管理方式,只能對單模塊方式下的應(yīng)用程序開發(fā),具有很大的局限性。以下是不使用MedWin集成開發(fā)環(huán)境項目管理方式開發(fā)應(yīng)用程序的步驟:
第一步:關(guān)閉當前項目文件
命令[項目管理/關(guān)閉當前項]
不使用MedWin集成開發(fā)環(huán)境項目管理方式開發(fā)應(yīng)用程序,用戶必須關(guān)閉已經(jīng)打開的項目,此時MedWin集成開發(fā)環(huán)境關(guān)閉界面上所有的窗口。因為當打開項目文件后,MedWin集成開發(fā)環(huán)境默認所有編譯/匯編、產(chǎn)生代碼的過程都是對項目或項目所包含的文件進行的。
第二步:在文件萊單下打開應(yīng)用程序
命令[文件/新建][文件/打開]
單模塊方式下的文件調(diào)試可以按照以下方法新建或打開文件:
1.點擊[文件/新建],輸入文件名和擴展名,新建文件
2.點擊[文件/打開],選擇文件撿取框中的文件將其打開
第三步:編譯/匯編
命令[項目管理/編譯/匯編]
MedWin集成開發(fā)環(huán)境根據(jù)文件的擴展名,自動對當前激活的文件選擇調(diào)用外部編譯器或匯編器:
1.如果當前文件的擴展名為ASM或系統(tǒng)定義的擴展名,編譯/匯編命令調(diào)用外部匯編命令對當前文件匯編
2.如果當前文件的擴展名為C或系統(tǒng)定義的擴展名,編譯/匯編命令調(diào)用外部C編譯命令對當前文件編譯執(zhí)行[項目管理|編譯/匯編]命令后產(chǎn)生的結(jié)果顯示在消息框中。
如果需要設(shè)置文件編譯/匯編的命令行參數(shù),可以選擇[項目管理1文件屬性]命令設(shè)置。
第四步:錯誤信息關(guān)聯(lián)
MedWin集成開發(fā)環(huán)境調(diào)用外部命令編譯/匯編后產(chǎn)生的結(jié)果,顯示在消息窗口中,消息窗口可由熱鍵Ctrl+9激活。當編譯/匯編發(fā)生錯誤時,消息窗口中的錯誤信息自動與源文件關(guān)聯(lián),提示出錯的位置。在消息窗口中錯誤提示處雙擊鼠標左鍵或鍵入回車,可將錯誤信息與源文件的錯誤位置關(guān)聯(lián):
1.如果編譯/匯編沒有錯誤,可進入第五步操作
2.如果編譯/匯編出現(xiàn)錯誤,在修改源文件后重復進行第三步操作
第五步:產(chǎn)生代碼并裝入仿真器調(diào)試
命令[項目管理/產(chǎn)生代碼][項目管理/產(chǎn)生代碼并裝入]
產(chǎn)生代碼或產(chǎn)生代碼并裝入命令對經(jīng)過編譯/匯編無誤后產(chǎn)生的OBJ文件進行連接產(chǎn)生用于下載的代碼。此命令自動地對修改過的源程序進行編譯或匯編,對沒有修改過的程序?qū)⒃竭^編譯或匯編過程,然后連接所有的OBJ,LIB文件,再裝載代碼到仿真器,完成調(diào)試程序所需的準備工作。裝載完成后,出現(xiàn)“Loadingprogram“(項目名)”…Completed'’的字樣。
2.4.2 使用MedWin集成開發(fā)環(huán)境項目管理方式
使用MedWin集成開發(fā)環(huán)境項目管理方式開發(fā)程序,適用于各種方式下的單模塊和多模塊方式應(yīng)用程序。以下是使用MedWin集成開發(fā)環(huán)境項目管理方式開發(fā)應(yīng)用程序的步驟:
1.建立一個新的項目進入第一步——新建項目文件
2.打開已經(jīng)存在的項目文件進入第三步——打開項目文件
第一步:新建項目文件
命令[項目管理/新建項目文件]
項目名稱
MedWin集成開發(fā)環(huán)境的項目器是按項目名稱管理的,項目管理器內(nèi)的項目名稱不可以相同。在項目名稱輸入欄內(nèi),用戶必須輸入項目名稱,并且項目名不得超過8個字符,不可以使用漢字以及“-,?,*,/”等DOS文件名所不可以使用的字符,也不可以輸入盤符和路徑!
高級設(shè)置
高級設(shè)置是用戶程序所處路徑與當前工作目錄不同時,選擇存放項目文件路徑的過程。通常,當用戶源程序文件存放在當前工作目錄時,不需要進行高級設(shè)置。如果源程序文件不在當前工作目錄時,用戶必須選擇高級設(shè)置,將項目文件存放到用戶源程序所處的目錄。
如果源文件與項目文件不在同一目錄時,將會出現(xiàn)不能進行源文件調(diào)試的情況發(fā)生。
添加文件
選擇添加文件選項,表示在項目建立后會自動打開文件撿取框,供用戶選擇文件添加到項目管理器中。
存儲器屬性
存儲器屬性Small/Compact/Large,此屬性為C編譯器所需,如果項目文件中包含C程序,用戶必須設(shè)置存儲器屬性。
RAM尺寸:128/256,此屬性為連接器所需的控制項。系統(tǒng)默認128字節(jié)。
系統(tǒng)默認標準80C51匯編選項,此選項為匯編器所需的控制項。選中時,匯編器默認SFR為80C51。
如果項目所使用的不足標準的80C51,用戶必須定義其使用的SFR,例:
    PO    DATA    80H
    E    DATA    0A8H
    TR0    BIT    8CH
項目環(huán)境設(shè)置
項目頭文件路徑為該項目所定義的頭文件所處的路徑。該路徑與系統(tǒng)定義的頭文件路徑在DOS環(huán)境設(shè)置的關(guān)系是:
set c51inc=(系統(tǒng)定義的頭文件路徑)(項目定義的頭文件路徑)
項目庫文件路徑為該項目所定義的庫文件所處的路徑,該路徑與系統(tǒng)定義的庫文件路徑在DOS環(huán)境設(shè)置的關(guān)系是:
setc51lib=(系統(tǒng)定義的庫文件路徑)(項目定義的庫文件路徑)
在項目的編譯和連接過程中,MedWin自動加入以上環(huán)境變量的設(shè)置。通常用戶不需要設(shè)置項目定義的頭文件和庫文件路徑,只有在高級應(yīng)用時才需設(shè)置。
調(diào)試信息
建立新的項目后,系統(tǒng)默認為產(chǎn)生調(diào)試信息,能夠進行源文件調(diào)試。
更多的文件屬性
關(guān)于編譯/匯編程序的更多的文件屬性,可在[項目管理I文件屬性]中設(shè)置。如果在多模塊調(diào)試中需要關(guān)閉一個或多個文件的源文件調(diào)試,可在文件屬性對話框中,分別關(guān)閉產(chǎn)生調(diào)試信息選項。
第二步:添加文件
命令[項目管理/添加文件項]
添加文件命令用于將各類文件添加至項目管理器,新建項目文件后集成環(huán)境會自動打開添加文件對話框,提供選擇。請根據(jù):
1.如果文件存在,在文件撿取框中選擇并打開文件添加
2.如果文件不存在,必須輸入文件名(包含擴展名),建立新文件
新建文件后,鍵入命令[項目管理|添加文件項],將新建文件添加到項目中。
第三步:打開項目文件
命令:[項目管理/打開項目文件]
對于已經(jīng)存在的項目文件,可以直接打開項目文件進入第四步操作。
第四步:編輯,編譯/匯編/連接
命令:[項目管理/編譯/匯編]
MedWin集成開發(fā)環(huán)境根據(jù)文件的擴展名,自動對激活的文件選擇調(diào)用外部編譯器或匯編器:
1.如果當前文件的擴展名為ASM或系統(tǒng)定義的擴展名,編譯/匯編命令調(diào)用外部匯編命令對當前文件匯編
2.如果當前文件的擴展名為C或系統(tǒng)定義的擴展名,編譯/匯編命令調(diào)用外部C編譯命令對當前文件編譯文件編譯/匯編的命令行參數(shù)由[項目管理1文件屬性]確定。
第五步:錯誤信息關(guān)聯(lián)
文件經(jīng)過編譯/匯編后的結(jié)果顯示于消息窗口,出現(xiàn)錯誤后錯誤信息與文件關(guān)聯(lián)。在消息窗口中錯誤之處雙擊鼠標左鍵或鍵入回車,即可將錯誤與文件關(guān)聯(lián):
1.如果沒有錯誤,進入第六步操作
2.如果出現(xiàn)錯誤,修改文件后重復進行第四步操作
第六步產(chǎn)生代碼并裝人仿真器
命令[項目管理/產(chǎn)生代碼]
命令[項目管理/產(chǎn)生代碼并裝入]
命令[項目管理/重新產(chǎn)生全部代碼]
產(chǎn)生代碼或產(chǎn)生代碼并裝入命令,對經(jīng)過編譯/匯編無誤后產(chǎn)生的OBJ文件進行連接,產(chǎn)生用于下載的代碼。此命令對修改過的源程序自動進行編譯或匯編,否則將越過編譯或匯編過程進行連接,并裝載代碼到仿真器,完成調(diào)試文件所需的準備工作。
1.使用產(chǎn)生代碼命令,項目管理器會自動判別文件是否需要重新編譯/匯編,提高調(diào)試效率
2.使用產(chǎn)生代碼并裝入命令,項目管理器會自動判別文件是否需要重新編譯/匯編,并將連接產(chǎn)生的代碼下載到仿真器,提供調(diào)試運行
使用重新產(chǎn)生全部代碼命令,項目管理器會對所有文件重新編譯/匯編,并將連接產(chǎn)生的代碼下載到仿真器,提供調(diào)試運行
2.5 MedWin斷點功能
MedWin集成開發(fā)環(huán)境配合|nsight系列仿真器,具有強大的斷點功能:可以在編輯和調(diào)試狀態(tài)下設(shè)置或清除斷點,并且在退出集成開發(fā)環(huán)境時自動保存斷點信息。
1.斷點標記
MedWin集成開發(fā)環(huán)境的斷點標記,根據(jù)系統(tǒng)狀態(tài)和所處窗口類型,標記如下:
1.在編輯狀態(tài)下,源程序文本窗口內(nèi)的白色箭頭——預設(shè)斷點,退出時保存,
2.在調(diào)試狀態(tài)下,源程序文本窗口內(nèi)的白色箭頭——無效斷點,退出時保存
3.在調(diào)試狀態(tài)下,源程序文本窗口內(nèi)的黃色箭頭——有效地址斷點,退出時保存
4.在調(diào)試狀態(tài)下,源程序文本窗口內(nèi)的藍綠色箭頭——臨時斷點,退出時不保存
5.在反匯編本窗口內(nèi)設(shè)置的斷點,標記為紅色光帶——地址斷點,退出時不保存
2.斷點顏色變化規(guī)律
根據(jù)系統(tǒng)狀態(tài)和所處窗口類型,MedWin集成開發(fā)環(huán)境的斷點顏色變化規(guī)律如下:
編輯狀態(tài)下,在源程序窗口內(nèi)設(shè)置斷點,標記為白色,再次設(shè)置斷點,白色斷點標記被清除。
調(diào)試狀態(tài)下,在源程序窗口內(nèi)設(shè)置斷點,標記為黃色,再次設(shè)置斷點,黃色斷點標記被清除。
調(diào)試狀態(tài)下,在源程序窗口內(nèi)藍綠色斷點處設(shè)置斷點,標記為黃色,再次設(shè)置斷點,黃色斷點標記被清除。
調(diào)試狀態(tài)下,在與源程序斷點關(guān)聯(lián)的反匯編窗口紅色光帶處設(shè)置斷點,在反匯編窗口內(nèi)清除斷點,同時將源程序斷點標記為白色,再次設(shè)置斷點,反匯編窗口標記為紅色光帶,源程序的白色斷點再次標記為黃色。
3.源程序文本上設(shè)置斷點
(1)編輯狀態(tài)設(shè)置斷點
當用戶在編寫源程序的過程中,根據(jù)調(diào)試需求,可以直接在源程序文本的任何地方設(shè)置或清除斷點。如果設(shè)置了斷點,將以白色箭頭標記在源程序文本左側(cè)的灰色狀態(tài)欄內(nèi),斷點屬性為預設(shè)斷點。對于在源程序文本上設(shè)置的斷點,系統(tǒng)退出時全部自動保存。
(2)調(diào)試狀態(tài)設(shè)置斷點
在調(diào)試狀態(tài)下,可以直接在源程序文本的有效行上設(shè)置斷點(當文本左側(cè)的灰色狀態(tài)欄內(nèi)出現(xiàn)小圓點時,表示當前程序為有效行)。設(shè)置后,斷點以黃色箭頭標記在文本左側(cè)的灰色狀態(tài)欄內(nèi),如果沒有出現(xiàn)小圓點,則不可以設(shè)置斷點。在編輯狀態(tài)下設(shè)置的斷點,經(jīng)過編譯/匯編,如果預設(shè)的斷點編譯后是有效行,則斷點標記為黃色,如果不是有效行,斷點標記為白色。對于在源程序文本上設(shè)置的斷點,系統(tǒng)退出時全部自動保存。
4.反匯編窗口內(nèi)設(shè)置斷點
斷點在反匯編窗口內(nèi)以紅色光帶表示,可以任意設(shè)置地址斷點,如果設(shè)置的斷點與源程序有效行地址關(guān)聯(lián),則與源程序相關(guān)聯(lián)的地址處設(shè)置斷點,在源程序窗口內(nèi)出現(xiàn)藍綠色箭頭。
如果在源程序斷點相關(guān)聯(lián)的反匯編窗口紅色光帶處設(shè)置斷點,將清除窗口內(nèi)的斷點光帶,同時將源程序斷點標記為白色,再次設(shè)置斷點,反匯編窗口標記為紅色光帶,源程序的白色斷點再次標記為黃色。
5.斷點表
斷點列表通過[斷點|斷點表]激活。斷點表列出所有斷點所處的地址,文件位置及屬性。
在列表框內(nèi)可以執(zhí)行添加斷點,刪除斷點等操作。
6.斷點使能
當設(shè)置了斷點或使用外部信號斷點時,選擇[斷點|斷點使能]可以允許或禁止相應(yīng)的斷點。當允許外部信號斷點后,可以設(shè)置外部信號的為上升沿或下降沿作用。
2.6 MedWin菜單命令
1、文件(F)
新建(N):新建文件,在輸入文件名時必須輸入文件的擴展名。如果是程序文件,匯編語言擴展名必須為(.asm),C語言擴展名必須為(.c)
打開(O):打開用戶程序文件,可以在文件撿取框中選擇,也可以在文件撿取框中直接輸入文件名,當文件名不存在時,系統(tǒng)默認為新建文件。
打開項目文件(P):打開MedWin集成開發(fā)環(huán)境項目文件,項目文件的擴展名為mpf。打開后,根據(jù)需要可以將打開的項目文件添加到項目管理器中。
保存(S)    Ctrl+S:保存當前激活的文件。
另存為(A):將當前激活的文件另存為指定的文件。
退出(X):退出MedWin集成開發(fā)環(huán)境。
2、編輯(E)
撤銷(U):    Ctrl+Z:撤消當前的操作。
剪切(T)    Ctrl+X:將選擇的塊剪切到剪貼板。
復制(C)    Ctrl+C:將選擇的塊復制到剪貼板。
粘帖(P)    Ctrl+P:將剪貼板粘貼到文件。
選擇整個文檔(L)    Ctrl+A:將整個文檔作為塊。
查找(F)    Ctrl+F:在文件中查找字符串。
查擇下一個(D)    F3:查找下一個匹配的字符串。
在文件中查找:在被選定的文件范圍內(nèi)查找字符串。
替換(E)    Ctrl+H:替換匹配的字符串。
設(shè)置或清除書簽(B)    Ctrl+B:在文檔中設(shè)置或清除書簽,用于快速定位。
定位到前一個書簽(R)    Ctrl+Shift+P:與設(shè)置或清除書簽命令配合,定位到前一個書簽。
定位到下一個書簽(X)    Ctrl+Shift+N:與設(shè)置或清除書簽命令配合,定位到后一個書簽。
清除所有書簽(K):清除所有書簽標記。
定位(G)    Ctd+G:定位到指定行或地址。
定位到前一個錯誤(V):將編譯/匯編發(fā)生的錯誤與源程序關(guān)聯(lián),并定位到前一個錯誤的位置。
定位到后一個錯誤(N):將編譯/匯編發(fā)生的錯誤與源程序關(guān)聯(lián),并定位到后一個錯誤的位置。
3、查看(V)
寄存器(R):寄存器窗口,顯示80C51內(nèi)核基本的寄存器R0-R7,A,B,DPH,DPL,SP和PSW,以16進制方式顯示字節(jié)寄存器的內(nèi)容,以位的方式顯示PSW的內(nèi)容。
特殊功能寄存器(S):當前被選擇的CPU所包含的特殊功能寄存器窗口,以16進制方式顯示字節(jié)寄存器的內(nèi)容。
反匯編窗口(C):反匯編窗口,將程序代碼區(qū)的內(nèi)容以反匯編方式及源程序方式顯示。反匯編窗口同時支持行匯編方式輸入或修改程序代碼。
觀察窗口第一觀察組(1)    Ctrl+l:為了方便用戶避免多次添加和刪除需要觀察的變量,設(shè)置的第一組觀察窗口。
觀察窗口第二觀察組(2)    Ctrl+2:為了方便用戶避免多次添加和刪除需要觀察的變量,設(shè)置的第二組觀察窗口。
觀察窗口第三觀察組(3)    Ctrl+3:為了方便用戶避免多次添加和刪除需要觀察的變量,設(shè)置的第三組觀察窗口。
觀察窗口第四觀察組(4)    Ctrl+4:為了方便用戶避免多次添加和刪除需要觀察的變量,設(shè)置的第四組觀察窗口。
變量竄口(V):變量窗口。
數(shù)據(jù)區(qū)Idata:片內(nèi)RAM區(qū)域,被MOV @Ri,a或MOV A, @Ri指令間接尋址訪問的數(shù)據(jù)區(qū)。
數(shù)據(jù)區(qū)Data:片內(nèi)RAM和SFR區(qū)域,被直接尋址訪問的數(shù)據(jù)區(qū)。
數(shù)據(jù)區(qū)Cdata:程序代碼空間。
數(shù)據(jù)區(qū)Xdata:外部數(shù)據(jù)空間。
數(shù)據(jù)區(qū)Bit:片內(nèi)的位寄存器區(qū)域0-127與片內(nèi)地址為20H-2FH的RAM對應(yīng),128-255~SFR相對應(yīng)。
數(shù)據(jù)區(qū)Pdata:頁面存儲方式下的外部數(shù)據(jù)空間,使用MOVX  @Ri,A或MOVX A, @Ri指令。
跟蹤存儲器(F):跟蹤存儲器窗口,對含有跟蹤存儲器功能的仿真器有效。
波形記錄器(A):波形記錄器窗口,對含有跟蹤存儲器功能的仿真器有效。
性能分析器窗口(W):性能分析器窗口,對含有性能分析器功能的仿真器有效。
消息窗口(M)    Ctrl+9:消息窗口,顯示編譯/匯編產(chǎn)生的結(jié)果,調(diào)試過程中的提示以及在文件中查找的結(jié)果。
項目管理器窗口(N)    Ctrl+0:項目管理器窗口。
5、調(diào)試(R)
開始調(diào)試(B)    Ctrl+M:切換到調(diào)試態(tài),如果已經(jīng)打開了項目文件,舅U進行產(chǎn)生代碼并裝入操作。
終止調(diào)試(D)    Ctrl+D:切換到編輯態(tài)。
全速運行(R)   F9:全速運行,調(diào)試態(tài)有效。
禁止斷點并全速運行(E)    Alt+F9:禁止斷點并全速運行,調(diào)試態(tài)有效(此命令只對具有跟蹤存儲器功能的仿真器有效)。
跟蹤(T)    F7:跟蹤運行程序,在反匯編窗口下執(zhí)行一條指令,如果當前是調(diào)用指令,則進入所調(diào)用的子程序;如果在源程序窗口下,執(zhí)行當前文本下的一條語句,如果是調(diào)用則進入所調(diào)用的子程序。調(diào)試態(tài)有效。
單步(S)    F8:單步運行程序。反匯編窗口下如是調(diào)用指令,則越過所調(diào)用的子程序:源程序窗口下,如果是調(diào)用語句,則越過所調(diào)用的子程序。調(diào)試態(tài)有效。
運行到光標處(G)    F4:程序全速運行到光標處,調(diào)試態(tài)及源程序文本或反匯編窗口有效。
運行到RETURN指令處(U)    Alt+F8:程序全速運行到RET指令處,調(diào)試態(tài)有效,對于不同的仿真器,此命令功能有所不同。
交互跟蹤(A)    Alt+F7:如果當前激活的是程序文本窗口,執(zhí)行反匯編窗口的跟蹤指令,如果當前激活的是反匯編窗口,執(zhí)行源程序文本窗口的跟蹤指令,調(diào)試態(tài)有效。
執(zhí)行到(E):執(zhí)行到設(shè)定的地址,調(diào)試態(tài)有效。
設(shè)置新的程序計數(shù)器(N)    Ctrl+N:改變當前的程序計數(shù)器值,調(diào)試態(tài)有效。
自動單步(M):自動以跟蹤的方式運行程序,調(diào)試態(tài)有效。
設(shè)置重復計數(shù)器(O):設(shè)置重復計數(shù)值,與斷點配合使用,調(diào)試態(tài)有效。
返回監(jiān)控(I)    Ctrl+T:終止運行程序,調(diào)試態(tài)有效。
程序復位(P)    Ctrl+F2:復位仿真器,調(diào)試態(tài)有效。
顯示到一步執(zhí)行(X)    Ctrl+O:刷新所有窗口,調(diào)試態(tài)有效。
添加項至觀察窗口(W)    Ctrl+W:將光標處的字符或地址作為變量添加到觀察窗口,調(diào)試態(tài)有效。
6、外圍部件(S)
中斷(I):中斷狀態(tài)窗口,包括INT0,INTl,TO,T1,T2和UART中斷狀態(tài)以及優(yōu)先級和允許設(shè)置。設(shè)置或清除相應(yīng)的標志,可以改變中斷的狀態(tài),也可以通過相應(yīng)的值,作為中斷初始化的編程。
端口(T):端口設(shè)置窗口,顯示或改變端口的狀態(tài)。
定時器/計數(shù)器0:定時器/計數(shù)器0模式和控制窗口,其TMOD和TCON的值,可以作為定時器0初始化的編程依據(jù)。
定時器/計數(shù)器1:定時器/計數(shù)器1模式和控制窗口,其TMOD和TCON的值,可以作為定時器1初始化的編程依據(jù)。
定時器/計數(shù)器2:定時器/計數(shù)器2模式和控制窗口,其T2CON的值,可以作為定時器2初始化的編程依據(jù)。
串行口(S):串行口工作模式和控制窗口,其SMOD和SCON的值,可以作為串行口初始化的編程依據(jù)。
7、項目管理(P)
新建項目文件(N):新建項目文件對話框,包含打開已經(jīng)存在的項目文件、創(chuàng)建一個新項目、新建或打開一個文件以及硬件調(diào)試。
打開項目文件(O):打開一個已經(jīng)存在的項目文件。
關(guān)閉當前項目:關(guān)閉當前已經(jīng)打開的項目文件,常用于對單模塊文件或硬件的調(diào)試。
保存當前項目(S):保存當前項目文件。
另有為(A):將當前項目文件存為其他項目文件名。
添加文件項(F):在已經(jīng)打開的項目中添加文件。添加文件的類型有源文件、頭文件、庫文件和其他文件。
移除文件項:在已經(jīng)打開的項目中刪除文件。
設(shè)置向?qū)В╓):設(shè)置編譯器/匯編器/連接器路徑以及源文件的默認擴展名和C語言的環(huán)境變量路徑。
設(shè)置工作目錄(D):設(shè)置MedWin集成開發(fā)環(huán)境的工作目錄,建議工作目錄設(shè)置在D盤,并且不要使用長文件名。
文仟屬性(I)    Ctrl+Enter:對于匯編語言程序只能設(shè)置是否需要源文件調(diào)試;對于C語言程序,還可以設(shè)置存儲器模式等。
連接屬性(L):用于對項目文件的連接控制、段定位、RAM尺寸和頭文件、庫文件路徑的設(shè)置。
編譯/匯編(T)    Ctrl+F7:根據(jù)文件的擴展名,編譯/匯編當前文件。
產(chǎn)生代碼(M):根據(jù)文件的編輯修改狀態(tài),確定是否編譯/匯編當前文件之后,對產(chǎn)生的OBJ文件連接。
產(chǎn)生代碼并裝入 (E)    Ctrl+F8:根據(jù)文件的編輯修改狀態(tài),確定是否編譯/匯編當前文件之后,對產(chǎn)生的OBJ文件連接,再將連接產(chǎn)生的代碼裝載到仿真器。
重新產(chǎn)生全部代碼(U)    Ctrl+F9:編譯/匯編項目中所有文件,對產(chǎn)生的OBJ文件連接,再將連接產(chǎn)生的代碼裝載到仿真器。
輸出IntelHEX(H):產(chǎn)生IntelHEX格式文件,默認HEX文件的文件名為項目名。
輸出Binary(B):產(chǎn)生二進制格式文件,默認B|N文件的文件名為項目名。
項目管理器(P)    Ctrl+0:激活項目管理器窗口。
9、斷點(B)
斷點(B):斷點列表窗口。
設(shè)置或清除斷點(T)    F2:在源程序或反匯編窗口中設(shè)置/清除斷點。編輯態(tài)的文本窗口以及調(diào)試態(tài)的源文件和反匯編窗口有效。
設(shè)置到(A):在指定的地址處設(shè)置斷點。
斷點使能(E):地址斷點或外部斷點使能。
禁止所有斷點(D):禁止所有地址斷點。
清除所有斷點(R):清除所有地址斷點。
設(shè)置跟蹤存儲器(S):設(shè)置跟蹤存儲器狀態(tài)
10、設(shè)置(O)
設(shè)置仿真器(E):設(shè)置仿真CPU類型,時鐘和存儲器結(jié)構(gòu)。
程序程序存踏器映像(C):設(shè)置程序存儲器映像。
程序數(shù)據(jù)存踏器映像(O):設(shè)置數(shù)據(jù)存儲器映像。
設(shè)置通訊口(T):選擇通訊口參數(shù)或進入模擬調(diào)試。
設(shè)置文本編輯器(S):設(shè)置文本編輯器環(huán)境參數(shù),如字體、顏色等。
設(shè)置向量(W):設(shè)置編譯器/匯編器/連接器路徑以及源文件的默認擴展名和C語言的環(huán)境變量路徑的設(shè)置。
設(shè)置工作目錄(D):設(shè)置MedWin集成開發(fā)環(huán)境工作目錄。
啟動向?qū)В哼x擇進入MedWin集成開發(fā)環(huán)境啟動向?qū)гO(shè)置。
11、窗口(W)
拆分(S):拆分文本窗口和存儲器窗口。
工作簿模式(W):窗口顯示模式設(shè)定是否使用工作簿模式。
關(guān)閉窗口(O)    Ctrl+F4:關(guān)閉當前激活的窗口。
關(guān)閉所有窗D(L):關(guān)閉當前所有激活的窗口。
排列圖標(A):排列當前所有激活的窗口。
層疊窗口(C):層疊當前所有激活的窗口。
橫向平鋪窗口(H):橫向平鋪當前所有激活的窗口。
縱向平鋪窗口(V):縱向平鋪當前所有激活的窗口。
刷新所有窗口(R):刷新當前所有激活的窗口和停駐窗口。
12、幫助(H)
關(guān)于MedWin(A):關(guān)于MedWin對話框中列出了軟件和硬件有關(guān)版本信息,以及仿真器產(chǎn)品的注冊。
2.7常見問題
問題現(xiàn)蒙
原因
解決方法
編譯連接時出現(xiàn)短時黑屏或 提示切換到DOS狀態(tài)
操作系統(tǒng)存在較低版本的執(zhí)行程序
格式化硬盤,重新安裝Windows
程序不能編譯/匯編
編譯/匯編器路徑設(shè)置錯誤
在設(shè)置1設(shè)置向?qū)е兄匦略O(shè)置編
缺少編譯/匯編程序
增加編譯/匯編程序
源文件名中使用了控制字符“-”
源文件名不得包含字符“-”(減號)
源文件使用了長文件名
源文件名不得超過8個字符
程序不能連接
連接器路徑設(shè)置錯誤
在設(shè)置1設(shè)置向?qū)е兄匦略O(shè)置連接
器路徑
缺少連接程序
增加連接程序
編譯/匯編出錯
改正錯誤
沒有正確使用連接器
使用L51.EXE或BL51.EXE
項目名中使用了非法字符如“-”
項目名不得使用字符“。”(減號)
項目文件所處路徑包含長文件名
建議更改工作目錄
譯器和匯編器路徑源程序窗口的左側(cè)未出現(xiàn)藍色的調(diào)試小圓點,并且執(zhí)行所有運行操作,均為全速運
源文件與項目文件不在同一目錄
將項目文件建立在源文件的目錄內(nèi)
在文件屬性內(nèi)關(guān)閉了調(diào)試信息
打開產(chǎn)生調(diào)試信息選項
使用了較低版本的匯編器
使用高版本的匯編器,如Franklin/KeilA51.EXEV4.86或以上版本
仿真器代碼映像到目標系統(tǒng)
改變正確的代碼映像
MedWin不能進入在線仿真
仿真器沒有提供電源
接通仿真器電源
仿真器沒有準備就緒
點擊測試通訊口對話框中按鈕[仿真器]
通訊電纜故障
檢查通訊電纜和連接
設(shè)置PO口總是為低#
缺少上拉電阻
因為PO口的開漏特性,必須加接上拉電阻
PO,P2口的數(shù)值與設(shè)置不同
開的外部數(shù)據(jù)窗口或觀察外部數(shù)據(jù)變量,影響了PO,P2口
閉外部數(shù)據(jù)窗口(XDATA窗口)或觀察外部數(shù)據(jù)變量
提示外部振蕩器失敗
沒有連接仿真頭
連接仿真頭

沒有提供石英晶體
提供石英晶體

仿真器時鐘選擇錯誤
重新設(shè)置仿真器時鐘
不能觀察匯編程序變量
存在小寫字符
改為大寫字符后觀察


第三章 單片機最小系統(tǒng)
實驗一、單片機最小系統(tǒng)的熟悉一、實驗?zāi)康?/strong>
在進行其他實驗之前,先熟悉實驗裝置的核心模塊——單片機最小系統(tǒng)模塊。掌握該實驗?zāi)K的電路原理和接口的使用方法。
1.掌握單片機振蕩器時鐘電路及CPU工作時序;掌握復位狀態(tài)及復位電路設(shè)計;掌握單片機各引腳功能及通用I/O口的使用;掌握單片機基本指令的使用。
2.掌握MedWin集成開發(fā)環(huán)境,仿真器和燒錄器等開發(fā)工具的使用。
二、實驗設(shè)備
1.單片機仿真器,燒錄器;
2.單片機最小系統(tǒng)實驗?zāi)K,鍵盤實驗?zāi)K,發(fā)光二極管陣列實驗?zāi)K。
三、實驗要求
1.連接實驗電路,編寫簡易單片機匯編程序達到下述工作要求:以任意兩個獨立式按鍵作為輸入,當?shù)谝绘I按下時,點亮第一行發(fā)光二極管;當?shù)诙I按下時,點亮第二行發(fā)光二極管。
2.將編寫的程序調(diào)入仿真器中,在MedWin集成開發(fā)環(huán)境中進行調(diào)試;
3.在MedWin中產(chǎn)生機器碼文件,用燒錄器燒錄到單片機芯片中,插在板子上觀察工作情況。
四、實驗原理
41  AT89C51引腳說明
我們以常用的單片機芯片AT89C51為教學實例,首先對其引腳進行簡要介紹
  • P0.0P0.7P0口的8位雙向三態(tài)I/O口線;
  • P1.0P1.7P1口的8位準雙向口線;
  • P2.0P2.7P2口的8位準雙向口線;
  • P3.0P3.7P3口的8位具有雙重功能的準雙向口線;
  • ALE:地址鎖存控制信號。
  • /PSEN:外部程序存儲器讀選通信號,讀外部ROMPSEN低電平有效。
  • /EA:訪問程序存儲器控制信號,當EA為低電平時,對ROM的讀操作限制在外部程序存儲器;當EA為高電平時,則對ROM的讀操作是從內(nèi)部程序存儲器開始,并可延至外部程序存儲器。
  • RST    復位信號,復位信號延續(xù)2個機器周期以上高電平時即為有效,用以完成單片機的復位初始化操作。
  • XTAL1 XTAL2   外接晶體引線端,當使用芯片內(nèi)部時鐘時,此二引線端用于外接石英晶體和微調(diào)電容;當使用外部時鐘時,XTAL1接地,XTAL2用于接外部時鐘振蕩器信號。
  • Vss     地線。
  • Vcc     +5V電源。

圖1-1  AT89C51引腳圖及邏輯符號圖
P3口線的第二功能見表1-1,這些特殊功能我們將在以后的實驗中進行學習。
表1-1   P3口線的第二功能
口線
第二功能
信  號  名  稱
P3.0
RXD
串行數(shù)據(jù)接收
P3.1
TXD
串行數(shù)據(jù)發(fā)送
P3.2
INT0
外部中斷0申請
P3.3
INT1
外部中斷1申請
P3.4
T0
定時器/計數(shù)器0計數(shù)輸入
P3.5
T1
定時器/計數(shù)器1計數(shù)輸入
P3.6
WR
外部RAM寫選通
P3.7
RD
外部RAM讀通

42 振蕩電路、時鐘電路和CPU時序
(1)振蕩電路、時鐘電路。如圖1- 2所示,外部時鐘振蕩電路由晶體振蕩器和電容C1、C2構(gòu)成并聯(lián)諧振電路,連接在XTAL1、XTAL2腳兩端。對外部C1、C2的取值雖然沒有嚴格的要求,但電容的大小會影響到振蕩器頻率的高低、振蕩器的穩(wěn)定性、起振的快速性。C1、C2通常取值C1=C2=30PF左右;8051的晶振最高振蕩頻率為12M,AT89C51-24PC的外部晶振最高頻率可到24M。在單片機最小系統(tǒng)板上已經(jīng)提供了晶振電路,在使用該電路時,應(yīng)加上跳線帽,并插入合適的晶振。
圖1-2 片內(nèi)振蕩器等效電路和外接元件
AT89C51也可以采用外部時鐘方式,外部時鐘從XTAL2腳輸入,XTAL1腳接地?梢圆捎梦覀儼遄由咸峁┑耐獠繒r鐘源作為單片機外部時鐘輸入。
(2)CPU時序
晶振(或外部時鐘)的振蕩頻率的確定,就確定了CPU的工作時序。這里介紹幾個重要的時序概念,我們在以后的實驗中還會經(jīng)常涉及到:
◇ 振蕩周期:或者稱時鐘周期,是指為單片機提供定時信號的振蕩器的周期。
◇ 機器周期:在8051單片機中,一個機器周期由12個振蕩周期組成。
◇ 指令周期:是指執(zhí)行一條指令所占用的全部時間。一個指令周期通常含有1~4個機器周期。機器周期和指令周期是兩個很重要的衡量單片機工作速度的值。
若外接12MHz晶振時,8051的三個周期的值為:
振蕩周期=1/12us;
機器周期=1us;
指令周期=1~4us。
在一些應(yīng)用中,傳統(tǒng)的8051的速度顯得有些慢,因此,當前很多采用8051內(nèi)核的新型單片機采用了加速處理器結(jié)構(gòu),使機器周期提高到振蕩周期的6倍、4倍等等,RISC(精簡指令集)的采用,更讓單片機在單個時鐘周期完成一條指令,使得單片機在處理速度上得到大大提高。

43  復位狀態(tài)和復位電路設(shè)計
(1)復位狀態(tài)
在8051單片機中,只要在單片機的RST引腳上出現(xiàn)2個機器周期以上的高電平,單片機就實現(xiàn)了復位。單片機在復位后,從0000H地址開始執(zhí)行指令。復位以后單片機的P0~P3口輸出高電平,且處于輸入狀態(tài),SP(堆棧寄存器棧頂指針)的值為07H(因此,往往需要重新賦值,其余特殊功能寄存器和PC(程序計數(shù)器)都被清為0。復位不影響內(nèi)部RAM的狀態(tài)。
(2)復位電路
單片機可靠地復位是保證單片機正常運行的關(guān)鍵因素。因此,在設(shè)計復位電路時,通常要使RST引腳保持10ms以上的高電平。當RST從高電平變?yōu)榈碗娖街,單片機就從0000H地址開始執(zhí)行程序。
8051單片機通常都采用上電自動復位和開關(guān)復位兩種方式。實際使用中,有些外圍芯片也需要復位,如8255等。這些復位端的復位電平要求與單片機的復位要求一致時,可以把它們連起來。
在最小系統(tǒng)板上,提供了一個通用的復位電路,在使用該板之前,必須將該電路與單片機連接起來。另外,還可以采用主板上的微處理器監(jiān)控模塊來控制復位腳,以便更加可靠地管理單片機的工作。  

44 存儲器、特殊功能寄存器及位地址
51單片機的存儲器包括5個部分:程序存儲器、內(nèi)部數(shù)據(jù)存儲器、特殊功能寄存器、位地址空間、外部數(shù)據(jù)存儲器。位地址空間、特殊功能寄存器包括在內(nèi)部數(shù)據(jù)存儲器內(nèi)。
51單片機的內(nèi)部數(shù)據(jù)存儲器一般只有128字節(jié)或256字節(jié),當空間不夠用時也就需要擴展外部數(shù)據(jù)存儲器(參見實驗五)。有些單片機不具有內(nèi)部程序存儲器,例如8031,這時就需要擴展外部程序存儲器。在單片機系統(tǒng)中,程序存儲器和外部數(shù)據(jù)存儲器的編址獨立,各可尋址64K字節(jié)空間。兩者在電路上,可以通過PSEN信號線和RD信號線區(qū)別開來。
特殊功能寄存器是非常重要的部分,我們通過對特殊功能寄存器的設(shè)置和讀寫來完成單片機的大部分工作。限于篇幅,這里不對其內(nèi)容進行羅列,請查閱有關(guān)書籍。

45  51系列單片機內(nèi)部資源概覽表

芯片種類
片內(nèi)存儲器
中斷源
定時/計數(shù)器
串行口
耗電
制造工藝
ROM/EPROM
RAM
8051
4K
128
5
2
1
125mA
HMOS
8052
8K
256
6
3
1
100mA
HMOS
以上列出的是Intel8051、8051的主要資源配置,F(xiàn)在,由于8位51單片機的廣泛使用,各個芯片生產(chǎn)廠商推出了具有自身特色的采用51內(nèi)核的單片機,它們在這些基本資源的基礎(chǔ)上進行了進一步的裁減或增強。
五、實驗步驟
1、連接單片機與復位電路、時鐘源(晶振電路或外部時鐘源),選擇幾組I/O口,用導線分別連接發(fā)光二極管陣列、及鍵盤。以下對涉及到的其他實驗?zāi)K進行簡要介紹:
(1)發(fā)光二極管陣列模塊:
如左圖所示,每行為8個發(fā)光二極管,共4行。每行與底部的8針排線座相對應(yīng)。第一行發(fā)光二極管與從左數(shù)第一個插座對應(yīng),第二行發(fā)光二極管與左數(shù)第二個插座對應(yīng)……。插座的每個引腳與發(fā)光管陰極相連,也就是說,當對應(yīng)腳為低電平時,發(fā)光二極管點亮。

(2)鍵盤陣列模塊:鍵盤模塊是“獨立式”和“矩陣式”兩用鍵盤。使用之前,必須連接鍵盤模塊右下角的VCC和GND,為模塊提供電源。模塊右邊的S0~S15鎖緊孔,是獨立式鍵盤接口,分別對應(yīng)著鍵S0~S15。當某個鍵按下時,對應(yīng)的接口將被拉低。
電路示例如下:

圖1-3  電路原理圖示例
2實驗示例程序:
假設(shè)P3.1,P3.2口分別連接兩個鍵,P0口連接第一行發(fā)光二極管,P1口連接第二行發(fā)光二極管,參看電路圖1-3。程序?qū)嵗缦拢?/div>
ORG 0000H
AJMP START
ORG 0030H
START:       MOV P 3,0FFH
MOV A,P3
MOV 40H,A                            ;暫放于40H
ACALL  DL10MS                            ;去抖延時
MOV A,P3
CJNE A,40H,PASS
CJNE A,#0FEH,LAMP1;是第一鍵嗎?
MOV P1,#0FFH
MOV P0,#00H        ;點亮第一行發(fā)光二極管
PASS:         LCALL DL10MS       ;延時
AJMP START
LAMP1:                  CJNE A,#0FDH,PASS;是第二鍵嗎?
              MOV P0,#0FFH
MOV P1,#00H
AJMP PASS
;延時子程序:
DL10MS:       MOV R7,#08h
LOOP1:    MOV R6,#0F9H
LOOP2:    NOP
          NOP
          DJNZ R6,LOOP2
        DJNZ R7,LOOP1
          RET
END

在Medwin集成開發(fā)環(huán)境中編寫單片機程序,步驟如下:點擊【文件】菜單,建立新項目(PROJECT),項目命名如 當前文件夾\XXX.prj;建立新文件,命名為XXX.asm;這時就可在文本編輯區(qū)輸入程序代碼了。程序編寫完成后(參考示例程序),點擊【項目管理】菜單下【編譯/匯編】項,進行程序編譯,如果程序有錯誤則系統(tǒng)通過調(diào)試項提示。排除所有的錯誤,直到編譯完全成功。
3、正確連接仿真器與PC機、仿真頭與目標板、仿真器電源。正確連接目標板電源。點擊【項目管理】菜單下產(chǎn)生并生成代碼項,程序被裝入仿真器,點擊調(diào)試菜單下【全速運行】選項,程序運行,觀察程序運行結(jié)果。在【項目管理】菜單下點擊【輸出Intel Hex文件】或【輸出binary文件】,輸出機器代碼文件。
4、正確連接燒錄器和PC機、燒錄器電源。取單片機芯片,放入燒片機芯片座(注意放置位置),夾緊;打開燒錄器驅(qū)動軟件,點擊【器件】菜單下選擇器件項,選擇正確的芯片型號。點擊【文件】菜單下打開項,輸入剛才生成.hex或.bin文件的路徑,點擊打開,文件被下載到燒錄器。點擊【器件】菜單下【運行】項,分別運行erase, blank check, program,verify(或在確定Auto中內(nèi)容后,運行Auto)。成功后程序便固化到單片機中了。
5、除去目標板電源,將單片機取下,插入目標板插座中,注意對齊1腳。正確連接目標板電源。觀察程序運行情況。
六、實驗報告
1、說明單片機的各個引腳的功能及作用,比較P0,P3腳的異同?
2、時鐘周期、機器周期的關(guān)系是什么?在單片機外部晶振為12M時,下面的延時子程序延時了多少時間?當晶振為6M時呢?
DELAY:MOV  R5,#08H
DL1:   MOV   R6,#00H
DL2:   MOV   R7,#80H
DJNZ   R7,$
DJNZ   R6,DL2
DJNZ   R5,DL1
RET
3、畫出實驗原理圖。
4、給出單片機程序流程圖和程序清單。
3、進行完該項實驗后,你對單片機的開發(fā)工具和開發(fā)過程了解了嗎?請畫出單片機開發(fā)過程流程圖。

第四章 實驗指導
實驗一 多字節(jié)、多進制加減運算實驗一、實驗?zāi)康?/strong>
  • 學習多字節(jié)壓縮BCD碼加減運算的程序設(shè)計;
  • 學習單字節(jié)有符號數(shù)加減運算的程序設(shè)計。
二、實驗要求
1.編寫通用4字節(jié)壓縮BCD碼的加、減法運算程序;
2.編寫通用單字節(jié)有符號二進制數(shù)加、減法運算程序;
三、實驗原理
對于簡單的8位加減可以直接調(diào)用指令就可以了。例如加法可以使用指令ADD以及帶進位加ADDC,但單字節(jié)加減法只能在256之內(nèi)進行運算;在實際應(yīng)用中經(jīng)常需要進行多字節(jié)運算,從而處理更大的數(shù)據(jù)。該實驗介紹單片機BCD碼多字節(jié)加、減運算通用程序的設(shè)計。
1.多字節(jié)無符號壓縮BCD碼加法運算
假設(shè)多字節(jié)無符號被加數(shù)的最低字節(jié)的地址為R0,加數(shù)的最低字節(jié)地址為R1,字節(jié)數(shù)共為len;計算結(jié)果的地址于被加數(shù)相同。
◆ 入口參數(shù):
R0:被加數(shù)地址指針;
R1:加數(shù)地址指針;
len:字節(jié)數(shù)。
◆ 出口參數(shù):
@R0:計算結(jié)果;
rLen:計算結(jié)果字節(jié)數(shù)。

◆  使用資源:ACC,R0、R1,內(nèi)部RAM單元len、rlen及存放被加數(shù)、加數(shù)、計算結(jié)果的內(nèi)存單元。
示例程序如下:
len    DATA  70H
   rlen   DATA  71H

ADDSTART: PUSH  PSW            ;保護標志寄存器內(nèi)容
             CLR  C                ;進位位清0
             MOV  rlen,#00H       ;和的字節(jié)數(shù)先清0
LOOP:    MOV  A,@R0         ;取被加數(shù)
            ADDC   A,@R1        ;求和
            DA    A                ;十進制調(diào)整
            MOV  @R0,A         ;保存
            INC    R0              ;地址增1
INC    R1
            INC    rlen             ;字節(jié)數(shù)增1
           DJNZ  len,LOOP     ;所有字節(jié)未加完繼續(xù),否則向下執(zhí)行
           JNC    ADDEND         ;和的最高字節(jié)無進位轉(zhuǎn)ADD20
          MOV   @R0,#01H    ;和的最高字節(jié)地址內(nèi)容為01H
          INC    rlen
ADDEND:      POP    PSW
               RET
                END

多字節(jié)加法運算一般是按從低字節(jié)到高字節(jié)的順序進行的,所以必須考慮低字節(jié)向高字節(jié)的進位情況,被加數(shù)和加數(shù)的壓縮BCD碼,最大不超過99,而99+99+1(進位)=199,此時可以不需要使用ADDC指令,但當最低兩字節(jié)相加后,必須使用“DA  A”進行十進制調(diào)整,調(diào)整后產(chǎn)生進位。而最高兩字節(jié)相加后應(yīng)考慮是否有進位。若有進位,應(yīng)向和的最高位字節(jié)地址寫入01H,這時和數(shù)將比加數(shù)或被加數(shù)多出一個字節(jié)。
2.多字節(jié)無符號壓縮BCD碼減法運算
為了使用“DA A”指令對十進制減法進行調(diào)整,必須采用對減數(shù)求補相加的方法,以9AH為模減去減數(shù)即得到減數(shù)的補數(shù)。設(shè)被減數(shù)低字節(jié)地址在R1中,減數(shù)低字節(jié)地址在R0中,字節(jié)數(shù)在len中;差的低字節(jié)地址在R0中,差的字節(jié)數(shù)在rlen中。
  • 入口參數(shù):
R0:減數(shù)地址指針;
R1:被減數(shù)地址指針;
len:字節(jié)數(shù)
  • 出口參數(shù):
R0:差的地址指針
rlen:差的字節(jié)數(shù)
  • 使用資源: A,R0,R1,內(nèi)部RAM單元
范例程序如下:
    SUBSTART:MOV  rlen,#00H       ;差字節(jié)單元清0
          CLR  07H               ;07H做符號位標準,符號位清0
           CLR  C                 ;借位位清0
SUB1:     MOV  A,#9AH       ;減數(shù)對模100求補
                SUBB  A,@R0
            ADD  A,@R1      ;補碼相加
           DA    A
           MOV  @R0,A          ;存結(jié)果
            INC   R0   
           INC   R1
            1NC   rlen   
            CPL    C            ;進位求反以形成正確借位
            DJNZ len,SUBl    ;未減完繼續(xù),減完向下執(zhí)行   
          JNC   SUB2        ;無借位去別Ⅸm返回主程序,否則繼續(xù)
        SETB  07H           ;有借位,置“1”符號位
SUB2:     RET
               END
程序中對減數(shù)求補后與被減數(shù)相加,用“DA  A”指令進行調(diào)整。若二者相加調(diào)整后結(jié)果無進位(C=0),則表示二者相減有借位;若二者相加調(diào)整后有進位(C;1),則表示二者相減無借位。所以必須對進位標志位C進行求反操作,才能得到正確結(jié)果。
3.單字節(jié)帶符號數(shù)加法運算(選做)
編程范例:
兩個8位二進制帶符號數(shù)加法,被加數(shù)和加數(shù)分別存于BLK和BLK+1單元,和超過8位要占兩個單元,設(shè)為SUM和SUM+1單元。
解:兩個帶符號數(shù)的加法是作為補碼加法處理的。由于和超過8位,因此,和就是一個16位帶符號數(shù),符號位在16位數(shù)的最高位。為此,直接相加進位是不夠的,還要做一些處理。例如-65和-65相加,若直接求和產(chǎn)生溢出,即使擴展到16位,結(jié)果也不正確。如:
-65    1 0 1 1 1 1 1 l B
+)-65   1 0 1 1 1 1 1 1 B
0 0 0 0 0 0 0 1 0 1 1 1 1 1 1 0 B
現(xiàn)在這個16位數(shù)的最高位為0,兩個負數(shù)相加變?yōu)檎龜?shù),顯然是錯誤的。
處理的方法是先將8位帶符號數(shù)擴展成16位帶符號數(shù),然后再相加。若是8位正數(shù),則高8位擴展為00H;若是8位負數(shù),則高8位擴展為0FFH。這樣處理后,再按雙字節(jié)相加,就可以得到正確的結(jié)果。如上例,由于是負數(shù),高8位應(yīng)是全1,然后再加:
      -65    1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1B
    +) -65   1 1 1 1 1 1 1 1 1 0 1 l 1 1 1 1B
             1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0B,
最高位的進位丟失不計。換算成真值為—130,結(jié)果正確。
在編程時,判別加數(shù)和被加數(shù)的符號位,再決定是否要將高8位改為0FFH。
程序如下:
   BLK    DATA  30H
    SUM    DATA  40H

    MOV  R0,#BLK        ;R0指向被加數(shù)
    MOV  R1,#SUM        ;R1指向和
    MOV  R2,#0          ;高8位先設(shè)為0
    MOV  R3,#0
    MOV  A,@R0         ;取出被加數(shù)
    JNB  ACC.7,N1       ;若是正數(shù)轉(zhuǎn)移到N1
    MOV  R2,#0FFH       ;若是負數(shù)高8位為全1
N1:INC  R0               ;修改即指針
    MOV  B,@R0         ;取加數(shù)到B
    JNB  B.7,N2           ;若是正數(shù)轉(zhuǎn)移N2
    MOV  R3,#0FFH       ;若是負數(shù)高8位為全1
N2:ADD  A,B            ;低8位相加  .
    MOV @R1,A          ;存低8位和
    INC    R1              ;修改R1指針
    MOV  A,R2          ;準備加高8位
    ADDC  A,R3          ;高8位相加
    MOV  @R1,A        ;存高8位和
    SJMP    $
    END
四、實驗步驟
1.按照實驗要求編寫程序。
2.在開發(fā)環(huán)境中運行程序,對通用寄存器進行賦值,看運算結(jié)果是否正確。
五、實驗報告
1.給出各個程序的清單,要求有注釋。
2.分析DA  A指令的作用。
  • 給出實驗參數(shù)及實驗結(jié)果,要求對實驗現(xiàn)象和結(jié)果進行分析。

實驗二、中斷實驗――中斷優(yōu)先級控制及中斷保護
一、實驗?zāi)康?/strong>
1、掌握單片機中斷機制。
2、熟悉中斷的應(yīng)用和編程。
二、實驗設(shè)備
  • 仿真器;
  • 單片機最小系統(tǒng);
  • 發(fā)光二極管陣列顯示模塊;
  • 獨立式鍵盤模塊。
三、實驗要求
連接單片機最小系統(tǒng)和發(fā)光二極管陣列的電路并編寫程序,學習單片機中斷機制,及中斷優(yōu)先級和中斷保護的方法:
使用獨立式按鍵1連接(P3.2),按鍵2連接(P3.3),在平時狀態(tài)下,發(fā)光二極管行以200ms的時間間隔,依次點亮。1鍵按下時中斷處理程序點亮P0.0對應(yīng)的發(fā)光管2秒鐘,其他發(fā)光管熄滅;2鍵按下時P0.1對應(yīng)發(fā)光管點亮2秒,其他發(fā)光管熄滅。
四、實驗原理
通常一個微處理器讀取外圍設(shè)備(如鍵盤等)的輸入信息的方法有輪詢(Polling)及中斷(Interrupt)兩種。輪詢的方法是CPU依照某種既定法則,依序詢問每一外圍設(shè)備I/O是否需要服務(wù),此種方法CPU需花費一些時間來做詢問服務(wù),當I/O設(shè)備增加時,詢問服務(wù)時間也相對增加,勢必浪費許多CPU時間,降低整體運行的效率。使用中斷是一個較好的解決方法。使用中斷使系統(tǒng)對外部設(shè)備的請求響應(yīng)更加靈敏,并且不需要占用CPU的時間進行輪詢。但是,當使用中斷,特別是有多個中斷嵌套時要特別注意內(nèi)存單元的保護。
  • 80C51中斷結(jié)構(gòu)
當中斷發(fā)生后,程序?qū)⑻翆?yīng)中斷入口地址去執(zhí)行中斷子程序,或稱中斷服務(wù)程序(Interrupt Service Routine),這些特殊的地址稱為中斷向量,例如當80C51外部中斷INTl發(fā)生時,會暫停主程序的執(zhí)行,跳至地址0013H去執(zhí)行中斷服務(wù)程序,直到RETI指令后,才返回主程序繼續(xù)執(zhí)行。MCS-51系列的程序內(nèi)存中有7個矢量地址,敘述如下:
(1)00H復位
當?shù)?腳RESET為高電平,CPU會跳至地址00H處開始執(zhí)行程序,亦即程序一定要從地址00H開始寫起。
(2)03H(外部中斷0)
引腳由高電位變至低電位(跳沿觸發(fā)方式)或采樣到是低電位(電平觸發(fā)方式)時,CPU會接受外部中斷0,并跳至地址03H處去執(zhí)行中斷子程序。
(3)0BH(定時器/計數(shù)器0中斷)
當CPU接受定時器/計數(shù)器0中斷置位而產(chǎn)生中斷要求時,會跳至地址0BH處去執(zhí)行中斷子程序。
(4)13H(外部中斷1)
引腳由高電位變至低電位(跳沿觸發(fā)方式)或采樣到是低電位(電平觸發(fā)方式)時,CPU會接受外部中斷1,并跳至地址13H處去執(zhí)行中斷子程序。
(5)1BH(定時器/計數(shù)器1中斷)
當CPU接受定時器/計數(shù)器1中斷置位而產(chǎn)生中斷要求時,會跳至地址1BH刻去執(zhí)行中斷子程序。
(6)23H(串行中斷1)
當串行端口傳送數(shù)據(jù)或接收數(shù)據(jù)完畢時,CPU會接受串行中斷,并跳至地址23H處去執(zhí)行中斷子程序。
(7)2BH(定時器/計數(shù)器2中斷)
此中斷僅8052系列才有。當CPU接受定時器/計數(shù)器2產(chǎn)生中斷要求時,會跳至地址2BH處去執(zhí)行中斷子程序。


圖2.1 MCU內(nèi)部中斷機制

2.中斷使能位
8051針對中斷提供兩層使能,第一層為EA全局使能控制,第二層為分別控制EX0,ET0、EXl、ETl、ES、ET2。當8051在復位狀態(tài)時,寄存器的各個中斷使能位都預設(shè)為“0”,即所有中斷都禁止,故欲允許中斷時,應(yīng)先使能相對應(yīng)的中斷。當中斷產(chǎn)生后,中斷狀態(tài)會記錄于定時器/計數(shù)器控制寄存器(Timer/CounterControlRigister,TCON)和串口口控制寄存器SCON的中斷請求標志(InterruptRequest flag)中,當標志被置位,表示中斷已發(fā)生。由圖2.1可知,當外部中斷或定時器0、定時器1中斷發(fā)生時,CPU都可以判別是哪種中斷。因此當這四個中斷發(fā)生時,中斷服務(wù)程序被執(zhí)行后,CPU會主動清除中斷請求標志,對于其他的中斷,由于CPU無法判別,因此中斷請求標志需由程序指令來清除。
欲設(shè)定中斷使能與否,必須設(shè)置中斷使能寄存器IE(Interrupt Enable Register),其位地址A8H,是一個可位尋址的寄存器。

3.中斷保護
由于各個中斷入口間僅有8個字節(jié),一般情況下難以安排下一個完整的中斷服務(wù)程序。因此,通?偸窃谥攸c入口地址處放置一條無條件轉(zhuǎn)移指令,使程序轉(zhuǎn)向在其他地址存放的中斷服務(wù)程序。當執(zhí)行新的中斷服務(wù)程序時,注意不可以破壞舊有的數(shù)據(jù)和狀態(tài),因此在編寫時還要注意保護現(xiàn)場,主要是各個寄存器的值。通常會被更改的數(shù)據(jù)(如ACC、PSW等),可以利用堆棧在執(zhí)行中斷服務(wù)程序之前就將其PUSH起來,待執(zhí)行結(jié)束后再將相關(guān)寄存器POP即可。另外,因為8051可任意選擇四個工作寄存器區(qū)中的一組工作寄存器,所以利用選擇不同寄存器區(qū)的方式亦可達到數(shù)據(jù)保存的目的。

4.中斷優(yōu)先級
8051對于各種中斷優(yōu)先權(quán)采用雙層結(jié)構(gòu),首先對于優(yōu)先權(quán)可由中斷優(yōu)先權(quán)寄存器(Interrupt Priority )IP設(shè)定該中斷為高優(yōu)先權(quán)或低優(yōu)先權(quán),高優(yōu)先權(quán)可以中斷低優(yōu)先權(quán),反之不行。當同一時間同一級別的多個中斷請求是,則按自然優(yōu)先級順序相應(yīng)中斷。

IP寄存器:



PS
PT1
PX1
PT0
PX0

(MSB)                                                              (LSB)
PX0,PX1:外部中斷0,1的中斷優(yōu)先級控制;1->高優(yōu)先級,0->低優(yōu)先級。
PT0,PT1:定時器/計數(shù)器0,1的中斷優(yōu)先級控制;
PS:串行口中斷優(yōu)先級控制。
IP中對應(yīng)位全為零時,CPU按照片自然優(yōu)先級來順序響應(yīng)中斷:
中斷源
外部中斷0                               高
定時器/計數(shù)器0
外部中斷1
定時器/計數(shù)器1
串行口中斷                               低

五、實驗步驟
本實驗將練習使用,的中斷,利用按鍵來觸發(fā)外部中斷的發(fā)生。并通過兩個中斷先后到達的方法,來學習中斷優(yōu)先級的意義與控制。
1、電路說明
在圖2.2中,主程序執(zhí)行時,單片機端口P0所接的LED由P0.7至P0.0一次一顆循環(huán)點亮。當外部中斷0產(chǎn)生后,執(zhí)行該中斷子程序,此時P0.0對應(yīng)的二極管亮,其他二極管熄滅。2秒鐘后,返回主程序的工作。中斷子程序則為點亮P0.1對應(yīng)的二極管,其他二極管熄滅。注意,由于每次在按鍵按下或放開可能會有抖動現(xiàn)象,因而必須進行必要的處理,以免產(chǎn)生二次以上的相同中斷信號。
在程序主循環(huán)進行時,當1鍵按下,相應(yīng)發(fā)光管點亮后,立即再按下2鍵,看反應(yīng)如何;在程序主循環(huán)進行時,按下2鍵,相應(yīng)發(fā)光管點亮后,立即按下1鍵,觀察反應(yīng)。
電路連線如圖2.2:


              1

              2

圖2.2  實驗電路參考
2.程序設(shè)計
先按l鍵執(zhí)行中斷子程序,在此中斷子程序未結(jié)束前再按2鍵,或是先按2鍵執(zhí)行中斷子程序,在此中斷子程序未結(jié)束前再按l鍵,或兩者同時按,觀察lED亮暗的情形即可觀察中斷優(yōu)先權(quán)執(zhí)行的情形。
程序范例
;******************************************************************************

          ORG    0000H
          AJMP   MAIN
          ORG    0003H
          AJMP    INT0INT
          ORG    0013H
          AJMP    INT1INT

;**********主程序**********************************
          ORG    0030H
MAIN:   MOV    SP,#60H   
MOV    IE,#10000101B        ;使能INT0,INTl
          MOV    TCON,#00000101B     ;設(shè)INT0、INTl跳沿觸發(fā)。
          MOV    IP,#01H                                     ;外部中斷0優(yōu)先
        MOV    A,#0FEH
LOOP:   RR     A
          MOV    P0,A
          ACALL  DELAY200MS
          AJMP   LOOP

;*****************INT0中斷服務(wù)程序*****************************
INT0INT:     CLR  EA
ACALL   DELAY10MS       ;去抖動
JNB  INT0, HAVKEY1         ;確實有鍵,轉(zhuǎn)HAVEKEY1
SETB  EA
RETI
HAVEKEY1:  PUSH  PSW
             PUSH  Acc
SETB  EA
MOV  P0,#0FEH
ACALL  DELAY2S            ;亮2秒鐘
POP  Acc
POP  PSW
RETI

;************INT1中斷服務(wù)程序******************************
INT1INT:
                (…………)
                 RETI
;********************************************************
DELAY200MS:                                    ;延時200ms子程序
                (…………)
                  RET
DELAY10MS:                                      ;延時10ms子程序
                (…………)
                  RET
DELAY2S:                                         ;延時2s子程序  
                (………….)
                 RET
END

程序范例中用“(………)”表示的程序段需學生自己編寫。
運行整個程序,觀察是否符合理論分析的結(jié)果。
六、實驗報告
  • 畫出電路原理圖,并簡要分析工作原理;
  • 提供程序流程圖和程序清單,適當給出注釋;
  • 描述實驗現(xiàn)象和結(jié)果,要求對實驗現(xiàn)象和結(jié)果進行分析。

實驗三、定時器實驗――低頻脈沖計數(shù)器
一、實驗?zāi)康?/strong>
1、掌握定時器/計數(shù)器的工作原理。
2、學習單片機定時器/計數(shù)器的應(yīng)用設(shè)計和調(diào)試。
二、實驗設(shè)備
1、仿真器;
2、單片機最小系統(tǒng);
3、波形信號發(fā)生器;
4、靜態(tài)串行方式數(shù)碼管顯示模塊。
三、實驗要求
連接電路并編寫程序,使單片機定時器/計數(shù)器測量波形信號發(fā)生器輸出的低頻脈沖信號的頻率,并在數(shù)碼管上顯示頻率值;
四、實驗原理
805l單片機內(nèi)部有兩個16位可編程定時/計數(shù)器,記為T0和Tl。8052單片機內(nèi)除了T0和T1之外,還有第三個16位的定時器/計數(shù)器,記為T2。它們的工作方式可以由指令編程來設(shè)定,或作定時器用,或作外部脈沖計數(shù)器用。
定時器T0由特殊功能寄存器TL0和TH0組成,定時器Tl由特殊功能寄存器TLl和TH1組成。定時器的工作方式由特殊功能寄存器TMOD編程決定,定時器的運行控制由特殊功能寄存器TCON編程控制。
T0、T1在作為定時器時,規(guī)定的定時時間到達,即產(chǎn)生一個定時器中斷,CPU轉(zhuǎn)向中斷處理程序,從而完成某種定時控制功能。T0、T1用作計數(shù)器使用時也可以申請中斷。作定時器使用時,時鐘由單片機內(nèi)部系統(tǒng)時鐘提供;作計數(shù)器使用時,外部計數(shù)脈沖由P3口的P3.4(或P3.5)即T0(或T1)引腳輸入。
方式控制寄存器TMOD的控制字格式如下:
7
6
5
4
3
2
1
0
GATE
C/-T
M1
M0
GATE
C/-T
M1
M0
\_____________T1_________________/ \_______________T0_________________/
低4位為T0的控制字,高4位為T1的控制字。GATE為門控位,對定時器/計數(shù)器的啟動起輔助控制作用。GATE=l時,定時器/計數(shù)器的計數(shù)受外部引腳輸入電平的控制。由由運行控制位TRX(X=0,1)=1和外中斷引腳()上的高電平共同來啟動定時器/計數(shù)器運行;GATE=0時。定時器/計數(shù)器的運行不受外部輸入引腳的控制,僅由TRX(X=0,1)=1來啟動定時器/計數(shù)器運行。
C/-T為方式選擇位。C/-T=0為定時器方式,采用單片機內(nèi)部振蕩脈沖的12分頻信號作為時鐘計時脈沖,若采用12MHz的振蕩器,則定時器的計數(shù)頻率為1MHZ,從定時器的計數(shù)值便可求得定時的時間。
C/-T=1為計數(shù)器方式。采用外部引腳(T0為P3.4,Tl為P3.5)的輸入脈沖作為計數(shù)脈沖,當T0(或T1)輸入信號發(fā)生從高到低的負跳變時,計數(shù)器加1。最高計數(shù)頻率為單片機時鐘頻率的1/24。
M1、M0二位的狀態(tài)確定了定時器的工作方式,詳見表3.1。
表3.1定時器工作模式表:
Ml
M0
功能說明
0
0
方式0,為13位定時器/計數(shù)器
0
1
方式1,為16位的定時器/計數(shù)器
l
0
方式2,為常數(shù)自動重新裝入的8位定時器/計數(shù)器
1
1
方式3,僅適用于T0,分為二個8位計數(shù)器

方式1與方式2的差別是計數(shù)器的位數(shù),前者13位,后者16位。定時器內(nèi)部結(jié)構(gòu)邏輯圖如圖3.1所示。

圖3.1 定時器內(nèi)部邏輯圖

要測量低頻信號可以首先產(chǎn)生一個標準時間T閘門信號,然后在該時間內(nèi)計算進入計數(shù)器的脈沖個數(shù)。這個時間有時太短,需結(jié)合軟件定時。如果要求比較高,則需要進行智能地調(diào)整T。例如對于500HZ信號,使用65ms閘門時間,則計數(shù)器值就非常少。計數(shù)器的值超過10000個,才能保證精度不少于0.05%。如果在3秒內(nèi)還是發(fā)現(xiàn)計數(shù)器的值少于精度需要,則自動切換到周期測量模式,通過周期計算頻率具有較高的精度。如果要求3秒內(nèi)給出結(jié)果,則周期超過3秒的信號就無法得到準確的頻率或周期。
五、實驗步驟
1.電路連接
參考以下電路示意圖連接電路:


圖3.2 低頻脈沖信號測量參考電路示意圖
2.軟件編寫
示例程序如下:
            ORG     0000H
            LJMP    MAIN
           (______________)
LJMP    INTS_T0

;***********************主程序**************************************
            ORG     0030H
MAIN:      MOV     SP,#40H
MOV     TMOD,(___)
;兩個定時器都是方式1,定時器1對外部信號計數(shù)
            MOV     TL0,#0AFH
            MOV     TH0,#3CH              ;0FFFFH-3CAFH=50000,50ms
            MOV     B,#20      ;軟件計數(shù)器。循環(huán)20次,T0共定時20×50ms=1s
            MOV     TL1,#0H
            MOV     TH1,#0H
            (____________)                       ;允許T0中斷
            (____________)                      ;禁止T1中斷
            SETB    EA
            SETB    TR0
            SETB    TR1
            SJMP     $

;******************T0定時1s的中斷服務(wù)程序****************************
INTS_T0:    CLR     EA                        ;關(guān)中斷
DJNZ    B,CONTINUE              
;1s定時到,把T0、T1都關(guān)掉,計算1s鐘內(nèi)T1的計數(shù)脈沖有多少   

CLR     TR1         
CLR     TR0
            MOV     R0,#30H
            MOV     @R0,TL1                      ;獲取數(shù)據(jù)。先低后高
            INC     R0
            MOV     @R0,TH1;
ACALL    NDIV1                        ;16位調(diào)整為五個十進制數(shù)

MOV     R0,#36H
DSHOW:    ACALL    SHOW                         ;顯示
            MOV     TL1,#0H
            MOV     TH1,#0H
            SETB    TR0
            SETB    TR1
            MOV     B,#20
CONTINUE:
            MOV     TL0,#0AFH
            MOV     TH0,#3CH
            SETB    EA
(_________)           ;中斷返回

;********(31H高8位 30H低8位)***********************************************
;********(32H個位,33H十位,34H百位,35H千位,36H萬位);R3,R4余數(shù)***********
;********NDIV1子程序:把0~FFFFH,轉(zhuǎn)換成五個十進制數(shù)**************************
NDIV1:
         MOV   R0,#30H
         MOV   R1,#36H
         MOV   R2,#0                              ;商65535
L10000:                                             ;除以10000   即2710H
         CLR   C
         MOV   R0,#30H
         MOV   A,@R0
         SUBB  A,#10H
         MOV   R3,A                             ;低位余數(shù)
         INC   R0
         MOV   A,@R0
         SUBB  A,#27H
         MOV   R4,A
         JC    L1000                             ;不超過10000,
         INC   R2
         MOV   30H,R3
         MOV   31H,R4
         JMP   L10000
L1000:                                          ;除以1000   即3E8H
         MOV   36H,R2
         MOV   R2,#0H
L1000A:
         MOV   R0,#30H
         CLR   C
         MOV   A,@R0
         SUBB  A,#0E8H
         MOV   R3,A                                    ;低位余數(shù)
         INC   R0
         MOV   A,@R0
         SUBB  A,#3H
         MOV   R4,A
         JC    L100                                      ;不超過1000
         INC   R2
         MOV   30H,R3
         MOV   31H,R4
         JMP   L1000A
L100:                                                     ;除以100   即64H
         MOV   35H,R2
         MOV   R2,#0H
L100A:
         MOV   R0,#30H
         CLR   C
         MOV   A,@R0
         SUBB  A,#64H
         MOV   R3,A                                     ;低位余數(shù)
         INC   R0
         MOV   A,@R0
         SUBB  A,#0H
         MOV   R4,A
         JC    L10                                      ;不超過100
         INC   R2
         MOV   30H,R3
         MOV   31H,R4
         JMP   L100A
L10:
         MOV   34H,R2
         MOV   R2,#0H
L10A:
         MOV   R0,#30H
         CLR   C
         MOV   A,@R0
         SUBB  A,#10
         MOV   R3,A                                       ;低位余數(shù)
         JC    L1                                        ;不超過10
         INC   R2
         MOV   30H,R3
         JMP   L10A
L1:
         MOV   33H,R2
         MOV   32H,30H
         RET

;******************顯示子程序***********************************
SHOW:
         MOV   SCON,#00H                       ;設(shè)定串行工作模式為0
         MOV   R1,#05H                          ;數(shù)碼管顯示的位數(shù)5位
         MOV   DPTR,#TAB
LOOP:
         MOV   A,@R0
         MOVC  A,@A+DPTR                     ;取出字型碼
         MOV   SBUF,A                          ;發(fā)送
WAIT:    JNB   TI,WAIT                         ;等待一幀發(fā)送完畢
         CLR   TI
         DEC   R0                              ;指向下一字型碼
         DJNZ  R1,LOOP
         (_______)           ;子程序返回
TAB:  
DB  0FCH, 060H, 0DAH, 0F2H, 66H, 0B6H, 0BEH, 0E0H, 0FEH, 0F6H
;顯示字型為0,1,2,3,4,5,6,7,8,9
DB  8EH, 7CH, 1CH, 0ceH, 6eH, 60H                  ;顯示字型F,U,L,P,H,I
         END

在(____)中填上合適的語句,運行程序,使用信號發(fā)生器發(fā)生不同頻率的信號,并紀錄測量的值。
六、實驗報告
  • 畫出電路原理圖。
  • 給出程序流程圖和程序清單、并給予適當注釋。
  • 描述實驗現(xiàn)象和結(jié)果,要求對實驗現(xiàn)象和結(jié)果進行分析。
  • 本實驗中,頻率測量的有效范圍是多少?

實驗四、雙機串行通訊實驗一、實驗?zāi)康?/strong>
該實驗需要兩套MPC100B配合完成。
1.掌握單片機串行口工作方式;
    2.掌握雙機通訊的接口電路設(shè)計及程序設(shè)計。
二、實驗設(shè)備
1.仿真器;
2.單片機最小系統(tǒng)教學實驗?zāi)K;
3.外部數(shù)據(jù)存儲器模塊;
三、實驗要求
由兩套單片機試驗裝置(兩個實驗小組)共同完成該實驗。我們稱裝置1為甲機,裝置2為乙機。甲機發(fā)送一個字節(jié)的呼叫信號給乙機,乙機正確地收到該呼叫信號后,返回一個字節(jié)的應(yīng)答信號。當甲機收到正確的應(yīng)答信號后,再發(fā)送規(guī)定格式的數(shù)據(jù)幀。數(shù)據(jù)幀必須包括以下內(nèi)容:
數(shù)據(jù)長度(1字節(jié))+ 數(shù)據(jù)(n字節(jié))+ 校驗和(1字節(jié))
乙機收到完整的數(shù)據(jù)幀后,發(fā)送一個表明接收正確或錯誤的應(yīng)答字節(jié)。
要求每個字節(jié)的發(fā)送幀格式為:起始位(1bit)+數(shù)據(jù)位(8bit)+停止位(1bit)。
要求通訊波特率為4800bps,而以上各信號和數(shù)據(jù)幀的具體數(shù)據(jù)內(nèi)容,可以自行規(guī)定。
四、實驗原理
41 串行通訊的方式
在串行通訊中,有兩種基本的通訊方式:異步通訊,同步通訊。
異步串行通訊規(guī)定了字符數(shù)據(jù)的傳送格式,既每個數(shù)據(jù)以相同的幀格式發(fā)送。每個幀信息由起始位、數(shù)據(jù)位、奇偶校驗位和停止位組成。本實驗主要學習異步通訊的實現(xiàn)方法。
在異步通訊中,每一個字符要用起始位和停止位作為字符開始和結(jié)束的標志,以至占用了時間。所以在數(shù)據(jù)塊傳送時,為了提高通訊速度,常去掉這些標志,而采用同步通訊。同步通訊不像異步通訊那樣,靠起始位在每個字符數(shù)據(jù)開始時發(fā)送和接受同步。而是通過同步字符在每個數(shù)據(jù)塊傳送開始時使收/發(fā)雙方同步。
按照通訊方式,又可將數(shù)據(jù)傳輸線路分成三種:單工方式、半雙工方式、全雙工方式。
(1)單工方式
在單工方式下,通訊線的一端聯(lián)接發(fā)送器,另一端聯(lián)接接收器,它們形成單向聯(lián)接,只允許數(shù)據(jù)按照一個固定的方向傳送。
(2)半雙工方式
在半雙工方式下,系統(tǒng)中的每個通訊設(shè)備都由一個發(fā)送器和一個接收器組成,通過收發(fā)開關(guān)接到通訊線路上,如圖所示。在這種方式中,數(shù)據(jù)能從A站送到B站,也能從B站傳送到A站,但是不能同時在二個方向上傳送,即每次只能一個站發(fā)送,另一個站接收。如圖4.1所示。
圖4.1 半雙工通訊

圖4.1中的收發(fā)開關(guān)并不是實際的物理開關(guān),而是由軟件控制的電子開關(guān),由通訊線兩端的半雙工通訊協(xié)議進行功能切換。
(3)全雙工(Full—duplex)方式
雖然半雙工方式比單工方式靈活,但它的效率依然較低。從發(fā)送方式切換到接收方式所需的時間一般大約為數(shù)毫秒,這么長的時間延遲在對時間較敏感的交互式應(yīng)用(例如遠程檢測監(jiān)視控制系統(tǒng))中是無法容忍的。重復線路切換所引起的延遲積累,正是半雙工通信協(xié)議效率不高的主要原因。
半雙工通訊的這種缺點是可以避免的,而且方法很簡單,即采用信道劃分技術(shù)。在下圖的全雙工連接中,不是交替發(fā)送和接收,而是可同時發(fā)送和接收。全雙工通訊系統(tǒng)的每一端都包含發(fā)送器和接收器,數(shù)據(jù)可同時在兩個方向上傳送。如圖4.2所示。
圖4.2  全雙工通訊

42單片機串行口工作方式
在定時器實驗中,我們熟悉了單片機串口工作方式0;單片機串口還具有有3種工作方式。如下表所示:
方式1(01)
8-bit UART
波特率可變
方式2(10)
9-bit UART
波特率為1/32fosc或1/64fosc
方式3(11)
9-bit UART
波特率可變
這3種工作方式,均用于串行異步通訊。在異步串行通訊的一個字節(jié)的傳送中,必須包括了起始位(0)和停止位(1)。除此之外,方式1具有8位(1個字節(jié))的數(shù)據(jù)位(低位在先),方式2、3則除這8位之外,還具有一個可編程的第9位,這個第9位編程通常被編程為奇偶校驗位。
串口工作方式在特殊寄存器SCON中設(shè)置。
SM0
SM1
SM2
REN
TB8
RB8
TI
RI
(MSB)                                                                  (LSB)
其中的SM0和SM1位確定了串口工作方式。要使通訊雙方能夠通訊成功,必須具有相同的串口工作模式;REN為允許接收位,本實驗中因為雙方都要進行接收,因此REN也都應(yīng)設(shè)為1。TB8和RB8這里暫不涉及。利用以下語句來設(shè)置SCON:
MOV SCON,#50H
43 波特率的設(shè)置
在異步串口通訊中,一個很重要的工作就是進行串口波特率的設(shè)置。波特率是指串口通訊中每秒傳送的位數(shù),單位為bps,它反映了串行口通訊的速度;同時,通訊雙方的速度必須一致,才能夠順利進行通訊。
在串口工作方式1、3中,傳送波特率都是可變的。單片機內(nèi)部通過定時器T1來提供發(fā)送與接收緩存器的內(nèi)部移位時鐘。也就是說,要確定串行通訊的波特率,必須對T1進行相關(guān)設(shè)置。51單片機系統(tǒng)對此時T1的設(shè)置有以下固定的規(guī)定:
  • 必須工作在定時器狀態(tài);
  • 必須工作在“8位自動重載”工作模式;
這必須在特殊寄存器TMOD中進行設(shè)置?梢岳靡韵抡Z句來設(shè)置TMOD:
MOV  TMOD,#20H
除了對TMOD的設(shè)置外,還必須設(shè)置定時器T1的初值,也就是保存在TH1中的8位重載值。這直接影響到波特率的大。
它通過以下公式進行計算:
其中的SMOD為特殊寄存器PCON的最高位。當它置1時,可以將波特率增大1倍。
在雙機通訊中,只要雙方的波特率一致就能夠完成通訊了;但是,在標準的異步通訊協(xié)議中,只有幾種波特率是適用的。例如1200bps,2400bps,4800bps,9600bps……等等。
而通過這個公式可以看出,并不是所有的晶振頻率都能夠得到準確的上述波特率。比如采用12MHz晶振,代入公式進行運算,就無法得到4800bps的準確波特率(TH1必須為小數(shù)了)。在這種情況下,過去人們都使用軟件補償?shù)姆椒,盡量得到準確的波特率;而現(xiàn)在,市場上有很多通訊專用的晶振,例如3.6864MHz、11.0592MHz……的晶振,都能夠直接得到準確的波特率。因此在進行本實驗時,必須使用通訊專用晶振(如果使用仿真器,則設(shè)置為使用仿真頭的外接晶振,并將11.0592M的晶振插入仿真頭。)
當波特率已經(jīng)確定,就可以反向推導出TH1的取值。例如,在本次實驗中,我們要求波特率為4800bps,在晶振采用11.0592MHz的情況下,推出TH1=0F4H。
使用以下語句設(shè)置初值:
MOV TH1,#0F4H
MOV TL1,#0F4H
44 雙機通訊接口設(shè)計
(1)通訊接口設(shè)計
在本次實驗中,主要討論單片機系統(tǒng)之間的異步串行通訊的實現(xiàn)。
51單片機具有1個“全雙工”的串行口,主要因為單片機內(nèi)部有獨立的發(fā)送器(1字節(jié)緩存)和接收器(1字節(jié)緩存)。但由于串口緩存太少,只有1字節(jié),在相互傳送大量數(shù)據(jù)時,軟件上實際采用的還是半雙工的工作方式。
如果兩個51單片機應(yīng)用系統(tǒng)相距很近,可以將它們的串行口用導線直接連起來,就構(gòu)成了雙機通訊,請注意兩個單片機系統(tǒng)要“共地”。如圖4.3所示。


圖4.3 串行通訊電路示意圖

(2)查詢方式雙機通訊軟件設(shè)計
為確保通訊成功,通訊雙方必須在軟件上有一系列的約定,通常稱為軟件“協(xié)議”。本例規(guī)定的軟件“協(xié)議”如下:
通訊雙方均采用4800bps波特率進行傳送(系統(tǒng)時鐘頻率為11.0592MHz),甲機發(fā)送數(shù)據(jù),乙機接收數(shù)據(jù)。雙機開始通訊時,甲機發(fā)送一個呼叫信號“06H”,詢問乙機是否可以接收數(shù)據(jù);乙機收到呼叫信號后,若同意接收數(shù)據(jù)則發(fā)回“00H”作為應(yīng)答,否則發(fā)“15H”表示暫不能接收數(shù)據(jù),甲機只有收到乙機的應(yīng)答信號“00H”后才可把存放在外部數(shù)據(jù)存儲器的字節(jié)內(nèi)容發(fā)送給乙機,否則繼續(xù)向乙機呼叫,直到乙機同意接收。呼叫成功后甲機依次發(fā)送長度字節(jié)(1字節(jié))、數(shù)據(jù)字節(jié)(n字節(jié))和校驗和字節(jié)(1字節(jié)),其中校驗和為長度字節(jié)和數(shù)據(jù)字節(jié)的“累加和”。乙機在成功收到甲機的數(shù)據(jù)之后,發(fā)送“0FH”作為成功應(yīng)答,否則發(fā)送“F0H”作為失敗應(yīng)答。

◆ 甲機發(fā)送程序約定:
1)基本設(shè)置
波特率設(shè)置初始化:定時器T1模式2工作,計數(shù)常數(shù)0F4H;
PCON的SMOD=1;
串行口初始化:方式1工作,允許接收;
內(nèi)部RAM和工作寄存器設(shè)置:31H和30H存放發(fā)送的數(shù)據(jù)塊首址;2FH存放發(fā)送的數(shù)據(jù)塊長度; R6為校驗和寄存器。
2)程序流程圖及程序清單
如圖4.4所示。
圖4.4發(fā)送程序流程圖

圖4.5接收程序流程圖
甲機發(fā)送程序清單:
                                          ORG 0000H
                                          AJMP FMT_T_S
                                          ORG 0030H
FMT_T_S:     MOV   TMOD,(______)             ;波特率設(shè)置
MOV   TH1,#0F4H
MOV   TL1,0F4H
SETB    TRl
MOV  SCON,(______)           ;串行口初始化
MOV  PCON,#80H           ;置SMOD=1
FMT_RAM:    MOV  R0,#30H              ;設(shè)置R0指針
MOV  R7,2FH               ;送字節(jié)數(shù)至R7
MOV  R6,#00H              ;清累加和寄存器
TX_ACK:      MOV  A,#06H               ;發(fā)呼叫信號“06”
MOV  SBUF,A
WAITl:        JBC  TI,RX_YES             ;等待發(fā)送完一個字節(jié)
                SJMP  WAITl
RX_YES:      JBC   RI,NEXTl              ;接收乙機回答
                SJMP  RX_YES
NEXTl:        MOV  A,SBUF          ;判斷乙機是否同意接收,不同意就繼續(xù)呼
CJNE  A,#00H,TX_ACK
TX_BYTES:    MOV  A,R7                 ;向乙機發(fā)送要傳送的字節(jié)個數(shù)
MOV  SBUF,A
ADD  A,R6
                MOV  R6,A
WAIT2:       JBC   TI,TX_NEWS
SJMP  WAIT2
TX_NEWS:    MOV  A,@R0                 ;發(fā)送數(shù)據(jù)
(_____________)
ADD  A,R6                       ;形成累加和送R6
MOV  R6,A
INC   R0                       ;指針加1
WAIT3:       JBC   TI,NEXT2
SJMP  WAIT3
NEXT2:       DJNZ  R7,TX_NEWS               ;判發(fā)送結(jié)束
TX_SUM:       MOV  A,R6                       ;數(shù)據(jù)巳發(fā)送完,發(fā)累加給乙機
MOV  SBUF,A
WAIT4:       (_______________)   
(______________)
RX_0FH:     JBC  RI,IF_0FH                     ;等待乙機回答
             SJMP  RX_0FH
IF_0FH:       MOV  A,SBUF
               CJNE  A,#0FH,F(xiàn)MT_RAM          ;判斷傳送正確否
SJMP $

◆乙機接收程序
   接收程序約定:
   波特率設(shè)置初始化:同發(fā)送程序
   串行口初始化:同發(fā)送程序
   寄存器設(shè)置:
31H,30H——存放接收數(shù)據(jù)緩沖區(qū)首址
R7——數(shù)據(jù)塊長度寄存器
R6——校驗和寄存器
    向甲機回答的狀態(tài)信息:0FH為接收正常,F(xiàn)0H為傳送出錯,00H為同意接收數(shù)據(jù)。
接收程序流程框圖如圖4.5:

乙機接收程序清單:
                                          ORG 0000H
                                          AJMP FMT_T_S
                                          ORG 0030H
FMT_T_S:      MOV  TMOD,#20H                ;T1初始化
                 MOV  TH1,#0F4H
                 MOV  TL1,#0F4H
                 SETB  TR1
                 MOV  SCON,#50H              ;串行口初始化
                 MOV  PCON,#80H
FMT_RAM:     MOV  R0,#30H               ;設(shè)置R0指針
                 MOV  R6,#00H                ;校驗和寄存器清零
RX_ACK:       JBC   RI,IF_06H              ;接收呼叫信號
                 SJMP  RX_ACK
IF_06H:         MOV  A,SBUF                ;判斷呼叫信號是否有誤
CJNE  A,#06H,TX_15H
TX_00H:        MOV  A,#00H                 ;向甲機回送同意接收信號
                 MOV  SBUF,A
WAIT1:         JBC   TI,RX_BYTES           ;等待應(yīng)答信號發(fā)送完
SJMP   WAIT1
TX_15H:        MOV   A,#15H                ;向甲機報告接收呼叫信號不正確
                 MOV   SBUF,A
WAIT2:         JBC    TI,HAVE1     
                 SJMP   WAIT2
HAVE1:         LJMP   RX_ACK
RX_BYTES:     JBC   RI,HAVE2                 ;接收數(shù)據(jù)塊長度
                 SJMP  RX_BYTES   
HAVE2:         MOV  A,SBUF                   ;給長度寄存器賦值
                 MOV  R7,A
                 MOV  R6,A                      ;形成累加器和
RX_NEWS:     JBC  RI,HAVE3                   ;接收數(shù)據(jù)
                SJMP  RX_NEWS
HAVE3:        MOV   A,SBUF                   ;將接收到的數(shù)據(jù)存入外部RAM
                MOV  @R0,A
                INC  R0
                ADD  A,R6                      ;形成累加和
                MOV  R6,A
DJNZ  R7,RX_NEWS             ;判斷數(shù)據(jù)是否接收完畢
RX_SUM:      JBC  RI,HAVE4                  ;接收數(shù)據(jù)校驗和
SJMP   RX_SUM
HAVE4:        MOV   A,SBUF                 ;判斷傳送是否正確
CJNE  A,06H,TX_ERR
TX_RIGHT:    MOV  A,#0FH                   ;向甲機報告?zhèn)魉驼_
MOV  SBUF,A
WAIT3:        JBC  TI,OKEND      
                SJMP  WAIT3
TX_ERR:      MOV  A,#0F0H                   ;向甲機報告?zhèn)魉陀姓`
MOV  SBUF,A
WAIT4:       JBC  TI,AGAIN      
SJMP  WAIT4
AGAIN:       LJMP  FMT_RAM                 ;返回重新接收數(shù)據(jù)狀態(tài)
OKEND:       SJMP OKEND
五、實驗步驟
1.參考圖4.3進行電路設(shè)計,畫出電路圖,并用導線正確連接兩套裝置的單片機最小系統(tǒng)實驗?zāi)K,以及連接最小系統(tǒng)模塊與外部數(shù)據(jù)存儲器模塊。
2.參考示例程序,按照實驗要求編寫程序流程圖,然后編寫程序。連接好仿真器,對編寫的程序進行仿真調(diào)試,直至通訊成功。
六、實驗報告
1.畫出接口電路原理圖。
2.在該實驗中,單片機串行口工作在什么工作方式下?說明該工作方式的特點。
3.波特率是什么?怎樣設(shè)置單片機串口通訊的波特率?如果實驗要求通訊波特率為9600bps,怎樣修改程序?
  • 詳細說明本次實驗采用的通訊協(xié)議。
  • 給針對實驗要求編寫甲機和乙機的程序流程圖、程序清單并給予適當注釋。
  • 描述實驗現(xiàn)象和結(jié)果,要求對實驗現(xiàn)象和結(jié)果進行分析。

實驗五、SRAM外部數(shù)據(jù)存儲器擴展實驗
一、實驗?zāi)康?/strong>
1、學習SRAM(靜態(tài)RAM)芯片的工作原理和結(jié)構(gòu);
2、學習單片機擴展數(shù)據(jù)存儲器的接口方法。
二、實驗設(shè)備
  • 仿真器
  • SRAM數(shù)據(jù)存儲器擴展接口模塊;
2.單片機最小系統(tǒng)模塊;
三、實驗要求
連接電路并編寫程序,使得:第一步,單片機在SRAM中填入不斷增加的數(shù)字,0,1,2,3……9,然后再從0開始到9,直到添滿整個SRAM。第二步,將數(shù)據(jù)讀出并驗證是否符合原寫入的規(guī)律。該實驗主要通過仿真器來觀察程序工作情況。
四、實驗原理
4.1  51單片機片外總線結(jié)構(gòu)
如圖5.1所示為51單片機的片外總線結(jié)構(gòu)圖。
其中,P0口在接外部存儲器時,作為地址總線的低8位及數(shù)據(jù)總線復用。它能以吸收電流的方式驅(qū)動8個TTL負載。P2口在訪問外部存儲器時,可以作為高8位地址總線送出高8位地址。
由圖5.1可以看到,51單片機的引腳除了電源、復位、時鐘接入、用戶I/O外,其余管腳都具有系統(tǒng)擴展的功能。這些引腳構(gòu)成了51單片機的片外3總線結(jié)構(gòu),即:
  • 地址總線(AB):寬度為16位,因此,可以尋址64K字節(jié)的外部存儲器空間。地址總線由P0口經(jīng)鎖存器提供低8位地址(A0A7),P2提供高8位地址(A8A15)。
  • 數(shù)據(jù)總線(DB):寬度為8位,由P0口作為數(shù)據(jù)總線。
  • 控制總線(CB):P3口及RESET、EA、ALE、PSENRD、 WR 。
圖5.1 51單片機的片外總線結(jié)構(gòu)圖。

42 62256的工作原理
SRAM的容量一般為32K,64K,128K等,其中HY62256ALp-10容量為32Kx8位(即256K位)是高速、低功耗的靜態(tài)存儲器。存儲單元訪問時間為10ns,2-5V的寬工作電壓。
DIP-28封裝管腳如圖5.2所示。

圖5.2 引腳圖

管腳定義如表5.1所示。
表5.1 管腳定義
管腳名
功能
A0-A14
地址
-CS
片選
-OE
輸出使能端
-WE
寫使能端
I/O1?I/O8
數(shù)據(jù)輸入/輸出
VCC
電源
GND

內(nèi)部邏輯結(jié)構(gòu)如圖5.3所示

操作真值表5.2:
表5.2  操作真值表
-CS
-WE
/OE
模式
I/O操作
H
X
X
待機模式
高阻態(tài)
L
H
H
禁止輸出
高阻態(tài)
L
H
L
輸出
L
L
X
輸入
操作時序以-70型號為例,如表5.3所示。
表5.3  操作時序參數(shù)
讀周期
符號
參數(shù)
最小值
最大值
單位
tRC
讀周期時間
70
--
ns
TAA
地址訪問時間
--
70

TACS
片選訪問時間
--
70

TOE
OE到輸出有效延遲
--
35
ns
TCLZ
片選有效,高阻態(tài)到輸出延遲
5
--
ns
TOLZ
OE有效,高阻態(tài)到輸出延遲
5
--

TCHZ
片選到輸出高阻態(tài)延遲
0
30
ns
TOHZ
OE到輸出高阻態(tài)延遲
0
30

TOH
輸出保持到地址改變
5
0

寫周期
TWC
寫周期
70
--
ns
TCW
片選到寫結(jié)束
65
--
ns
TAW
地址有效到寫結(jié)束
65
--
ns
TAS
地址建立時間
0
--
ns
TWP
寫脈沖寬度
50
--
ns
TWR
寫恢復時間
0
--
ns
TWHZ
寫到輸出高阻態(tài)
0
30
ns
TDW
數(shù)據(jù)到寫時間重疊
35
--
ns
TDH
數(shù)據(jù)保持到寫
0
--
ns
TOW
輸出到寫結(jié)束
5
--
ns

1、READ讀操作。
-CE、-OE/VPP低電平,在內(nèi)部-CE作為電源控制(高電平進入省電模式),-OE/VPP,控制數(shù)據(jù)從Q0-Q7端輸出。當?shù)刂沸盘柗(wěn)定之后,地址訪問時間tACC等于-CE到數(shù)據(jù)輸出的延遲時間。滿足tACC tCE條件下數(shù)據(jù)在-OE/VPP高下降沿之后可用。
時序如圖5.4所示。

圖5.4  READ讀操作時序1

當1、-WE為高電平;2、器件連續(xù)保持-CS= VIL;3、-OE =VIL,則訪問時序圖如圖5.5所示。

圖5.5  READ讀操作時序2

2、寫操作
寫操作發(fā)生在-CS和-WE都是低電平的情況下,在-CS或-WE的最后的一個下降沿則寫操作開始。在-CS或-WE的最先的一個上升沿則寫操作結(jié)束。tWP測量寫操作開始到結(jié)束的時間。
寫時序如圖5.6所示。

圖5.6  READ讀操作時序3
五、實驗步驟
1、連接電路

電路參考如下。

62256共具有32K字節(jié)空間,因此它需要15位地址(A0~A14),使用P0、P2.0-P2.6作為地址線,片選線CE接地。按照該電路,62256的全部地址空間為0000H~7FFFH。
2.編程參考:
         ORG 0000H
         JMP MAIN
         ORG 0030H
MAIN:
         MOV SP,#60H
         MOV A,#0H
         MOV DPTR,#0000H
         MOV R0,#00H
LOOP:
         ADD A,#1
         DA  A
         ANL A,#0FH                   ;則總在0到9之間
         MOVX @DPTR,A
         INC DPTR
         DJNZ R0,LOOP;載入256個

;讀出送到靜態(tài)串行顯示口
         MOV 30H,#0;
         MOV 31H,#0;
         MOV 32H,#0;
         MOV 33H,#0;
         MOV 34H,#0;
         MOV 35H,#0;
         MOV R3,#00H;讀數(shù)據(jù)的個數(shù)
         MOV DPTR,#0000H
GET_LOOP:
         MOV R0,#30H;存放的首地址
         MOV R1,#31H
         MOV R2,#5;6個顯示的數(shù)據(jù),移動5個
         ;推入到顯示存儲區(qū),向后移動
SHIFT_LOOP:
         MOV A,@R1
         MOV @R0,A
         INC  R0
         INC  R1
         DJNZ R2,SHIFT_LOOP
         MOVX A,@DPTR
         MOV  @R0,A;寫到最后一個位置
         ;顯示在數(shù)碼管上
         ACALL SHOW
         ACALL DELAY
         INC  DPTR
         DJNZ R3,GET_LOOP;256個
         JMP MAIN
         RET

DELAY:   ;延時子程序;大約1秒
         PUSH  04H
         PUSH  05H
         PUSH  06H
         MOV R4,#01H
         MOV R5,#0H
         MOV R6,#0H
DELAYLOOP:
         NOP
         NOP
         NOP
         NOP

         DJNZ R6,DELAYLOOP;原地循環(huán)
         DJNZ R5,DELAYLOOP
         DJNZ R4,DELAYLOOP
         POP   06H
         POP   05H
         POP   04H
         RET

SHOW:
         PUSH  00H
         PUSH  01H
         PUSH  0E0H
         PUSH  DPH
         PUSH  DPL
         MOV  SCON,#00H       ;設(shè)定串行工作模式為0
         MOV  R1,#06H        ;數(shù)碼管顯示的位數(shù)
         MOV  R0, #30H        ;字型碼首地址偏移量
         MOV  DPTR,#TAB
LOOPSHOW:
         MOV  A,@R0
         MOVC A,@A+DPTR      ;取出字型碼
         MOV  SBUF,A         ;發(fā)送
WAIT:    JNB  TI,WAIT         ;等待一幀發(fā)送完畢
         CLR  TI
         INC   R0             ;指向下一字型碼
         DJNZ  R1,LOOPSHOW
         POP  DPL
         POP  DPH
         POP  0E0H
         POP  01H
         POP  00H
         RET
TAB:DB  0FCH,060H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H
DB  8EH,7CH,1CH,0ceH,6eH,60H,00H
;顯示字型為0,1,2,3,4,5,6,7,8,9,F,U,L,P,H,I
;0   1    2    3    4   5    6    7    8     9  10F  11U 12L 13P 14H 15I
;16 NOTHING
         END
  編寫程序,并裝入仿真器,運行程序,通過開發(fā)環(huán)境觀察數(shù)據(jù)區(qū)內(nèi)容。
六、實驗報告
  • 畫出接口電路原理圖,
  • 說明62256的工作原理。簡要分析電路工作原理,說明地址分配的依據(jù)。
  • 說明單片機的總線結(jié)構(gòu),并說明電路中鎖存器的作用?
  • 給出針對實驗要求編寫的程序清單、并給予適當注釋。
  • 描述實驗現(xiàn)象和結(jié)果,要求對實驗現(xiàn)象和結(jié)果進行分析。

實驗六、矩陣式鍵盤輸入實驗
一、實驗?zāi)康?/strong>
1.學習矩陣式鍵盤工作原理;
2.學習矩陣式鍵盤接口的電路設(shè)計和程序設(shè)計。
二、實驗設(shè)備
1.仿真器
2.單片機最小系統(tǒng)實驗教學模塊
3.矩陣式鍵盤實驗?zāi)K
4.動態(tài)掃描數(shù)碼管顯示模塊
三、實驗要求
要求實現(xiàn):在矩陣式鍵盤中的某個鍵被按下時,8位LED動態(tài)顯示器上最低位顯示該鍵對應(yīng)的字符,以前的字符向高位推進1位(即類似于計算器)。
四、實驗原理
矩陣式由行線和列線組成,按鍵位于行、列的交叉點上。如圖所示,一個4*4的行、列結(jié)構(gòu)可以構(gòu)成一個16個按鍵的鍵盤。很明顯,在按鍵數(shù)量較多的場合,矩陣式鍵盤與獨立式鍵盤相比,要節(jié)省很多的I/0口。
圖6-1  矩陣式鍵盤結(jié)構(gòu)
41 矩陣式鍵盤工作原理
按鍵設(shè)置在行、列交節(jié)點上,行、列分別連接到按鍵開關(guān)的兩端。行線通過上拉電阻接到+5V上。平時無按鍵按下時,行線處于高電平狀態(tài),而當有按鍵按下時,行線電平狀態(tài)將由與此行線相連的列線電平?jīng)Q定。列線電平如果為低,則行線電平為低,列線電平如果為高,則行線電平則為高。這一點是識別矩陣式鍵盤是否被按下的關(guān)鍵所在。由于行列式鍵盤中行、列線為多鍵共用,各按鍵均影響該鍵所在行和列的電平。因此,各按鍵彼此將相互發(fā)生影響,所以必須將行、列線信號配合起來并作適當?shù)奶幚,才能確定閉合鍵的位置。

42 按鍵識別方法
下面以圖6-2中4號鍵被按下為例,來說明此鍵是如何被識別出來的。
前已述及,鍵被按下時,與此鍵相連的行線電平將由與此鍵相連的列線電平?jīng)Q定,而行線電平在無鍵按下時處于高電平狀態(tài)。如果讓所有列線處于高電平那么鍵按下與否不會引起行線電平的狀態(tài)變化,始終是高電平,所以,讓所有列線處于高電平是沒法識別出按鍵的。現(xiàn)在反過來,讓所有列線處于低電平,很明顯,按下的鍵所在行電平將也被置為低電平,根據(jù)此變化,便能判定該行一定有鍵被按下。但我們還不能確定是這一行的哪個鍵被按下。所以,為了進一步判定到底是哪—列的鍵被按下,可在某一時刻只讓一列線處于低電平,而其余所有列線處于高電平。當?shù)?列為低電平,其余各列為高電平時,因為是鍵4被按下,所以第1行仍處于高電平狀態(tài);當?shù)?列為低電平,其余各列為高電平時,同樣我們會發(fā)現(xiàn)第1行仍處于高電平狀態(tài),直到讓第4列為低電平,其余各列為高電平時,因為是4號鍵被按下,所以第1行的高電平轉(zhuǎn)換到第4列所處的低電平,據(jù)此,我們確信第1行第4列交叉點處的按鍵,即4號鍵被按下。
根據(jù)上面的分析,很容易得出矩陣鍵盤按鍵的識別方法,此方法分兩步進行。第一步,識別鍵盤有無健被按下;第二步,如果有鍵被按下,識別出具體的按鍵。分述如下:
識別鍵盤有無鍵被按下的方法是:讓所有列線均為低電平,檢查各行線電平是否有低電平,如果有,則說明有鍵被按下,如果沒有,則說明無鍵被按下(實際編程時應(yīng)考慮按鍵抖動的影響,通?偸遣捎密浖訒r的方法進行消抖處理)。
識別具體按鍵的方法是(亦稱之為掃描法):逐列置零電平,并檢查各行線電平的變化,如果某行電平由高電平變?yōu)榈碗娖,則可確定此行此列交叉點處按鍵被按下。
請注意:由于鍵盤模塊做了特殊的處理,使得矩陣式鍵盤的行線輸出的電平狀態(tài)與前面所述正好相反。即,行線的輸出電平,在平時為低電平,有鍵按下時(該鍵對應(yīng)列線輸入為低電平),該鍵對應(yīng)的行線輸出為高電平。在編程的時候請注意這一點。
五、實驗步驟
1、按照圖6-2的電路圖,用導線將矩陣式鍵盤、數(shù)碼管動態(tài)掃描顯示模塊和單片機的最小系統(tǒng)實驗?zāi)K連接正確。
2、示例程序如下:
keyvalue  equ   40h      ;讀到鍵盤的值暫放的地址
dispptr      equ   37h      ;顯示緩沖區(qū)地址高位
firstptr      equ   30h      ;顯示緩沖區(qū)地址低位
ORG 0000H
AJMP INIT
ORG 0030H
INIT:         mov r0,#firstptr
         mov r1,#08H
initloop:      MOV A,#10H           ;顯示緩沖區(qū)存放‘滅’
         mov  @r0,a
          inc  r0
          djnz r1,initloop   
LOOP:        MOV  P2, #00H        ;關(guān)閉所有顯示
MOV  R4,#04H        ;列掃描數(shù)
        MOV  R5,#0EFH       ;掃描第一列
KEY:         MOV  A,R5           ;
          MOV  P1,A           ;送出列掃描碼
MOV  A,P1           ;讀出行掃描碼
          MOV  keyvalue,A     ;暫存在KEYVALUE
         ORL  A,#0F0H
          CJNE A,#0F0H,KEY_ON ;判斷是否有鍵按下
ACALL DISP         
MOV  A,R5           ;未有按鍵按下,掃描下一列
        RL   A
          MOV R5,A
          DJNZ R4,KEY     
         JMP  LOOP            ;不斷重新掃描鍵盤
KEY_ON:    ACALL DL10MS            ;延時10MS
         MOV   A,P1             ;掃描鍵盤
         CJNE  A,keyvalue,KEY   ;判斷有鍵盤按下,轉(zhuǎn)移到K1
                                    ;如果沒有鍵盤按下,則重新開始掃描
         (…………)                ;等待鍵釋放程序
K1:          CJNE  A,#0E1H,K2         ;K0未按下,轉(zhuǎn)移K1
         LCALL movdisp
       MOV   firstptr,#0   
          ACALL disp
      LJMP  LOOP

K2:           (……….)       ;K1未按下,轉(zhuǎn)移K2

K3:           (……….)       ;K2未按下,轉(zhuǎn)移K3

K4:          (……….)       ;K3未按下,轉(zhuǎn)移K4

K5:          (……….)      ;K4未按下,轉(zhuǎn)移K5

K6:          (……….)      ;K5未按下,轉(zhuǎn)移K6

K7:           (……….)      ;K76未按下,轉(zhuǎn)移K7

K8:          (……….)       ;K7按下,轉(zhuǎn)移K8

K9:           (……….)      ;K8未按下,轉(zhuǎn)移K9

K10:          (……….)       ;K9未按下,轉(zhuǎn)移K10

K11:           (……….)       ;K10未按下,轉(zhuǎn)移K11

K12:           (……….)       ;K11未按下,轉(zhuǎn)移K12

K13:            (……….)       ;K12未按下,轉(zhuǎn)移K13

K14:           (……….)        ;K13未按下,轉(zhuǎn)移K14

K15:           (……….)        ;K14未按下,轉(zhuǎn)移K15

K16:            (……….)        ;K15未按下,轉(zhuǎn)移ERROR

error:   lcall key                 ;重新掃描鍵盤

;//顯示程序
;30h-37h:顯示緩沖區(qū);

DISP:           MOV P2,#00H
DISPLOOP2:     mov r2,#8
disploop0:       mov r1,#01h
           mov r0,#30h
           mov dptr,#tab
disploop1:      mov  a,@r0
           movc a,@a+dptr
          mov  p0,a
           mov  p2,r1
           lcall dl1ms
          inc  r0
          mov  a,r1
           rl   a
          mov  r1,a
           djnz r2,disploop1
            RET

DL1MS:     (……….)

DL10MS:      (….……)

movdisp:      mov  r0,#dispptr
          mov  r1,#dispptr
          mov  r2,#7
mov_lp:       dec  r0
          mov  a,@r0
          mov  @r1,a
          dec  r1
          djnz r2,mov_lp
          ret
tab:         DB 03H,9FH,25H,0DH,99H,49H,41H,1FH         ;0,1,2,3,4,5,6,7
          DB 01H,09H,11H,0C1H,63H,85H,61H,71H        ;8,9,A,B,C,D,E,F
          DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH      ;滅
          DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
END

(……….)部分要求學生自己編寫,將程序調(diào)入仿真器進行調(diào)試,直至達到實驗要求。
六、實驗報告
1、畫出接口電路原理圖,并簡要分析電路的執(zhí)行過程。
2、給出程序流程圖和程序清單、并給予適當注釋。
3、圖6-2的電路示意圖共采用了P0、P1、P2三個I/O口,你有沒有更節(jié)省I/O線的方案?請給出電路示意圖。
  • 實驗過程中遇到哪些問題,是如何解決的?
  • 描述實驗現(xiàn)象和結(jié)果,要求對實驗現(xiàn)象和結(jié)果進行分析。

實驗七、8255可編程并行I/O擴展接口實驗
一、實驗?zāi)康?/strong>
1.熟悉8255并行接口芯片的基本工作原理及應(yīng)用;
2.掌握單片機與8255的接口電路設(shè)計和編程。
二、實驗設(shè)備
  • 仿真器
  • 8255可編程并行I/O擴展接口模塊
  • 單片機最小系統(tǒng)模塊
4. 發(fā)光二極管陣列模塊
三、實驗要求
  • 連接單片機最小系統(tǒng)、8255擴展接口、發(fā)光二極管陣列模塊組成的電路,使發(fā)光二極管
陣列以一定規(guī)律點亮:(1)逐行循環(huán)點亮;(2)逐列循環(huán)點亮
2連接單片機最小系統(tǒng)、8255擴展接口、數(shù)碼管動態(tài)掃描顯示模塊、矩陣式鍵盤模塊組成的電路,要求在鍵盤按下時,8位LED動態(tài)顯示器上最低位顯示相應(yīng)的字符,以前的各位字符向高位推進1位。請參看實驗六的相關(guān)內(nèi)容。
四、實驗原理
8255是一個具有3個8位的8位并行口,并且可編程為多種工作模式的接口芯片。由于每個端口上具有輸入/輸出的緩沖和鎖存功能,因此可用于擴展單片機有限的I/O口,作為單片機和外圍器件的中間接口電路。
41引腳說明
8255共40個引腳,采用了雙列直插的封裝,主要引腳功能如下:
  • D7D0:三態(tài)雙向數(shù)據(jù)線,與單片機數(shù)據(jù)總線連接;
  • CS:片選信號,低電平有效;
  • RD:讀出信號線,低電平有效;
  • WR:寫入信號線,低電平有效;
  • PA7PA0A口輸入/輸出線;
  • PB7PB0B口輸入/輸出線;
  • PC7PC0C口輸入/輸出線;
  • RESET:芯片復位信號線;
  • A1A0:地址線,用來指定8255內(nèi)部端口。
42內(nèi)部結(jié)構(gòu)和工作方式
(1)端口A、B、C
端口A為8位數(shù)據(jù)傳送,數(shù)據(jù)輸入或輸出時均受到鎖存。
端口B為8位數(shù)據(jù)傳送,數(shù)據(jù)輸入時不受鎖存,而數(shù)據(jù)輸出時受到鎖存。
端口C為8位數(shù)據(jù)傳送,數(shù)據(jù)輸入時不受鎖存,而數(shù)據(jù)輸出時受到鎖存。
(2)8255接口工作狀態(tài)選擇表7.1
表7.1 8255接口工作狀態(tài)
A1          A0
RD      WR       CS
工作狀態(tài)
  0           0
  0           1
  1           0
0       1        0
0       1        0
0       1        0
A口數(shù)據(jù)→數(shù)據(jù)總線
B口數(shù)據(jù)→數(shù)據(jù)總線
C口數(shù)據(jù)→數(shù)據(jù)總線
  0           0
1       0        0
數(shù)據(jù)總線→A口
  0           1
1       0        0
數(shù)據(jù)總線→B口
  1           0
1       0        0
數(shù)據(jù)總線→C口
  1           1
1       0        0
數(shù)據(jù)總線→控制寄存器
  x           x
x       x        1
數(shù)據(jù)總線→三態(tài)
  1           1
0       1        0
非法狀態(tài)
  x           x
1       1        0
數(shù)據(jù)總線→三態(tài)

(3)8255的基本工作方式
    8255可編程并行I/O擴展芯片是通過在控制端口中設(shè)置控制字來決定它的工作方式的。
    8255有以下三種基本工作方式:




    • 方式0——基本輸入/輸出方式。
    • 方式1——選通輸入/輸出方式。
    • 方式2——雙向傳送方式。(A)
    8255A的端口A可以工作在三種工作方式中的任何一種,端口B只能工作在方式0或方式1,端口C則常常配合端口A和端口B工作,為這兩個端口的輸入/輸出傳送提供控制信號和狀態(tài)信號。
①方式0
方式0是一種基本輸入/輸出方式。它是把PA0~PA7、PB0~PB7、PC0~PC3、PC4~PC7全部輸入/輸出線都用作傳送數(shù)據(jù),各端口是輸入還是輸出由方式控制字來設(shè)置。這種方式多用于同步傳送和查詢式傳送。
8255的方式控制字如圖7.1:
②方式1
方式1是一種選通輸入/輸出方式。它把A口和B口用作數(shù)據(jù)傳送,C口的部分引腳作為固定的專用應(yīng)答信號,A口和B口可以通過方式控制字來設(shè)置方式1。這種方式多用于查詢傳送和中斷傳送。
③方式2
方式2是一種雙向選通輸入/輸出方式。它利用A口為雙向輸入/輸出口,C口的PC3~PC7作為專用應(yīng)答線。方式2只用于端口A,在方式2下,外設(shè)可以通過端口A的8位數(shù)據(jù)線,向CPU發(fā)送數(shù)據(jù),也可以從CPU接收數(shù)據(jù)。
當8255接收到寫入控制端口的控制字時,首先測試控制字的最高位,如為1,則是方
如圖7.1  8255的方式控制字
式選擇控制字;如為0,則不是方式選擇控制字,而是對端口C置1/置0控制字,這是由于端口C的每一位可作為控制位來使用。端口C置1/置0控制字也是寫到控制端口,而不是寫到端口C。
43 電路原理示意圖
圖7.2 采用8255的陣列式發(fā)光二極管電路

圖7.3為鍵盤和動態(tài)顯示參考電路,只耗費了少量器件和單片機I/O口線便完成了控制電路:

圖7.3 采用8255的鍵盤顯示實驗電路
4.4  軟件編寫
   按照實驗要求,參考圖7.2 和7.3,分別編寫程序。
五、實驗步驟
1、參考圖7.2進行電路設(shè)計,畫出電路圖,并用導線正確連接8255可編程I/O擴展模塊、單片機最小系統(tǒng)模塊、發(fā)光二極管陣列。分別編寫程序?qū)崿F(xiàn)(1)逐行循環(huán)顯示程序,一個時刻只有一盞燈亮;(2)逐列循環(huán)顯示程序,一個時刻只有一盞燈亮2。也可以一排排顯示,或者一列列顯示,學生可以自己設(shè)計顯示方案。連接好仿真器,對編寫的程序進行仿真調(diào)試。
2、參考圖7.3,參考實驗六的相關(guān)程序,編寫矩陣式鍵盤和顯示程序。
六、實驗報告
  • 畫出接口電路原理圖,說明8255的工作原理,簡要分析電路的執(zhí)行過程。
  • 給出針對實驗要求編寫程序流程圖、程序清單并給予適當注釋。
  • 實驗過程中遇到哪些問題,是如何解決的?
  • 描述實驗現(xiàn)象和結(jié)果,要求對實驗現(xiàn)象和結(jié)果進行分析。

完整的Word格式文檔51黑下載地址:
單片機原理及應(yīng)用實驗指導書.doc (1.96 MB, 下載次數(shù): 12)






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1