單片機原理及應用 實驗指導書
工業大學 信息學院 二零零八年二月
目錄 第一章 MPC100B-I型單片機實驗箱簡介 1.1系統組成 1.2實驗箱 1.2.1單片機最小系統 1.2.2基礎板 1.3專用開發工具 第二章 集成開發環境介紹 2.1 MedWin概述 2.1.1 MedWin集成開發環境的特點 2.1.2快速入門適用范圍 2.1.3 MedWin對系統的要求 2.2安裝MedWin的步驟 2.3 設置MedWin 2.4 MedWin開發入門 2.4.1 不使用MedWin集成開發環境項目管理方式 2.4.2 使用MedWin集成開發環境項目管理方式 2.5 MedWin斷點功能 2.6 MedWin菜單命令 2.7常見問題 第三章 單片機最小系統 實驗一、單片機最小系統的熟悉 一、實驗目的 二、實驗設備 三、實驗要求 四、實驗原理 五、實驗步驟 六、實驗報告 第四章 實驗指導 實驗一 多字節、多進制加減運算實驗 一、實驗目的 二、實驗要求 三、實驗原理 四、實驗步驟 五、實驗報告 實驗二、中斷實驗――中斷優先級控制及中斷保護 一、實驗目的 二、實驗設備 三、實驗要求 四、實驗原理 五、實驗步驟 六、實驗報告 實驗三、定時器實驗――低頻脈沖計數器 一、實驗目的 二、實驗設備 三、實驗要求 四、實驗原理 五、實驗步驟 六、實驗報告 實驗四、雙機串行通訊實驗 一、實驗目的 二、實驗設備 三、實驗要求 四、實驗原理 五、實驗步驟 六、實驗報告 實驗五、SRAM外部數據存儲器擴展實驗 一、實驗目的 二、實驗設備 三、實驗要求 四、實驗原理 五、實驗步驟 六、實驗報告 實驗六、矩陣式鍵盤輸入實驗 一、實驗目的 二、實驗設備 三、實驗要求 四、實驗原理 五、實驗步驟 六、實驗報告 實驗七、8255可編程并行I/O擴展接口實驗 一、實驗目的 二、實驗設備 三、實驗要求 四、實驗原理 五、實驗步驟 六、實驗報告 1
單片機原理及應用實驗指導書 第一章 MPC100B-I型單片機實驗箱簡介1.1系統組成整個單片機實驗系統由實驗箱、功能擴展模塊、單片機專用開發工具、實驗指導書以及配套軟件光盤等部分組成。 1.2實驗箱實驗系統的基礎平臺采用箱式結構,外形美觀大方、便于攜帶、利于教學,操作方便。 1.2.1單片機最小系統最小系統板是本實驗裝置的核心模塊,它提供了51單片機的一個最小工作系統,并充分地擴展了單片機總線和I/O口以便于與其他模塊的電路連接。最小系統板包括的外圍電路有:時鐘電路、復位電路、P0口鎖存電路、撥碼開關電路。最小系統板上擴展的I/O口,包括P0、P1、P2、P3口的每個管腳獨立都引出,作為數據總線(P0口),地址總線低8位(P0口經鎖存后的輸出),地址總線高8位用8針的雙排插針座引出;控制總線(WR, RD, ALE等)獨立引出。 由于最小系統板的獨立式可更換設計,使得本實驗裝置可通過改變這個最小系統板來進行不同家族單片機的實驗教學,如AVR,PIC,96家族單片機等,非常靈活和方便。 1.2.2基礎板基礎板是本實驗裝置的實驗基礎,其內容圍繞單片機教學大綱。 它由以下21個模塊組成: (1)發光二極管陣列模塊; (2)鍵盤模塊(獨立式與矩陣式兩用鍵盤); (3)動態數碼管掃描顯示模塊; (4)靜態串行顯示模塊; (5)8155擴展實驗模塊; (6)8255擴展實驗模塊; (7)RS232接口實驗模塊; (8)波形信號發生器模塊; (9)外部SRAM實驗模塊(62256); (10)外部擴展EEPROM實驗模塊(W27C512); (11)FlashROM實驗模塊(W29C011A); (12)ADC0809轉換實驗模塊; (13)V/F轉換實驗模塊; (14)DAC0832轉換實驗模塊; (15)F/V轉換實驗模塊; (16)時鐘源模塊; (17)總線驅動與總線鎖存模塊(74HC245/74HC573); (18)微處理器監控模塊; (19)電源模塊(±12V/±5V); (20)芯片自由擴展實驗模塊(2組); (21)電位器調節模塊(2組); (22)接口轉換模塊。 1.3專用開發工具(1) 51系列單片機仿真器; (2) 匯編、C51編譯器(KEIL C7.0試用版);
第二章 集成開發環境介紹2.1 MedWin概述MedWin是萬利電子有限公司Insight~系列仿真開發系統的高性能集成開發環境。集編輯、編譯/匯編、在線及模擬調試為一體,VC風格的用戶界面,內嵌自主版權的宏匯編器和連接器,并完全支持Franklin/KeilC擴展OMF格式文件,支持所有變量類型及表達式,配合Insight系列仿真器,是您開發80C51系列單片機的理想開發工具。 2.1.1 MedWin集成開發環境的特點1.完美的Windows版集成開發環境MedWin 2.內嵌自主版權的宏匯編器A51和連接器L51,并支持Keil/Franklin編譯、連接工具 3.具有分別獨立控制項目文件的工程項目管理器 4.在工程項目管理下,實現多模塊和混合語言編程調試 5.VC風格的窗口停駐、窗口切分和工作簿模式界面 6.在線編輯、編譯/匯編、連接下載運行和錯誤關聯定位 7.符合編程語言語法的彩色文本顯示 8.完全的表達式分析,支持所有數據類型變量的觀察 9.無須點擊的感應式鼠標提示功能 10.外部功能部件編程向導 11.不限制打開數據區觀察窗口的數目 12.調試狀態下用戶程序自動重裝功能 13.提供真實的軟件模擬仿真開發環境 2.1.2快速入門適用范圍1.MedWin集成開發環境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對系統的要求為使MedWin集成開發環境能夠正常地運行,您必須提供以下軟硬件環境: 1.586以上的PC及兼容機 2.100M以上的剩余硬盤空間 3.分辨率為800x600以上的顯示器 4.具有SPP功能的打印機接口 5.中文或英文Windows95/98,Windows Me,Windows 2000/NT,Windows XP 6.盡量減少DOS自動批處理中關于系統路徑及環境變量的設置,或刪除DOS下的批處理文件Autoexec.bat文件 2.2安裝MedWin的步驟以下分別是安裝MedWin集成開發環境的方法:
第一步:從光盤上安裝或從因特網下載安裝 從光盤上安裝 1.安裝中文MedWin,進入文件夾Manley\MedWin\Chinese 2.安裝英文MedWin,進入文件夾Manley\MedWin\English 3.在文件夾內,點擊setup。 從因特網上下載安裝 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.在文件夾內點擊setup,安裝MedWin集成開發環境。
第二步:安裝文件路徑設置 為了便于管理和服務,建議安裝MedWin集成開發環境時,使用以下缺省路徑安裝: 1.中文版缺省安裝目標路徑:C:\Manley\PMedWin 2.英文版缺省安裝目標路徑:C:\Manley\MedWin 注意安裝MedWin集成開發環境路徑選擇。 2.3 設置MedWinMedWin集成開發環境完成安裝后,如果是第一次安裝,請您務必注意:必須根據系統提示,設置工作目錄、編譯/匯編器、連接器的路徑、環境以及注冊仿真器,如果是升級安裝,則MedWin集成開發環境啟動后出現啟動向導菜單或直接打開項目文件。 第一步;啟動MedWin 1由安裝MedWin集成開發環境,直接啟動MedWin 2.或點擊Windows[開始/程序/Manley/MedWin中文版]啟動中文版MedWin 3.或點擊Windows[開始/程序/Manley/MedWin]啟動英文版MedWin 4.如果已經連接仿真器,屏幕上出現MedWin的初始畫面,進入啟動MedWin的第三步 5.如果沒有連接仿真器,屏幕上出現端口選擇畫面,進入啟動MedWin的第二步 第二步:選擇進入在線仿真或模擬仿真 1.由于仿真器供電電源,通訊電纜連接問題,請檢查并使仿真器工作正常后,點擊對話框中[仿真器]按鈕,進入在線仿真狀態。 2.如果確認需要進行模擬仿真,點擊[模擬仿真]按鈕,進入模擬仿真狀態。 經過以上步驟,屏幕上出現MedWin集成開發環境的初始畫面,并漸漸消失,出現MedWin集成開發環境的系統畫面。 第三步:設置工作目錄 進入MedWin集成開發環境后,系統首先提示默認的工作目錄為C:\MedWin。我們建議用戶根據需要選擇合適的工作目錄,例如將工作目錄改為D:\WorkDir(用戶可自行定義目錄名稱)。注意:不得使用長文件名作為工作目錄! 在MedWin集成開發環境工作目錄提示對話框中,更改MedWin集成開發環境工作目錄的步驟,必須在Windows環境下進行: 1.打開Windows的資源管理器 2.選擇本地磁盤(D:) 3.單擊鼠標右鍵,選擇新建文件夾,命名為WorkDir 當建立WorkDir文件夾后,在MedWin集成開發環境點中,點擊當前工作目錄左側按鈕。在開發環境工作目錄對話框中選擇驅動器D盤后,打開文件夾(目錄)WorkDir,確認后,工作目錄設置即告完成。系統將提示進行下一步設置:編譯/匯編/連接器的配置。 第四步:配置編譯/匯編/連接器及環境 MedWin集成開發環境初始默認編譯/匯編/連接環境為使用萬利電子自主版權的宏匯編和連接器,使用默認設置,匯編連接信息和錯誤關聯均為中文提示。 當選擇用戶設置編譯/匯編/連接環境時,必須注意選擇合適的路徑和程序,如 1.編譯器路徑為C:\C51\BIN\C51.exe 2.匯編器路徑為C:\C51\BIN\51.exe 3.連接器路徑為C:\C51\BIN\BL51.exe 系統頭文件、庫文件的環境為: 1.編譯器系統頭文件路徑為C:\C51\INC 2.編譯器系統庫文件路徑為C:\C51\LIB MedWin集成開發環境默認源程序的擴展名為: 1.C源程序文件的擴展名為.C 2.匯編源程序文件的擴展名為.ASM 當您已經存在編譯器/匯編器/連接器時,建議按照下列目錄存放: 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程序連接所需的庫文件 用戶可按照上面提示的路徑設置編譯器/匯編器/連接器及環境,如編譯器/匯編器/連接器存放在其它目錄,則必須在輸入框中設置合適的路徑或點擊按鈕選擇相應的文件及路徑。 當您使用Keil編譯器時,其連接器應設為BL51.exe,當您使用Franklinl編譯器時,其連接器應設為L51.exe。 第五步:設置文本編輯器 設置文本編輯器可以用于設置文本窗口的前景字符的顏色、背景顏色、字體和編輯文件類型。 2.4 MedWin開發入門MedWin集成開發環境提供了以下兩種方式開發用戶應用程序,: 1.不使用MedWin集成開發環境項目管理方式——對源程序文件直接進行匯編/連接,兼容傳統開發習慣。 2.使用MedWin集成開發環境項目管理方式——可進行多模塊、混合語言編程的,同樣也適合單模塊程序的開發。 用戶無論是單模塊或多模塊的程序開發,我們都建議使用項目管理方式管理應用程序。 2.4.1 不使用MedWin集成開發環境項目管理方式不使用MedWin集成開發環境項目管理方式,只能對單模塊方式下的應用程序開發,具有很大的局限性。以下是不使用MedWin集成開發環境項目管理方式開發應用程序的步驟: 第一步:關閉當前項目文件 命令[項目管理/關閉當前項] 不使用MedWin集成開發環境項目管理方式開發應用程序,用戶必須關閉已經打開的項目,此時MedWin集成開發環境關閉界面上所有的窗口。因為當打開項目文件后,MedWin集成開發環境默認所有編譯/匯編、產生代碼的過程都是對項目或項目所包含的文件進行的。 第二步:在文件萊單下打開應用程序 命令[文件/新建]或[文件/打開] 單模塊方式下的文件調試可以按照以下方法新建或打開文件: 1.點擊[文件/新建],輸入文件名和擴展名,新建文件 2.點擊[文件/打開],選擇文件撿取框中的文件將其打開 第三步:編譯/匯編 命令[項目管理/編譯/匯編] MedWin集成開發環境根據文件的擴展名,自動對當前激活的文件選擇調用外部編譯器或匯編器: 1.如果當前文件的擴展名為ASM或系統定義的擴展名,編譯/匯編命令調用外部匯編命令對當前文件匯編 2.如果當前文件的擴展名為C或系統定義的擴展名,編譯/匯編命令調用外部C編譯命令對當前文件編譯執行[項目管理|編譯/匯編]命令后產生的結果顯示在消息框中。 如果需要設置文件編譯/匯編的命令行參數,可以選擇[項目管理1文件屬性]命令設置。 第四步:錯誤信息關聯 MedWin集成開發環境調用外部命令編譯/匯編后產生的結果,顯示在消息窗口中,消息窗口可由熱鍵Ctrl+9激活。當編譯/匯編發生錯誤時,消息窗口中的錯誤信息自動與源文件關聯,提示出錯的位置。在消息窗口中錯誤提示處雙擊鼠標左鍵或鍵入回車,可將錯誤信息與源文件的錯誤位置關聯: 1.如果編譯/匯編沒有錯誤,可進入第五步操作 2.如果編譯/匯編出現錯誤,在修改源文件后重復進行第三步操作 第五步:產生代碼并裝入仿真器調試 命令[項目管理/產生代碼]或[項目管理/產生代碼并裝入] 產生代碼或產生代碼并裝入命令對經過編譯/匯編無誤后產生的OBJ文件進行連接產生用于下載的代碼。此命令自動地對修改過的源程序進行編譯或匯編,對沒有修改過的程序將越過編譯或匯編過程,然后連接所有的OBJ,LIB文件,再裝載代碼到仿真器,完成調試程序所需的準備工作。裝載完成后,出現“Loadingprogram“(項目名)”…Completed'’的字樣。 2.4.2 使用MedWin集成開發環境項目管理方式使用MedWin集成開發環境項目管理方式開發程序,適用于各種方式下的單模塊和多模塊方式應用程序。以下是使用MedWin集成開發環境項目管理方式開發應用程序的步驟: 1.建立一個新的項目進入第一步——新建項目文件 2.打開已經存在的項目文件進入第三步——打開項目文件 第一步:新建項目文件 命令[項目管理/新建項目文件] 項目名稱 MedWin集成開發環境的項目器是按項目名稱管理的,項目管理器內的項目名稱不可以相同。在項目名稱輸入欄內,用戶必須輸入項目名稱,并且項目名不得超過8個字符,不可以使用漢字以及“-,?,*,/”等DOS文件名所不可以使用的字符,也不可以輸入盤符和路徑! 高級設置 高級設置是用戶程序所處路徑與當前工作目錄不同時,選擇存放項目文件路徑的過程。通常,當用戶源程序文件存放在當前工作目錄時,不需要進行高級設置。如果源程序文件不在當前工作目錄時,用戶必須選擇高級設置,將項目文件存放到用戶源程序所處的目錄。 如果源文件與項目文件不在同一目錄時,將會出現不能進行源文件調試的情況發生。 添加文件 選擇添加文件選項,表示在項目建立后會自動打開文件撿取框,供用戶選擇文件添加到項目管理器中。 存儲器屬性 存儲器屬性Small/Compact/Large,此屬性為C編譯器所需,如果項目文件中包含C程序,用戶必須設置存儲器屬性。 RAM尺寸:128/256,此屬性為連接器所需的控制項。系統默認128字節。 系統默認標準80C51匯編選項,此選項為匯編器所需的控制項。選中時,匯編器默認SFR為80C51。 如果項目所使用的不足標準的80C51,用戶必須定義其使用的SFR,例: PO DATA 80H E DATA 0A8H TR0 BIT 8CH 項目環境設置 項目頭文件路徑為該項目所定義的頭文件所處的路徑。該路徑與系統定義的頭文件路徑在DOS環境設置的關系是: set c51inc=(系統定義的頭文件路徑)(項目定義的頭文件路徑) 項目庫文件路徑為該項目所定義的庫文件所處的路徑,該路徑與系統定義的庫文件路徑在DOS環境設置的關系是: setc51lib=(系統定義的庫文件路徑)(項目定義的庫文件路徑) 在項目的編譯和連接過程中,MedWin自動加入以上環境變量的設置。通常用戶不需要設置項目定義的頭文件和庫文件路徑,只有在高級應用時才需設置。 調試信息 建立新的項目后,系統默認為產生調試信息,能夠進行源文件調試。 更多的文件屬性 關于編譯/匯編程序的更多的文件屬性,可在[項目管理I文件屬性]中設置。如果在多模塊調試中需要關閉一個或多個文件的源文件調試,可在文件屬性對話框中,分別關閉產生調試信息選項。 第二步:添加文件 命令[項目管理/添加文件項] 添加文件命令用于將各類文件添加至項目管理器,新建項目文件后集成環境會自動打開添加文件對話框,提供選擇。請根據: 1.如果文件存在,在文件撿取框中選擇并打開文件添加 2.如果文件不存在,必須輸入文件名(包含擴展名),建立新文件 新建文件后,鍵入命令[項目管理|添加文件項],將新建文件添加到項目中。 第三步:打開項目文件 命令:[項目管理/打開項目文件] 對于已經存在的項目文件,可以直接打開項目文件進入第四步操作。 第四步:編輯,編譯/匯編/連接 命令:[項目管理/編譯/匯編] MedWin集成開發環境根據文件的擴展名,自動對激活的文件選擇調用外部編譯器或匯編器: 1.如果當前文件的擴展名為ASM或系統定義的擴展名,編譯/匯編命令調用外部匯編命令對當前文件匯編 2.如果當前文件的擴展名為C或系統定義的擴展名,編譯/匯編命令調用外部C編譯命令對當前文件編譯文件編譯/匯編的命令行參數由[項目管理1文件屬性]確定。 第五步:錯誤信息關聯 文件經過編譯/匯編后的結果顯示于消息窗口,出現錯誤后錯誤信息與文件關聯。在消息窗口中錯誤之處雙擊鼠標左鍵或鍵入回車,即可將錯誤與文件關聯: 1.如果沒有錯誤,進入第六步操作 2.如果出現錯誤,修改文件后重復進行第四步操作 第六步產生代碼并裝人仿真器 命令[項目管理/產生代碼] 命令[項目管理/產生代碼并裝入] 命令[項目管理/重新產生全部代碼] 產生代碼或產生代碼并裝入命令,對經過編譯/匯編無誤后產生的OBJ文件進行連接,產生用于下載的代碼。此命令對修改過的源程序自動進行編譯或匯編,否則將越過編譯或匯編過程進行連接,并裝載代碼到仿真器,完成調試文件所需的準備工作。 1.使用產生代碼命令,項目管理器會自動判別文件是否需要重新編譯/匯編,提高調試效率 2.使用產生代碼并裝入命令,項目管理器會自動判別文件是否需要重新編譯/匯編,并將連接產生的代碼下載到仿真器,提供調試運行 使用重新產生全部代碼命令,項目管理器會對所有文件重新編譯/匯編,并將連接產生的代碼下載到仿真器,提供調試運行 2.5 MedWin斷點功能MedWin集成開發環境配合|nsight系列仿真器,具有強大的斷點功能:可以在編輯和調試狀態下設置或清除斷點,并且在退出集成開發環境時自動保存斷點信息。 1.斷點標記 MedWin集成開發環境的斷點標記,根據系統狀態和所處窗口類型,標記如下: 1.在編輯狀態下,源程序文本窗口內的白色箭頭——預設斷點,退出時保存, 2.在調試狀態下,源程序文本窗口內的白色箭頭——無效斷點,退出時保存 3.在調試狀態下,源程序文本窗口內的黃色箭頭——有效地址斷點,退出時保存 4.在調試狀態下,源程序文本窗口內的藍綠色箭頭——臨時斷點,退出時不保存 5.在反匯編本窗口內設置的斷點,標記為紅色光帶——地址斷點,退出時不保存 2.斷點顏色變化規律 根據系統狀態和所處窗口類型,MedWin集成開發環境的斷點顏色變化規律如下: 編輯狀態下,在源程序窗口內設置斷點,標記為白色,再次設置斷點,白色斷點標記被清除。 調試狀態下,在源程序窗口內設置斷點,標記為黃色,再次設置斷點,黃色斷點標記被清除。 調試狀態下,在源程序窗口內藍綠色斷點處設置斷點,標記為黃色,再次設置斷點,黃色斷點標記被清除。 調試狀態下,在與源程序斷點關聯的反匯編窗口紅色光帶處設置斷點,在反匯編窗口內清除斷點,同時將源程序斷點標記為白色,再次設置斷點,反匯編窗口標記為紅色光帶,源程序的白色斷點再次標記為黃色。 3.源程序文本上設置斷點 (1)編輯狀態設置斷點 當用戶在編寫源程序的過程中,根據調試需求,可以直接在源程序文本的任何地方設置或清除斷點。如果設置了斷點,將以白色箭頭標記在源程序文本左側的灰色狀態欄內,斷點屬性為預設斷點。對于在源程序文本上設置的斷點,系統退出時全部自動保存。 (2)調試狀態設置斷點 在調試狀態下,可以直接在源程序文本的有效行上設置斷點(當文本左側的灰色狀態欄內出現小圓點時,表示當前程序為有效行)。設置后,斷點以黃色箭頭標記在文本左側的灰色狀態欄內,如果沒有出現小圓點,則不可以設置斷點。在編輯狀態下設置的斷點,經過編譯/匯編,如果預設的斷點編譯后是有效行,則斷點標記為黃色,如果不是有效行,斷點標記為白色。對于在源程序文本上設置的斷點,系統退出時全部自動保存。 4.反匯編窗口內設置斷點 斷點在反匯編窗口內以紅色光帶表示,可以任意設置地址斷點,如果設置的斷點與源程序有效行地址關聯,則與源程序相關聯的地址處設置斷點,在源程序窗口內出現藍綠色箭頭。 如果在源程序斷點相關聯的反匯編窗口紅色光帶處設置斷點,將清除窗口內的斷點光帶,同時將源程序斷點標記為白色,再次設置斷點,反匯編窗口標記為紅色光帶,源程序的白色斷點再次標記為黃色。 5.斷點表 斷點列表通過[斷點|斷點表]激活。斷點表列出所有斷點所處的地址,文件位置及屬性。 在列表框內可以執行添加斷點,刪除斷點等操作。 6.斷點使能 當設置了斷點或使用外部信號斷點時,選擇[斷點|斷點使能]可以允許或禁止相應的斷點。當允許外部信號斷點后,可以設置外部信號的為上升沿或下降沿作用。 2.6 MedWin菜單命令1、文件(F) 新建(N):新建文件,在輸入文件名時必須輸入文件的擴展名。如果是程序文件,匯編語言擴展名必須為(.asm),C語言擴展名必須為(.c) 打開(O):打開用戶程序文件,可以在文件撿取框中選擇,也可以在文件撿取框中直接輸入文件名,當文件名不存在時,系統默認為新建文件。 打開項目文件(P):打開MedWin集成開發環境項目文件,項目文件的擴展名為mpf。打開后,根據需要可以將打開的項目文件添加到項目管理器中。 保存(S) Ctrl+S:保存當前激活的文件。 另存為(A):將當前激活的文件另存為指定的文件。 退出(X):退出MedWin集成開發環境。 2、編輯(E) 撤銷(U): Ctrl+Z:撤消當前的操作。 剪切(T) Ctrl+X:將選擇的塊剪切到剪貼板。 復制(C) Ctrl+C:將選擇的塊復制到剪貼板。 粘帖(P) Ctrl+P:將剪貼板粘貼到文件。 選擇整個文檔(L) Ctrl+A:將整個文檔作為塊。 查找(F) Ctrl+F:在文件中查找字符串。 查擇下一個(D) F3:查找下一個匹配的字符串。 在文件中查找:在被選定的文件范圍內查找字符串。 替換(E) Ctrl+H:替換匹配的字符串。 設置或清除書簽(B) Ctrl+B:在文檔中設置或清除書簽,用于快速定位。 定位到前一個書簽(R) Ctrl+Shift+P:與設置或清除書簽命令配合,定位到前一個書簽。 定位到下一個書簽(X) Ctrl+Shift+N:與設置或清除書簽命令配合,定位到后一個書簽。 清除所有書簽(K):清除所有書簽標記。 定位(G) Ctd+G:定位到指定行或地址。 定位到前一個錯誤(V):將編譯/匯編發生的錯誤與源程序關聯,并定位到前一個錯誤的位置。 定位到后一個錯誤(N):將編譯/匯編發生的錯誤與源程序關聯,并定位到后一個錯誤的位置。 3、查看(V) 寄存器(R):寄存器窗口,顯示80C51內核基本的寄存器R0-R7,A,B,DPH,DPL,SP和PSW,以16進制方式顯示字節寄存器的內容,以位的方式顯示PSW的內容。 特殊功能寄存器(S):當前被選擇的CPU所包含的特殊功能寄存器窗口,以16進制方式顯示字節寄存器的內容。 反匯編窗口(C):反匯編窗口,將程序代碼區的內容以反匯編方式及源程序方式顯示。反匯編窗口同時支持行匯編方式輸入或修改程序代碼。 觀察窗口第一觀察組(1) Ctrl+l:為了方便用戶避免多次添加和刪除需要觀察的變量,設置的第一組觀察窗口。 觀察窗口第二觀察組(2) Ctrl+2:為了方便用戶避免多次添加和刪除需要觀察的變量,設置的第二組觀察窗口。 觀察窗口第三觀察組(3) Ctrl+3:為了方便用戶避免多次添加和刪除需要觀察的變量,設置的第三組觀察窗口。 觀察窗口第四觀察組(4) Ctrl+4:為了方便用戶避免多次添加和刪除需要觀察的變量,設置的第四組觀察窗口。 變量竄口(V):變量窗口。 數據區Idata:片內RAM區域,被MOV @Ri,a或MOV A, @Ri指令間接尋址訪問的數據區。 數據區Data:片內RAM和SFR區域,被直接尋址訪問的數據區。 數據區Cdata:程序代碼空間。 數據區Xdata:外部數據空間。 數據區Bit:片內的位寄存器區域0-127與片內地址為20H-2FH的RAM對應,128-255~SFR相對應。 數據區Pdata:頁面存儲方式下的外部數據空間,使用MOVX @Ri,A或MOVX A, @Ri指令。 跟蹤存儲器(F):跟蹤存儲器窗口,對含有跟蹤存儲器功能的仿真器有效。 波形記錄器(A):波形記錄器窗口,對含有跟蹤存儲器功能的仿真器有效。 性能分析器窗口(W):性能分析器窗口,對含有性能分析器功能的仿真器有效。 消息窗口(M) Ctrl+9:消息窗口,顯示編譯/匯編產生的結果,調試過程中的提示以及在文件中查找的結果。 項目管理器窗口(N) Ctrl+0:項目管理器窗口。 5、調試(R) 開始調試(B) Ctrl+M:切換到調試態,如果已經打開了項目文件,舅U進行產生代碼并裝入操作。 終止調試(D) Ctrl+D:切換到編輯態。 全速運行(R) F9:全速運行,調試態有效。 禁止斷點并全速運行(E) Alt+F9:禁止斷點并全速運行,調試態有效(此命令只對具有跟蹤存儲器功能的仿真器有效)。 跟蹤(T) F7:跟蹤運行程序,在反匯編窗口下執行一條指令,如果當前是調用指令,則進入所調用的子程序;如果在源程序窗口下,執行當前文本下的一條語句,如果是調用則進入所調用的子程序。調試態有效。 單步(S) F8:單步運行程序。反匯編窗口下如是調用指令,則越過所調用的子程序:源程序窗口下,如果是調用語句,則越過所調用的子程序。調試態有效。 運行到光標處(G) F4:程序全速運行到光標處,調試態及源程序文本或反匯編窗口有效。 運行到RETURN指令處(U) Alt+F8:程序全速運行到RET指令處,調試態有效,對于不同的仿真器,此命令功能有所不同。 交互跟蹤(A) Alt+F7:如果當前激活的是程序文本窗口,執行反匯編窗口的跟蹤指令,如果當前激活的是反匯編窗口,執行源程序文本窗口的跟蹤指令,調試態有效。 執行到(E):執行到設定的地址,調試態有效。 設置新的程序計數器(N) Ctrl+N:改變當前的程序計數器值,調試態有效。 自動單步(M):自動以跟蹤的方式運行程序,調試態有效。 設置重復計數器(O):設置重復計數值,與斷點配合使用,調試態有效。 返回監控(I) Ctrl+T:終止運行程序,調試態有效。 程序復位(P) Ctrl+F2:復位仿真器,調試態有效。 顯示到一步執行(X) Ctrl+O:刷新所有窗口,調試態有效。 添加項至觀察窗口(W) Ctrl+W:將光標處的字符或地址作為變量添加到觀察窗口,調試態有效。 6、外圍部件(S) 中斷(I):中斷狀態窗口,包括INT0,INTl,TO,T1,T2和UART中斷狀態以及優先級和允許設置。設置或清除相應的標志,可以改變中斷的狀態,也可以通過相應的值,作為中斷初始化的編程。 端口(T):端口設置窗口,顯示或改變端口的狀態。 定時器/計數器0:定時器/計數器0模式和控制窗口,其TMOD和TCON的值,可以作為定時器0初始化的編程依據。 定時器/計數器1:定時器/計數器1模式和控制窗口,其TMOD和TCON的值,可以作為定時器1初始化的編程依據。 定時器/計數器2:定時器/計數器2模式和控制窗口,其T2CON的值,可以作為定時器2初始化的編程依據。 串行口(S):串行口工作模式和控制窗口,其SMOD和SCON的值,可以作為串行口初始化的編程依據。 7、項目管理(P) 新建項目文件(N):新建項目文件對話框,包含打開已經存在的項目文件、創建一個新項目、新建或打開一個文件以及硬件調試。 打開項目文件(O):打開一個已經存在的項目文件。 關閉當前項目:關閉當前已經打開的項目文件,常用于對單模塊文件或硬件的調試。 保存當前項目(S):保存當前項目文件。 另有為(A):將當前項目文件存為其他項目文件名。 添加文件項(F):在已經打開的項目中添加文件。添加文件的類型有源文件、頭文件、庫文件和其他文件。 移除文件項:在已經打開的項目中刪除文件。 設置向導(W):設置編譯器/匯編器/連接器路徑以及源文件的默認擴展名和C語言的環境變量路徑。 設置工作目錄(D):設置MedWin集成開發環境的工作目錄,建議工作目錄設置在D盤,并且不要使用長文件名。 文仟屬性(I) Ctrl+Enter:對于匯編語言程序只能設置是否需要源文件調試;對于C語言程序,還可以設置存儲器模式等。 連接屬性(L):用于對項目文件的連接控制、段定位、RAM尺寸和頭文件、庫文件路徑的設置。 編譯/匯編(T) Ctrl+F7:根據文件的擴展名,編譯/匯編當前文件。 產生代碼(M):根據文件的編輯修改狀態,確定是否編譯/匯編當前文件之后,對產生的OBJ文件連接。 產生代碼并裝入 (E) Ctrl+F8:根據文件的編輯修改狀態,確定是否編譯/匯編當前文件之后,對產生的OBJ文件連接,再將連接產生的代碼裝載到仿真器。 重新產生全部代碼(U) Ctrl+F9:編譯/匯編項目中所有文件,對產生的OBJ文件連接,再將連接產生的代碼裝載到仿真器。 輸出IntelHEX(H):產生IntelHEX格式文件,默認HEX文件的文件名為項目名。 輸出Binary(B):產生二進制格式文件,默認B|N文件的文件名為項目名。 項目管理器(P) Ctrl+0:激活項目管理器窗口。 9、斷點(B) 斷點(B):斷點列表窗口。 設置或清除斷點(T) F2:在源程序或反匯編窗口中設置/清除斷點。編輯態的文本窗口以及調試態的源文件和反匯編窗口有效。 設置到(A):在指定的地址處設置斷點。 斷點使能(E):地址斷點或外部斷點使能。 禁止所有斷點(D):禁止所有地址斷點。 清除所有斷點(R):清除所有地址斷點。 設置跟蹤存儲器(S):設置跟蹤存儲器狀態 10、設置(O) 設置仿真器(E):設置仿真CPU類型,時鐘和存儲器結構。 程序程序存踏器映像(C):設置程序存儲器映像。 程序數據存踏器映像(O):設置數據存儲器映像。 設置通訊口(T):選擇通訊口參數或進入模擬調試。 設置文本編輯器(S):設置文本編輯器環境參數,如字體、顏色等。 設置向量(W):設置編譯器/匯編器/連接器路徑以及源文件的默認擴展名和C語言的環境變量路徑的設置。 設置工作目錄(D):設置MedWin集成開發環境工作目錄。 啟動向導:選擇進入MedWin集成開發環境啟動向導設置。 11、窗口(W) 拆分(S):拆分文本窗口和存儲器窗口。 工作簿模式(W):窗口顯示模式設定是否使用工作簿模式。 關閉窗口(O) Ctrl+F4:關閉當前激活的窗口。 關閉所有窗D(L):關閉當前所有激活的窗口。 排列圖標(A):排列當前所有激活的窗口。 層疊窗口(C):層疊當前所有激活的窗口。 橫向平鋪窗口(H):橫向平鋪當前所有激活的窗口。 縱向平鋪窗口(V):縱向平鋪當前所有激活的窗口。 刷新所有窗口(R):刷新當前所有激活的窗口和停駐窗口。 12、幫助(H) 關于MedWin(A):關于MedWin對話框中列出了軟件和硬件有關版本信息,以及仿真器產品的注冊。 2.7常見問題
| | | | | | | | | | | | | | | | | | | | | | | | | | | | 譯器和匯編器路徑源程序窗口的左側未出現藍色的調試小圓點,并且執行所有運行操作,均為全速運 行 | | | | | | 使用高版本的匯編器,如Franklin/KeilA51.EXEV4.86或以上版本 | | | | | | | | | | | | | | 開的外部數據窗口或觀察外部數據變量,影響了PO,P2口 | 閉外部數據窗口(XDATA窗口)或觀察外部數據變量 | | | |
| | |
| | | | | |
第三章 單片機最小系統實驗一、單片機最小系統的熟悉一、實驗目的在進行其他實驗之前,先熟悉實驗裝置的核心模塊——單片機最小系統模塊。掌握該實驗模塊的電路原理和接口的使用方法。 1.掌握單片機振蕩器時鐘電路及CPU工作時序;掌握復位狀態及復位電路設計;掌握單片機各引腳功能及通用I/O口的使用;掌握單片機基本指令的使用。 2.掌握MedWin集成開發環境,仿真器和燒錄器等開發工具的使用。 二、實驗設備1.單片機仿真器,燒錄器; 2.單片機最小系統實驗模塊,鍵盤實驗模塊,發光二極管陣列實驗模塊。 三、實驗要求1.連接實驗電路,編寫簡易單片機匯編程序達到下述工作要求:以任意兩個獨立式按鍵作為輸入,當第一鍵按下時,點亮第一行發光二極管;當第二鍵按下時,點亮第二行發光二極管。 2.將編寫的程序調入仿真器中,在MedWin集成開發環境中進行調試; 3.在MedWin中產生機器碼文件,用燒錄器燒錄到單片機芯片中,插在板子上觀察工作情況。 四、實驗原理4.1 AT89C51引腳說明 我們以常用的單片機芯片AT89C51為教學實例,首先對其引腳進行簡要介紹: - P0.0~P0.7:P0口的8位雙向三態I/O口線;
- P1.0~P1.7:P1口的8位準雙向口線;
- P2.0~P2.7:P2口的8位準雙向口線;
- P3.0~P3.7:P3口的8位具有雙重功能的準雙向口線;
- ALE:地址鎖存控制信號。
- /PSEN:外部程序存儲器讀選通信號,讀外部ROM時PSEN低電平有效。
- /EA:訪問程序存儲器控制信號,當EA為低電平時,對ROM的讀操作限制在外部程序存儲器;當EA為高電平時,則對ROM的讀操作是從內部程序存儲器開始,并可延至外部程序存儲器。
- RST 復位信號,復位信號延續2個機器周期以上高電平時即為有效,用以完成單片機的復位初始化操作。
- XTAL1 和 XTAL2 外接晶體引線端,當使用芯片內部時鐘時,此二引線端用于外接石英晶體和微調電容;當使用外部時鐘時,XTAL1接地,XTAL2用于接外部時鐘振蕩器信號。
- Vss 地線。
Vcc +5V電源。
圖1-1 AT89C51引腳圖及邏輯符號圖 P3口線的第二功能見表1-1,這些特殊功能我們將在以后的實驗中進行學習。 表1-1 P3口線的第二功能
4.2 振蕩電路、時鐘電路和CPU時序 (1)振蕩電路、時鐘電路。如圖1- 2所示,外部時鐘振蕩電路由晶體振蕩器和電容C1、C2構成并聯諧振電路,連接在XTAL1、XTAL2腳兩端。對外部C1、C2的取值雖然沒有嚴格的要求,但電容的大小會影響到振蕩器頻率的高低、振蕩器的穩定性、起振的快速性。C1、C2通常取值C1=C2=30PF左右;8051的晶振最高振蕩頻率為12M,AT89C51-24PC的外部晶振最高頻率可到24M。在單片機最小系統板上已經提供了晶振電路,在使用該電路時,應加上跳線帽,并插入合適的晶振。 圖1-2 片內振蕩器等效電路和外接元件 AT89C51也可以采用外部時鐘方式,外部時鐘從XTAL2腳輸入,XTAL1腳接地。可以采用我們板子上提供的外部時鐘源作為單片機外部時鐘輸入。 (2)CPU時序 晶振(或外部時鐘)的振蕩頻率的確定,就確定了CPU的工作時序。這里介紹幾個重要的時序概念,我們在以后的實驗中還會經常涉及到: ◇ 振蕩周期:或者稱時鐘周期,是指為單片機提供定時信號的振蕩器的周期。 ◇ 機器周期:在8051單片機中,一個機器周期由12個振蕩周期組成。 ◇ 指令周期:是指執行一條指令所占用的全部時間。一個指令周期通常含有1~4個機器周期。機器周期和指令周期是兩個很重要的衡量單片機工作速度的值。 若外接12MHz晶振時,8051的三個周期的值為: 振蕩周期=1/12us; 機器周期=1us; 指令周期=1~4us。 在一些應用中,傳統的8051的速度顯得有些慢,因此,當前很多采用8051內核的新型單片機采用了加速處理器結構,使機器周期提高到振蕩周期的6倍、4倍等等,RISC(精簡指令集)的采用,更讓單片機在單個時鐘周期完成一條指令,使得單片機在處理速度上得到大大提高。
4.3 復位狀態和復位電路設計 (1)復位狀態 在8051單片機中,只要在單片機的RST引腳上出現2個機器周期以上的高電平,單片機就實現了復位。單片機在復位后,從0000H地址開始執行指令。復位以后單片機的P0~P3口輸出高電平,且處于輸入狀態,SP(堆棧寄存器棧頂指針)的值為07H(因此,往往需要重新賦值,其余特殊功能寄存器和PC(程序計數器)都被清為0。復位不影響內部RAM的狀態。 (2)復位電路 單片機可靠地復位是保證單片機正常運行的關鍵因素。因此,在設計復位電路時,通常要使RST引腳保持10ms以上的高電平。當RST從高電平變為低電平之后,單片機就從0000H地址開始執行程序。 8051單片機通常都采用上電自動復位和開關復位兩種方式。實際使用中,有些外圍芯片也需要復位,如8255等。這些復位端的復位電平要求與單片機的復位要求一致時,可以把它們連起來。 在最小系統板上,提供了一個通用的復位電路,在使用該板之前,必須將該電路與單片機連接起來。另外,還可以采用主板上的微處理器監控模塊來控制復位腳,以便更加可靠地管理單片機的工作。
4.4 存儲器、特殊功能寄存器及位地址 51單片機的存儲器包括5個部分:程序存儲器、內部數據存儲器、特殊功能寄存器、位地址空間、外部數據存儲器。位地址空間、特殊功能寄存器包括在內部數據存儲器內。 51單片機的內部數據存儲器一般只有128字節或256字節,當空間不夠用時也就需要擴展外部數據存儲器(參見實驗五)。有些單片機不具有內部程序存儲器,例如8031,這時就需要擴展外部程序存儲器。在單片機系統中,程序存儲器和外部數據存儲器的編址獨立,各可尋址64K字節空間。兩者在電路上,可以通過PSEN信號線和RD信號線區別開來。 特殊功能寄存器是非常重要的部分,我們通過對特殊功能寄存器的設置和讀寫來完成單片機的大部分工作。限于篇幅,這里不對其內容進行羅列,請查閱有關書籍。
4.5 51系列單片機內部資源概覽表
以上列出的是Intel8051、8051的主要資源配置。現在,由于8位51單片機的廣泛使用,各個芯片生產廠商推出了具有自身特色的采用51內核的單片機,它們在這些基本資源的基礎上進行了進一步的裁減或增強。 五、實驗步驟1、連接單片機與復位電路、時鐘源(晶振電路或外部時鐘源),選擇幾組I/O口,用導線分別連接發光二極管陣列、及鍵盤。以下對涉及到的其他實驗模塊進行簡要介紹: (1)發光二極管陣列模塊:  如左圖所示,每行為8個發光二極管,共4行。每行與底部的8針排線座相對應。第一行發光二極管與從左數第一個插座對應,第二行發光二極管與左數第二個插座對應……。插座的每個引腳與發光管陰極相連,也就是說,當對應腳為低電平時,發光二極管點亮。
(2)鍵盤陣列模塊:鍵盤模塊是“獨立式”和“矩陣式”兩用鍵盤。使用之前,必須連接鍵盤模塊右下角的VCC和GND,為模塊提供電源。模塊右邊的S0~S15鎖緊孔,是獨立式鍵盤接口,分別對應著鍵S0~S15。當某個鍵按下時,對應的接口將被拉低。 電路示例如下:
圖1-3 電路原理圖示例 2、實驗示例程序: 假設P3.1,P3.2口分別連接兩個鍵,P0口連接第一行發光二極管,P1口連接第二行發光二極管,參看電路圖1-3。程序實例如下: 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 ;點亮第一行發光二極管 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集成開發環境中編寫單片機程序,步驟如下:點擊【文件】菜單,建立新項目(PROJECT),項目命名如 當前文件夾\XXX.prj;建立新文件,命名為XXX.asm;這時就可在文本編輯區輸入程序代碼了。程序編寫完成后(參考示例程序),點擊【項目管理】菜單下【編譯/匯編】項,進行程序編譯,如果程序有錯誤則系統通過調試項提示。排除所有的錯誤,直到編譯完全成功。 3、正確連接仿真器與PC機、仿真頭與目標板、仿真器電源。正確連接目標板電源。點擊【項目管理】菜單下產生并生成代碼項,程序被裝入仿真器,點擊調試菜單下【全速運行】選項,程序運行,觀察程序運行結果。在【項目管理】菜單下點擊【輸出Intel Hex文件】或【輸出binary文件】,輸出機器代碼文件。 4、正確連接燒錄器和PC機、燒錄器電源。取單片機芯片,放入燒片機芯片座(注意放置位置),夾緊;打開燒錄器驅動軟件,點擊【器件】菜單下選擇器件項,選擇正確的芯片型號。點擊【文件】菜單下打開項,輸入剛才生成.hex或.bin文件的路徑,點擊打開,文件被下載到燒錄器。點擊【器件】菜單下【運行】項,分別運行erase, blank check, program,verify(或在確定Auto中內容后,運行Auto)。成功后程序便固化到單片機中了。 5、除去目標板電源,將單片機取下,插入目標板插座中,注意對齊1腳。正確連接目標板電源。觀察程序運行情況。 六、實驗報告1、說明單片機的各個引腳的功能及作用,比較P0,P3腳的異同? 2、時鐘周期、機器周期的關系是什么?在單片機外部晶振為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、進行完該項實驗后,你對單片機的開發工具和開發過程了解了嗎?請畫出單片機開發過程流程圖。
第四章 實驗指導實驗一 多字節、多進制加減運算實驗一、實驗目的- 學習多字節壓縮BCD碼加減運算的程序設計;
- 學習單字節有符號數加減運算的程序設計。
二、實驗要求1.編寫通用4字節壓縮BCD碼的加、減法運算程序; 2.編寫通用單字節有符號二進制數加、減法運算程序; 三、實驗原理對于簡單的8位加減可以直接調用指令就可以了。例如加法可以使用指令ADD以及帶進位加ADDC,但單字節加減法只能在256之內進行運算;在實際應用中經常需要進行多字節運算,從而處理更大的數據。該實驗介紹單片機BCD碼多字節加、減運算通用程序的設計。 1.多字節無符號壓縮BCD碼加法運算 假設多字節無符號被加數的最低字節的地址為R0,加數的最低字節地址為R1,字節數共為len;計算結果的地址于被加數相同。 ◆ 入口參數: R0:被加數地址指針; R1:加數地址指針; len:字節數。 ◆ 出口參數: @R0:計算結果; rLen:計算結果字節數。
◆ 使用資源:ACC,R0、R1,內部RAM單元len、rlen及存放被加數、加數、計算結果的內存單元。 示例程序如下: len DATA 70H rlen DATA 71H
ADDSTART: PUSH PSW ;保護標志寄存器內容 CLR C ;進位位清0 MOV rlen,#00H ;和的字節數先清0 LOOP: MOV A,@R0 ;取被加數 ADDC A,@R1 ;求和 DA A ;十進制調整 MOV @R0,A ;保存 INC R0 ;地址增1 INC R1 INC rlen ;字節數增1 DJNZ len,LOOP ;所有字節未加完繼續,否則向下執行 JNC ADDEND ;和的最高字節無進位轉ADD20 MOV @R0,#01H ;和的最高字節地址內容為01H INC rlen ADDEND: POP PSW RET END
多字節加法運算一般是按從低字節到高字節的順序進行的,所以必須考慮低字節向高字節的進位情況,被加數和加數的壓縮BCD碼,最大不超過99,而99+99+1(進位)=199,此時可以不需要使用ADDC指令,但當最低兩字節相加后,必須使用“DA A”進行十進制調整,調整后產生進位。而最高兩字節相加后應考慮是否有進位。若有進位,應向和的最高位字節地址寫入01H,這時和數將比加數或被加數多出一個字節。 2.多字節無符號壓縮BCD碼減法運算 為了使用“DA A”指令對十進制減法進行調整,必須采用對減數求補相加的方法,以9AH為模減去減數即得到減數的補數。設被減數低字節地址在R1中,減數低字節地址在R0中,字節數在len中;差的低字節地址在R0中,差的字節數在rlen中。 R0:減數地址指針; R1:被減數地址指針; len:字節數 R0:差的地址指針 rlen:差的字節數 范例程序如下: SUBSTART:MOV rlen,#00H ;差字節單元清0 CLR 07H ;07H做符號位標準,符號位清0 CLR C ;借位位清0 SUB1: MOV A,#9AH ;減數對模100求補 SUBB A,@R0 ADD A,@R1 ;補碼相加 DA A MOV @R0,A ;存結果 INC R0 INC R1 1NC rlen CPL C ;進位求反以形成正確借位 DJNZ len,SUBl ;未減完繼續,減完向下執行 JNC SUB2 ;無借位去別Ⅸm返回主程序,否則繼續 SETB 07H ;有借位,置“1”符號位 SUB2: RET END 程序中對減數求補后與被減數相加,用“DA A”指令進行調整。若二者相加調整后結果無進位(C=0),則表示二者相減有借位;若二者相加調整后有進位(C;1),則表示二者相減無借位。所以必須對進位標志位C進行求反操作,才能得到正確結果。 3.單字節帶符號數加法運算(選做) 編程范例: 兩個8位二進制帶符號數加法,被加數和加數分別存于BLK和BLK+1單元,和超過8位要占兩個單元,設為SUM和SUM+1單元。 解:兩個帶符號數的加法是作為補碼加法處理的。由于和超過8位,因此,和就是一個16位帶符號數,符號位在16位數的最高位。為此,直接相加進位是不夠的,還要做一些處理。例如-65和-65相加,若直接求和產生溢出,即使擴展到16位,結果也不正確。如: -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 現在這個16位數的最高位為0,兩個負數相加變為正數,顯然是錯誤的。 處理的方法是先將8位帶符號數擴展成16位帶符號數,然后再相加。若是8位正數,則高8位擴展為00H;若是8位負數,則高8位擴展為0FFH。這樣處理后,再按雙字節相加,就可以得到正確的結果。如上例,由于是負數,高8位應是全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,結果正確。 在編程時,判別加數和被加數的符號位,再決定是否要將高8位改為0FFH。 程序如下: BLK DATA 30H SUM DATA 40H
MOV R0,#BLK ;R0指向被加數 MOV R1,#SUM ;R1指向和 MOV R2,#0 ;高8位先設為0 MOV R3,#0 MOV A,@R0 ;取出被加數 JNB ACC.7,N1 ;若是正數轉移到N1 MOV R2,#0FFH ;若是負數高8位為全1 N1:INC R0 ;修改即指針 MOV B,@R0 ;取加數到B JNB B.7,N2 ;若是正數轉移N2 MOV R3,#0FFH ;若是負數高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.在開發環境中運行程序,對通用寄存器進行賦值,看運算結果是否正確。 五、實驗報告1.給出各個程序的清單,要求有注釋。 2.分析DA A指令的作用。 - 給出實驗參數及實驗結果,要求對實驗現象和結果進行分析。
實驗二、中斷實驗――中斷優先級控制及中斷保護一、實驗目的1、掌握單片機中斷機制。 2、熟悉中斷的應用和編程。 二、實驗設備- 仿真器;
- 單片機最小系統;
- 發光二極管陣列顯示模塊;
- 獨立式鍵盤模塊。
三、實驗要求連接單片機最小系統和發光二極管陣列的電路并編寫程序,學習單片機中斷機制,及中斷優先級和中斷保護的方法: 使用獨立式按鍵1連接  (P3.2),按鍵2連接  (P3.3),在平時狀態下,發光二極管行以200ms的時間間隔,依次點亮。1鍵按下時  中斷處理程序點亮P0.0對應的發光管2秒鐘,其他發光管熄滅;2鍵按下時P0.1對應發光管點亮2秒,其他發光管熄滅。 四、實驗原理通常一個微處理器讀取外圍設備(如鍵盤等)的輸入信息的方法有輪詢(Polling)及中斷(Interrupt)兩種。輪詢的方法是CPU依照某種既定法則,依序詢問每一外圍設備I/O是否需要服務,此種方法CPU需花費一些時間來做詢問服務,當I/O設備增加時,詢問服務時間也相對增加,勢必浪費許多CPU時間,降低整體運行的效率。使用中斷是一個較好的解決方法。使用中斷使系統對外部設備的請求響應更加靈敏,并且不需要占用CPU的時間進行輪詢。但是,當使用中斷,特別是有多個中斷嵌套時要特別注意內存單元的保護。 當中斷發生后,程序將跳至對應中斷入口地址去執行中斷子程序,或稱中斷服務程序(Interrupt Service Routine),這些特殊的地址稱為中斷向量,例如當80C51外部中斷INTl發生時,會暫停主程序的執行,跳至地址0013H去執行中斷服務程序,直到RETI指令后,才返回主程序繼續執行。MCS-51系列的程序內存中有7個矢量地址,敘述如下: (1)00H復位 當第9腳RESET為高電平,CPU會跳至地址00H處開始執行程序,亦即程序一定要從地址00H開始寫起。 (2)03H(外部中斷0) 當 引腳由高電位變至低電位(跳沿觸發方式)或采樣到是低電位(電平觸發方式)時,CPU會接受外部中斷0,并跳至地址03H處去執行中斷子程序。 (3)0BH(定時器/計數器0中斷) 當CPU接受定時器/計數器0中斷置位而產生中斷要求時,會跳至地址0BH處去執行中斷子程序。 (4)13H(外部中斷1) 當 引腳由高電位變至低電位(跳沿觸發方式)或采樣到是低電位(電平觸發方式)時,CPU會接受外部中斷1,并跳至地址13H處去執行中斷子程序。 (5)1BH(定時器/計數器1中斷) 當CPU接受定時器/計數器1中斷置位而產生中斷要求時,會跳至地址1BH刻去執行中斷子程序。 (6)23H(串行中斷1) 當串行端口傳送數據或接收數據完畢時,CPU會接受串行中斷,并跳至地址23H處去執行中斷子程序。 (7)2BH(定時器/計數器2中斷) 此中斷僅8052系列才有。當CPU接受定時器/計數器2產生中斷要求時,會跳至地址2BH處去執行中斷子程序。
圖2.1 MCU內部中斷機制
2.中斷使能位 8051針對中斷提供兩層使能,第一層為EA全局使能控制,第二層為分別控制EX0,ET0、EXl、ETl、ES、ET2。當8051在復位狀態時,寄存器的各個中斷使能位都預設為“0”,即所有中斷都禁止,故欲允許中斷時,應先使能相對應的中斷。當中斷產生后,中斷狀態會記錄于定時器/計數器控制寄存器(Timer/CounterControlRigister,TCON)和串口口控制寄存器SCON的中斷請求標志(InterruptRequest flag)中,當標志被置位,表示中斷已發生。由圖2.1可知,當外部中斷或定時器0、定時器1中斷發生時,CPU都可以判別是哪種中斷。因此當這四個中斷發生時,中斷服務程序被執行后,CPU會主動清除中斷請求標志,對于其他的中斷,由于CPU無法判別,因此中斷請求標志需由程序指令來清除。 欲設定中斷使能與否,必須設置中斷使能寄存器IE(Interrupt Enable Register),其位地址A8H,是一個可位尋址的寄存器。
3.中斷保護 由于各個中斷入口間僅有8個字節,一般情況下難以安排下一個完整的中斷服務程序。因此,通常總是在重點入口地址處放置一條無條件轉移指令,使程序轉向在其他地址存放的中斷服務程序。當執行新的中斷服務程序時,注意不可以破壞舊有的數據和狀態,因此在編寫時還要注意保護現場,主要是各個寄存器的值。通常會被更改的數據(如ACC、PSW等),可以利用堆棧在執行中斷服務程序之前就將其PUSH起來,待執行結束后再將相關寄存器POP即可。另外,因為8051可任意選擇四個工作寄存器區中的一組工作寄存器,所以利用選擇不同寄存器區的方式亦可達到數據保存的目的。
4.中斷優先級 8051對于各種中斷優先權采用雙層結構,首先對于優先權可由中斷優先權寄存器(Interrupt Priority )IP設定該中斷為高優先權或低優先權,高優先權可以中斷低優先權,反之不行。當同一時間同一級別的多個中斷請求是,則按自然優先級順序相應中斷。
IP寄存器:
(MSB) (LSB) PX0,PX1:外部中斷0,1的中斷優先級控制;1->高優先級,0->低優先級。 PT0,PT1:定時器/計數器0,1的中斷優先級控制; PS:串行口中斷優先級控制。 IP中對應位全為零時,CPU按照片自然優先級來順序響應中斷: 中斷源 外部中斷0 高定時器/計數器0 外部中斷1 定時器/計數器1 串行口中斷 低
五、實驗步驟本實驗將練習使用 , 的中斷,利用按鍵來觸發外部中斷的發生。并通過兩個中斷先后到達的方法,來學習中斷優先級的意義與控制。 1、電路說明 在圖2.2中,主程序執行時,單片機端口P0所接的LED由P0.7至P0.0一次一顆循環點亮。當外部中斷0產生后,執行該中斷子程序,此時P0.0對應的二極管亮,其他二極管熄滅。2秒鐘后,返回主程序的工作。 中斷子程序則為點亮P0.1對應的二極管,其他二極管熄滅。注意,由于每次在按鍵按下或放開可能會有抖動現象,因而必須進行必要的處理,以免產生二次以上的相同中斷信號。 在程序主循環進行時,當1鍵按下,相應發光管點亮后,立即再按下2鍵,看反應如何;在程序主循環進行時,按下2鍵,相應發光管點亮后,立即按下1鍵,觀察反應。 電路連線如圖2.2:
1
2
圖2.2 實驗電路參考 2.程序設計 先按l鍵執行 中斷子程序,在此中斷子程序未結束前再按2鍵,或是先按2鍵執行 中斷子程序,在此中斷子程序未結束前再按l鍵,或兩者同時按,觀察lED亮暗的情形即可觀察中斷優先權執行的情形。 程序范例 ;******************************************************************************
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 ;設INT0、INTl跳沿觸發。 MOV IP,#01H ;外部中斷0優先 MOV A,#0FEH LOOP: RR A MOV P0,A ACALL DELAY200MS AJMP LOOP
;*****************INT0中斷服務程序***************************** INT0INT: CLR EA ACALL DELAY10MS ;去抖動 JNB INT0, HAVKEY1 ;確實有鍵,轉HAVEKEY1 SETB EA RETI HAVEKEY1: PUSH PSW PUSH Acc SETB EA MOV P0,#0FEH ACALL DELAY2S ;亮2秒鐘 POP Acc POP PSW RETI
;************INT1中斷服務程序****************************** INT1INT: (…………) RETI ;******************************************************** DELAY200MS: ;延時200ms子程序 (…………) RET DELAY10MS: ;延時10ms子程序 (…………) RET DELAY2S: ;延時2s子程序 (………….) RET END
程序范例中用“(………)”表示的程序段需學生自己編寫。 運行整個程序,觀察是否符合理論分析的結果。 六、實驗報告- 畫出電路原理圖,并簡要分析工作原理;
- 提供程序流程圖和程序清單,適當給出注釋;
- 描述實驗現象和結果,要求對實驗現象和結果進行分析。
實驗三、定時器實驗――低頻脈沖計數器一、實驗目的1、掌握定時器/計數器的工作原理。 2、學習單片機定時器/計數器的應用設計和調試。 二、實驗設備1、仿真器; 2、單片機最小系統; 3、波形信號發生器; 4、靜態串行方式數碼管顯示模塊。 三、實驗要求連接電路并編寫程序,使單片機定時器/計數器測量波形信號發生器輸出的低頻脈沖信號的頻率,并在數碼管上顯示頻率值; 四、實驗原理805l單片機內部有兩個16位可編程定時/計數器,記為T0和Tl。8052單片機內除了T0和T1之外,還有第三個16位的定時器/計數器,記為T2。它們的工作方式可以由指令編程來設定,或作定時器用,或作外部脈沖計數器用。 定時器T0由特殊功能寄存器TL0和TH0組成,定時器Tl由特殊功能寄存器TLl和TH1組成。定時器的工作方式由特殊功能寄存器TMOD編程決定,定時器的運行控制由特殊功能寄存器TCON編程控制。 T0、T1在作為定時器時,規定的定時時間到達,即產生一個定時器中斷,CPU轉向中斷處理程序,從而完成某種定時控制功能。T0、T1用作計數器使用時也可以申請中斷。作定時器使用時,時鐘由單片機內部系統時鐘提供;作計數器使用時,外部計數脈沖由P3口的P3.4(或P3.5)即T0(或T1)引腳輸入。 方式控制寄存器TMOD的控制字格式如下: \_____________T1_________________/ \_______________T0_________________/ 低4位為T0的控制字,高4位為T1的控制字。GATE為門控位,對定時器/計數器的啟動起輔助控制作用。GATE=l時,定時器/計數器的計數受外部引腳輸入電平的控制。由由運行控制位TRX(X=0,1)=1和外中斷引腳( 或 )上的高電平共同來啟動定時器/計數器運行;GATE=0時。定時器/計數器的運行不受外部輸入引腳的控制,僅由TRX(X=0,1)=1來啟動定時器/計數器運行。 C/-T為方式選擇位。C/-T=0為定時器方式,采用單片機內部振蕩脈沖的12分頻信號作為時鐘計時脈沖,若采用12MHz的振蕩器,則定時器的計數頻率為1MHZ,從定時器的計數值便可求得定時的時間。 C/-T=1為計數器方式。采用外部引腳(T0為P3.4,Tl為P3.5)的輸入脈沖作為計數脈沖,當T0(或T1)輸入信號發生從高到低的負跳變時,計數器加1。最高計數頻率為單片機時鐘頻率的1/24。 M1、M0二位的狀態確定了定時器的工作方式,詳見表3.1。 表3.1定時器工作模式表:
方式1與方式2的差別是計數器的位數,前者13位,后者16位。定時器內部結構邏輯圖如圖3.1所示。
圖3.1 定時器內部邏輯圖
要測量低頻信號可以首先產生一個標準時間T閘門信號,然后在該時間內計算進入計數器的脈沖個數。這個時間有時太短,需結合軟件定時。如果要求比較高,則需要進行智能地調整T。例如對于500HZ信號,使用65ms閘門時間,則計數器值就非常少。計數器的值超過10000個,才能保證精度不少于0.05%。如果在3秒內還是發現計數器的值少于精度需要,則自動切換到周期測量模式,通過周期計算頻率具有較高的精度。如果要求3秒內給出結果,則周期超過3秒的信號就無法得到準確的頻率或周期。 五、實驗步驟1.電路連接 參考以下電路示意圖連接電路:
圖3.2 低頻脈沖信號測量參考電路示意圖 2.軟件編寫 示例程序如下: ORG 0000H LJMP MAIN (______________) LJMP INTS_T0
;***********************主程序************************************** ORG 0030H MAIN: MOV SP,#40H MOV TMOD,(___) ;兩個定時器都是方式1,定時器1對外部信號計數 MOV TL0,#0AFH MOV TH0,#3CH ;0FFFFH-3CAFH=50000,50ms MOV B,#20 ;軟件計數器。循環20次,T0共定時20×50ms=1s MOV TL1,#0H MOV TH1,#0H (____________) ;允許T0中斷 (____________) ;禁止T1中斷 SETB EA SETB TR0 SETB TR1 SJMP $
;******************T0定時1s的中斷服務程序**************************** INTS_T0: CLR EA ;關中斷 DJNZ B,CONTINUE ;1s定時到,把T0、T1都關掉,計算1s鐘內T1的計數脈沖有多少
CLR TR1 CLR TR0 MOV R0,#30H MOV @R0,TL1 ;獲取數據。先低后高 INC R0 MOV @R0,TH1; ACALL NDIV1 ;16位調整為五個十進制數
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余數*********** ;********NDIV1子程序:把0~FFFFH,轉換成五個十進制數************************** 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 ;低位余數 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 ;低位余數 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 ;低位余數 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 ;低位余數 JC L1 ;不超過10 INC R2 MOV 30H,R3 JMP L10A L1: MOV 33H,R2 MOV 32H,30H RET
;******************顯示子程序*********************************** SHOW: MOV SCON,#00H ;設定串行工作模式為0 MOV R1,#05H ;數碼管顯示的位數5位 MOV DPTR,#TAB LOOP: MOV A,@R0 MOVC A,@A+DPTR ;取出字型碼 MOV SBUF,A ;發送 WAIT: JNB TI,WAIT ;等待一幀發送完畢 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
在(____)中填上合適的語句,運行程序,使用信號發生器發生不同頻率的信號,并紀錄測量的值。 六、實驗報告- 畫出電路原理圖。
- 給出程序流程圖和程序清單、并給予適當注釋。
- 描述實驗現象和結果,要求對實驗現象和結果進行分析。
- 本實驗中,頻率測量的有效范圍是多少?
實驗四、雙機串行通訊實驗一、實驗目的該實驗需要兩套MPC100B配合完成。 1.掌握單片機串行口工作方式; 2.掌握雙機通訊的接口電路設計及程序設計。 二、實驗設備1.仿真器; 2.單片機最小系統教學實驗模塊; 3.外部數據存儲器模塊; 三、實驗要求由兩套單片機試驗裝置(兩個實驗小組)共同完成該實驗。我們稱裝置1為甲機,裝置2為乙機。甲機發送一個字節的呼叫信號給乙機,乙機正確地收到該呼叫信號后,返回一個字節的應答信號。當甲機收到正確的應答信號后,再發送規定格式的數據幀。數據幀必須包括以下內容: 數據長度(1字節)+ 數據(n字節)+ 校驗和(1字節) 乙機收到完整的數據幀后,發送一個表明接收正確或錯誤的應答字節。 要求每個字節的發送幀格式為:起始位(1bit)+數據位(8bit)+停止位(1bit)。 要求通訊波特率為4800bps,而以上各信號和數據幀的具體數據內容,可以自行規定。 四、實驗原理4.1 串行通訊的方式 在串行通訊中,有兩種基本的通訊方式:異步通訊,同步通訊。 異步串行通訊規定了字符數據的傳送格式,既每個數據以相同的幀格式發送。每個幀信息由起始位、數據位、奇偶校驗位和停止位組成。本實驗主要學習異步通訊的實現方法。 在異步通訊中,每一個字符要用起始位和停止位作為字符開始和結束的標志,以至占用了時間。所以在數據塊傳送時,為了提高通訊速度,常去掉這些標志,而采用同步通訊。同步通訊不像異步通訊那樣,靠起始位在每個字符數據開始時發送和接受同步。而是通過同步字符在每個數據塊傳送開始時使收/發雙方同步。 按照通訊方式,又可將數據傳輸線路分成三種:單工方式、半雙工方式、全雙工方式。 (1)單工方式 在單工方式下,通訊線的一端聯接發送器,另一端聯接接收器,它們形成單向聯接,只允許數據按照一個固定的方向傳送。 (2)半雙工方式 在半雙工方式下,系統中的每個通訊設備都由一個發送器和一個接收器組成,通過收發開關接到通訊線路上,如圖所示。在這種方式中,數據能從A站送到B站,也能從B站傳送到A站,但是不能同時在二個方向上傳送,即每次只能一個站發送,另一個站接收。如圖4.1所示。 圖4.1 半雙工通訊
圖4.1中的收發開關并不是實際的物理開關,而是由軟件控制的電子開關,由通訊線兩端的半雙工通訊協議進行功能切換。 (3)全雙工(Full—duplex)方式 雖然半雙工方式比單工方式靈活,但它的效率依然較低。從發送方式切換到接收方式所需的時間一般大約為數毫秒,這么長的時間延遲在對時間較敏感的交互式應用(例如遠程檢測監視控制系統)中是無法容忍的。重復線路切換所引起的延遲積累,正是半雙工通信協議效率不高的主要原因。 半雙工通訊的這種缺點是可以避免的,而且方法很簡單,即采用信道劃分技術。在下圖的全雙工連接中,不是交替發送和接收,而是可同時發送和接收。全雙工通訊系統的每一端都包含發送器和接收器,數據可同時在兩個方向上傳送。如圖4.2所示。 圖4.2 全雙工通訊
4.2單片機串行口工作方式 在定時器實驗中,我們熟悉了單片機串口工作方式0;單片機串口還具有有3種工作方式。如下表所示: 這3種工作方式,均用于串行異步通訊。在異步串行通訊的一個字節的傳送中,必須包括了起始位(0)和停止位(1)。除此之外,方式1具有8位(1個字節)的數據位(低位在先),方式2、3則除這8位之外,還具有一個可編程的第9位,這個第9位編程通常被編程為奇偶校驗位。 串口工作方式在特殊寄存器SCON中設置。 (MSB) (LSB) 其中的SM0和SM1位確定了串口工作方式。要使通訊雙方能夠通訊成功,必須具有相同的串口工作模式;REN為允許接收位,本實驗中因為雙方都要進行接收,因此REN也都應設為1。TB8和RB8這里暫不涉及。利用以下語句來設置SCON: MOV SCON,#50H 4.3 波特率的設置 在異步串口通訊中,一個很重要的工作就是進行串口波特率的設置。波特率是指串口通訊中每秒傳送的位數,單位為bps,它反映了串行口通訊的速度;同時,通訊雙方的速度必須一致,才能夠順利進行通訊。 在串口工作方式1、3中,傳送波特率都是可變的。單片機內部通過定時器T1來提供發送與接收緩存器的內部移位時鐘。也就是說,要確定串行通訊的波特率,必須對T1進行相關設置。51單片機系統對此時T1的設置有以下固定的規定: - 必須工作在定時器狀態;
- 必須工作在“8位自動重載”工作模式;
這必須在特殊寄存器TMOD中進行設置。可以利用以下語句來設置TMOD: MOV TMOD,#20H 除了對TMOD的設置外,還必須設置定時器T1的初值,也就是保存在TH1中的8位重載值。這直接影響到波特率的大小: 它通過以下公式進行計算: 其中的SMOD為特殊寄存器PCON的最高位。當它置1時,可以將波特率增大1倍。 在雙機通訊中,只要雙方的波特率一致就能夠完成通訊了;但是,在標準的異步通訊協議中,只有幾種波特率是適用的。例如1200bps,2400bps,4800bps,9600bps……等等。 而通過這個公式可以看出,并不是所有的晶振頻率都能夠得到準確的上述波特率。比如采用12MHz晶振,代入公式進行運算,就無法得到4800bps的準確波特率(TH1必須為小數了)。在這種情況下,過去人們都使用軟件補償的方法,盡量得到準確的波特率;而現在,市場上有很多通訊專用的晶振,例如3.6864MHz、11.0592MHz……的晶振,都能夠直接得到準確的波特率。因此在進行本實驗時,必須使用通訊專用晶振(如果使用仿真器,則設置為使用仿真頭的外接晶振,并將11.0592M的晶振插入仿真頭。) 當波特率已經確定,就可以反向推導出TH1的取值。例如,在本次實驗中,我們要求波特率為4800bps,在晶振采用11.0592MHz的情況下,推出TH1=0F4H。 使用以下語句設置初值: MOV TH1,#0F4H MOV TL1,#0F4H 4.4 雙機通訊接口設計 (1)通訊接口設計 在本次實驗中,主要討論單片機系統之間的異步串行通訊的實現。 51單片機具有1個“全雙工”的串行口,主要因為單片機內部有獨立的發送器(1字節緩存)和接收器(1字節緩存)。但由于串口緩存太少,只有1字節,在相互傳送大量數據時,軟件上實際采用的還是半雙工的工作方式。 如果兩個51單片機應用系統相距很近,可以將它們的串行口用導線直接連起來,就構成了雙機通訊,請注意兩個單片機系統要“共地”。如圖4.3所示。
圖4.3 串行通訊電路示意圖
(2)查詢方式雙機通訊軟件設計 為確保通訊成功,通訊雙方必須在軟件上有一系列的約定,通常稱為軟件“協議”。本例規定的軟件“協議”如下: 通訊雙方均采用4800bps波特率進行傳送(系統時鐘頻率為11.0592MHz),甲機發送數據,乙機接收數據。雙機開始通訊時,甲機發送一個呼叫信號“06H”,詢問乙機是否可以接收數據;乙機收到呼叫信號后,若同意接收數據則發回“00H”作為應答,否則發“15H”表示暫不能接收數據,甲機只有收到乙機的應答信號“00H”后才可把存放在外部數據存儲器的字節內容發送給乙機,否則繼續向乙機呼叫,直到乙機同意接收。呼叫成功后甲機依次發送長度字節(1字節)、數據字節(n字節)和校驗和字節(1字節),其中校驗和為長度字節和數據字節的“累加和”。乙機在成功收到甲機的數據之后,發送“0FH”作為成功應答,否則發送“F0H”作為失敗應答。
◆ 甲機發送程序約定: (1)基本設置 波特率設置初始化:定時器T1模式2工作,計數常數0F4H; PCON的SMOD=1; 串行口初始化:方式1工作,允許接收; 內部RAM和工作寄存器設置:31H和30H存放發送的數據塊首址;2FH存放發送的數據塊長度; R6為校驗和寄存器。 (2)程序流程圖及程序清單 如圖4.4所示。 圖4.4發送程序流程圖
圖4.5接收程序流程圖甲機發送程序清單: ORG 0000H AJMP FMT_T_S ORG 0030H FMT_T_S: MOV TMOD,(______) ;波特率設置 MOV TH1,#0F4H MOV TL1,0F4H SETB TRl MOV SCON,(______) ;串行口初始化 MOV PCON,#80H ;置SMOD=1 FMT_RAM: MOV R0,#30H ;設置R0指針 MOV R7,2FH ;送字節數至R7 MOV R6,#00H ;清累加和寄存器 TX_ACK: MOV A,#06H ;發呼叫信號“06” MOV SBUF,A WAITl: JBC TI,RX_YES ;等待發送完一個字節 SJMP WAITl RX_YES: JBC RI,NEXTl ;接收乙機回答 SJMP RX_YES NEXTl: MOV A,SBUF ;判斷乙機是否同意接收,不同意就繼續呼 CJNE A,#00H,TX_ACK TX_BYTES: MOV A,R7 ;向乙機發送要傳送的字節個數 MOV SBUF,A ADD A,R6 MOV R6,A WAIT2: JBC TI,TX_NEWS SJMP WAIT2 TX_NEWS: MOV A,@R0 ;發送數據 (_____________) ADD A,R6 ;形成累加和送R6 MOV R6,A INC R0 ;指針加1 WAIT3: JBC TI,NEXT2 SJMP WAIT3 NEXT2: DJNZ R7,TX_NEWS ;判發送結束 TX_SUM: MOV A,R6 ;數據巳發送完,發累加給乙機 MOV SBUF,A WAIT4: (_______________) (______________) RX_0FH: JBC RI,IF_0FH ;等待乙機回答 SJMP RX_0FH IF_0FH: MOV A,SBUF CJNE A,#0FH,FMT_RAM ;判斷傳送正確否 SJMP $
◆乙機接收程序 接收程序約定: 波特率設置初始化:同發送程序 串行口初始化:同發送程序 寄存器設置: 31H,30H——存放接收數據緩沖區首址 R7——數據塊長度寄存器 R6——校驗和寄存器 向甲機回答的狀態信息:0FH為接收正常,F0H為傳送出錯,00H為同意接收數據。 接收程序流程框圖如圖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 ;設置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 ;等待應答信號發送完 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 ;接收數據塊長度 SJMP RX_BYTES HAVE2: MOV A,SBUF ;給長度寄存器賦值 MOV R7,A MOV R6,A ;形成累加器和 RX_NEWS: JBC RI,HAVE3 ;接收數據 SJMP RX_NEWS HAVE3: MOV A,SBUF ;將接收到的數據存入外部RAM MOV @R0,A INC R0 ADD A,R6 ;形成累加和 MOV R6,A DJNZ R7,RX_NEWS ;判斷數據是否接收完畢 RX_SUM: JBC RI,HAVE4 ;接收數據校驗和 SJMP RX_SUM HAVE4: MOV A,SBUF ;判斷傳送是否正確 CJNE A,06H,TX_ERR TX_RIGHT: MOV A,#0FH ;向甲機報告傳送正確 MOV SBUF,A WAIT3: JBC TI,OKEND SJMP WAIT3 TX_ERR: MOV A,#0F0H ;向甲機報告傳送有誤 MOV SBUF,A WAIT4: JBC TI,AGAIN SJMP WAIT4 AGAIN: LJMP FMT_RAM ;返回重新接收數據狀態 OKEND: SJMP OKEND 五、實驗步驟1.參考圖4.3進行電路設計,畫出電路圖,并用導線正確連接兩套裝置的單片機最小系統實驗模塊,以及連接最小系統模塊與外部數據存儲器模塊。 2.參考示例程序,按照實驗要求編寫程序流程圖,然后編寫程序。連接好仿真器,對編寫的程序進行仿真調試,直至通訊成功。 六、實驗報告1.畫出接口電路原理圖。 2.在該實驗中,單片機串行口工作在什么工作方式下?說明該工作方式的特點。 3.波特率是什么?怎樣設置單片機串口通訊的波特率?如果實驗要求通訊波特率為9600bps,怎樣修改程序? - 詳細說明本次實驗采用的通訊協議。
- 給針對實驗要求編寫甲機和乙機的程序流程圖、程序清單并給予適當注釋。
- 描述實驗現象和結果,要求對實驗現象和結果進行分析。
實驗五、SRAM外部數據存儲器擴展實驗一、實驗目的1、學習SRAM(靜態RAM)芯片的工作原理和結構; 2、學習單片機擴展數據存儲器的接口方法。 二、實驗設備2.單片機最小系統模塊; 三、實驗要求連接電路并編寫程序,使得:第一步,單片機在SRAM中填入不斷增加的數字,0,1,2,3……9,然后再從0開始到9,直到添滿整個SRAM。第二步,將數據讀出并驗證是否符合原寫入的規律。該實驗主要通過仿真器來觀察程序工作情況。 四、實驗原理4.1 51單片機片外總線結構 如圖5.1所示為51單片機的片外總線結構圖。 其中,P0口在接外部存儲器時,作為地址總線的低8位及數據總線復用。它能以吸收電流的方式驅動8個TTL負載。P2口在訪問外部存儲器時,可以作為高8位地址總線送出高8位地址。 由圖5.1可以看到,51單片機的引腳除了電源、復位、時鐘接入、用戶I/O外,其余管腳都具有系統擴展的功能。這些引腳構成了51單片機的片外3總線結構,即: - 地址總線(AB):寬度為16位,因此,可以尋址64K字節的外部存儲器空間。地址總線由P0口經鎖存器提供低8位地址(A0~A7),P2提供高8位地址(A8~A15)。
- 數據總線(DB):寬度為8位,由P0口作為數據總線。
- 控制總線(CB):P3口及RESET、EA、ALE、PSEN、 RD、 WR 。

圖5.1 51單片機的片外總線結構圖。
4.2 62256的工作原理 SRAM的容量一般為32K,64K,128K等,其中HY62256ALp-10容量為32Kx8位(即256K位)是高速、低功耗的靜態存儲器。存儲單元訪問時間為10ns,2-5V的寬工作電壓。 DIP-28封裝管腳如圖5.2所示。
圖5.2 引腳圖
管腳定義如表5.1所示。 表5.1 管腳定義
內部邏輯結構如圖5.3所示
操作真值表5.2: 表5.2 操作真值表 操作時序以-70型號為例,如表5.3所示。 表5.3 操作時序參數
1、READ讀操作。 -CE、-OE/VPP低電平,在內部-CE作為電源控制(高電平進入省電模式),-OE/VPP,控制數據從Q0-Q7端輸出。當地址信號穩定之后,地址訪問時間tACC等于-CE到數據輸出的延遲時間。滿足tACC tCE條件下數據在-OE/VPP高下降沿之后可用。 時序如圖5.4所示。
圖5.4 READ讀操作時序1
當1、-WE為高電平;2、器件連續保持-CS= VIL;3、-OE =VIL,則訪問時序圖如圖5.5所示。
圖5.5 READ讀操作時序2
2、寫操作 寫操作發生在-CS和-WE都是低電平的情況下,在-CS或-WE的最后的一個下降沿則寫操作開始。在-CS或-WE的最先的一個上升沿則寫操作結束。tWP測量寫操作開始到結束的時間。 寫時序如圖5.6所示。
圖5.6 READ讀操作時序3 五、實驗步驟1、連接電路 
電路參考如下。
62256共具有32K字節空間,因此它需要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個
;讀出送到靜態串行顯示口 MOV 30H,#0; MOV 31H,#0; MOV 32H,#0; MOV 33H,#0; MOV 34H,#0; MOV 35H,#0; MOV R3,#00H;讀數據的個數 MOV DPTR,#0000H GET_LOOP: MOV R0,#30H;存放的首地址 MOV R1,#31H MOV R2,#5;6個顯示的數據,移動5個 ;推入到顯示存儲區,向后移動 SHIFT_LOOP: MOV A,@R1 MOV @R0,A INC R0 INC R1 DJNZ R2,SHIFT_LOOP MOVX A,@DPTR MOV @R0,A;寫到最后一個位置 ;顯示在數碼管上 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;原地循環 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 ;設定串行工作模式為0 MOV R1,#06H ;數碼管顯示的位數 MOV R0, #30H ;字型碼首地址偏移量 MOV DPTR,#TAB LOOPSHOW: MOV A,@R0 MOVC A,@A+DPTR ;取出字型碼 MOV SBUF,A ;發送 WAIT: JNB TI,WAIT ;等待一幀發送完畢 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 編寫程序,并裝入仿真器,運行程序,通過開發環境觀察數據區內容。 六、實驗報告- 畫出接口電路原理圖,
- 說明62256的工作原理。簡要分析電路工作原理,說明地址分配的依據。
- 說明單片機的總線結構,并說明電路中鎖存器的作用?
- 給出針對實驗要求編寫的程序清單、并給予適當注釋。
- 描述實驗現象和結果,要求對實驗現象和結果進行分析。
實驗六、矩陣式鍵盤輸入實驗一、實驗目的1.學習矩陣式鍵盤工作原理; 2.學習矩陣式鍵盤接口的電路設計和程序設計。 二、實驗設備1.仿真器 2.單片機最小系統實驗教學模塊 3.矩陣式鍵盤實驗模塊 4.動態掃描數碼管顯示模塊 三、實驗要求要求實現:在矩陣式鍵盤中的某個鍵被按下時,8位LED動態顯示器上最低位顯示該鍵對應的字符,以前的字符向高位推進1位(即類似于計算器)。 四、實驗原理矩陣式由行線和列線組成,按鍵位于行、列的交叉點上。如圖所示,一個4*4的行、列結構可以構成一個16個按鍵的鍵盤。很明顯,在按鍵數量較多的場合,矩陣式鍵盤與獨立式鍵盤相比,要節省很多的I/0口。 圖6-1 矩陣式鍵盤結構 4.1 矩陣式鍵盤工作原理 按鍵設置在行、列交節點上,行、列分別連接到按鍵開關的兩端。行線通過上拉電阻接到+5V上。平時無按鍵按下時,行線處于高電平狀態,而當有按鍵按下時,行線電平狀態將由與此行線相連的列線電平決定。列線電平如果為低,則行線電平為低,列線電平如果為高,則行線電平則為高。這一點是識別矩陣式鍵盤是否被按下的關鍵所在。由于行列式鍵盤中行、列線為多鍵共用,各按鍵均影響該鍵所在行和列的電平。因此,各按鍵彼此將相互發生影響,所以必須將行、列線信號配合起來并作適當的處理,才能確定閉合鍵的位置。
4.2 按鍵識別方法 下面以圖6-2中4號鍵被按下為例,來說明此鍵是如何被識別出來的。 前已述及,鍵被按下時,與此鍵相連的行線電平將由與此鍵相連的列線電平決定,而行線電平在無鍵按下時處于高電平狀態。如果讓所有列線處于高電平那么鍵按下與否不會引起行線電平的狀態變化,始終是高電平,所以,讓所有列線處于高電平是沒法識別出按鍵的。現在反過來,讓所有列線處于低電平,很明顯,按下的鍵所在行電平將也被置為低電平,根據此變化,便能判定該行一定有鍵被按下。但我們還不能確定是這一行的哪個鍵被按下。所以,為了進一步判定到底是哪—列的鍵被按下,可在某一時刻只讓一列線處于低電平,而其余所有列線處于高電平。當第1列為低電平,其余各列為高電平時,因為是鍵4被按下,所以第1行仍處于高電平狀態;當第2列為低電平,其余各列為高電平時,同樣我們會發現第1行仍處于高電平狀態,直到讓第4列為低電平,其余各列為高電平時,因為是4號鍵被按下,所以第1行的高電平轉換到第4列所處的低電平,據此,我們確信第1行第4列交叉點處的按鍵,即4號鍵被按下。 根據上面的分析,很容易得出矩陣鍵盤按鍵的識別方法,此方法分兩步進行。第一步,識別鍵盤有無健被按下;第二步,如果有鍵被按下,識別出具體的按鍵。分述如下: 識別鍵盤有無鍵被按下的方法是:讓所有列線均為低電平,檢查各行線電平是否有低電平,如果有,則說明有鍵被按下,如果沒有,則說明無鍵被按下(實際編程時應考慮按鍵抖動的影響,通常總是采用軟件延時的方法進行消抖處理)。 識別具體按鍵的方法是(亦稱之為掃描法):逐列置零電平,并檢查各行線電平的變化,如果某行電平由高電平變為低電平,則可確定此行此列交叉點處按鍵被按下。 請注意:由于鍵盤模塊做了特殊的處理,使得矩陣式鍵盤的行線輸出的電平狀態與前面所述正好相反。即,行線的輸出電平,在平時為低電平,有鍵按下時(該鍵對應列線輸入為低電平),該鍵對應的行線輸出為高電平。在編程的時候請注意這一點。 五、實驗步驟1、按照圖6-2的電路圖,用導線將矩陣式鍵盤、數碼管動態掃描顯示模塊和單片機的最小系統實驗模塊連接正確。 2、示例程序如下: keyvalue equ 40h ;讀到鍵盤的值暫放的地址 dispptr equ 37h ;顯示緩沖區地址高位 firstptr equ 30h ;顯示緩沖區地址低位 ORG 0000H AJMP INIT ORG 0030H INIT: mov r0,#firstptr mov r1,#08H initloop: MOV A,#10H ;顯示緩沖區存放‘滅’ mov @r0,a inc r0 djnz r1,initloop LOOP: MOV P2, #00H ;關閉所有顯示 MOV R4,#04H ;列掃描數 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 ;判斷有鍵盤按下,轉移到K1 ;如果沒有鍵盤按下,則重新開始掃描 (…………) ;等待鍵釋放程序 K1: CJNE A,#0E1H,K2 ;K0未按下,轉移K1 LCALL movdisp MOV firstptr,#0 ACALL disp LJMP LOOP
K2: (……….) ;K1未按下,轉移K2
K3: (……….) ;K2未按下,轉移K3
K4: (……….) ;K3未按下,轉移K4
K5: (……….) ;K4未按下,轉移K5
K6: (……….) ;K5未按下,轉移K6
K7: (……….) ;K76未按下,轉移K7
K8: (……….) ;K7按下,轉移K8
K9: (……….) ;K8未按下,轉移K9
K10: (……….) ;K9未按下,轉移K10
K11: (……….) ;K10未按下,轉移K11
K12: (……….) ;K11未按下,轉移K12
K13: (……….) ;K12未按下,轉移K13
K14: (……….) ;K13未按下,轉移K14
K15: (……….) ;K14未按下,轉移K15
K16: (……….) ;K15未按下,轉移ERROR
error: lcall key ;重新掃描鍵盤
;//顯示程序 ;30h-37h:顯示緩沖區;
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
(……….)部分要求學生自己編寫,將程序調入仿真器進行調試,直至達到實驗要求。 六、實驗報告1、畫出接口電路原理圖,并簡要分析電路的執行過程。 2、給出程序流程圖和程序清單、并給予適當注釋。 3、圖6-2的電路示意圖共采用了P0、P1、P2三個I/O口,你有沒有更節省I/O線的方案?請給出電路示意圖。 - 實驗過程中遇到哪些問題,是如何解決的?
- 描述實驗現象和結果,要求對實驗現象和結果進行分析。
實驗七、8255可編程并行I/O擴展接口實驗一、實驗目的1.熟悉8255并行接口芯片的基本工作原理及應用; 2.掌握單片機與8255的接口電路設計和編程。 二、實驗設備- 仿真器
- 8255可編程并行I/O擴展接口模塊
- 單片機最小系統模塊
4. 發光二極管陣列模塊 三、實驗要求- 連接單片機最小系統、8255擴展接口、發光二極管陣列模塊組成的電路,使發光二極管
陣列以一定規律點亮:(1)逐行循環點亮;(2)逐列循環點亮 2.連接單片機最小系統、8255擴展接口、數碼管動態掃描顯示模塊、矩陣式鍵盤模塊組成的電路,要求在鍵盤按下時,8位LED動態顯示器上最低位顯示相應的字符,以前的各位字符向高位推進1位。請參看實驗六的相關內容。 四、實驗原理8255是一個具有3個8位的8位并行口,并且可編程為多種工作模式的接口芯片。由于每個端口上具有輸入/輸出的緩沖和鎖存功能,因此可用于擴展單片機有限的I/O口,作為單片機和外圍器件的中間接口電路。 4.1引腳說明 8255共40個引腳,采用了雙列直插的封裝,主要引腳功能如下: - D7—D0:三態雙向數據線,與單片機數據總線連接;
- CS:片選信號,低電平有效;
- RD:讀出信號線,低電平有效;
- WR:寫入信號線,低電平有效;
- PA7—PA0:A口輸入/輸出線;
- PB7—PB0:B口輸入/輸出線;
- PC7—PC0:C口輸入/輸出線;
- RESET:芯片復位信號線;
- A1—A0:地址線,用來指定8255內部端口。
4.2內部結構和工作方式 (1)端口A、B、C 端口A為8位數據傳送,數據輸入或輸出時均受到鎖存。 端口B為8位數據傳送,數據輸入時不受鎖存,而數據輸出時受到鎖存。 端口C為8位數據傳送,數據輸入時不受鎖存,而數據輸出時受到鎖存。 (2)8255接口工作狀態選擇表7.1 表7.1 8255接口工作狀態 | | | | | A口數據→數據總線 B口數據→數據總線 C口數據→數據總線 | | | | | | | | | | | | | | | | | | | | | |
(3)8255的基本工作方式 8255可編程并行I/O擴展芯片是通過在控制端口中設置控制字來決定它的工作方式的。 8255有以下三種基本工作方式:
- 方式0——基本輸入/輸出方式。
- 方式1——選通輸入/輸出方式。
- 方式2——雙向傳送方式。(僅A口)
8255A的端口A可以工作在三種工作方式中的任何一種,端口B只能工作在方式0或方式1,端口C則常常配合端口A和端口B工作,為這兩個端口的輸入/輸出傳送提供控制信號和狀態信號。 ①方式0 方式0是一種基本輸入/輸出方式。它是把PA0~PA7、PB0~PB7、PC0~PC3、PC4~PC7全部輸入/輸出線都用作傳送數據,各端口是輸入還是輸出由方式控制字來設置。這種方式多用于同步傳送和查詢式傳送。 8255的方式控制字如圖7.1: ②方式1 方式1是一種選通輸入/輸出方式。它把A口和B口用作數據傳送,C口的部分引腳作為固定的專用應答信號,A口和B口可以通過方式控制字來設置方式1。這種方式多用于查詢傳送和中斷傳送。 ③方式2 方式2是一種雙向選通輸入/輸出方式。它利用A口為雙向輸入/輸出口,C口的PC3~PC7作為專用應答線。方式2只用于端口A,在方式2下,外設可以通過端口A的8位數據線,向CPU發送數據,也可以從CPU接收數據。 當8255接收到寫入控制端口的控制字時,首先測試控制字的最高位,如為1,則是方  如圖7.1 8255的方式控制字 式選擇控制字;如為0,則不是方式選擇控制字,而是對端口C置1/置0控制字,這是由于端口C的每一位可作為控制位來使用。端口C置1/置0控制字也是寫到控制端口,而不是寫到端口C。 4.3 電路原理示意圖  圖7.2 采用8255的陣列式發光二極管電路 
圖7.3為鍵盤和動態顯示參考電路,只耗費了少量器件和單片機I/O口線便完成了控制電路:
圖7.3 采用8255的鍵盤顯示實驗電路 4.4 軟件編寫 按照實驗要求,參考圖7.2 和7.3,分別編寫程序。 五、實驗步驟1、參考圖7.2進行電路設計,畫出電路圖,并用導線正確連接8255可編程I/O擴展模塊、單片機最小系統模塊、發光二極管陣列。分別編寫程序實現(1)逐行循環顯示程序,一個時刻只有一盞燈亮;(2)逐列循環顯示程序,一個時刻只有一盞燈亮2。也可以一排排顯示,或者一列列顯示,學生可以自己設計顯示方案。連接好仿真器,對編寫的程序進行仿真調試。 2、參考圖7.3,參考實驗六的相關程序,編寫矩陣式鍵盤和顯示程序。 六、實驗報告- 畫出接口電路原理圖,說明8255的工作原理,簡要分析電路的執行過程。
- 給出針對實驗要求編寫程序流程圖、程序清單并給予適當注釋。
- 實驗過程中遇到哪些問題,是如何解決的?
- 描述實驗現象和結果,要求對實驗現象和結果進行分析。
完整的Word格式文檔51黑下載地址:
單片機原理及應用實驗指導書.doc
(1.96 MB, 下載次數: 12)
2018-9-18 08:59 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|