整個(gè)單片機(jī)實(shí)驗(yàn)系統(tǒng)由實(shí)驗(yàn)箱、功能擴(kuò)展模塊、單片機(jī)專用開發(fā)工具、實(shí)驗(yàn)指導(dǎo)書以及配套軟件光盤等部分組成。
最小系統(tǒng)板是本實(shí)驗(yàn)裝置的核心模塊,它提供了51單片機(jī)的一個(gè)最小工作系統(tǒng),并充分地?cái)U(kuò)展了單片機(jī)總線和I/O口以便于與其他模塊的電路連接。最小系統(tǒng)板包括的外圍電路有:時(shí)鐘電路、復(fù)位電路、P0口鎖存電路、撥碼開關(guān)電路。最小系統(tǒng)板上擴(kuò)展的I/O口,包括P0、P1、P2、P3口的每個(gè)管腳獨(dú)立都引出,作為數(shù)據(jù)總線(P0口),地址總線低8位(P0口經(jīng)鎖存后的輸出),地址總線高8位用8針的雙排插針座引出;控制總線(WR, RD, ALE等)獨(dú)立引出。
由于最小系統(tǒng)板的獨(dú)立式可更換設(shè)計(jì),使得本實(shí)驗(yàn)裝置可通過改變這個(gè)最小系統(tǒng)板來進(jìn)行不同家族單片機(jī)的實(shí)驗(yàn)教學(xué),如AVR,PIC,96家族單片機(jī)等,非常靈活和方便。
MedWin是萬利電子有限公司Insight~系列仿真開發(fā)系統(tǒng)的高性能集成開發(fā)環(huán)境。集編輯、編譯/匯編、在線及模擬調(diào)試為一體,VC風(fēng)格的用戶界面,內(nèi)嵌自主版權(quán)的宏匯編器和連接器,并完全支持Franklin/KeilC擴(kuò)展OMF格式文件,支持所有變量類型及表達(dá)式,配合Insight系列仿真器,是您開發(fā)80C51系列單片機(jī)的理想開發(fā)工具。
10.外部功能部件編程向?qū)?/div>
11.不限制打開數(shù)據(jù)區(qū)觀察窗口的數(shù)目
12.調(diào)試狀態(tài)下用戶程序自動(dòng)重裝功能
13.提供真實(shí)的軟件模擬仿真開發(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對(duì)系統(tǒng)的要求為使MedWin集成開發(fā)環(huán)境能夠正常地運(yùn)行,您必須提供以下軟硬件環(huán)境:
1.586以上的PC及兼容機(jī)
2.100M以上的剩余硬盤空間
3.分辨率為800x600以上的顯示器
4.具有SPP功能的打印機(jī)接口
5.中文或英文Windows95/98,Windows Me,Windows 2000/NT,Windows XP
6.盡量減少DOS自動(dòng)批處理中關(guān)于系統(tǒng)路徑及環(huán)境變量的設(shè)置,或刪除DOS下的批處理文件Autoexec.bat文件
2.2安裝MedWin的步驟以下分別是安裝MedWin集成開發(fā)環(huán)境的方法:
第一步:從光盤上安裝或從因特網(wǎng)下載安裝
從光盤上安裝
1.安裝中文MedWin,進(jìn)入文件夾Manley\MedWin\Chinese
2.安裝英文MedWin,進(jìn)入文件夾Manley\MedWin\English
3.在文件夾內(nèi),點(diǎn)擊setup。
從因特網(wǎng)上下載安裝
1.下載所需的MedWin中文版Chinese.zip或MedWin英文版English.zip文件
2.雙擊鼠標(biāo)左鍵,釋放文件Chinese.zip或English.zip
3.將文件釋放到C:\Windows\Temp或其它文件夾
4.進(jìn)入C:\Windows\Temp\Chinese或C:\Windows\Temp\English文件夾
5.在文件夾內(nèi)點(diǎn)擊setup,安裝MedWin集成開發(fā)環(huán)境。
第二步:安裝文件路徑設(shè)置
為了便于管理和服務(wù),建議安裝MedWin集成開發(fā)環(huán)境時(shí),使用以下缺省路徑安裝:
1.中文版缺省安裝目標(biāo)路徑:C:\Manley\PMedWin
2.英文版缺省安裝目標(biāo)路徑:C:\Manley\MedWin
注意安裝MedWin集成開發(fā)環(huán)境路徑選擇。
2.3 設(shè)置MedWinMedWin集成開發(fā)環(huán)境完成安裝后,如果是第一次安裝,請(qǐng)您務(wù)必注意:必須根據(jù)系統(tǒng)提示,設(shè)置工作目錄、編譯/匯編器、連接器的路徑、環(huán)境以及注冊(cè)仿真器,如果是升級(jí)安裝,則MedWin集成開發(fā)環(huán)境啟動(dòng)后出現(xiàn)啟動(dòng)向?qū)Р藛位蛑苯哟蜷_項(xiàng)目文件。
第一步;啟動(dòng)MedWin
1由安裝MedWin集成開發(fā)環(huán)境,直接啟動(dòng)MedWin
2.或點(diǎn)擊Windows[開始/程序/Manley/MedWin中文版]啟動(dòng)中文版MedWin
3.或點(diǎn)擊Windows[開始/程序/Manley/MedWin]啟動(dòng)英文版MedWin
4.如果已經(jīng)連接仿真器,屏幕上出現(xiàn)MedWin的初始畫面,進(jìn)入啟動(dòng)MedWin的第三步
5.如果沒有連接仿真器,屏幕上出現(xiàn)端口選擇畫面,進(jìn)入啟動(dòng)MedWin的第二步
第二步:選擇進(jìn)入在線仿真或模擬仿真
1.由于仿真器供電電源,通訊電纜連接問題,請(qǐng)檢查并使仿真器工作正常后,點(diǎn)擊對(duì)話框中[仿真器]按鈕,進(jìn)入在線仿真狀態(tài)。
2.如果確認(rèn)需要進(jìn)行模擬仿真,點(diǎn)擊[模擬仿真]按鈕,進(jìn)入模擬仿真狀態(tài)。
經(jīng)過以上步驟,屏幕上出現(xiàn)MedWin集成開發(fā)環(huán)境的初始畫面,并漸漸消失,出現(xiàn)MedWin集成開發(fā)環(huán)境的系統(tǒng)畫面。
第三步:設(shè)置工作目錄
進(jìn)入MedWin集成開發(fā)環(huán)境后,系統(tǒng)首先提示默認(rèn)的工作目錄為C:\MedWin。我們建議用戶根據(jù)需要選擇合適的工作目錄,例如將工作目錄改為D:\WorkDir(用戶可自行定義目錄名稱)。注意:不得使用長(zhǎng)文件名作為工作目錄!
在MedWin集成開發(fā)環(huán)境工作目錄提示對(duì)話框中,更改MedWin集成開發(fā)環(huán)境工作目錄的步驟,必須在Windows環(huán)境下進(jìn)行:
1.打開Windows的資源管理器
2.選擇本地磁盤(D:)
3.單擊鼠標(biāo)右鍵,選擇新建文件夾,命名為WorkDir
當(dāng)建立WorkDir文件夾后,在MedWin集成開發(fā)環(huán)境點(diǎn)中,點(diǎn)擊當(dāng)前工作目錄左側(cè)按鈕。在開發(fā)環(huán)境工作目錄對(duì)話框中選擇驅(qū)動(dòng)器D盤后,打開文件夾(目錄)WorkDir,確認(rèn)后,工作目錄設(shè)置即告完成。系統(tǒng)將提示進(jìn)行下一步設(shè)置:編譯/匯編/連接器的配置。
第四步:配置編譯/匯編/連接器及環(huán)境
MedWin集成開發(fā)環(huán)境初始默認(rèn)編譯/匯編/連接環(huán)境為使用萬利電子自主版權(quán)的宏匯編和連接器,使用默認(rèn)設(shè)置,匯編連接信息和錯(cuò)誤關(guān)聯(lián)均為中文提示。
當(dāng)選擇用戶設(shè)置編譯/匯編/連接環(huán)境時(shí),必須注意選擇合適的路徑和程序,如
1.編譯器路徑為C:\C51\BIN\C51.exe
2.匯編器路徑為C:\C51\BIN\51.exe
3.連接器路徑為C:\C51\BIN\BL51.exe
系統(tǒng)頭文件、庫(kù)文件的環(huán)境為:
1.編譯器系統(tǒng)頭文件路徑為C:\C51\INC
2.編譯器系統(tǒng)庫(kù)文件路徑為C:\C51\LIB
MedWin集成開發(fā)環(huán)境默認(rèn)源程序的擴(kuò)展名為:
1.C源程序文件的擴(kuò)展名為.C
2.匯編源程序文件的擴(kuò)展名為.ASM
當(dāng)您已經(jīng)存在編譯器/匯編器/連接器時(shí),建議按照下列目錄存放:
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程序連接所需的庫(kù)文件
用戶可按照上面提示的路徑設(shè)置編譯器/匯編器/連接器及環(huán)境,如編譯器/匯編器/連接器存放在其它目錄,則必須在輸入框中設(shè)置合適的路徑或點(diǎn)擊按鈕選擇相應(yīng)的文件及路徑。
當(dāng)您使用Keil編譯器時(shí),其連接器應(yīng)設(shè)為BL51.exe,當(dāng)您使用Franklinl編譯器時(shí),其連接器應(yīng)設(shè)為L(zhǎng)51.exe。
第五步:設(shè)置文本編輯器
設(shè)置文本編輯器可以用于設(shè)置文本窗口的前景字符的顏色、背景顏色、字體和編輯文件類型。
2.4 MedWin開發(fā)入門MedWin集成開發(fā)環(huán)境提供了以下兩種方式開發(fā)用戶應(yīng)用程序,:
1.不使用MedWin集成開發(fā)環(huán)境項(xiàng)目管理方式——對(duì)源程序文件直接進(jìn)行匯編/連接,兼容傳統(tǒng)開發(fā)習(xí)慣。
2.使用MedWin集成開發(fā)環(huán)境項(xiàng)目管理方式——可進(jìn)行多模塊、混合語(yǔ)言編程的,同樣也適合單模塊程序的開發(fā)。
用戶無論是單模塊或多模塊的程序開發(fā),我們都建議使用項(xiàng)目管理方式管理應(yīng)用程序。
2.4.1 不使用MedWin集成開發(fā)環(huán)境項(xiàng)目管理方式不使用MedWin集成開發(fā)環(huán)境項(xiàng)目管理方式,只能對(duì)單模塊方式下的應(yīng)用程序開發(fā),具有很大的局限性。以下是不使用MedWin集成開發(fā)環(huán)境項(xiàng)目管理方式開發(fā)應(yīng)用程序的步驟:
第一步:關(guān)閉當(dāng)前項(xiàng)目文件
命令[項(xiàng)目管理/關(guān)閉當(dāng)前項(xiàng)]
不使用MedWin集成開發(fā)環(huán)境項(xiàng)目管理方式開發(fā)應(yīng)用程序,用戶必須關(guān)閉已經(jīng)打開的項(xiàng)目,此時(shí)MedWin集成開發(fā)環(huán)境關(guān)閉界面上所有的窗口。因?yàn)楫?dāng)打開項(xiàng)目文件后,MedWin集成開發(fā)環(huán)境默認(rèn)所有編譯/匯編、產(chǎn)生代碼的過程都是對(duì)項(xiàng)目或項(xiàng)目所包含的文件進(jìn)行的。
第二步:在文件萊單下打開應(yīng)用程序
命令[文件/新建]或[文件/打開]
單模塊方式下的文件調(diào)試可以按照以下方法新建或打開文件:
1.點(diǎn)擊[文件/新建],輸入文件名和擴(kuò)展名,新建文件
2.點(diǎn)擊[文件/打開],選擇文件撿取框中的文件將其打開
第三步:編譯/匯編
命令[項(xiàng)目管理/編譯/匯編]
MedWin集成開發(fā)環(huán)境根據(jù)文件的擴(kuò)展名,自動(dòng)對(duì)當(dāng)前激活的文件選擇調(diào)用外部編譯器或匯編器:
1.如果當(dāng)前文件的擴(kuò)展名為ASM或系統(tǒng)定義的擴(kuò)展名,編譯/匯編命令調(diào)用外部匯編命令對(duì)當(dāng)前文件匯編
2.如果當(dāng)前文件的擴(kuò)展名為C或系統(tǒng)定義的擴(kuò)展名,編譯/匯編命令調(diào)用外部C編譯命令對(duì)當(dāng)前文件編譯執(zhí)行[項(xiàng)目管理|編譯/匯編]命令后產(chǎn)生的結(jié)果顯示在消息框中。
如果需要設(shè)置文件編譯/匯編的命令行參數(shù),可以選擇[項(xiàng)目管理1文件屬性]命令設(shè)置。
第四步:錯(cuò)誤信息關(guān)聯(lián)
MedWin集成開發(fā)環(huán)境調(diào)用外部命令編譯/匯編后產(chǎn)生的結(jié)果,顯示在消息窗口中,消息窗口可由熱鍵Ctrl+9激活。當(dāng)編譯/匯編發(fā)生錯(cuò)誤時(shí),消息窗口中的錯(cuò)誤信息自動(dòng)與源文件關(guān)聯(lián),提示出錯(cuò)的位置。在消息窗口中錯(cuò)誤提示處雙擊鼠標(biāo)左鍵或鍵入回車,可將錯(cuò)誤信息與源文件的錯(cuò)誤位置關(guān)聯(lián):
1.如果編譯/匯編沒有錯(cuò)誤,可進(jìn)入第五步操作
2.如果編譯/匯編出現(xiàn)錯(cuò)誤,在修改源文件后重復(fù)進(jìn)行第三步操作
第五步:產(chǎn)生代碼并裝入仿真器調(diào)試
命令[項(xiàng)目管理/產(chǎn)生代碼]或[項(xiàng)目管理/產(chǎn)生代碼并裝入]
產(chǎn)生代碼或產(chǎn)生代碼并裝入命令對(duì)經(jīng)過編譯/匯編無誤后產(chǎn)生的OBJ文件進(jìn)行連接產(chǎn)生用于下載的代碼。此命令自動(dòng)地對(duì)修改過的源程序進(jìn)行編譯或匯編,對(duì)沒有修改過的程序?qū)⒃竭^編譯或匯編過程,然后連接所有的OBJ,LIB文件,再裝載代碼到仿真器,完成調(diào)試程序所需的準(zhǔn)備工作。裝載完成后,出現(xiàn)“Loadingprogram“(項(xiàng)目名)”…Completed'’的字樣。
2.4.2 使用MedWin集成開發(fā)環(huán)境項(xiàng)目管理方式使用MedWin集成開發(fā)環(huán)境項(xiàng)目管理方式開發(fā)程序,適用于各種方式下的單模塊和多模塊方式應(yīng)用程序。以下是使用MedWin集成開發(fā)環(huán)境項(xiàng)目管理方式開發(fā)應(yīng)用程序的步驟:
1.建立一個(gè)新的項(xiàng)目進(jìn)入第一步——新建項(xiàng)目文件
2.打開已經(jīng)存在的項(xiàng)目文件進(jìn)入第三步——打開項(xiàng)目文件
第一步:新建項(xiàng)目文件
命令[項(xiàng)目管理/新建項(xiàng)目文件]
項(xiàng)目名稱
MedWin集成開發(fā)環(huán)境的項(xiàng)目器是按項(xiàng)目名稱管理的,項(xiàng)目管理器內(nèi)的項(xiàng)目名稱不可以相同。在項(xiàng)目名稱輸入欄內(nèi),用戶必須輸入項(xiàng)目名稱,并且項(xiàng)目名不得超過8個(gè)字符,不可以使用漢字以及“-,?,*,/”等DOS文件名所不可以使用的字符,也不可以輸入盤符和路徑!
高級(jí)設(shè)置
高級(jí)設(shè)置是用戶程序所處路徑與當(dāng)前工作目錄不同時(shí),選擇存放項(xiàng)目文件路徑的過程。通常,當(dāng)用戶源程序文件存放在當(dāng)前工作目錄時(shí),不需要進(jìn)行高級(jí)設(shè)置。如果源程序文件不在當(dāng)前工作目錄時(shí),用戶必須選擇高級(jí)設(shè)置,將項(xiàng)目文件存放到用戶源程序所處的目錄。
如果源文件與項(xiàng)目文件不在同一目錄時(shí),將會(huì)出現(xiàn)不能進(jìn)行源文件調(diào)試的情況發(fā)生。
添加文件
選擇添加文件選項(xiàng),表示在項(xiàng)目建立后會(huì)自動(dòng)打開文件撿取框,供用戶選擇文件添加到項(xiàng)目管理器中。
存儲(chǔ)器屬性
存儲(chǔ)器屬性Small/Compact/Large,此屬性為C編譯器所需,如果項(xiàng)目文件中包含C程序,用戶必須設(shè)置存儲(chǔ)器屬性。
RAM尺寸:128/256,此屬性為連接器所需的控制項(xiàng)。系統(tǒng)默認(rèn)128字節(jié)。
系統(tǒng)默認(rèn)標(biāo)準(zhǔn)80C51匯編選項(xiàng),此選項(xiàng)為匯編器所需的控制項(xiàng)。選中時(shí),匯編器默認(rèn)SFR為80C51。
如果項(xiàng)目所使用的不足標(biāo)準(zhǔn)的80C51,用戶必須定義其使用的SFR,例:
PO DATA 80H
E DATA 0A8H
TR0 BIT 8CH
項(xiàng)目環(huán)境設(shè)置
項(xiàng)目頭文件路徑為該項(xiàng)目所定義的頭文件所處的路徑。該路徑與系統(tǒng)定義的頭文件路徑在DOS環(huán)境設(shè)置的關(guān)系是:
set c51inc=(系統(tǒng)定義的頭文件路徑)(項(xiàng)目定義的頭文件路徑)
項(xiàng)目庫(kù)文件路徑為該項(xiàng)目所定義的庫(kù)文件所處的路徑,該路徑與系統(tǒng)定義的庫(kù)文件路徑在DOS環(huán)境設(shè)置的關(guān)系是:
setc51lib=(系統(tǒng)定義的庫(kù)文件路徑)(項(xiàng)目定義的庫(kù)文件路徑)
在項(xiàng)目的編譯和連接過程中,MedWin自動(dòng)加入以上環(huán)境變量的設(shè)置。通常用戶不需要設(shè)置項(xiàng)目定義的頭文件和庫(kù)文件路徑,只有在高級(jí)應(yīng)用時(shí)才需設(shè)置。
調(diào)試信息
建立新的項(xiàng)目后,系統(tǒng)默認(rèn)為產(chǎn)生調(diào)試信息,能夠進(jìn)行源文件調(diào)試。
更多的文件屬性
關(guān)于編譯/匯編程序的更多的文件屬性,可在[項(xiàng)目管理I文件屬性]中設(shè)置。如果在多模塊調(diào)試中需要關(guān)閉一個(gè)或多個(gè)文件的源文件調(diào)試,可在文件屬性對(duì)話框中,分別關(guān)閉產(chǎn)生調(diào)試信息選項(xiàng)。
第二步:添加文件
命令[項(xiàng)目管理/添加文件項(xiàng)]
添加文件命令用于將各類文件添加至項(xiàng)目管理器,新建項(xiàng)目文件后集成環(huán)境會(huì)自動(dòng)打開添加文件對(duì)話框,提供選擇。請(qǐng)根據(jù):
1.如果文件存在,在文件撿取框中選擇并打開文件添加
2.如果文件不存在,必須輸入文件名(包含擴(kuò)展名),建立新文件
新建文件后,鍵入命令[項(xiàng)目管理|添加文件項(xiàng)],將新建文件添加到項(xiàng)目中。
第三步:打開項(xiàng)目文件
命令:[項(xiàng)目管理/打開項(xiàng)目文件]
對(duì)于已經(jīng)存在的項(xiàng)目文件,可以直接打開項(xiàng)目文件進(jìn)入第四步操作。
第四步:編輯,編譯/匯編/連接
命令:[項(xiàng)目管理/編譯/匯編]
MedWin集成開發(fā)環(huán)境根據(jù)文件的擴(kuò)展名,自動(dòng)對(duì)激活的文件選擇調(diào)用外部編譯器或匯編器:
1.如果當(dāng)前文件的擴(kuò)展名為ASM或系統(tǒng)定義的擴(kuò)展名,編譯/匯編命令調(diào)用外部匯編命令對(duì)當(dāng)前文件匯編
2.如果當(dāng)前文件的擴(kuò)展名為C或系統(tǒng)定義的擴(kuò)展名,編譯/匯編命令調(diào)用外部C編譯命令對(duì)當(dāng)前文件編譯文件編譯/匯編的命令行參數(shù)由[項(xiàng)目管理1文件屬性]確定。
第五步:錯(cuò)誤信息關(guān)聯(lián)
文件經(jīng)過編譯/匯編后的結(jié)果顯示于消息窗口,出現(xiàn)錯(cuò)誤后錯(cuò)誤信息與文件關(guān)聯(lián)。在消息窗口中錯(cuò)誤之處雙擊鼠標(biāo)左鍵或鍵入回車,即可將錯(cuò)誤與文件關(guān)聯(lián):
1.如果沒有錯(cuò)誤,進(jìn)入第六步操作
2.如果出現(xiàn)錯(cuò)誤,修改文件后重復(fù)進(jìn)行第四步操作
第六步產(chǎn)生代碼并裝人仿真器
命令[項(xiàng)目管理/產(chǎn)生代碼]
命令[項(xiàng)目管理/產(chǎn)生代碼并裝入]
命令[項(xiàng)目管理/重新產(chǎn)生全部代碼]
產(chǎn)生代碼或產(chǎn)生代碼并裝入命令,對(duì)經(jīng)過編譯/匯編無誤后產(chǎn)生的OBJ文件進(jìn)行連接,產(chǎn)生用于下載的代碼。此命令對(duì)修改過的源程序自動(dòng)進(jìn)行編譯或匯編,否則將越過編譯或匯編過程進(jìn)行連接,并裝載代碼到仿真器,完成調(diào)試文件所需的準(zhǔn)備工作。
1.使用產(chǎn)生代碼命令,項(xiàng)目管理器會(huì)自動(dòng)判別文件是否需要重新編譯/匯編,提高調(diào)試效率
2.使用產(chǎn)生代碼并裝入命令,項(xiàng)目管理器會(huì)自動(dòng)判別文件是否需要重新編譯/匯編,并將連接產(chǎn)生的代碼下載到仿真器,提供調(diào)試運(yùn)行
使用重新產(chǎn)生全部代碼命令,項(xiàng)目管理器會(huì)對(duì)所有文件重新編譯/匯編,并將連接產(chǎn)生的代碼下載到仿真器,提供調(diào)試運(yùn)行
2.5 MedWin斷點(diǎn)功能MedWin集成開發(fā)環(huán)境配合|nsight系列仿真器,具有強(qiáng)大的斷點(diǎn)功能:可以在編輯和調(diào)試狀態(tài)下設(shè)置或清除斷點(diǎn),并且在退出集成開發(fā)環(huán)境時(shí)自動(dòng)保存斷點(diǎn)信息。
1.?dāng)帱c(diǎn)標(biāo)記
MedWin集成開發(fā)環(huán)境的斷點(diǎn)標(biāo)記,根據(jù)系統(tǒng)狀態(tài)和所處窗口類型,標(biāo)記如下:
1.在編輯狀態(tài)下,源程序文本窗口內(nèi)的白色箭頭——預(yù)設(shè)斷點(diǎn),退出時(shí)保存,
2.在調(diào)試狀態(tài)下,源程序文本窗口內(nèi)的白色箭頭——無效斷點(diǎn),退出時(shí)保存
3.在調(diào)試狀態(tài)下,源程序文本窗口內(nèi)的黃色箭頭——有效地址斷點(diǎn),退出時(shí)保存
4.在調(diào)試狀態(tài)下,源程序文本窗口內(nèi)的藍(lán)綠色箭頭——臨時(shí)斷點(diǎn),退出時(shí)不保存
5.在反匯編本窗口內(nèi)設(shè)置的斷點(diǎn),標(biāo)記為紅色光帶——地址斷點(diǎn),退出時(shí)不保存
2.?dāng)帱c(diǎn)顏色變化規(guī)律
根據(jù)系統(tǒng)狀態(tài)和所處窗口類型,MedWin集成開發(fā)環(huán)境的斷點(diǎn)顏色變化規(guī)律如下:
編輯狀態(tài)下,在源程序窗口內(nèi)設(shè)置斷點(diǎn),標(biāo)記為白色,再次設(shè)置斷點(diǎn),白色斷點(diǎn)標(biāo)記被清除。
調(diào)試狀態(tài)下,在源程序窗口內(nèi)設(shè)置斷點(diǎn),標(biāo)記為黃色,再次設(shè)置斷點(diǎn),黃色斷點(diǎn)標(biāo)記被清除。
調(diào)試狀態(tài)下,在源程序窗口內(nèi)藍(lán)綠色斷點(diǎn)處設(shè)置斷點(diǎn),標(biāo)記為黃色,再次設(shè)置斷點(diǎn),黃色斷點(diǎn)標(biāo)記被清除。
調(diào)試狀態(tài)下,在與源程序斷點(diǎn)關(guān)聯(lián)的反匯編窗口紅色光帶處設(shè)置斷點(diǎn),在反匯編窗口內(nèi)清除斷點(diǎn),同時(shí)將源程序斷點(diǎn)標(biāo)記為白色,再次設(shè)置斷點(diǎn),反匯編窗口標(biāo)記為紅色光帶,源程序的白色斷點(diǎn)再次標(biāo)記為黃色。
3.源程序文本上設(shè)置斷點(diǎn)
(1)編輯狀態(tài)設(shè)置斷點(diǎn)
當(dāng)用戶在編寫源程序的過程中,根據(jù)調(diào)試需求,可以直接在源程序文本的任何地方設(shè)置或清除斷點(diǎn)。如果設(shè)置了斷點(diǎn),將以白色箭頭標(biāo)記在源程序文本左側(cè)的灰色狀態(tài)欄內(nèi),斷點(diǎn)屬性為預(yù)設(shè)斷點(diǎn)。對(duì)于在源程序文本上設(shè)置的斷點(diǎn),系統(tǒng)退出時(shí)全部自動(dòng)保存。
(2)調(diào)試狀態(tài)設(shè)置斷點(diǎn)
在調(diào)試狀態(tài)下,可以直接在源程序文本的有效行上設(shè)置斷點(diǎn)(當(dāng)文本左側(cè)的灰色狀態(tài)欄內(nèi)出現(xiàn)小圓點(diǎn)時(shí),表示當(dāng)前程序?yàn)橛行?。設(shè)置后,斷點(diǎn)以黃色箭頭標(biāo)記在文本左側(cè)的灰色狀態(tài)欄內(nèi),如果沒有出現(xiàn)小圓點(diǎn),則不可以設(shè)置斷點(diǎn)。在編輯狀態(tài)下設(shè)置的斷點(diǎn),經(jīng)過編譯/匯編,如果預(yù)設(shè)的斷點(diǎn)編譯后是有效行,則斷點(diǎn)標(biāo)記為黃色,如果不是有效行,斷點(diǎn)標(biāo)記為白色。對(duì)于在源程序文本上設(shè)置的斷點(diǎn),系統(tǒng)退出時(shí)全部自動(dòng)保存。
4.反匯編窗口內(nèi)設(shè)置斷點(diǎn)
斷點(diǎn)在反匯編窗口內(nèi)以紅色光帶表示,可以任意設(shè)置地址斷點(diǎn),如果設(shè)置的斷點(diǎn)與源程序有效行地址關(guān)聯(lián),則與源程序相關(guān)聯(lián)的地址處設(shè)置斷點(diǎn),在源程序窗口內(nèi)出現(xiàn)藍(lán)綠色箭頭。
如果在源程序斷點(diǎn)相關(guān)聯(lián)的反匯編窗口紅色光帶處設(shè)置斷點(diǎn),將清除窗口內(nèi)的斷點(diǎn)光帶,同時(shí)將源程序斷點(diǎn)標(biāo)記為白色,再次設(shè)置斷點(diǎn),反匯編窗口標(biāo)記為紅色光帶,源程序的白色斷點(diǎn)再次標(biāo)記為黃色。
5.?dāng)帱c(diǎn)表
斷點(diǎn)列表通過[斷點(diǎn)|斷點(diǎn)表]激活。斷點(diǎn)表列出所有斷點(diǎn)所處的地址,文件位置及屬性。
在列表框內(nèi)可以執(zhí)行添加斷點(diǎn),刪除斷點(diǎn)等操作。
6.?dāng)帱c(diǎn)使能
當(dāng)設(shè)置了斷點(diǎn)或使用外部信號(hào)斷點(diǎn)時(shí),選擇[斷點(diǎn)|斷點(diǎn)使能]可以允許或禁止相應(yīng)的斷點(diǎn)。當(dāng)允許外部信號(hào)斷點(diǎn)后,可以設(shè)置外部信號(hào)的為上升沿或下降沿作用。
2.6 MedWin菜單命令1、文件(F)
新建(N):新建文件,在輸入文件名時(shí)必須輸入文件的擴(kuò)展名。如果是程序文件,匯編語(yǔ)言擴(kuò)展名必須為(.asm),C語(yǔ)言擴(kuò)展名必須為(.c)
打開(O):打開用戶程序文件,可以在文件撿取框中選擇,也可以在文件撿取框中直接輸入文件名,當(dāng)文件名不存在時(shí),系統(tǒng)默認(rèn)為新建文件。
打開項(xiàng)目文件(P):打開MedWin集成開發(fā)環(huán)境項(xiàng)目文件,項(xiàng)目文件的擴(kuò)展名為mpf。打開后,根據(jù)需要可以將打開的項(xiàng)目文件添加到項(xiàng)目管理器中。
保存(S) Ctrl+S:保存當(dāng)前激活的文件。
另存為(A):將當(dāng)前激活的文件另存為指定的文件。
退出(X):退出MedWin集成開發(fā)環(huán)境。
2、編輯(E)
撤銷(U): Ctrl+Z:撤消當(dāng)前的操作。
剪切(T) Ctrl+X:將選擇的塊剪切到剪貼板。
復(fù)制(C) Ctrl+C:將選擇的塊復(fù)制到剪貼板。
粘帖(P) Ctrl+P:將剪貼板粘貼到文件。
選擇整個(gè)文檔(L) Ctrl+A:將整個(gè)文檔作為塊。
查找(F) Ctrl+F:在文件中查找字符串。
查擇下一個(gè)(D) F3:查找下一個(gè)匹配的字符串。
在文件中查找:在被選定的文件范圍內(nèi)查找字符串。
替換(E) Ctrl+H:替換匹配的字符串。
設(shè)置或清除書簽(B) Ctrl+B:在文檔中設(shè)置或清除書簽,用于快速定位。
定位到前一個(gè)書簽(R) Ctrl+Shift+P:與設(shè)置或清除書簽命令配合,定位到前一個(gè)書簽。
定位到下一個(gè)書簽(X) Ctrl+Shift+N:與設(shè)置或清除書簽命令配合,定位到后一個(gè)書簽。
清除所有書簽(K):清除所有書簽標(biāo)記。
定位(G) Ctd+G:定位到指定行或地址。
定位到前一個(gè)錯(cuò)誤(V):將編譯/匯編發(fā)生的錯(cuò)誤與源程序關(guān)聯(lián),并定位到前一個(gè)錯(cuò)誤的位置。
定位到后一個(gè)錯(cuò)誤(N):將編譯/匯編發(fā)生的錯(cuò)誤與源程序關(guān)聯(lián),并定位到后一個(gè)錯(cuò)誤的位置。
3、查看(V)
寄存器(R):寄存器窗口,顯示80C51內(nèi)核基本的寄存器R0-R7,A,B,DPH,DPL,SP和PSW,以16進(jìn)制方式顯示字節(jié)寄存器的內(nèi)容,以位的方式顯示PSW的內(nèi)容。
特殊功能寄存器(S):當(dāng)前被選擇的CPU所包含的特殊功能寄存器窗口,以16進(jìn)制方式顯示字節(jié)寄存器的內(nèi)容。
反匯編窗口(C):反匯編窗口,將程序代碼區(qū)的內(nèi)容以反匯編方式及源程序方式顯示。反匯編窗口同時(shí)支持行匯編方式輸入或修改程序代碼。
觀察窗口第一觀察組(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對(duì)應(yīng),128-255~SFR相對(duì)應(yīng)。
數(shù)據(jù)區(qū)Pdata:頁(yè)面存儲(chǔ)方式下的外部數(shù)據(jù)空間,使用MOVX @Ri,A或MOVX A, @Ri指令。
跟蹤存儲(chǔ)器(F):跟蹤存儲(chǔ)器窗口,對(duì)含有跟蹤存儲(chǔ)器功能的仿真器有效。
波形記錄器(A):波形記錄器窗口,對(duì)含有跟蹤存儲(chǔ)器功能的仿真器有效。
性能分析器窗口(W):性能分析器窗口,對(duì)含有性能分析器功能的仿真器有效。
消息窗口(M) Ctrl+9:消息窗口,顯示編譯/匯編產(chǎn)生的結(jié)果,調(diào)試過程中的提示以及在文件中查找的結(jié)果。
項(xiàng)目管理器窗口(N) Ctrl+0:項(xiàng)目管理器窗口。
5、調(diào)試(R)
開始調(diào)試(B) Ctrl+M:切換到調(diào)試態(tài),如果已經(jīng)打開了項(xiàng)目文件,舅U進(jìn)行產(chǎn)生代碼并裝入操作。
終止調(diào)試(D) Ctrl+D:切換到編輯態(tài)。
全速運(yùn)行(R) F9:全速運(yùn)行,調(diào)試態(tài)有效。
禁止斷點(diǎn)并全速運(yùn)行(E) Alt+F9:禁止斷點(diǎn)并全速運(yùn)行,調(diào)試態(tài)有效(此命令只對(duì)具有跟蹤存儲(chǔ)器功能的仿真器有效)。
跟蹤(T) F7:跟蹤運(yùn)行程序,在反匯編窗口下執(zhí)行一條指令,如果當(dāng)前是調(diào)用指令,則進(jìn)入所調(diào)用的子程序;如果在源程序窗口下,執(zhí)行當(dāng)前文本下的一條語(yǔ)句,如果是調(diào)用則進(jìn)入所調(diào)用的子程序。調(diào)試態(tài)有效。
單步(S) F8:?jiǎn)尾竭\(yùn)行程序。反匯編窗口下如是調(diào)用指令,則越過所調(diào)用的子程序:源程序窗口下,如果是調(diào)用語(yǔ)句,則越過所調(diào)用的子程序。調(diào)試態(tài)有效。
運(yùn)行到光標(biāo)處(G) F4:程序全速運(yùn)行到光標(biāo)處,調(diào)試態(tài)及源程序文本或反匯編窗口有效。
運(yùn)行到RETURN指令處(U) Alt+F8:程序全速運(yùn)行到RET指令處,調(diào)試態(tài)有效,對(duì)于不同的仿真器,此命令功能有所不同。
交互跟蹤(A) Alt+F7:如果當(dāng)前激活的是程序文本窗口,執(zhí)行反匯編窗口的跟蹤指令,如果當(dāng)前激活的是反匯編窗口,執(zhí)行源程序文本窗口的跟蹤指令,調(diào)試態(tài)有效。
執(zhí)行到(E):執(zhí)行到設(shè)定的地址,調(diào)試態(tài)有效。
設(shè)置新的程序計(jì)數(shù)器(N) Ctrl+N:改變當(dāng)前的程序計(jì)數(shù)器值,調(diào)試態(tài)有效。
自動(dòng)單步(M):自動(dòng)以跟蹤的方式運(yùn)行程序,調(diào)試態(tài)有效。
設(shè)置重復(fù)計(jì)數(shù)器(O):設(shè)置重復(fù)計(jì)數(shù)值,與斷點(diǎn)配合使用,調(diào)試態(tài)有效。
返回監(jiān)控(I) Ctrl+T:終止運(yùn)行程序,調(diào)試態(tài)有效。
程序復(fù)位(P) Ctrl+F2:復(fù)位仿真器,調(diào)試態(tài)有效。
顯示到一步執(zhí)行(X) Ctrl+O:刷新所有窗口,調(diào)試態(tài)有效。
添加項(xiàng)至觀察窗口(W) Ctrl+W:將光標(biāo)處的字符或地址作為變量添加到觀察窗口,調(diào)試態(tài)有效。
6、外圍部件(S)
中斷(I):中斷狀態(tài)窗口,包括INT0,INTl,TO,T1,T2和UART中斷狀態(tài)以及優(yōu)先級(jí)和允許設(shè)置。設(shè)置或清除相應(yīng)的標(biāo)志,可以改變中斷的狀態(tài),也可以通過相應(yīng)的值,作為中斷初始化的編程。
端口(T):端口設(shè)置窗口,顯示或改變端口的狀態(tài)。
定時(shí)器/計(jì)數(shù)器0:定時(shí)器/計(jì)數(shù)器0模式和控制窗口,其TMOD和TCON的值,可以作為定時(shí)器0初始化的編程依據(jù)。
定時(shí)器/計(jì)數(shù)器1:定時(shí)器/計(jì)數(shù)器1模式和控制窗口,其TMOD和TCON的值,可以作為定時(shí)器1初始化的編程依據(jù)。
定時(shí)器/計(jì)數(shù)器2:定時(shí)器/計(jì)數(shù)器2模式和控制窗口,其T2CON的值,可以作為定時(shí)器2初始化的編程依據(jù)。
串行口(S):串行口工作模式和控制窗口,其SMOD和SCON的值,可以作為串行口初始化的編程依據(jù)。
7、項(xiàng)目管理(P)
新建項(xiàng)目文件(N):新建項(xiàng)目文件對(duì)話框,包含打開已經(jīng)存在的項(xiàng)目文件、創(chuàng)建一個(gè)新項(xiàng)目、新建或打開一個(gè)文件以及硬件調(diào)試。
打開項(xiàng)目文件(O):打開一個(gè)已經(jīng)存在的項(xiàng)目文件。
關(guān)閉當(dāng)前項(xiàng)目:關(guān)閉當(dāng)前已經(jīng)打開的項(xiàng)目文件,常用于對(duì)單模塊文件或硬件的調(diào)試。
保存當(dāng)前項(xiàng)目(S):保存當(dāng)前項(xiàng)目文件。
另有為(A):將當(dāng)前項(xiàng)目文件存為其他項(xiàng)目文件名。
添加文件項(xiàng)(F):在已經(jīng)打開的項(xiàng)目中添加文件。添加文件的類型有源文件、頭文件、庫(kù)文件和其他文件。
移除文件項(xiàng):在已經(jīng)打開的項(xiàng)目中刪除文件。
設(shè)置向?qū)В╓):設(shè)置編譯器/匯編器/連接器路徑以及源文件的默認(rèn)擴(kuò)展名和C語(yǔ)言的環(huán)境變量路徑。
設(shè)置工作目錄(D):設(shè)置MedWin集成開發(fā)環(huán)境的工作目錄,建議工作目錄設(shè)置在D盤,并且不要使用長(zhǎng)文件名。
文仟屬性(I) Ctrl+Enter:對(duì)于匯編語(yǔ)言程序只能設(shè)置是否需要源文件調(diào)試;對(duì)于C語(yǔ)言程序,還可以設(shè)置存儲(chǔ)器模式等。
連接屬性(L):用于對(duì)項(xiàng)目文件的連接控制、段定位、RAM尺寸和頭文件、庫(kù)文件路徑的設(shè)置。
編譯/匯編(T) Ctrl+F7:根據(jù)文件的擴(kuò)展名,編譯/匯編當(dāng)前文件。
產(chǎn)生代碼(M):根據(jù)文件的編輯修改狀態(tài),確定是否編譯/匯編當(dāng)前文件之后,對(duì)產(chǎn)生的OBJ文件連接。
產(chǎn)生代碼并裝入 (E) Ctrl+F8:根據(jù)文件的編輯修改狀態(tài),確定是否編譯/匯編當(dāng)前文件之后,對(duì)產(chǎn)生的OBJ文件連接,再將連接產(chǎn)生的代碼裝載到仿真器。
重新產(chǎn)生全部代碼(U) Ctrl+F9:編譯/匯編項(xiàng)目中所有文件,對(duì)產(chǎn)生的OBJ文件連接,再將連接產(chǎn)生的代碼裝載到仿真器。
輸出IntelHEX(H):產(chǎn)生IntelHEX格式文件,默認(rèn)HEX文件的文件名為項(xiàng)目名。
輸出Binary(B):產(chǎn)生二進(jìn)制格式文件,默認(rèn)B|N文件的文件名為項(xiàng)目名。
項(xiàng)目管理器(P) Ctrl+0:激活項(xiàng)目管理器窗口。
9、斷點(diǎn)(B)
斷點(diǎn)(B):斷點(diǎn)列表窗口。
設(shè)置或清除斷點(diǎn)(T) F2:在源程序或反匯編窗口中設(shè)置/清除斷點(diǎn)。編輯態(tài)的文本窗口以及調(diào)試態(tài)的源文件和反匯編窗口有效。
設(shè)置到(A):在指定的地址處設(shè)置斷點(diǎn)。
斷點(diǎn)使能(E):地址斷點(diǎn)或外部斷點(diǎn)使能。
禁止所有斷點(diǎn)(D):禁止所有地址斷點(diǎn)。
清除所有斷點(diǎn)(R):清除所有地址斷點(diǎn)。
設(shè)置跟蹤存儲(chǔ)器(S):設(shè)置跟蹤存儲(chǔ)器狀態(tài)
10、設(shè)置(O)
設(shè)置仿真器(E):設(shè)置仿真CPU類型,時(shí)鐘和存儲(chǔ)器結(jié)構(gòu)。
程序程序存踏器映像(C):設(shè)置程序存儲(chǔ)器映像。
程序數(shù)據(jù)存踏器映像(O):設(shè)置數(shù)據(jù)存儲(chǔ)器映像。
設(shè)置通訊口(T):選擇通訊口參數(shù)或進(jìn)入模擬調(diào)試。
設(shè)置文本編輯器(S):設(shè)置文本編輯器環(huán)境參數(shù),如字體、顏色等。
設(shè)置向量(W):設(shè)置編譯器/匯編器/連接器路徑以及源文件的默認(rèn)擴(kuò)展名和C語(yǔ)言的環(huán)境變量路徑的設(shè)置。
設(shè)置工作目錄(D):設(shè)置MedWin集成開發(fā)環(huán)境工作目錄。
啟動(dòng)向?qū)В哼x擇進(jìn)入MedWin集成開發(fā)環(huán)境啟動(dòng)向?qū)гO(shè)置。
11、窗口(W)
拆分(S):拆分文本窗口和存儲(chǔ)器窗口。
工作簿模式(W):窗口顯示模式設(shè)定是否使用工作簿模式。
關(guān)閉窗口(O) Ctrl+F4:關(guān)閉當(dāng)前激活的窗口。
關(guān)閉所有窗D(L):關(guān)閉當(dāng)前所有激活的窗口。
排列圖標(biāo)(A):排列當(dāng)前所有激活的窗口。
層疊窗口(C):層疊當(dāng)前所有激活的窗口。
橫向平鋪窗口(H):橫向平鋪當(dāng)前所有激活的窗口。
縱向平鋪窗口(V):縱向平鋪當(dāng)前所有激活的窗口。
刷新所有窗口(R):刷新當(dāng)前所有激活的窗口和停駐窗口。
12、幫助(H)
關(guān)于MedWin(A):關(guān)于MedWin對(duì)話框中列出了軟件和硬件有關(guān)版本信息,以及仿真器產(chǎn)品的注冊(cè)。
2.7常見問題
| | |
編譯連接時(shí)出現(xiàn)短時(shí)黑屏或 提示切換到DOS狀態(tài) | 操作系統(tǒng)存在較低版本的執(zhí)行程序 | |
| | 在設(shè)置1設(shè)置向?qū)е兄匦略O(shè)置編 |
| |
| |
| |
| | 在設(shè)置1設(shè)置向?qū)е兄匦略O(shè)置連接 器路徑 |
| |
| |
| |
| 項(xiàng)目名不得使用字符“�!�(減號(hào)) |
項(xiàng)目文件所處路徑包含長(zhǎng)文件名 | |
譯器和匯編器路徑源程序窗口的左側(cè)未出現(xiàn)藍(lán)色的調(diào)試小圓點(diǎn),并且執(zhí)行所有運(yùn)行操作,均為全速運(yùn) 行 | | 將項(xiàng)目文件建立在源文件的目錄內(nèi) |
在文件屬性內(nèi)關(guān)閉了調(diào)試信息 | 打開產(chǎn)生調(diào)試信息選項(xiàng) |
| 使用高版本的匯編器,如Franklin/KeilA51.EXEV4.86或以上版本 |
| |
| | |
| 點(diǎn)擊測(cè)試通訊口對(duì)話框中按鈕[仿真器] |
| |
| | |
| 開的外部數(shù)據(jù)窗口或觀察外部數(shù)據(jù)變量,影響了PO,P2口 | 閉外部數(shù)據(jù)窗口(XDATA窗口)或觀察外部數(shù)據(jù)變量 |
| | |
| | |
| | |
| | |
第三章 單片機(jī)最小系統(tǒng)實(shí)驗(yàn)一、單片機(jī)最小系統(tǒng)的熟悉一、實(shí)驗(yàn)?zāi)康?/strong>在進(jìn)行其他實(shí)驗(yàn)之前,先熟悉實(shí)驗(yàn)裝置的核心模塊——單片機(jī)最小系統(tǒng)模塊。掌握該實(shí)驗(yàn)?zāi)K的電路原理和接口的使用方法。
1.掌握單片機(jī)振蕩器時(shí)鐘電路及CPU工作時(shí)序;掌握復(fù)位狀態(tài)及復(fù)位電路設(shè)計(jì);掌握單片機(jī)各引腳功能及通用I/O口的使用;掌握單片機(jī)基本指令的使用。
2.掌握MedWin集成開發(fā)環(huán)境,仿真器和燒錄器等開發(fā)工具的使用。
二、實(shí)驗(yàn)設(shè)備1.單片機(jī)仿真器,燒錄器;
2.單片機(jī)最小系統(tǒng)實(shí)驗(yàn)?zāi)K,鍵盤實(shí)驗(yàn)?zāi)K,發(fā)光二極管陣列實(shí)驗(yàn)?zāi)K。
三、實(shí)驗(yàn)要求1.連接實(shí)驗(yàn)電路,編寫簡(jiǎn)易單片機(jī)匯編程序達(dá)到下述工作要求:以任意兩個(gè)獨(dú)立式按鍵作為輸入,當(dāng)?shù)谝绘I按下時(shí),點(diǎn)亮第一行發(fā)光二極管;當(dāng)?shù)诙I按下時(shí),點(diǎn)亮第二行發(fā)光二極管。
2.將編寫的程序調(diào)入仿真器中,在MedWin集成開發(fā)環(huán)境中進(jìn)行調(diào)試;
3.在MedWin中產(chǎn)生機(jī)器碼文件,用燒錄器燒錄到單片機(jī)芯片中,插在板子上觀察工作情況。
四、實(shí)驗(yàn)原理4.1 AT89C51引腳說明
我們以常用的單片機(jī)芯片AT89C51為教學(xué)實(shí)例,首先對(duì)其引腳進(jìn)行簡(jiǎn)要介紹:
- P0.0~P0.7:P0口的8位雙向三態(tài)I/O口線;
- P1.0~P1.7:P1口的8位準(zhǔn)雙向口線;
- P2.0~P2.7:P2口的8位準(zhǔn)雙向口線;
- P3.0~P3.7:P3口的8位具有雙重功能的準(zhǔn)雙向口線;
- ALE:地址鎖存控制信號(hào)。
- /PSEN:外部程序存儲(chǔ)器讀選通信號(hào),讀外部ROM時(shí)PSEN低電平有效。
- /EA:訪問程序存儲(chǔ)器控制信號(hào),當(dāng)EA為低電平時(shí),對(duì)ROM的讀操作限制在外部程序存儲(chǔ)器;當(dāng)EA為高電平時(shí),則對(duì)ROM的讀操作是從內(nèi)部程序存儲(chǔ)器開始,并可延至外部程序存儲(chǔ)器。
- RST 復(fù)位信號(hào),復(fù)位信號(hào)延續(xù)2個(gè)機(jī)器周期以上高電平時(shí)即為有效,用以完成單片機(jī)的復(fù)位初始化操作。
- XTAL1 和 XTAL2 外接晶體引線端,當(dāng)使用芯片內(nèi)部時(shí)鐘時(shí),此二引線端用于外接石英晶體和微調(diào)電容;當(dāng)使用外部時(shí)鐘時(shí),XTAL1接地,XTAL2用于接外部時(shí)鐘振蕩器信號(hào)。
- Vss 地線。
Vcc +5V電源。
圖1-1 AT89C51引腳圖及邏輯符號(hào)圖
P3口線的第二功能見表1-1,這些特殊功能我們將在以后的實(shí)驗(yàn)中進(jìn)行學(xué)習(xí)。
表1-1 P3口線的第二功能
| | |
| | |
| | |
| | |
| | |
| | 定時(shí)器/計(jì)數(shù)器0計(jì)數(shù)輸入 |
| | 定時(shí)器/計(jì)數(shù)器1計(jì)數(shù)輸入 |
| | |
| | |
4.2 振蕩電路、時(shí)鐘電路和CPU時(shí)序
(1)振蕩電路、時(shí)鐘電路。如圖1- 2所示,外部時(shí)鐘振蕩電路由晶體振蕩器和電容C1、C2構(gòu)成并聯(lián)諧振電路,連接在XTAL1、XTAL2腳兩端。對(duì)外部C1、C2的取值雖然沒有嚴(yán)格的要求,但電容的大小會(huì)影響到振蕩器頻率的高低、振蕩器的穩(wěn)定性、起振的快速性。C1、C2通常取值C1=C2=30PF左右;8051的晶振最高振蕩頻率為12M,AT89C51-24PC的外部晶振最高頻率可到24M。在單片機(jī)最小系統(tǒng)板上已經(jīng)提供了晶振電路,在使用該電路時(shí),應(yīng)加上跳線帽,并插入合適的晶振。
圖1-2 片內(nèi)振蕩器等效電路和外接元件
AT89C51也可以采用外部時(shí)鐘方式,外部時(shí)鐘從XTAL2腳輸入,XTAL1腳接地�?梢圆捎梦覀儼遄由咸峁┑耐獠繒r(shí)鐘源作為單片機(jī)外部時(shí)鐘輸入。
(2)CPU時(shí)序
晶振(或外部時(shí)鐘)的振蕩頻率的確定,就確定了CPU的工作時(shí)序。這里介紹幾個(gè)重要的時(shí)序概念,我們?cè)谝院蟮膶?shí)驗(yàn)中還會(huì)經(jīng)常涉及到:
◇ 振蕩周期:或者稱時(shí)鐘周期,是指為單片機(jī)提供定時(shí)信號(hào)的振蕩器的周期。
◇ 機(jī)器周期:在8051單片機(jī)中,一個(gè)機(jī)器周期由12個(gè)振蕩周期組成。
◇ 指令周期:是指執(zhí)行一條指令所占用的全部時(shí)間。一個(gè)指令周期通常含有1~4個(gè)機(jī)器周期。機(jī)器周期和指令周期是兩個(gè)很重要的衡量單片機(jī)工作速度的值。
若外接12MHz晶振時(shí),8051的三個(gè)周期的值為:
振蕩周期=1/12us;
機(jī)器周期=1us;
指令周期=1~4us。
在一些應(yīng)用中,傳統(tǒng)的8051的速度顯得有些慢,因此,當(dāng)前很多采用8051內(nèi)核的新型單片機(jī)采用了加速處理器結(jié)構(gòu),使機(jī)器周期提高到振蕩周期的6倍、4倍等等,RISC(精簡(jiǎn)指令集)的采用,更讓單片機(jī)在單個(gè)時(shí)鐘周期完成一條指令,使得單片機(jī)在處理速度上得到大大提高。
4.3 復(fù)位狀態(tài)和復(fù)位電路設(shè)計(jì)
(1)復(fù)位狀態(tài)
在8051單片機(jī)中,只要在單片機(jī)的RST引腳上出現(xiàn)2個(gè)機(jī)器周期以上的高電平,單片機(jī)就實(shí)現(xiàn)了復(fù)位。單片機(jī)在復(fù)位后,從0000H地址開始執(zhí)行指令。復(fù)位以后單片機(jī)的P0~P3口輸出高電平,且處于輸入狀態(tài),SP(堆棧寄存器棧頂指針)的值為07H(因此,往往需要重新賦值,其余特殊功能寄存器和PC(程序計(jì)數(shù)器)都被清為0。復(fù)位不影響內(nèi)部RAM的狀態(tài)。
(2)復(fù)位電路
單片機(jī)可靠地復(fù)位是保證單片機(jī)正常運(yùn)行的關(guān)鍵因素。因此,在設(shè)計(jì)復(fù)位電路時(shí),通常要使RST引腳保持10ms以上的高電平。當(dāng)RST從高電平變?yōu)榈碗娖街�,單片機(jī)就從0000H地址開始執(zhí)行程序。
8051單片機(jī)通常都采用上電自動(dòng)復(fù)位和開關(guān)復(fù)位兩種方式。實(shí)際使用中,有些外圍芯片也需要復(fù)位,如8255等。這些復(fù)位端的復(fù)位電平要求與單片機(jī)的復(fù)位要求一致時(shí),可以把它們連起來。
在最小系統(tǒng)板上,提供了一個(gè)通用的復(fù)位電路,在使用該板之前,必須將該電路與單片機(jī)連接起來。另外,還可以采用主板上的微處理器監(jiān)控模塊來控制復(fù)位腳,以便更加可靠地管理單片機(jī)的工作。
4.4 存儲(chǔ)器、特殊功能寄存器及位地址
51單片機(jī)的存儲(chǔ)器包括5個(gè)部分:程序存儲(chǔ)器、內(nèi)部數(shù)據(jù)存儲(chǔ)器、特殊功能寄存器、位地址空間、外部數(shù)據(jù)存儲(chǔ)器。位地址空間、特殊功能寄存器包括在內(nèi)部數(shù)據(jù)存儲(chǔ)器內(nèi)。
51單片機(jī)的內(nèi)部數(shù)據(jù)存儲(chǔ)器一般只有128字節(jié)或256字節(jié),當(dāng)空間不夠用時(shí)也就需要擴(kuò)展外部數(shù)據(jù)存儲(chǔ)器(參見實(shí)驗(yàn)五)。有些單片機(jī)不具有內(nèi)部程序存儲(chǔ)器,例如8031,這時(shí)就需要擴(kuò)展外部程序存儲(chǔ)器。在單片機(jī)系統(tǒng)中,程序存儲(chǔ)器和外部數(shù)據(jù)存儲(chǔ)器的編址獨(dú)立,各可尋址64K字節(jié)空間。兩者在電路上,可以通過PSEN信號(hào)線和RD信號(hào)線區(qū)別開來。
特殊功能寄存器是非常重要的部分,我們通過對(duì)特殊功能寄存器的設(shè)置和讀寫來完成單片機(jī)的大部分工作。限于篇幅,這里不對(duì)其內(nèi)容進(jìn)行羅列,請(qǐng)查閱有關(guān)書籍。
4.5 51系列單片機(jī)內(nèi)部資源概覽表
以上列出的是Intel8051、8051的主要資源配置�,F(xiàn)在,由于8位51單片機(jī)的廣泛使用,各個(gè)芯片生產(chǎn)廠商推出了具有自身特色的采用51內(nèi)核的單片機(jī),它們?cè)谶@些基本資源的基礎(chǔ)上進(jìn)行了進(jìn)一步的裁減或增強(qiáng)。
五、實(shí)驗(yàn)步驟1、連接單片機(jī)與復(fù)位電路、時(shí)鐘源(晶振電路或外部時(shí)鐘源),選擇幾組I/O口,用導(dǎo)線分別連接發(fā)光二極管陣列、及鍵盤。以下對(duì)涉及到的其他實(shí)驗(yàn)?zāi)K進(jìn)行簡(jiǎn)要介紹:
(1)發(fā)光二極管陣列模塊:

如左圖所示,每行為8個(gè)發(fā)光二極管,共4行。每行與底部的8針排線座相對(duì)應(yīng)。第一行發(fā)光二極管與從左數(shù)第一個(gè)插座對(duì)應(yīng),第二行發(fā)光二極管與左數(shù)第二個(gè)插座對(duì)應(yīng)……。插座的每個(gè)引腳與發(fā)光管陰極相連,也就是說,當(dāng)對(duì)應(yīng)腳為低電平時(shí),發(fā)光二極管點(diǎn)亮。
(2)鍵盤陣列模塊:鍵盤模塊是“獨(dú)立式”和“矩陣式”兩用鍵盤。使用之前,必須連接鍵盤模塊右下角的VCC和GND,為模塊提供電源。模塊右邊的S0~S15鎖緊孔,是獨(dú)立式鍵盤接口,分別對(duì)應(yīng)著鍵S0~S15。當(dāng)某個(gè)鍵按下時(shí),對(duì)應(yīng)的接口將被拉低。
電路示例如下:
圖1-3 電路原理圖示例
2、實(shí)驗(yàn)示例程序:
假設(shè)P3.1,P3.2口分別連接兩個(gè)鍵,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 ;去抖延時(shí)
MOV A,P3
CJNE A,40H,PASS
CJNE A,#0FEH,LAMP1;是第一鍵嗎?
MOV P1,#0FFH
MOV P0,#00H ;點(diǎn)亮第一行發(fā)光二極管
PASS: LCALL DL10MS ;延時(shí)
AJMP START
LAMP1: CJNE A,#0FDH,PASS;是第二鍵嗎?
MOV P0,#0FFH
MOV P1,#00H
AJMP PASS
;延時(shí)子程序:
DL10MS: MOV R7,#08h
LOOP1: MOV R6,#0F9H
LOOP2: NOP
NOP
DJNZ R6,LOOP2
DJNZ R7,LOOP1
RET
END
在Medwin集成開發(fā)環(huán)境中編寫單片機(jī)程序,步驟如下:點(diǎn)擊【文件】菜單,建立新項(xiàng)目(PROJECT),項(xiàng)目命名如 當(dāng)前文件夾\XXX.prj;建立新文件,命名為XXX.asm;這時(shí)就可在文本編輯區(qū)輸入程序代碼了。程序編寫完成后(參考示例程序),點(diǎn)擊【項(xiàng)目管理】菜單下【編譯/匯編】項(xiàng),進(jìn)行程序編譯,如果程序有錯(cuò)誤則系統(tǒng)通過調(diào)試項(xiàng)提示。排除所有的錯(cuò)誤,直到編譯完全成功。
3、正確連接仿真器與PC機(jī)、仿真頭與目標(biāo)板、仿真器電源。正確連接目標(biāo)板電源。點(diǎn)擊【項(xiàng)目管理】菜單下產(chǎn)生并生成代碼項(xiàng),程序被裝入仿真器,點(diǎn)擊調(diào)試菜單下【全速運(yùn)行】選項(xiàng),程序運(yùn)行,觀察程序運(yùn)行結(jié)果。在【項(xiàng)目管理】菜單下點(diǎn)擊【輸出Intel Hex文件】或【輸出binary文件】,輸出機(jī)器代碼文件。
4、正確連接燒錄器和PC機(jī)、燒錄器電源。取單片機(jī)芯片,放入燒片機(jī)芯片座(注意放置位置),夾緊;打開燒錄器驅(qū)動(dòng)軟件,點(diǎn)擊【器件】菜單下選擇器件項(xiàng),選擇正確的芯片型號(hào)。點(diǎn)擊【文件】菜單下打開項(xiàng),輸入剛才生成.hex或.bin文件的路徑,點(diǎn)擊打開,文件被下載到燒錄器。點(diǎn)擊【器件】菜單下【運(yùn)行】項(xiàng),分別運(yùn)行erase, blank check, program,verify(或在確定Auto中內(nèi)容后,運(yùn)行Auto)。成功后程序便固化到單片機(jī)中了。
5、除去目標(biāo)板電源,將單片機(jī)取下,插入目標(biāo)板插座中,注意對(duì)齊1腳。正確連接目標(biāo)板電源。觀察程序運(yùn)行情況。
六、實(shí)驗(yàn)報(bào)告1、說明單片機(jī)的各個(gè)引腳的功能及作用,比較P0,P3腳的異同?
2、時(shí)鐘周期、機(jī)器周期的關(guān)系是什么?在單片機(jī)外部晶振為12M時(shí),下面的延時(shí)子程序延時(shí)了多少時(shí)間?當(dāng)晶振為6M時(shí)呢?
DELAY:MOV R5,#08H
DL1: MOV R6,#00H
DL2: MOV R7,#80H
DJNZ R7,$
DJNZ R6,DL2
DJNZ R5,DL1
RET
3、畫出實(shí)驗(yàn)原理圖。
4、給出單片機(jī)程序流程圖和程序清單。
3、進(jìn)行完該項(xiàng)實(shí)驗(yàn)后,你對(duì)單片機(jī)的開發(fā)工具和開發(fā)過程了解了嗎?請(qǐng)畫出單片機(jī)開發(fā)過程流程圖。
第四章 實(shí)驗(yàn)指導(dǎo)實(shí)驗(yàn)一 多字節(jié)、多進(jìn)制加減運(yùn)算實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?/strong>- 學(xué)習(xí)多字節(jié)壓縮BCD碼加減運(yùn)算的程序設(shè)計(jì);
- 學(xué)習(xí)單字節(jié)有符號(hào)數(shù)加減運(yùn)算的程序設(shè)計(jì)。
二、實(shí)驗(yàn)要求1.編寫通用4字節(jié)壓縮BCD碼的加、減法運(yùn)算程序;
2.編寫通用單字節(jié)有符號(hào)二進(jìn)制數(shù)加、減法運(yùn)算程序;
三、實(shí)驗(yàn)原理對(duì)于簡(jiǎn)單的8位加減可以直接調(diào)用指令就可以了。例如加法可以使用指令A(yù)DD以及帶進(jìn)位加ADDC,但單字節(jié)加減法只能在256之內(nèi)進(jìn)行運(yùn)算;在實(shí)際應(yīng)用中經(jīng)常需要進(jìn)行多字節(jié)運(yùn)算,從而處理更大的數(shù)據(jù)。該實(shí)驗(yàn)介紹單片機(jī)BCD碼多字節(jié)加、減運(yùn)算通用程序的設(shè)計(jì)。
1.多字節(jié)無符號(hào)壓縮BCD碼加法運(yùn)算
假設(shè)多字節(jié)無符號(hào)被加數(shù)的最低字節(jié)的地址為R0,加數(shù)的最低字節(jié)地址為R1,字節(jié)數(shù)共為len;計(jì)算結(jié)果的地址于被加數(shù)相同。
◆ 入口參數(shù):
R0:被加數(shù)地址指針;
R1:加數(shù)地址指針;
len:字節(jié)數(shù)。
◆ 出口參數(shù):
@R0:計(jì)算結(jié)果;
rLen:計(jì)算結(jié)果字節(jié)數(shù)。
◆ 使用資源:ACC,R0、R1,內(nèi)部RAM單元len、rlen及存放被加數(shù)、加數(shù)、計(jì)算結(jié)果的內(nèi)存單元。
示例程序如下:
len DATA 70H
rlen DATA 71H
ADDSTART: PUSH PSW ;保護(hù)標(biāo)志寄存器內(nèi)容
CLR C ;進(jìn)位位清0
MOV rlen,#00H ;和的字節(jié)數(shù)先清0
LOOP: MOV A,@R0 ;取被加數(shù)
ADDC A,@R1 ;求和
DA A ;十進(jìn)制調(diào)整
MOV @R0,A ;保存
INC R0 ;地址增1
INC R1
INC rlen ;字節(jié)數(shù)增1
DJNZ len,LOOP ;所有字節(jié)未加完繼續(xù),否則向下執(zhí)行
JNC ADDEND ;和的最高字節(jié)無進(jìn)位轉(zhuǎn)ADD20
MOV @R0,#01H ;和的最高字節(jié)地址內(nèi)容為01H
INC rlen
ADDEND: POP PSW
RET
END
多字節(jié)加法運(yùn)算一般是按從低字節(jié)到高字節(jié)的順序進(jìn)行的,所以必須考慮低字節(jié)向高字節(jié)的進(jìn)位情況,被加數(shù)和加數(shù)的壓縮BCD碼,最大不超過99,而99+99+1(進(jìn)位)=199,此時(shí)可以不需要使用ADDC指令,但當(dāng)最低兩字節(jié)相加后,必須使用“DA A”進(jìn)行十進(jìn)制調(diào)整,調(diào)整后產(chǎn)生進(jìn)位。而最高兩字節(jié)相加后應(yīng)考慮是否有進(jìn)位。若有進(jìn)位,應(yīng)向和的最高位字節(jié)地址寫入01H,這時(shí)和數(shù)將比加數(shù)或被加數(shù)多出一個(gè)字節(jié)。
2.多字節(jié)無符號(hào)壓縮BCD碼減法運(yùn)算
為了使用“DA A”指令對(duì)十進(jìn)制減法進(jìn)行調(diào)整,必須采用對(duì)減數(shù)求補(bǔ)相加的方法,以9AH為模減去減數(shù)即得到減數(shù)的補(bǔ)數(shù)。設(shè)被減數(shù)低字節(jié)地址在R1中,減數(shù)低字節(jié)地址在R0中,字節(jié)數(shù)在len中;差的低字節(jié)地址在R0中,差的字節(jié)數(shù)在rlen中。
R0:減數(shù)地址指針;
R1:被減數(shù)地址指針;
len:字節(jié)數(shù)
R0:差的地址指針
rlen:差的字節(jié)數(shù)
- 使用資源: A,R0,R1,內(nèi)部RAM單元
范例程序如下:
SUBSTART:MOV rlen,#00H ;差字節(jié)單元清0
CLR 07H ;07H做符號(hào)位標(biāo)準(zhǔn),符號(hào)位清0
CLR C ;借位位清0
SUB1: MOV A,#9AH ;減數(shù)對(duì)模100求補(bǔ)
SUBB A,@R0
ADD A,@R1 ;補(bǔ)碼相加
DA A
MOV @R0,A ;存結(jié)果
INC R0
INC R1
1NC rlen
CPL C ;進(jìn)位求反以形成正確借位
DJNZ len,SUBl ;未減完繼續(xù),減完向下執(zhí)行
JNC SUB2 ;無借位去別Ⅸm返回主程序,否則繼續(xù)
SETB 07H ;有借位,置“1”符號(hào)位
SUB2: RET
END
程序中對(duì)減數(shù)求補(bǔ)后與被減數(shù)相加,用“DA A”指令進(jìn)行調(diào)整。若二者相加調(diào)整后結(jié)果無進(jìn)位(C=0),則表示二者相減有借位;若二者相加調(diào)整后有進(jìn)位(C;1),則表示二者相減無借位。所以必須對(duì)進(jìn)位標(biāo)志位C進(jìn)行求反操作,才能得到正確結(jié)果。
3.單字節(jié)帶符號(hào)數(shù)加法運(yùn)算(選做)
編程范例:
兩個(gè)8位二進(jìn)制帶符號(hào)數(shù)加法,被加數(shù)和加數(shù)分別存于BLK和BLK+1單元,和超過8位要占兩個(gè)單元,設(shè)為SUM和SUM+1單元。
解:兩個(gè)帶符號(hào)數(shù)的加法是作為補(bǔ)碼加法處理的。由于和超過8位,因此,和就是一個(gè)16位帶符號(hào)數(shù),符號(hào)位在16位數(shù)的最高位。為此,直接相加進(jìn)位是不夠的,還要做一些處理。例如-65和-65相加,若直接求和產(chǎn)生溢出,即使擴(kuò)展到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)在這個(gè)16位數(shù)的最高位為0,兩個(gè)負(fù)數(shù)相加變?yōu)檎龜?shù),顯然是錯(cuò)誤的。
處理的方法是先將8位帶符號(hào)數(shù)擴(kuò)展成16位帶符號(hào)數(shù),然后再相加。若是8位正數(shù),則高8位擴(kuò)展為00H;若是8位負(fù)數(shù),則高8位擴(kuò)展為0FFH。這樣處理后,再按雙字節(jié)相加,就可以得到正確的結(jié)果。如上例,由于是負(fù)數(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,
最高位的進(jìn)位丟失不計(jì)。換算成真值為—130,結(jié)果正確。
在編程時(shí),判別加數(shù)和被加數(shù)的符號(hào)位,再?zèng)Q定是否要將高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 ;若是負(fù)數(shù)高8位為全1
N1:INC R0 ;修改即指針
MOV B,@R0 ;取加數(shù)到B
JNB B.7,N2 ;若是正數(shù)轉(zhuǎn)移N2
MOV R3,#0FFH ;若是負(fù)數(shù)高8位為全1
N2:ADD A,B ;低8位相加 .
MOV @R1,A ;存低8位和
INC R1 ;修改R1指針
MOV A,R2 ;準(zhǔn)備加高8位
ADDC A,R3 ;高8位相加
MOV @R1,A ;存高8位和
SJMP $
END
四、實(shí)驗(yàn)步驟1.按照實(shí)驗(yàn)要求編寫程序。
2.在開發(fā)環(huán)境中運(yùn)行程序,對(duì)通用寄存器進(jìn)行賦值,看運(yùn)算結(jié)果是否正確。
五、實(shí)驗(yàn)報(bào)告1.給出各個(gè)程序的清單,要求有注釋。
2.分析DA A指令的作用。
- 給出實(shí)驗(yàn)參數(shù)及實(shí)驗(yàn)結(jié)果,要求對(duì)實(shí)驗(yàn)現(xiàn)象和結(jié)果進(jìn)行分析。
實(shí)驗(yàn)二、中斷實(shí)驗(yàn)――中斷優(yōu)先級(jí)控制及中斷保護(hù)一、實(shí)驗(yàn)?zāi)康?/strong>1、掌握單片機(jī)中斷機(jī)制。
2、熟悉中斷的應(yīng)用和編程。
二、實(shí)驗(yàn)設(shè)備- 仿真器;
- 單片機(jī)最小系統(tǒng);
- 發(fā)光二極管陣列顯示模塊;
- 獨(dú)立式鍵盤模塊。
三、實(shí)驗(yàn)要求連接單片機(jī)最小系統(tǒng)和發(fā)光二極管陣列的電路并編寫程序,學(xué)習(xí)單片機(jī)中斷機(jī)制,及中斷優(yōu)先級(jí)和中斷保護(hù)的方法:
使用獨(dú)立式按鍵1連接

(P3.2),按鍵2連接

(P3.3),在平時(shí)狀態(tài)下,發(fā)光二極管行以200ms的時(shí)間間隔,依次點(diǎn)亮。1鍵按下時(shí)

中斷處理程序點(diǎn)亮P0.0對(duì)應(yīng)的發(fā)光管2秒鐘,其他發(fā)光管熄滅;2鍵按下時(shí)P0.1對(duì)應(yīng)發(fā)光管點(diǎn)亮2秒,其他發(fā)光管熄滅。
四、實(shí)驗(yàn)原理通常一個(gè)微處理器讀取外圍設(shè)備(如鍵盤等)的輸入信息的方法有輪詢(Polling)及中斷(Interrupt)兩種。輪詢的方法是CPU依照某種既定法則,依序詢問每一外圍設(shè)備I/O是否需要服務(wù),此種方法CPU需花費(fèi)一些時(shí)間來做詢問服務(wù),當(dāng)I/O設(shè)備增加時(shí),詢問服務(wù)時(shí)間也相對(duì)增加,勢(shì)必浪費(fèi)許多CPU時(shí)間,降低整體運(yùn)行的效率。使用中斷是一個(gè)較好的解決方法。使用中斷使系統(tǒng)對(duì)外部設(shè)備的請(qǐng)求響應(yīng)更加靈敏,并且不需要占用CPU的時(shí)間進(jìn)行輪詢。但是,當(dāng)使用中斷,特別是有多個(gè)中斷嵌套時(shí)要特別注意內(nèi)存單元的保護(hù)。
當(dāng)中斷發(fā)生后,程序?qū)⑻翆?duì)應(yīng)中斷入口地址去執(zhí)行中斷子程序,或稱中斷服務(wù)程序(Interrupt Service Routine),這些特殊的地址稱為中斷向量,例如當(dāng)80C51外部中斷INTl發(fā)生時(shí),會(huì)暫停主程序的執(zhí)行,跳至地址0013H去執(zhí)行中斷服務(wù)程序,直到RETI指令后,才返回主程序繼續(xù)執(zhí)行。MCS-51系列的程序內(nèi)存中有7個(gè)矢量地址,敘述如下:
(1)00H復(fù)位
當(dāng)?shù)?腳RESET為高電平,CPU會(huì)跳至地址00H處開始執(zhí)行程序,亦即程序一定要從地址00H開始寫起。
(2)03H(外部中斷0)
當(dāng)
引腳由高電位變至低電位(跳沿觸發(fā)方式)或采樣到是低電位(電平觸發(fā)方式)時(shí),CPU會(huì)接受外部中斷0,并跳至地址03H處去執(zhí)行中斷子程序。 (3)0BH(定時(shí)器/計(jì)數(shù)器0中斷)
當(dāng)CPU接受定時(shí)器/計(jì)數(shù)器0中斷置位而產(chǎn)生中斷要求時(shí),會(huì)跳至地址0BH處去執(zhí)行中斷子程序。
(4)13H(外部中斷1)
當(dāng)
引腳由高電位變至低電位(跳沿觸發(fā)方式)或采樣到是低電位(電平觸發(fā)方式)時(shí),CPU會(huì)接受外部中斷1,并跳至地址13H處去執(zhí)行中斷子程序。 (5)1BH(定時(shí)器/計(jì)數(shù)器1中斷)
當(dāng)CPU接受定時(shí)器/計(jì)數(shù)器1中斷置位而產(chǎn)生中斷要求時(shí),會(huì)跳至地址1BH刻去執(zhí)行中斷子程序。
(6)23H(串行中斷1)
當(dāng)串行端口傳送數(shù)據(jù)或接收數(shù)據(jù)完畢時(shí),CPU會(huì)接受串行中斷,并跳至地址23H處去執(zhí)行中斷子程序。
(7)2BH(定時(shí)器/計(jì)數(shù)器2中斷)
此中斷僅8052系列才有。當(dāng)CPU接受定時(shí)器/計(jì)數(shù)器2產(chǎn)生中斷要求時(shí),會(huì)跳至地址2BH處去執(zhí)行中斷子程序。
圖2.1 MCU內(nèi)部中斷機(jī)制
2.中斷使能位
8051針對(duì)中斷提供兩層使能,第一層為EA全局使能控制,第二層為分別控制EX0,ET0、EXl、ETl、ES、ET2。當(dāng)8051在復(fù)位狀態(tài)時(shí),寄存器的各個(gè)中斷使能位都預(yù)設(shè)為“0”,即所有中斷都禁止,故欲允許中斷時(shí),應(yīng)先使能相對(duì)應(yīng)的中斷。當(dāng)中斷產(chǎn)生后,中斷狀態(tài)會(huì)記錄于定時(shí)器/計(jì)數(shù)器控制寄存器(Timer/CounterControlRigister,TCON)和串口口控制寄存器SCON的中斷請(qǐng)求標(biāo)志(InterruptRequest flag)中,當(dāng)標(biāo)志被置位,表示中斷已發(fā)生。由圖2.1可知,當(dāng)外部中斷或定時(shí)器0、定時(shí)器1中斷發(fā)生時(shí),CPU都可以判別是哪種中斷。因此當(dāng)這四個(gè)中斷發(fā)生時(shí),中斷服務(wù)程序被執(zhí)行后,CPU會(huì)主動(dòng)清除中斷請(qǐng)求標(biāo)志,對(duì)于其他的中斷,由于CPU無法判別,因此中斷請(qǐng)求標(biāo)志需由程序指令來清除。
欲設(shè)定中斷使能與否,必須設(shè)置中斷使能寄存器IE(Interrupt Enable Register),其位地址A8H,是一個(gè)可位尋址的寄存器。
3.中斷保護(hù)
由于各個(gè)中斷入口間僅有8個(gè)字節(jié),一般情況下難以安排下一個(gè)完整的中斷服務(wù)程序。因此,通�?偸窃谥攸c(diǎn)入口地址處放置一條無條件轉(zhuǎn)移指令,使程序轉(zhuǎn)向在其他地址存放的中斷服務(wù)程序。當(dāng)執(zhí)行新的中斷服務(wù)程序時(shí),注意不可以破壞舊有的數(shù)據(jù)和狀態(tài),因此在編寫時(shí)還要注意保護(hù)現(xiàn)場(chǎng),主要是各個(gè)寄存器的值。通常會(huì)被更改的數(shù)據(jù)(如ACC、PSW等),可以利用堆棧在執(zhí)行中斷服務(wù)程序之前就將其PUSH起來,待執(zhí)行結(jié)束后再將相關(guān)寄存器POP即可。另外,因?yàn)?051可任意選擇四個(gè)工作寄存器區(qū)中的一組工作寄存器,所以利用選擇不同寄存器區(qū)的方式亦可達(dá)到數(shù)據(jù)保存的目的。
4.中斷優(yōu)先級(jí)
8051對(duì)于各種中斷優(yōu)先權(quán)采用雙層結(jié)構(gòu),首先對(duì)于優(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),反之不行。當(dāng)同一時(shí)間同一級(jí)別的多個(gè)中斷請(qǐng)求是,則按自然優(yōu)先級(jí)順序相應(yīng)中斷。
IP寄存器:
(MSB) (LSB)
PX0,PX1:外部中斷0,1的中斷優(yōu)先級(jí)控制;1->高優(yōu)先級(jí),0->低優(yōu)先級(jí)。
PT0,PT1:定時(shí)器/計(jì)數(shù)器0,1的中斷優(yōu)先級(jí)控制;
PS:串行口中斷優(yōu)先級(jí)控制。
IP中對(duì)應(yīng)位全為零時(shí),CPU按照片自然優(yōu)先級(jí)來順序響應(yīng)中斷:
中斷源
外部中斷0 高定時(shí)器/計(jì)數(shù)器0
外部中斷1
定時(shí)器/計(jì)數(shù)器1
串行口中斷 低
五、實(shí)驗(yàn)步驟本實(shí)驗(yàn)將練習(xí)使用
,
的中斷,利用按鍵來觸發(fā)外部中斷的發(fā)生。并通過兩個(gè)中斷先后到達(dá)的方法,來學(xué)習(xí)中斷優(yōu)先級(jí)的意義與控制。 1、電路說明
在圖2.2中,主程序執(zhí)行時(shí),單片機(jī)端口P0所接的LED由P0.7至P0.0一次一顆循環(huán)點(diǎn)亮。當(dāng)外部中斷0產(chǎn)生后,執(zhí)行該中斷子程序,此時(shí)P0.0對(duì)應(yīng)的二極管亮,其他二極管熄滅。2秒鐘后,返回主程序的工作。
中斷子程序則為點(diǎn)亮P0.1對(duì)應(yīng)的二極管,其他二極管熄滅。注意,由于每次在按鍵按下或放開可能會(huì)有抖動(dòng)現(xiàn)象,因而必須進(jìn)行必要的處理,以免產(chǎn)生二次以上的相同中斷信號(hào)。 在程序主循環(huán)進(jìn)行時(shí),當(dāng)1鍵按下,相應(yīng)發(fā)光管點(diǎn)亮后,立即再按下2鍵,看反應(yīng)如何;在程序主循環(huán)進(jìn)行時(shí),按下2鍵,相應(yīng)發(fā)光管點(diǎn)亮后,立即按下1鍵,觀察反應(yīng)。
電路連線如圖2.2:
1
2
圖2.2 實(shí)驗(yàn)電路參考
2.程序設(shè)計(jì)
先按l鍵執(zhí)行
中斷子程序,在此中斷子程序未結(jié)束前再按2鍵,或是先按2鍵執(zhí)行
中斷子程序,在此中斷子程序未結(jié)束前再按l鍵,或兩者同時(shí)按,觀察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 ;去抖動(dòng)
JNB INT0, HAVKEY1 ;確實(shí)有鍵,轉(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: ;延時(shí)200ms子程序
(…………)
RET
DELAY10MS: ;延時(shí)10ms子程序
(…………)
RET
DELAY2S: ;延時(shí)2s子程序
(………….)
RET
END
程序范例中用“(………)”表示的程序段需學(xué)生自己編寫。
運(yùn)行整個(gè)程序,觀察是否符合理論分析的結(jié)果。
六、實(shí)驗(yàn)報(bào)告- 畫出電路原理圖,并簡(jiǎn)要分析工作原理;
- 提供程序流程圖和程序清單,適當(dāng)給出注釋;
- 描述實(shí)驗(yàn)現(xiàn)象和結(jié)果,要求對(duì)實(shí)驗(yàn)現(xiàn)象和結(jié)果進(jìn)行分析。
實(shí)驗(yàn)三、定時(shí)器實(shí)驗(yàn)――低頻脈沖計(jì)數(shù)器一、實(shí)驗(yàn)?zāi)康?/strong>1、掌握定時(shí)器/計(jì)數(shù)器的工作原理。
2、學(xué)習(xí)單片機(jī)定時(shí)器/計(jì)數(shù)器的應(yīng)用設(shè)計(jì)和調(diào)試。
二、實(shí)驗(yàn)設(shè)備1、仿真器;
2、單片機(jī)最小系統(tǒng);
3、波形信號(hào)發(fā)生器;
4、靜態(tài)串行方式數(shù)碼管顯示模塊。
三、實(shí)驗(yàn)要求連接電路并編寫程序,使單片機(jī)定時(shí)器/計(jì)數(shù)器測(cè)量波形信號(hào)發(fā)生器輸出的低頻脈沖信號(hào)的頻率,并在數(shù)碼管上顯示頻率值;
四、實(shí)驗(yàn)原理805l單片機(jī)內(nèi)部有兩個(gè)16位可編程定時(shí)/計(jì)數(shù)器,記為T0和Tl。8052單片機(jī)內(nèi)除了T0和T1之外,還有第三個(gè)16位的定時(shí)器/計(jì)數(shù)器,記為T2。它們的工作方式可以由指令編程來設(shè)定,或作定時(shí)器用,或作外部脈沖計(jì)數(shù)器用。
定時(shí)器T0由特殊功能寄存器TL0和TH0組成,定時(shí)器Tl由特殊功能寄存器TLl和TH1組成。定時(shí)器的工作方式由特殊功能寄存器TMOD編程決定,定時(shí)器的運(yùn)行控制由特殊功能寄存器TCON編程控制。
T0、T1在作為定時(shí)器時(shí),規(guī)定的定時(shí)時(shí)間到達(dá),即產(chǎn)生一個(gè)定時(shí)器中斷,CPU轉(zhuǎn)向中斷處理程序,從而完成某種定時(shí)控制功能。T0、T1用作計(jì)數(shù)器使用時(shí)也可以申請(qǐng)中斷。作定時(shí)器使用時(shí),時(shí)鐘由單片機(jī)內(nèi)部系統(tǒng)時(shí)鐘提供;作計(jì)數(shù)器使用時(shí),外部計(jì)數(shù)脈沖由P3口的P3.4(或P3.5)即T0(或T1)引腳輸入。
方式控制寄存器TMOD的控制字格式如下:
\_____________T1_________________/ \_______________T0_________________/
低4位為T0的控制字,高4位為T1的控制字。GATE為門控位,對(duì)定時(shí)器/計(jì)數(shù)器的啟動(dòng)起輔助控制作用。GATE=l時(shí),定時(shí)器/計(jì)數(shù)器的計(jì)數(shù)受外部引腳輸入電平的控制。由由運(yùn)行控制位TRX(X=0,1)=1和外中斷引腳(
或
)上的高電平共同來啟動(dòng)定時(shí)器/計(jì)數(shù)器運(yùn)行;GATE=0時(shí)。定時(shí)器/計(jì)數(shù)器的運(yùn)行不受外部輸入引腳的控制,僅由TRX(X=0,1)=1來啟動(dòng)定時(shí)器/計(jì)數(shù)器運(yùn)行。 C/-T為方式選擇位。C/-T=0為定時(shí)器方式,采用單片機(jī)內(nèi)部振蕩脈沖的12分頻信號(hào)作為時(shí)鐘計(jì)時(shí)脈沖,若采用12MHz的振蕩器,則定時(shí)器的計(jì)數(shù)頻率為1MHZ,從定時(shí)器的計(jì)數(shù)值便可求得定時(shí)的時(shí)間。
C/-T=1為計(jì)數(shù)器方式。采用外部引腳(T0為P3.4,Tl為P3.5)的輸入脈沖作為計(jì)數(shù)脈沖,當(dāng)T0(或T1)輸入信號(hào)發(fā)生從高到低的負(fù)跳變時(shí),計(jì)數(shù)器加1。最高計(jì)數(shù)頻率為單片機(jī)時(shí)鐘頻率的1/24。
M1、M0二位的狀態(tài)確定了定時(shí)器的工作方式,詳見表3.1。
表3.1定時(shí)器工作模式表:
| | |
| | 方式0,為13位定時(shí)器/計(jì)數(shù)器 |
| | 方式1,為16位的定時(shí)器/計(jì)數(shù)器 |
| | 方式2,為常數(shù)自動(dòng)重新裝入的8位定時(shí)器/計(jì)數(shù)器 |
| | 方式3,僅適用于T0,分為二個(gè)8位計(jì)數(shù)器 |
方式1與方式2的差別是計(jì)數(shù)器的位數(shù),前者13位,后者16位。定時(shí)器內(nèi)部結(jié)構(gòu)邏輯圖如圖3.1所示。
圖3.1 定時(shí)器內(nèi)部邏輯圖
要測(cè)量低頻信號(hào)可以首先產(chǎn)生一個(gè)標(biāo)準(zhǔn)時(shí)間T閘門信號(hào),然后在該時(shí)間內(nèi)計(jì)算進(jìn)入計(jì)數(shù)器的脈沖個(gè)數(shù)。這個(gè)時(shí)間有時(shí)太短,需結(jié)合軟件定時(shí)。如果要求比較高,則需要進(jìn)行智能地調(diào)整T。例如對(duì)于500HZ信號(hào),使用65ms閘門時(shí)間,則計(jì)數(shù)器值就非常少。計(jì)數(shù)器的值超過10000個(gè),才能保證精度不少于0.05%。如果在3秒內(nèi)還是發(fā)現(xiàn)計(jì)數(shù)器的值少于精度需要,則自動(dòng)切換到周期測(cè)量模式,通過周期計(jì)算頻率具有較高的精度。如果要求3秒內(nèi)給出結(jié)果,則周期超過3秒的信號(hào)就無法得到準(zhǔn)確的頻率或周期。
五、實(shí)驗(yàn)步驟1.電路連接
參考以下電路示意圖連接電路:
圖3.2 低頻脈沖信號(hào)測(cè)量參考電路示意圖
2.軟件編寫
示例程序如下:
ORG 0000H
LJMP MAIN
(______________)
LJMP INTS_T0
;***********************主程序**************************************
ORG 0030H
MAIN: MOV SP,#40H
MOV TMOD,(___)
;兩個(gè)定時(shí)器都是方式1,定時(shí)器1對(duì)外部信號(hào)計(jì)數(shù)
MOV TL0,#0AFH
MOV TH0,#3CH ;0FFFFH-3CAFH=50000,50ms
MOV B,#20 ;軟件計(jì)數(shù)器。循環(huán)20次,T0共定時(shí)20×50ms=1s
MOV TL1,#0H
MOV TH1,#0H
(____________) ;允許T0中斷
(____________) ;禁止T1中斷
SETB EA
SETB TR0
SETB TR1
SJMP $
;******************T0定時(shí)1s的中斷服務(wù)程序****************************
INTS_T0: CLR EA ;關(guān)中斷
DJNZ B,CONTINUE
;1s定時(shí)到,把T0、T1都關(guān)掉,計(jì)算1s鐘內(nèi)T1的計(jì)數(shù)脈沖有多少
CLR TR1
CLR TR0
MOV R0,#30H
MOV @R0,TL1 ;獲取數(shù)據(jù)。先低后高
INC R0
MOV @R0,TH1;
ACALL NDIV1 ;16位調(diào)整為五個(gè)十進(jìn)制數(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個(gè)位,33H十位,34H百位,35H千位,36H萬位);R3,R4余數(shù)***********
;********NDIV1子程序:把0~FFFFH,轉(zhuǎn)換成五個(gè)十進(jì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
在(____)中填上合適的語(yǔ)句,運(yùn)行程序,使用信號(hào)發(fā)生器發(fā)生不同頻率的信號(hào),并紀(jì)錄測(cè)量的值。
六、實(shí)驗(yàn)報(bào)告- 畫出電路原理圖。
- 給出程序流程圖和程序清單、并給予適當(dāng)注釋。
- 描述實(shí)驗(yàn)現(xiàn)象和結(jié)果,要求對(duì)實(shí)驗(yàn)現(xiàn)象和結(jié)果進(jìn)行分析。
- 本實(shí)驗(yàn)中,頻率測(cè)量的有效范圍是多少?
實(shí)驗(yàn)四、雙機(jī)串行通訊實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?/strong>該實(shí)驗(yàn)需要兩套MPC100B配合完成。
1.掌握單片機(jī)串行口工作方式;
2.掌握雙機(jī)通訊的接口電路設(shè)計(jì)及程序設(shè)計(jì)。
二、實(shí)驗(yàn)設(shè)備1.仿真器;
2.單片機(jī)最小系統(tǒng)教學(xué)實(shí)驗(yàn)?zāi)K;
3.外部數(shù)據(jù)存儲(chǔ)器模塊;
三、實(shí)驗(yàn)要求由兩套單片機(jī)試驗(yàn)裝置(兩個(gè)實(shí)驗(yàn)小組)共同完成該實(shí)驗(yàn)。我們稱裝置1為甲機(jī),裝置2為乙機(jī)。甲機(jī)發(fā)送一個(gè)字節(jié)的呼叫信號(hào)給乙機(jī),乙機(jī)正確地收到該呼叫信號(hào)后,返回一個(gè)字節(jié)的應(yīng)答信號(hào)。當(dāng)甲機(jī)收到正確的應(yīng)答信號(hào)后,再發(fā)送規(guī)定格式的數(shù)據(jù)幀。數(shù)據(jù)幀必須包括以下內(nèi)容:
數(shù)據(jù)長(zhǎng)度(1字節(jié))+ 數(shù)據(jù)(n字節(jié))+ 校驗(yàn)和(1字節(jié))
乙機(jī)收到完整的數(shù)據(jù)幀后,發(fā)送一個(gè)表明接收正確或錯(cuò)誤的應(yīng)答字節(jié)。
要求每個(gè)字節(jié)的發(fā)送幀格式為:起始位(1bit)+數(shù)據(jù)位(8bit)+停止位(1bit)。
要求通訊波特率為4800bps,而以上各信號(hào)和數(shù)據(jù)幀的具體數(shù)據(jù)內(nèi)容,可以自行規(guī)定。
四、實(shí)驗(yàn)原理4.1 串行通訊的方式
在串行通訊中,有兩種基本的通訊方式:異步通訊,同步通訊。
異步串行通訊規(guī)定了字符數(shù)據(jù)的傳送格式,既每個(gè)數(shù)據(jù)以相同的幀格式發(fā)送。每個(gè)幀信息由起始位、數(shù)據(jù)位、奇偶校驗(yàn)位和停止位組成。本實(shí)驗(yàn)主要學(xué)習(xí)異步通訊的實(shí)現(xiàn)方法。
在異步通訊中,每一個(gè)字符要用起始位和停止位作為字符開始和結(jié)束的標(biāo)志,以至占用了時(shí)間。所以在數(shù)據(jù)塊傳送時(shí),為了提高通訊速度,常去掉這些標(biāo)志,而采用同步通訊。同步通訊不像異步通訊那樣,靠起始位在每個(gè)字符數(shù)據(jù)開始時(shí)發(fā)送和接受同步。而是通過同步字符在每個(gè)數(shù)據(jù)塊傳送開始時(shí)使收/發(fā)雙方同步。
按照通訊方式,又可將數(shù)據(jù)傳輸線路分成三種:?jiǎn)喂し绞�、半雙工方式、全雙工方式。
(1)單工方式
在單工方式下,通訊線的一端聯(lián)接發(fā)送器,另一端聯(lián)接接收器,它們形成單向聯(lián)接,只允許數(shù)據(jù)按照一個(gè)固定的方向傳送。
(2)半雙工方式
在半雙工方式下,系統(tǒng)中的每個(gè)通訊設(shè)備都由一個(gè)發(fā)送器和一個(gè)接收器組成,通過收發(fā)開關(guān)接到通訊線路上,如圖所示。在這種方式中,數(shù)據(jù)能從A站送到B站,也能從B站傳送到A站,但是不能同時(shí)在二個(gè)方向上傳送,即每次只能一個(gè)站發(fā)送,另一個(gè)站接收。如圖4.1所示。
圖4.1 半雙工通訊
圖4.1中的收發(fā)開關(guān)并不是實(shí)際的物理開關(guān),而是由軟件控制的電子開關(guān),由通訊線兩端的半雙工通訊協(xié)議進(jìn)行功能切換。
(3)全雙工(Full—duplex)方式
雖然半雙工方式比單工方式靈活,但它的效率依然較低。從發(fā)送方式切換到接收方式所需的時(shí)間一般大約為數(shù)毫秒,這么長(zhǎng)的時(shí)間延遲在對(duì)時(shí)間較敏感的交互式應(yīng)用(例如遠(yuǎn)程檢測(cè)監(jiān)視控制系統(tǒng))中是無法容忍的。重復(fù)線路切換所引起的延遲積累,正是半雙工通信協(xié)議效率不高的主要原因。
半雙工通訊的這種缺點(diǎn)是可以避免的,而且方法很簡(jiǎn)單,即采用信道劃分技術(shù)。在下圖的全雙工連接中,不是交替發(fā)送和接收,而是可同時(shí)發(fā)送和接收。全雙工通訊系統(tǒng)的每一端都包含發(fā)送器和接收器,數(shù)據(jù)可同時(shí)在兩個(gè)方向上傳送。如圖4.2所示。
圖4.2 全雙工通訊
4.2單片機(jī)串行口工作方式
在定時(shí)器實(shí)驗(yàn)中,我們熟悉了單片機(jī)串口工作方式0;單片機(jī)串口還具有有3種工作方式。如下表所示:
這3種工作方式,均用于串行異步通訊。在異步串行通訊的一個(gè)字節(jié)的傳送中,必須包括了起始位(0)和停止位(1)。除此之外,方式1具有8位(1個(gè)字節(jié))的數(shù)據(jù)位(低位在先),方式2、3則除這8位之外,還具有一個(gè)可編程的第9位,這個(gè)第9位編程通常被編程為奇偶校驗(yàn)位。
串口工作方式在特殊寄存器SCON中設(shè)置。
(MSB) (LSB)
其中的SM0和SM1位確定了串口工作方式。要使通訊雙方能夠通訊成功,必須具有相同的串口工作模式;REN為允許接收位,本實(shí)驗(yàn)中因?yàn)殡p方都要進(jìn)行接收,因此REN也都應(yīng)設(shè)為1。TB8和RB8這里暫不涉及。利用以下語(yǔ)句來設(shè)置SCON:
MOV SCON,#50H
4.3 波特率的設(shè)置
在異步串口通訊中,一個(gè)很重要的工作就是進(jìn)行串口波特率的設(shè)置。波特率是指串口通訊中每秒傳送的位數(shù),單位為bps,它反映了串行口通訊的速度;同時(shí),通訊雙方的速度必須一致,才能夠順利進(jìn)行通訊。
在串口工作方式1、3中,傳送波特率都是可變的。單片機(jī)內(nèi)部通過定時(shí)器T1來提供發(fā)送與接收緩存器的內(nèi)部移位時(shí)鐘。也就是說,要確定串行通訊的波特率,必須對(duì)T1進(jìn)行相關(guān)設(shè)置。51單片機(jī)系統(tǒng)對(duì)此時(shí)T1的設(shè)置有以下固定的規(guī)定:
- 必須工作在定時(shí)器狀態(tài);
- 必須工作在“8位自動(dòng)重載”工作模式;
這必須在特殊寄存器TMOD中進(jìn)行設(shè)置。可以利用以下語(yǔ)句來設(shè)置TMOD:
MOV TMOD,#20H
除了對(duì)TMOD的設(shè)置外,還必須設(shè)置定時(shí)器T1的初值,也就是保存在TH1中的8位重載值。這直接影響到波特率的大�。�
它通過以下公式進(jìn)行計(jì)算:
其中的SMOD為特殊寄存器PCON的最高位。當(dāng)它置1時(shí),可以將波特率增大1倍。
在雙機(jī)通訊中,只要雙方的波特率一致就能夠完成通訊了;但是,在標(biāo)準(zhǔn)的異步通訊協(xié)議中,只有幾種波特率是適用的。例如1200bps,2400bps,4800bps,9600bps……等等。
而通過這個(gè)公式可以看出,并不是所有的晶振頻率都能夠得到準(zhǔn)確的上述波特率。比如采用12MHz晶振,代入公式進(jìn)行運(yùn)算,就無法得到4800bps的準(zhǔn)確波特率(TH1必須為小數(shù)了)。在這種情況下,過去人們都使用軟件補(bǔ)償?shù)姆椒ǎM量得到準(zhǔn)確的波特率;而現(xiàn)在,市場(chǎng)上有很多通訊專用的晶振,例如3.6864MHz、11.0592MHz……的晶振,都能夠直接得到準(zhǔn)確的波特率。因此在進(jìn)行本實(shí)驗(yàn)時(shí),必須使用通訊專用晶振(如果使用仿真器,則設(shè)置為使用仿真頭的外接晶振,并將11.0592M的晶振插入仿真頭。)
當(dāng)波特率已經(jīng)確定,就可以反向推導(dǎo)出TH1的取值。例如,在本次實(shí)驗(yàn)中,我們要求波特率為4800bps,在晶振采用11.0592MHz的情況下,推出TH1=0F4H。
使用以下語(yǔ)句設(shè)置初值:
MOV TH1,#0F4H
MOV TL1,#0F4H
4.4 雙機(jī)通訊接口設(shè)計(jì)
(1)通訊接口設(shè)計(jì)
在本次實(shí)驗(yàn)中,主要討論單片機(jī)系統(tǒng)之間的異步串行通訊的實(shí)現(xiàn)。
51單片機(jī)具有1個(gè)“全雙工”的串行口,主要因?yàn)閱纹瑱C(jī)內(nèi)部有獨(dú)立的發(fā)送器(1字節(jié)緩存)和接收器(1字節(jié)緩存)。但由于串口緩存太少,只有1字節(jié),在相互傳送大量數(shù)據(jù)時(shí),軟件上實(shí)際采用的還是半雙工的工作方式。
如果兩個(gè)51單片機(jī)應(yīng)用系統(tǒng)相距很近,可以將它們的串行口用導(dǎo)線直接連起來,就構(gòu)成了雙機(jī)通訊,請(qǐng)注意兩個(gè)單片機(jī)系統(tǒng)要“共地”。如圖4.3所示。
圖4.3 串行通訊電路示意圖
(2)查詢方式雙機(jī)通訊軟件設(shè)計(jì)
為確保通訊成功,通訊雙方必須在軟件上有一系列的約定,通常稱為軟件“協(xié)議”。本例規(guī)定的軟件“協(xié)議”如下:
通訊雙方均采用4800bps波特率進(jìn)行傳送(系統(tǒng)時(shí)鐘頻率為11.0592MHz),甲機(jī)發(fā)送數(shù)據(jù),乙機(jī)接收數(shù)據(jù)。雙機(jī)開始通訊時(shí),甲機(jī)發(fā)送一個(gè)呼叫信號(hào)“06H”,詢問乙機(jī)是否可以接收數(shù)據(jù);乙機(jī)收到呼叫信號(hào)后,若同意接收數(shù)據(jù)則發(fā)回“00H”作為應(yīng)答,否則發(fā)“15H”表示暫不能接收數(shù)據(jù),甲機(jī)只有收到乙機(jī)的應(yīng)答信號(hào)“00H”后才可把存放在外部數(shù)據(jù)存儲(chǔ)器的字節(jié)內(nèi)容發(fā)送給乙機(jī),否則繼續(xù)向乙機(jī)呼叫,直到乙機(jī)同意接收。呼叫成功后甲機(jī)依次發(fā)送長(zhǎng)度字節(jié)(1字節(jié))、數(shù)據(jù)字節(jié)(n字節(jié))和校驗(yàn)和字節(jié)(1字節(jié)),其中校驗(yàn)和為長(zhǎng)度字節(jié)和數(shù)據(jù)字節(jié)的“累加和”。乙機(jī)在成功收到甲機(jī)的數(shù)據(jù)之后,發(fā)送“0FH”作為成功應(yīng)答,否則發(fā)送“F0H”作為失敗應(yīng)答。
◆ 甲機(jī)發(fā)送程序約定:
(1)基本設(shè)置
波特率設(shè)置初始化:定時(shí)器T1模式2工作,計(jì)數(shù)常數(shù)0F4H;
PCON的SMOD=1;
串行口初始化:方式1工作,允許接收;
內(nèi)部RAM和工作寄存器設(shè)置:31H和30H存放發(fā)送的數(shù)據(jù)塊首址;2FH存放發(fā)送的數(shù)據(jù)塊長(zhǎng)度; R6為校驗(yàn)和寄存器。
(2)程序流程圖及程序清單
如圖4.4所示。
圖4.4發(fā)送程序流程圖
圖4.5接收程序流程圖甲機(jī)發(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ā)呼叫信號(hào)“06”
MOV SBUF,A
WAITl: JBC TI,RX_YES ;等待發(fā)送完一個(gè)字節(jié)
SJMP WAITl
RX_YES: JBC RI,NEXTl ;接收乙機(jī)回答
SJMP RX_YES
NEXTl: MOV A,SBUF ;判斷乙機(jī)是否同意接收,不同意就繼續(xù)呼
CJNE A,#00H,TX_ACK
TX_BYTES: MOV A,R7 ;向乙機(jī)發(fā)送要傳送的字節(jié)個(gè)數(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ā)累加給乙機(jī)
MOV SBUF,A
WAIT4: (_______________)
(______________)
RX_0FH: JBC RI,IF_0FH ;等待乙機(jī)回答
SJMP RX_0FH
IF_0FH: MOV A,SBUF
CJNE A,#0FH,F(xiàn)MT_RAM ;判斷傳送正確否
SJMP $
◆乙機(jī)接收程序
接收程序約定:
波特率設(shè)置初始化:同發(fā)送程序
串行口初始化:同發(fā)送程序
寄存器設(shè)置:
31H,30H——存放接收數(shù)據(jù)緩沖區(qū)首址
R7——數(shù)據(jù)塊長(zhǎng)度寄存器
R6——校驗(yàn)和寄存器
向甲機(jī)回答的狀態(tài)信息:0FH為接收正常,F(xiàn)0H為傳送出錯(cuò),00H為同意接收數(shù)據(jù)。
接收程序流程框圖如圖4.5:
乙機(jī)接收程序清單:
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 ;校驗(yàn)和寄存器清零
RX_ACK: JBC RI,IF_06H ;接收呼叫信號(hào)
SJMP RX_ACK
IF_06H: MOV A,SBUF ;判斷呼叫信號(hào)是否有誤
CJNE A,#06H,TX_15H
TX_00H: MOV A,#00H ;向甲機(jī)回送同意接收信號(hào)
MOV SBUF,A
WAIT1: JBC TI,RX_BYTES ;等待應(yīng)答信號(hào)發(fā)送完
SJMP WAIT1
TX_15H: MOV A,#15H ;向甲機(jī)報(bào)告接收呼叫信號(hào)不正確
MOV SBUF,A
WAIT2: JBC TI,HAVE1
SJMP WAIT2
HAVE1: LJMP RX_ACK
RX_BYTES: JBC RI,HAVE2 ;接收數(shù)據(jù)塊長(zhǎng)度
SJMP RX_BYTES
HAVE2: MOV A,SBUF ;給長(zhǎng)度寄存器賦值
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ù)校驗(yàn)和
SJMP RX_SUM
HAVE4: MOV A,SBUF ;判斷傳送是否正確
CJNE A,06H,TX_ERR
TX_RIGHT: MOV A,#0FH ;向甲機(jī)報(bào)告?zhèn)魉驼_
MOV SBUF,A
WAIT3: JBC TI,OKEND
SJMP WAIT3
TX_ERR: MOV A,#0F0H ;向甲機(jī)報(bào)告?zhèn)魉陀姓`
MOV SBUF,A
WAIT4: JBC TI,AGAIN
SJMP WAIT4
AGAIN: LJMP FMT_RAM ;返回重新接收數(shù)據(jù)狀態(tài)
OKEND: SJMP OKEND
五、實(shí)驗(yàn)步驟1.參考圖4.3進(jìn)行電路設(shè)計(jì),畫出電路圖,并用導(dǎo)線正確連接兩套裝置的單片機(jī)最小系統(tǒng)實(shí)驗(yàn)?zāi)K,以及連接最小系統(tǒng)模塊與外部數(shù)據(jù)存儲(chǔ)器模塊。
2.參考示例程序,按照實(shí)驗(yàn)要求編寫程序流程圖,然后編寫程序。連接好仿真器,對(duì)編寫的程序進(jìn)行仿真調(diào)試,直至通訊成功。
六、實(shí)驗(yàn)報(bào)告1.畫出接口電路原理圖。
2.在該實(shí)驗(yàn)中,單片機(jī)串行口工作在什么工作方式下?說明該工作方式的特點(diǎn)。
3.波特率是什么?怎樣設(shè)置單片機(jī)串口通訊的波特率?如果實(shí)驗(yàn)要求通訊波特率為9600bps,怎樣修改程序?
- 詳細(xì)說明本次實(shí)驗(yàn)采用的通訊協(xié)議。
- 給針對(duì)實(shí)驗(yàn)要求編寫甲機(jī)和乙機(jī)的程序流程圖、程序清單并給予適當(dāng)注釋。
- 描述實(shí)驗(yàn)現(xiàn)象和結(jié)果,要求對(duì)實(shí)驗(yàn)現(xiàn)象和結(jié)果進(jìn)行分析。
實(shí)驗(yàn)五、SRAM外部數(shù)據(jù)存儲(chǔ)器擴(kuò)展實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?/strong>1、學(xué)習(xí)SRAM(靜態(tài)RAM)芯片的工作原理和結(jié)構(gòu);
2、學(xué)習(xí)單片機(jī)擴(kuò)展數(shù)據(jù)存儲(chǔ)器的接口方法。
二、實(shí)驗(yàn)設(shè)備- 仿真器
- SRAM數(shù)據(jù)存儲(chǔ)器擴(kuò)展接口模塊;
2.單片機(jī)最小系統(tǒng)模塊;
三、實(shí)驗(yàn)要求連接電路并編寫程序,使得:第一步,單片機(jī)在SRAM中填入不斷增加的數(shù)字,0,1,2,3……9,然后再?gòu)?開始到9,直到添滿整個(gè)SRAM。第二步,將數(shù)據(jù)讀出并驗(yàn)證是否符合原寫入的規(guī)律。該實(shí)驗(yàn)主要通過仿真器來觀察程序工作情況。
四、實(shí)驗(yàn)原理4.1 51單片機(jī)片外總線結(jié)構(gòu)
如圖5.1所示為51單片機(jī)的片外總線結(jié)構(gòu)圖。
其中,P0口在接外部存儲(chǔ)器時(shí),作為地址總線的低8位及數(shù)據(jù)總線復(fù)用。它能以吸收電流的方式驅(qū)動(dòng)8個(gè)TTL負(fù)載。P2口在訪問外部存儲(chǔ)器時(shí),可以作為高8位地址總線送出高8位地址。
由圖5.1可以看到,51單片機(jī)的引腳除了電源、復(fù)位、時(shí)鐘接入、用戶I/O外,其余管腳都具有系統(tǒng)擴(kuò)展的功能。這些引腳構(gòu)成了51單片機(jī)的片外3總線結(jié)構(gòu),即:
- 地址總線(AB):寬度為16位,因此,可以尋址64K字節(jié)的外部存儲(chǔ)器空間。地址總線由P0口經(jīng)鎖存器提供低8位地址(A0~A7),P2提供高8位地址(A8~A15)。
- 數(shù)據(jù)總線(DB):寬度為8位,由P0口作為數(shù)據(jù)總線。
- 控制總線(CB):P3口及RESET、EA、ALE、PSEN、 RD、 WR 。

圖5.1 51單片機(jī)的片外總線結(jié)構(gòu)圖。
4.2 62256的工作原理
SRAM的容量一般為32K,64K,128K等,其中HY62256ALp-10容量為32Kx8位(即256K位)是高速、低功耗的靜態(tài)存儲(chǔ)器。存儲(chǔ)單元訪問時(shí)間為10ns,2-5V的寬工作電壓。
DIP-28封裝管腳如圖5.2所示。
圖5.2 引腳圖
管腳定義如表5.1所示。
表5.1 管腳定義
內(nèi)部邏輯結(jié)構(gòu)如圖5.3所示
操作真值表5.2:
表5.2 操作真值表
操作時(shí)序以-70型號(hào)為例,如表5.3所示。
表5.3 操作時(shí)序參數(shù)
1、READ讀操作。
-CE、-OE/VPP低電平,在內(nèi)部-CE作為電源控制(高電平進(jìn)入省電模式),-OE/VPP,控制數(shù)據(jù)從Q0-Q7端輸出。當(dāng)?shù)刂沸盘?hào)穩(wěn)定之后,地址訪問時(shí)間tACC等于-CE到數(shù)據(jù)輸出的延遲時(shí)間。滿足tACC tCE條件下數(shù)據(jù)在-OE/VPP高下降沿之后可用。
時(shí)序如圖5.4所示。
圖5.4 READ讀操作時(shí)序1
當(dāng)1、-WE為高電平;2、器件連續(xù)保持-CS= VIL;3、-OE =VIL,則訪問時(shí)序圖如圖5.5所示。
圖5.5 READ讀操作時(shí)序2
2、寫操作
寫操作發(fā)生在-CS和-WE都是低電平的情況下,在-CS或-WE的最后的一個(gè)下降沿則寫操作開始。在-CS或-WE的最先的一個(gè)上升沿則寫操作結(jié)束。tWP測(cè)量寫操作開始到結(jié)束的時(shí)間。
寫時(shí)序如圖5.6所示。
圖5.6 READ讀操作時(shí)序3
五、實(shí)驗(yàn)步驟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個(gè)
;讀出送到靜態(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ù)的個(gè)數(shù)
MOV DPTR,#0000H
GET_LOOP:
MOV R0,#30H;存放的首地址
MOV R1,#31H
MOV R2,#5;6個(gè)顯示的數(shù)據(jù),移動(dòng)5個(gè)
;推入到顯示存儲(chǔ)區(qū),向后移動(dòng)
SHIFT_LOOP:
MOV A,@R1
MOV @R0,A
INC R0
INC R1
DJNZ R2,SHIFT_LOOP
MOVX A,@DPTR
MOV @R0,A;寫到最后一個(gè)位置
;顯示在數(shù)碼管上
ACALL SHOW
ACALL DELAY
INC DPTR
DJNZ R3,GET_LOOP;256個(gè)
JMP MAIN
RET
DELAY: ;延時(shí)子程序;大約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
編寫程序,并裝入仿真器,運(yùn)行程序,通過開發(fā)環(huán)境觀察數(shù)據(jù)區(qū)內(nèi)容。
六、實(shí)驗(yàn)報(bào)告- 畫出接口電路原理圖,
- 說明62256的工作原理。簡(jiǎn)要分析電路工作原理,說明地址分配的依據(jù)。
- 說明單片機(jī)的總線結(jié)構(gòu),并說明電路中鎖存器的作用?
- 給出針對(duì)實(shí)驗(yàn)要求編寫的程序清單、并給予適當(dāng)注釋。
- 描述實(shí)驗(yàn)現(xiàn)象和結(jié)果,要求對(duì)實(shí)驗(yàn)現(xiàn)象和結(jié)果進(jìn)行分析。
實(shí)驗(yàn)六、矩陣式鍵盤輸入實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?/strong>1.學(xué)習(xí)矩陣式鍵盤工作原理;
2.學(xué)習(xí)矩陣式鍵盤接口的電路設(shè)計(jì)和程序設(shè)計(jì)。
二、實(shí)驗(yàn)設(shè)備1.仿真器
2.單片機(jī)最小系統(tǒng)實(shí)驗(yàn)教學(xué)模塊
3.矩陣式鍵盤實(shí)驗(yàn)?zāi)K
4.動(dòng)態(tài)掃描數(shù)碼管顯示模塊
三、實(shí)驗(yàn)要求要求實(shí)現(xiàn):在矩陣式鍵盤中的某個(gè)鍵被按下時(shí),8位LED動(dòng)態(tài)顯示器上最低位顯示該鍵對(duì)應(yīng)的字符,以前的字符向高位推進(jìn)1位(即類似于計(jì)算器)。
四、實(shí)驗(yàn)原理矩陣式由行線和列線組成,按鍵位于行、列的交叉點(diǎn)上。如圖所示,一個(gè)4*4的行、列結(jié)構(gòu)可以構(gòu)成一個(gè)16個(gè)按鍵的鍵盤。很明顯,在按鍵數(shù)量較多的場(chǎng)合,矩陣式鍵盤與獨(dú)立式鍵盤相比,要節(jié)省很多的I/0口。
圖6-1 矩陣式鍵盤結(jié)構(gòu)
4.1 矩陣式鍵盤工作原理
按鍵設(shè)置在行、列交節(jié)點(diǎn)上,行、列分別連接到按鍵開關(guān)的兩端。行線通過上拉電阻接到+5V上。平時(shí)無按鍵按下時(shí),行線處于高電平狀態(tài),而當(dāng)有按鍵按下時(shí),行線電平狀態(tài)將由與此行線相連的列線電平?jīng)Q定。列線電平如果為低,則行線電平為低,列線電平如果為高,則行線電平則為高。這一點(diǎn)是識(shí)別矩陣式鍵盤是否被按下的關(guān)鍵所在。由于行列式鍵盤中行、列線為多鍵共用,各按鍵均影響該鍵所在行和列的電平。因此,各按鍵彼此將相互發(fā)生影響,所以必須將行、列線信號(hào)配合起來并作適當(dāng)?shù)奶幚恚拍艽_定閉合鍵的位置。
4.2 按鍵識(shí)別方法
下面以圖6-2中4號(hào)鍵被按下為例,來說明此鍵是如何被識(shí)別出來的。
前已述及,鍵被按下時(shí),與此鍵相連的行線電平將由與此鍵相連的列線電平?jīng)Q定,而行線電平在無鍵按下時(shí)處于高電平狀態(tài)。如果讓所有列線處于高電平那么鍵按下與否不會(huì)引起行線電平的狀態(tài)變化,始終是高電平,所以,讓所有列線處于高電平是沒法識(shí)別出按鍵的�,F(xiàn)在反過來,讓所有列線處于低電平,很明顯,按下的鍵所在行電平將也被置為低電平,根據(jù)此變化,便能判定該行一定有鍵被按下。但我們還不能確定是這一行的哪個(gè)鍵被按下。所以,為了進(jìn)一步判定到底是哪—列的鍵被按下,可在某一時(shí)刻只讓一列線處于低電平,而其余所有列線處于高電平。當(dāng)?shù)?列為低電平,其余各列為高電平時(shí),因?yàn)槭擎I4被按下,所以第1行仍處于高電平狀態(tài);當(dāng)?shù)?列為低電平,其余各列為高電平時(shí),同樣我們會(huì)發(fā)現(xiàn)第1行仍處于高電平狀態(tài),直到讓第4列為低電平,其余各列為高電平時(shí),因?yàn)槭?號(hào)鍵被按下,所以第1行的高電平轉(zhuǎn)換到第4列所處的低電平,據(jù)此,我們確信第1行第4列交叉點(diǎn)處的按鍵,即4號(hào)鍵被按下。
根據(jù)上面的分析,很容易得出矩陣鍵盤按鍵的識(shí)別方法,此方法分兩步進(jìn)行。第一步,識(shí)別鍵盤有無健被按下;第二步,如果有鍵被按下,識(shí)別出具體的按鍵。分述如下:
識(shí)別鍵盤有無鍵被按下的方法是:讓所有列線均為低電平,檢查各行線電平是否有低電平,如果有,則說明有鍵被按下,如果沒有,則說明無鍵被按下(實(shí)際編程時(shí)應(yīng)考慮按鍵抖動(dòng)的影響,通�?偸遣捎密浖訒r(shí)的方法進(jìn)行消抖處理)。
識(shí)別具體按鍵的方法是(亦稱之為掃描法):逐列置零電平,并檢查各行線電平的變化,如果某行電平由高電平變?yōu)榈碗娖剑瑒t可確定此行此列交叉點(diǎn)處按鍵被按下。
請(qǐng)注意:由于鍵盤模塊做了特殊的處理,使得矩陣式鍵盤的行線輸出的電平狀態(tài)與前面所述正好相反。即,行線的輸出電平,在平時(shí)為低電平,有鍵按下時(shí)(該鍵對(duì)應(yīng)列線輸入為低電平),該鍵對(duì)應(yīng)的行線輸出為高電平。在編程的時(shí)候請(qǐng)注意這一點(diǎn)。
五、實(shí)驗(yàn)步驟1、按照?qǐng)D6-2的電路圖,用導(dǎo)線將矩陣式鍵盤、數(shù)碼管動(dòng)態(tài)掃描顯示模塊和單片機(jī)的最小系統(tǒng)實(shí)驗(yàn)?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 ;延時(shí)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
(……….)部分要求學(xué)生自己編寫,將程序調(diào)入仿真器進(jìn)行調(diào)試,直至達(dá)到實(shí)驗(yàn)要求。
六、實(shí)驗(yàn)報(bào)告1、畫出接口電路原理圖,并簡(jiǎn)要分析電路的執(zhí)行過程。
2、給出程序流程圖和程序清單、并給予適當(dāng)注釋。
3、圖6-2的電路示意圖共采用了P0、P1、P2三個(gè)I/O口,你有沒有更節(jié)省I/O線的方案?請(qǐng)給出電路示意圖。
- 實(shí)驗(yàn)過程中遇到哪些問題,是如何解決的?
- 描述實(shí)驗(yàn)現(xiàn)象和結(jié)果,要求對(duì)實(shí)驗(yàn)現(xiàn)象和結(jié)果進(jìn)行分析。
實(shí)驗(yàn)七、8255可編程并行I/O擴(kuò)展接口實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?/strong>1.熟悉8255并行接口芯片的基本工作原理及應(yīng)用;
2.掌握單片機(jī)與8255的接口電路設(shè)計(jì)和編程。
二、實(shí)驗(yàn)設(shè)備- 仿真器
- 8255可編程并行I/O擴(kuò)展接口模塊
- 單片機(jī)最小系統(tǒng)模塊
4. 發(fā)光二極管陣列模塊
三、實(shí)驗(yàn)要求- 連接單片機(jī)最小系統(tǒng)、8255擴(kuò)展接口、發(fā)光二極管陣列模塊組成的電路,使發(fā)光二極管
陣列以一定規(guī)律點(diǎn)亮:(1)逐行循環(huán)點(diǎn)亮;(2)逐列循環(huán)點(diǎn)亮
2.連接單片機(jī)最小系統(tǒng)、8255擴(kuò)展接口、數(shù)碼管動(dòng)態(tài)掃描顯示模塊、矩陣式鍵盤模塊組成的電路,要求在鍵盤按下時(shí),8位LED動(dòng)態(tài)顯示器上最低位顯示相應(yīng)的字符,以前的各位字符向高位推進(jìn)1位。請(qǐng)參看實(shí)驗(yàn)六的相關(guān)內(nèi)容。
四、實(shí)驗(yàn)原理8255是一個(gè)具有3個(gè)8位的8位并行口,并且可編程為多種工作模式的接口芯片。由于每個(gè)端口上具有輸入/輸出的緩沖和鎖存功能,因此可用于擴(kuò)展單片機(jī)有限的I/O口,作為單片機(jī)和外圍器件的中間接口電路。
4.1引腳說明
8255共40個(gè)引腳,采用了雙列直插的封裝,主要引腳功能如下:
- D7—D0:三態(tài)雙向數(shù)據(jù)線,與單片機(jī)數(shù)據(jù)總線連接;
- CS:片選信號(hào),低電平有效;
- RD:讀出信號(hào)線,低電平有效;
- WR:寫入信號(hào)線,低電平有效;
- PA7—PA0:A口輸入/輸出線;
- PB7—PB0:B口輸入/輸出線;
- PC7—PC0:C口輸入/輸出線;
- RESET:芯片復(fù)位信號(hào)線;
- A1—A0:地址線,用來指定8255內(nèi)部端口。
4.2內(nèi)部結(jié)構(gòu)和工作方式
(1)端口A、B、C
端口A為8位數(shù)據(jù)傳送,數(shù)據(jù)輸入或輸出時(shí)均受到鎖存。
端口B為8位數(shù)據(jù)傳送,數(shù)據(jù)輸入時(shí)不受鎖存,而數(shù)據(jù)輸出時(shí)受到鎖存。
端口C為8位數(shù)據(jù)傳送,數(shù)據(jù)輸入時(shí)不受鎖存,而數(shù)據(jù)輸出時(shí)受到鎖存。
(2)8255接口工作狀態(tài)選擇表7.1
表7.1 8255接口工作狀態(tài)
| | |
| | A口數(shù)據(jù)→數(shù)據(jù)總線 B口數(shù)據(jù)→數(shù)據(jù)總線 C口數(shù)據(jù)→數(shù)據(jù)總線 |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
(3)8255的基本工作方式
8255可編程并行I/O擴(kuò)展芯片是通過在控制端口中設(shè)置控制字來決定它的工作方式的。
8255有以下三種基本工作方式:
- 方式0——基本輸入/輸出方式。
- 方式1——選通輸入/輸出方式。
- 方式2——雙向傳送方式。(僅A口)
8255A的端口A可以工作在三種工作方式中的任何一種,端口B只能工作在方式0或方式1,端口C則常常配合端口A和端口B工作,為這兩個(gè)端口的輸入/輸出傳送提供控制信號(hào)和狀態(tài)信號(hào)。
①方式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)答信號(hào),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ù)。
當(dāng)8255接收到寫入控制端口的控制字時(shí),首先測(cè)試控制字的最高位,如為1,則是方

如圖7.1 8255的方式控制字
式選擇控制字;如為0,則不是方式選擇控制字,而是對(duì)端口C置1/置0控制字,這是由于端口C的每一位可作為控制位來使用。端口C置1/置0控制字也是寫到控制端口,而不是寫到端口C。
4.3 電路原理示意圖

圖7.2 采用8255的陣列式發(fā)光二極管電路

圖7.3為鍵盤和動(dòng)態(tài)顯示參考電路,只耗費(fèi)了少量器件和單片機(jī)I/O口線便完成了控制電路:
圖7.3 采用8255的鍵盤顯示實(shí)驗(yàn)電路
4.4 軟件編寫
按照實(shí)驗(yàn)要求,參考圖7.2 和7.3,分別編寫程序。
五、實(shí)驗(yàn)步驟1、參考圖7.2進(jìn)行電路設(shè)計(jì),畫出電路圖,并用導(dǎo)線正確連接8255可編程I/O擴(kuò)展模塊、單片機(jī)最小系統(tǒng)模塊、發(fā)光二極管陣列。分別編寫程序?qū)崿F(xiàn)(1)逐行循環(huán)顯示程序,一個(gè)時(shí)刻只有一盞燈亮;(2)逐列循環(huán)顯示程序,一個(gè)時(shí)刻只有一盞燈亮2。也可以一排排顯示,或者一列列顯示,學(xué)生可以自己設(shè)計(jì)顯示方案。連接好仿真器,對(duì)編寫的程序進(jìn)行仿真調(diào)試。
2、參考圖7.3,參考實(shí)驗(yàn)六的相關(guān)程序,編寫矩陣式鍵盤和顯示程序。
六、實(shí)驗(yàn)報(bào)告- 畫出接口電路原理圖,說明8255的工作原理,簡(jiǎn)要分析電路的執(zhí)行過程。
- 給出針對(duì)實(shí)驗(yàn)要求編寫程序流程圖、程序清單并給予適當(dāng)注釋。
- 實(shí)驗(yàn)過程中遇到哪些問題,是如何解決的?
- 描述實(shí)驗(yàn)現(xiàn)象和結(jié)果,要求對(duì)實(shí)驗(yàn)現(xiàn)象和結(jié)果進(jìn)行分析。
完整的Word格式文檔51黑下載地址:
單片機(jī)原理及應(yīng)用實(shí)驗(yàn)指導(dǎo)書.doc
(1.96 MB, 下載次數(shù): 12)
2018-9-18 08:59 上傳
點(diǎn)擊文件名下載附件