微機原理(基于proteus的跑馬燈系統設計及仿真)_第1頁
微機原理(基于proteus的跑馬燈系統設計及仿真)_第2頁
微機原理(基于proteus的跑馬燈系統設計及仿真)_第3頁
微機原理(基于proteus的跑馬燈系統設計及仿真)_第4頁
微機原理(基于proteus的跑馬燈系統設計及仿真)_第5頁
已閱讀5頁,還剩13頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

PAGE-PAGE.z.學號:課程設計題目基于PROTEUS的跑馬燈系統設計及仿真學院自動化學院專業自動化班級姓名指導教師2012年1月12日任務書目錄引言11總體方案論證PAGEREF_Toc314089305\h21.1功能分析21.2系統連接圖設計2鎖存控制電路5HYPERLINK\l"_Toc314089309"可編程并行通信接口芯片8255A62程序流程圖設計及其說明93關鍵程序段落說明113.1數據段定義113.2程序初始化113.3芯片初始化123.4初始LED亮滅狀態123.5檢測按鍵開關子程序123.6延時程序片段143.7燈光變換控制154程序調試說明165結果記錄及分析17心得體會19參考文獻20-.z.引言微型計算機簡稱微機,由于具備人腦*些功能,所有又叫做微機。是由大規模集成電路組成的、體積較小的電子計算機。它是以微處理器為根底,配以內存儲器及輸入輸出接口電路和相應的輔助電路構成的裸機。把微型計算機集成在一個芯片上即構成單片微型計算機。學習微機原理與接口技術,主要內容包括微型計算機體系構造、8086微處理器和指令系統、匯編語言、設計以及微型計算機各個組成局部,而其中很大一塊就是匯編語言的學習。匯編語言是面向機器的程序設計語言,也是利用計算機所有硬件特性并能直接控制硬件的語言。用匯編語言編寫的程序由于目標程序占用內存少,運行速度快,它有著高級語言不可替代的用途。因此,學習匯編語言是很必要的,通過學習匯編語言可以體會它的作用。通過本次課程設計讓我們進一步深入匯編語言的學習,掌握簡單的接口設計技術,將理論知識聯系實際,進一步學習微機原理與接口技術的相關知識,為以后深入學習打下良好的根底。1總體方案論證1.1功能分析此次課程設計的要求為,設計微型計算機最小系統,實現跑馬燈的模擬顯示功能。具體要求為:〔1〕、輸入設備三個啟動按鈕、一個停頓按鈕,輸出設備為八個跑馬燈;〔2〕、三個啟動按鈕對應三種跑馬燈顯示效果,按下任意一個啟動按鈕,跑馬燈顯示對應的效果,按下停頓按鈕則跑馬燈全部熄滅。由上分析可知,我們的硬件的電路需要另行搭建,電路中需包含四個按鈕和八個跑馬燈以及相關芯片,既有輸入設備又有輸出設備,經過分析可以使用芯片8255A來實現輸入與輸出,再加上鎖存地址芯片74LS273、譯碼芯片74LS154以及相關門電路即可構本錢設計的硬件電路根底。進一步分析最終決定用8255A的A口作為輸出去控制跑馬燈,B口作為按鈕信號輸入,CPU通過接收輸入信號從而發出對應命令去控制8255A芯片A口輸出,從而A口輸出相應電平控制跑馬燈有規律的亮滅。連接好硬件電路后的主要任務就是編寫相應程序,通過程序去控制和調度硬件電路的輸入與輸出。1.2系統連接圖設計8255A是一種通過可編程并行I/O接口芯片。廣泛用于幾乎所有系列的微機系統中,8255A具有三個帶鎖存或緩沖的數據端口,可與外設并行進展數據交換,8255A有多種操作方式,通用性較強,可為CPU與外設之間提供輸入/輸出通道。8255A和各端口內具有中斷控制邏輯,在外設與CPU之間可用中斷方式進展信息交換,使用條件傳輸方式時可用"聯絡〞線進展控制。在本次課程設計中,我們運用8255A為CPU與外設之間提供輸入輸出輸出通道來實現對跑馬燈把戲變換的控制。8086微處理器,選擇最小工作模式,所有的總線控制信號均由8086產生;8086CPU的地址\數據總線AD15-AD0和地址\狀態總線A16/S3-A19/S6是復用的,必須通過地址鎖存器把地址總線和數據總線別離。跑馬燈硬件電路如圖1所示。電路包括8個LED彩燈、三片74LS273、一片74LS154、一片8086CPU、一片8255A以及假設干導線和電阻。用LED可以觀測在不同按鍵輸入下,跑馬燈把戲的變化效果。如圖1所示我們利用啟動按鈕作為輸入信號,通過8255A端口擴展芯片,調節輸出端口的電平變化,來控制共陽極的LED燈的亮與滅,實現跑馬燈不同的把戲變化。圖1跑馬燈硬件電路圖1.2.1鎖存控制電路鎖存控制電路電路如圖2所示,在微控制器單元〔MCU〕中,存放器是十分重要的資源。存放器的主要作用是快速存放算術邏輯運算單元〔ALU〕運算過程中的數據,其鎖存功能利用74LS273來實現,74LS273是一種帶去除功能的8D觸發器,1D~8D為數據輸入端,1Q~8Q為數據輸出端,正脈沖觸發,低電平去除,常用作數據鎖存器,地址鎖存器。D0~D7:輸入,Q0~Q7:輸出;第一腳WR:主去除端,低電平觸發,即當為低電平時,芯片被去除,輸出全為0〔低電平〕;CP〔CLK〕:觸發端,上升沿觸發,即當CP從低到高電平時,D0~D7的數據通過芯片,為0時將數據鎖存,D0~D7的數據不變。CPU向外部發出地址鎖存允許信號,從而使74LS273鎖存地址信號,在通過譯碼芯片74LS154控制接口芯片8255A,在此系統中充當一個橋梁的作用。這局部電路將相應信號傳送給8255A的A0、A1和CS片選,進而CPU開場控制8255A從而驅動發光二極管顯示不同的樣式。圖2鎖存控制電路1.2.2可編程并行通信接口芯片8255A芯片8255A有三種工作方式,他們分別是方式0、方式1、方式2,電路如圖3所示。方式0為簡單I/O,查詢方式,端口A、端口B、端口C均可使用;方式1為選通I/O,中斷方式,端口A、端口B可以使用,選通的輸入/輸出方式;方式2為雙向I/O,中斷方式,只有端口A可以使用,雙向的傳輸方式。方式0也叫根本輸入/輸出方式。一種方式,不需要應答聯絡信號,端口A、端口B和端口C的高4位及低4位都可以作為輸入或輸出端口。方式0的應用場合有無條件傳送和查詢傳送2種;故根據我們系統設計的要求,綜上可知,選擇8255A為工作方式0,A口作為輸出、B口作為輸入。8255A的3種根本工作方式由方式控制字來決定,D7=1〔特征位〕說明是設定方式選擇控制字;D7=0,則表示是端口C按位置位/復位控制字。端口C分成高4位(PC7~PC4)和低4位(PC3~PC0),可分別設置成輸入端口或輸出端口;端口C的高4位與端口A配合組成A組,端口C的低4位與端口B配合組成B組。綜上可得此系統需要滿足A端口為輸出,輸出數據給到8個LED彩燈;端口B為輸入,需要檢測按鍵的輸入情況。圖3芯片8255A接口電路1.3算法說明本程序涉及芯片8255A的初始化,因此首先需要確定端口地址,CPU向8255A送出方式控制字,進而8255A的A口作為輸出、B口作為輸入;定義控制LED燈的相應數據段,由于需要LED亮后持續一段時間這就需要一個相應的延時程序片段,需要確定B口那個按鈕開關按下,這就需要一個掃描B口開關按下的子程序,從而CPU發出相應控制等操作給A口送出相應電平,LED顯示相應的亮滅。因此,主要要點就是找對端口地址,這個是程序能夠運行的必需品,通過分析硬件線路可以正確找到A口、B口以及控制口的地址。2程序流程圖設計及其說明主程序流程圖如圖4所示:初始化程序開場初始化程序開場送控制字通過A口輸出使燈全滅調用ledflash子程序檢測按鍵延時控制LED子程序流程圖如圖5所示:開場開場檢測B口信號輸入是否為按鍵1是否為按鍵2是否為按鍵3將1型走馬燈的偏移地址送給SI將2型走馬燈的偏移地址送給SI將3型走馬燈的偏移地址送給SI是否終止開關Num是否為0延時YYYYYNNNNN完畢圖5子程序流程圖3關鍵程序段落說明3.1數據段定義dsegsegmentnumdw0data1db0FEh,0FDh,0FBh,0F7h,0EFh,0DFh,0BFh,7Fhdata2db7Fh,0BFh,0DFh,0EFh,0F7h,0FBh,0FDh,0FEhdata3db7Eh,0BDh,0DBh,0E7h,0E7h,0DBh,0BDh,7Ehdsegends三種燈光變幻組合為:第一種為L1→L2→L3→L4→L5→L6→L7→L8;第二種為L8→L7→L6→L5→L4→L3→L2→L1;第三種為L1L8→L2L7→L3L6→L4L5→L3L6→L2L7→L1L8。dw為燈光循環的控制次數。3.2程序初始化csegsegmentparapublic'code'assumess:sseg,cs:cseg,ds:dsegstart: mova*,dseg movds,a*初始化程序。3.3芯片初始化movd*,0206h;取8255A的控制端口的地址moval,82h;初始化8255A的A口為輸出模式,B口為輸入模式outd*,al82h即為10000010b,也就是說將A口定義在方式0下并且作為輸出,B口定義在方式0下并且作為輸入,因此這個方式控制字不是唯一的,其通用形式為1000*01*,C口沒有定義故可以為任意二進制數。movd*,0200h;取8255的端口A的地址moval,0FFh;使8255的PA0-PA7全為1outd*,al上邊這個程序段是往外送數據置LED亮滅的。movd*,0202h;取8255的端口B的地址inal,d*;檢測B口輸入信號這個是將B口開關閉合信息讀回來的,從而發出相應控制命令。3.4初始LED亮滅狀態movd*,0200h;取8255的端口A的地址moval,0FFh;使8255的PA0-PA7全為1outd*,al;使所有的燈LED全滅電路上電工作后首先要使所有的LED燈全滅,防止對后面的顯示造成影響。3.5檢測按鍵開關子程序ledflashproc;檢測開關閉合,以便確定哪種閃爍方式movd*,0202h;取8255A的端口B的地址inal,d*;檢測B口輸入信號choice1:cmpal,0fehjnechoice2movsi,offsetdata1;置第一種燈光變幻組合jmpherechoice2:cmpal,0fdhjnechoice3movsi,offsetdata2;置第二種燈光變幻組合jmpherechoice3:cmpal,0fbhjnechoice4movsi,offsetdata3;置第三種燈光變幻組合jmpherechoice4:;每盞燈亮完檢測開關,如果停頓開關沒有按下跳到choice5,如果停頓開關按下燈全滅cmpal,0f7hjnechoice5jmpe*utchoice5:cmpnum,0h;檢測num是否為0,假設為0掃描開關,假設不為0繼續執行jneherejmpledflashhere:movb*,nummoval,[si+b*] movd*,0200h;取8255的端口A的地址outd*,al;輸出加電數據到端口Aincnum;改變數字變量的值cmpnum,09hjee*itmovc*,005fhdl4: movb*,00ffhdl3:decb* jnzdl3decc* jnzdl4 jmpledflashe*it:movnum,0 retledflashendp檢測到開關閉合置相應燈光變換。3.6延時程序片段movc*,04c9hdl4: movb*,04c9hdl3:decb* jnzdl3decc* jnzdl4通過雙層循環從而實現軟件延時,延時計算公式為((c*)*(b*))/f,f為CPU的頻率,CPU頻率為1500kHz,可以計算得到程序大致延時為1s。3.7燈光變換控制here:movb*,nummoval,[si+b*] movd*,0200h;取8255的端口A的地址outd*,al;輸出加電數據到端口Aincnum;改變數字變量的值cmpnum,09hjee*it通過指針移動,逐個選中相應的數據置相應的燈光變換,共八種即一輪LED顯示完成。4程序調試說明〔1〕、內存空間分配,匯編語言的重要特點之一是能夠直接利用機器指令或者偽指令為數據或者代碼程序分配內存空間,86系列〔如8086微處理器〕的存儲器構造是分段的,有代碼段,數據段,堆棧段或附加段,在程序設計時要充分考慮分段構造,要執行的程序段應設在當前段〔活動段〕中;分配內存空間:直接在proteus里面將8086CPU的internalmemorysize設置成一個足夠用的空間大小,如0*1000,默認的空間大小是0*00000,如不改則仿真不成功。程序在運行時所需要的工作單元應盡可能的設在CPU存放器中,這樣存取速度快,而且操作方便;在此系統源程序中都采用8086CPU的全部通用存放器:累加器A*,基數存放器B*,基數存放器C*,數據存放器D*;和堆棧指針存放器SI。〔2〕、unknow1-byteopcodeatB900:7056!61[SPICE]error---toomanyiterationswithoutconvergence在仿真過程中,出現以上兩行的錯誤,太多的迭代沒有收斂性,和*個匯編語言在編碼過程中的地址不正確,經過排查程序去除無用代碼,proteus不再報錯。〔3〕、8255A隱藏引腳問題,需要設置芯片HiddenPins里的GND改為VSS,VCC改為VDD。〔4〕、程序一開場是將延時環節作為一個獨立子程序,運行過程中由于局部情況下不滿足題設,故將延時子程序改為程序段落寫到檢測按鍵的子程序中問題得以解決。5結果記錄及分析第一種燈光變換效果:L1→L2→L3→L4→L5→L6→L7→L8,如圖6所示。圖6LED第一種變換效果第二種燈光變換效果:L8→L7→L6→L5→L4→L3→L2→L1;第一種變換效果反向即為第二種效果。第三種燈光變換效果:L1L8→L2L7→L3L6→L4L5→L3L6→L2L7→L1L8,如圖7所示。圖7LED第三種變換效果心得體會通過本次課程設計,學到了很多使用的東西,使我受益匪淺,將課堂上所學的知識運用到實際,體會到了理論與實際聯系的重要性,同時進一步學習了PROTEUS這款軟件。第一,在做這次課程設計的一開場可以說是難度重重,接口電路設計出了問題,一開場由于電路沒有參加鎖存器,導致地址和數據沖突,從而電路不能正常工作,最后在電路里參加了鎖存器74LS273和譯碼器74LS154后解決了地址和數據沖突的問題。第二,由于對軟件PROTEUS運用不是很熟練,導致一些問題,比方說分配內存空間:直接在proteus里面將8086CPU的internalmemorysize設置成一個足夠用的空間大小,如0*1000,默認的空間大小是0*00000,如不改則仿真不能成功。還有在運行期間PROTEUS仿真報錯,由于不太懂報錯信息就一步加大了設計的難度,還有一些其他小細節上的問題,可以說是細節決定成敗。第三,由于匯編語言運用的不太熟練,對程序反復進展修改,發現匯編語言由于語句在程序中放置的位置不同也會是不同的效果,對匯編語言有了進一步的認識。綜上所述,這次微機原理與接口技術的課程設計讓我學到了很多東西,不是課堂上能夠學到的東西,通過仿真可以實實在在的看到成果,從而提高了對電子設計的興趣,我想這是一個很好的鍛煉時機,通過這樣的鍛煉不僅穩固了課堂上學習的相關知識,而且學到了一些課外知識,比方說在網絡上怎樣去搜索你想要的信息等等,這些東西將使我終身獲益。附錄程序清單ssegsegmentdw200dup(")ssegendsdsegsegmentnumdw0;初始化數字變量為0;3種不同的燈光變幻組合data1db0FEh,0FDh,0FBh,0F7h,0EFh,0DFh,0BFh,7Fhdata2db7Fh,0BFh,0DFh,0EFh,0F7h,0FBh,0FDh,0FEhdata3db7Eh,0BDh,0DBh,0E7h,0E7h,0DBh,0BDh,7Ehdsegendscsegsegmentparapublic'code'assumess:sseg,cs:cseg,ds:dsegstart: mova*,dseg movds,a*movd*,0206h;取8255的控制端口的地址moval,82h;初始化8255的A口為輸出模式,B口為輸入模式outd*,al e*ut: movnum,0hmovd*,0200h;取8255的端口A的地址moval,0FFh;使8255的PA0-PA7全為1outd*,al;使所有的燈LED全滅begin:callledflash;調用燈光變幻過程jmpe*utledflashproc;檢測開關閉合,以便確定哪種閃爍方式movd*,0202h;取8255的端口B的地址inal,d*;檢測B口輸入信號choice1:cmpal,0fehjnechoice2movsi,offsetdata1;置第一種燈光變幻組合jmpherechoice2:cmpal,0fdhjnechoice3movsi,offsetdata2;置第二種燈光變幻組合jmpherechoice3:cmpal,0fbhjnechoice4movsi,offsetdata3;置第三種燈光變幻組合jmpherechoice4:;每盞燈亮完檢測開關,如果停頓開關沒有按下跳到choice5,如果停頓開關按下燈全滅cmpal,0f7hjnechoice5jmpe*utchoice5:;檢測num是否為0,假設為0掃描開關,假設不為0繼續執行cmpnum,0hjneherejmpledflashhere:movb*·,nummoval,[si+b*] movd*,0200h;取8255的端口A的地址outd*,al;輸出加電數據到端口Aincnum;改變數字變量的值cmpnum,09hjee*itmovc*,04c9hdl4: movb*,04c9hdl3:decb* jnzdl3decc* jnzdl4 jmpledflashe*it:movnum,0 ret/

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論