版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 設計目的: </b></p><p> 1.鞏固和加深課堂所學知識;熟悉各種指令的應用及條件;</p><p> 2.學習掌握一般的軟硬件的設計方法和查閱、運用資料的能力;</p><p> 3.深入了解與掌握8255A在PC機系統(tǒng)的典型接法和8255A的工作方法及應用編程。</p><p
2、><b> 設計任務與要求:</b></p><p> 設計一個循環(huán)彩燈控制系統(tǒng),能輸出四種花型,輸出花型如下:</p><p> 1)00000001 左循環(huán)(1時亮,0時滅)</p><p> 2)10000000 右循環(huán)</p><p
3、> 3)按00000001,00000011,00000111-----11111111規(guī)律遞增,后同時閃爍一次,循環(huán)不斷。</p><p> 4)按01010101,10101010(或紅、綠彩燈) 交替閃爍。</p><p> 功能要求: 1)循環(huán)彩燈的循環(huán)速度可調(diào);</p><p><b> 2)按鍵
4、要求</b></p><p> ① 啟動/暫停,按SW0開關啟動系統(tǒng),按SW1開關停止系統(tǒng)工作。</p><p> ?、?花型變換,由開關SW2、SW3進行四種花型切換;</p><p><b> 總體方案與說明:</b></p><p> 根據(jù)所學內(nèi)容和對8255A的應用,整個系統(tǒng)硬件采用8086微處
5、理器,74LS373鎖存器,和8255A可編程并行接口芯片和8個led彩燈。</p><p> Intel 8255A是一種通用的可編程并行接口芯片,由于它是可以編程的,可以通過程序來設置芯片的工作方式,通用性強,使用靈活,可為多種不同的CPU與外設之間提供并行輸入/輸出的通道;8086微處理器,選擇最小工作模式,所有的總線控制信號均由8086產(chǎn)生;8086CPU的地址\數(shù)據(jù)總線AD15-AD0和地址\狀態(tài)總線
6、A16/S3-A19/S6是復用的,必須通過地址鎖存器把地址總線和數(shù)據(jù)總線分離</p><p> 循環(huán)彩燈主要模塊流程圖</p><p><b> 軟件設計</b></p><p> 采用模塊化程序設計思想,將軟件劃分成若干單元,主要包括主程序、LED彩燈顯示子程序和延時子程序等。本系統(tǒng)具體匯編源程序見附表一。</p>&l
7、t;p><b> 使用軟件說明:</b></p><p><b> Proteus</b></p><p> Proteus是世界上著名的EDA工具(仿真軟件),從原理圖布圖、代碼調(diào)試到單片機與外圍電路協(xié)同仿真, 其處理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和M
8、SP430等</p><p><b> Emu8086</b></p><p> Emu8086-MicroprocessorEmulator結合了一個先進的原始編輯器、組譯器、反組譯器、具除錯功能的軟件模擬工具(虛擬PC),還有一個循序漸進的指導工具,編譯源代碼,并在模擬器上一步一步的執(zhí)行??梢暬缑媪畈僮饕兹绶疲梢栽趫?zhí)行程序的同時可觀察寄存器,標志位和內(nèi)存
9、.算術和邏輯運算單元(ALU)顯示中央處理器內(nèi)部的工作情況.</p><p> 點擊編譯之生成.exe文件后,調(diào)試界面圖 </p><p><b> 硬件電路圖與說明:</b></p><p> 8255A的數(shù)據(jù)線,片選信號,地址線,讀寫控制線等與系統(tǒng)總線相連,CS與譯碼器的也相連,通過譯碼器連接到系統(tǒng)總線。</p
10、><p> 鎖存控制電路74LS373</p><p> 在微控制器單元(MCU)中,寄存器是十分重要的資源。寄存器的主要作用是快速寄存算術邏輯運算單元(ALU)運算過程中的數(shù)據(jù),其鎖存功能利用74LS373來實現(xiàn), </p><p> (1) 鎖存使能控制端 LE。</p><p><b> ?。?) 控制輸入端</b&g
11、t;</p><p><b> (3) 數(shù)據(jù)輸入端</b></p><p> 通過鎖存器74LS373把數(shù)據(jù)存儲于集成塊中,當LE鎖存控制端為1,\OE使能端為0時,其具有輸入功能,反之其具有鎖存功能,在此系統(tǒng)中充當一個橋梁的作用,將部分數(shù)據(jù)傳送個8255A的A0,A1,和CS片選等等,從而驅(qū)動發(fā)光二級管顯示不同的花色。</p><p>
12、 由于地址鎖存器8282與74LS373有相同的功能,可以將此處的74LS373替換成8282,原理上同樣可以實現(xiàn)</p><p> 可編程并行通信接口芯片8255A:</p><p> 方式0為簡單I/O,查詢方式,端口A、端口B、端口C均可使用。</p><p> 方式1為選通I/O,中斷方式,端口A、端口B可以使用,選通的輸入/輸出方式。</p&g
13、t;<p> 方式2為雙向I/O,中斷方式,只有端口A可以使用,雙向的傳輸方式。</p><p> 方式0也叫基本輸入/輸出方式。一種方式,不需要應答聯(lián)絡信號,端口A、端口B和端口C的高4位及低4位都可以作為輸入或輸出端口。方式0的應用場合有無條件傳送和查詢傳送2種; 故根據(jù)我們系統(tǒng)設計的要求,綜上可知,選擇8255A為工作方式0。</p><p> 然而8255A的3
14、種基本工作方式:由方式選擇控制字來決定,D7=1(特征位)表明是設定方式選擇控制字;D7=0,則表示是端口C按位置位/復位控制字;</p><p> 端口C分成高4位(PC7~PC4)和低4位(PC3~PC0),可分別設置成輸入端口或輸出端口;端口C的高4位與端口A配合組成A組,端口C的低4位與端口B配合組成B組。</p><p> 綜上可得此系統(tǒng)需要滿足A端口為輸出,輸出數(shù)據(jù)給到8個
15、LED彩燈;端口C為輸入,需要檢測按鍵的輸入情況;</p><p> 問題分析與解決方案:</p><p> 1. unknow 1-byte opcode at B900:7056! 61</p><p> [SPICE]error---too many iterations without convergence</p><p>
16、 在仿真過程中,出現(xiàn)以上兩行的錯誤,太多的迭代沒有收斂性,和某個匯編語言在編碼過程中的地址不正確:</p><p> 說明程序代碼過于分散,沒有模塊化,之后再將程序能夠模塊化的地方盡量改善,達到更加簡潔易讀易運行的目的由于程序中定義了 dz db 01h,03h,07h,0fh,1fh,3fh,7fh,0ffh,00h,0ffh,00h,0ffh 在在最初的調(diào)試的時候variable里面elements的
17、值總是顯示1,然而此處共有12個值,si共需要在此取11個偏移地址,所以改成11后,程序調(diào)試運行正常;</p><p> 2.延時子程序模塊的編寫方法多種,之前為了測試單一的彩燈循環(huán)左移是否能夠成功,采用nop延時,由CPU晶振頻率計算,12M的晶振頻率,執(zhí)行一個nop需要時間1us,8086的晶振頻率是5MHz,所以執(zhí)行一個nop需要的時間是12/5us若要實現(xiàn)短暫而精確的延時可以用nop,然而此處流水燈的延
18、時僅僅用空指令nop并不具有很好的移植性和修改性,程序代碼也顯得冗余;</p><p> 一般一定功能的程序段設計成一個子程序,MASM宏匯編程序用“過程”(Procedure)來構造子程序。如此段延時子程序:</p><p> delay proc </p><p><b> push cx</b></p><
19、p><b> push bx</b></p><p> mov cx,0fh ;修改此處的值,可以改變延時時間 </p><p> d1:mov bx,0fh</p><p><b> d2:dec bx</b></p><p><b> jnz d2</
20、b></p><p><b> pop bx</b></p><p><b> pop cx</b></p><p><b> ret</b></p><p> end endp </p><p> 在寫此系統(tǒng)程序中,我采用的是分支結構
21、編寫延時程序,后查的一般分支程序為計算機根據(jù)某種判斷,利用條件轉(zhuǎn)移指令,改變程序執(zhí)行順序所用;然而一般具有公用性,重復性,和相對獨立性的某段程序應設計成子程序,這種結構會給程序設計和調(diào)試帶來許多方便,在滿足匯編語言一定的規(guī)范性條件下,應將延時模塊改成如上程序所示;</p><p> 3. 內(nèi)存空間分配,,匯編語言的重要特點之一是能夠直接利用機器指 或者偽指令為數(shù)據(jù)或者代碼程序分配內(nèi)存空間,86系列(如8086微
22、處理器)的存儲器結構是分段的,有代碼段,數(shù)據(jù)段,堆棧段或附加段,在程序設計時要充分考慮分段結構,要執(zhí)行的程序段應設在當前段(活動段)中;分配內(nèi)存空間:直接在proteus里面將8086CPU的internal memory size設置成一個足夠用的空間大小,如0x1000,默認的空間大小是0x00000,如不改則仿真不成功。</p><p> 程序在運行時所需要的工作單元應盡可能的設在CPU寄存器中,這樣存取
23、速度快,而且操作方便;在此系統(tǒng)源程序中都采用8086CPU的全部通用寄存器:累加器AX,基數(shù)寄存器BX,基數(shù)寄存器CX,數(shù)據(jù)寄存器DX;和堆棧指針寄存器SI;</p><p> 4 在所有的程序模塊逐步成功之后,期待著整體銜接能夠成功,可是出現(xiàn)了一個現(xiàn)象:每次仿真只能實現(xiàn)一種花型,在仿真過程中按鍵根本無作用,也就是程序一直在某個彩燈子程序中運行,無法去讀select處C端口的按鍵值,必須在仿真stop后,切換
24、按鍵值,在按仿真play后才能改變花型;</p><p> 后來發(fā)現(xiàn)原來是在每個彩燈子程序中,由于利用了loop循環(huán)去實現(xiàn)彩燈的左移與右移,使得程序跳不到下一條語句jmp select,一直以為有了jmp select,似乎就可以去讀取了按鍵值,后查loop的資料,loop的兩步操作:1、cx=cx-1;2、判斷cx的值,決定跳轉(zhuǎn)還是向下執(zhí)行;原來自己在子程序開始忘記了mov cx,08h;即彩燈實現(xiàn)完一次花
25、型變換就去讀取按鍵的值,如果此時按鍵的值改變,就跳轉(zhuǎn)到相應的程序段去執(zhí)行,否則繼續(xù)執(zhí)行當前的彩燈花型;</p><p> 5.某個想法:在調(diào)試過程中,由于led燈一端都接地,按下啟動鍵,并沒有什么現(xiàn)象,總讓人產(chǎn)生錯覺是不是程序出現(xiàn)問題,仿真不出來;未來便于啟動按鍵按下有現(xiàn)象,可將led燈的另一端接高電平,但是想來想去,如果是在現(xiàn)實中,不可能用彩燈突然全部亮來說明系統(tǒng)啟動,故可以在連接啟動鍵導線中用一個led燈是
26、否亮了來檢測系統(tǒng)的啟動成功,此時所有的按鍵的另一端也要求接高電平了;</p><p> 6.整體調(diào)試過程中,SW0:啟動/暫停能夠控制仿真過程中的狀態(tài),SW1:停止系統(tǒng),需要用到系統(tǒng)功能調(diào)用,返回當前操作系統(tǒng);</p><p><b> 小結與體會:</b></p><p> 1.cmp屬于加減運算的范疇,而test屬于邏輯運算的范疇&l
27、t;/p><p> cmp主要用于比較兩數(shù)的關系,可以在有符號數(shù)和無符號數(shù)之間進行比較。兩數(shù)相等影響ZF標志,無符號數(shù)影響CF標志,有符號數(shù)影響SF和OF標志。一般根據(jù)標志位的影響設置程序跳轉(zhuǎn),即根據(jù)不同的條件完成對應的程序片段,類似于高級語言的IF-ELSE結構。所有的有條件轉(zhuǎn)移指令都可以用在這條指令之后。test通常用于檢測某些位是否為1,但又不希望改變操作數(shù)的場合。比如檢查AL中的位6和位2是否有一位為1
28、,可以用如下指令:test AL,01000100b,如果這兩個位全為0.則ZF的值為1,否則清0,那么根據(jù)標志位設置的跳轉(zhuǎn)就只能為jz或jnz這兩條指令的相同點是都不會影響操作數(shù),只是通過標志寄存器的某些位反映運算結果。</p><p> 2. 首先,更一步深化了程序設計步驟的思想,之前的混亂狀態(tài)逐漸清晰起來;編寫程序時我遇到了許多的麻煩,開始時我把程序編了出來,但是我用Proteus仿真就和我想要的結
29、果不一致,然后我又通過認真的分析,發(fā)現(xiàn)我的邏輯思維出錯了,用匯編語言編寫時要求有很好的邏輯思維能力,在今后的練習中得加強這方面的鍛煉;</p><p> 其次每一個獨立的子程序最好用回車把它與其它的語句分開,這樣就是為了在你查找程序錯誤時能夠很清楚的找到錯誤。 </p><p> ?。阂院笤谡{(diào)程序時,確定問題后,要將流程和原理有非常清晰的理解,最好一步一步寫下來,這樣方便最初源程序的編寫
30、和最后完工后的調(diào)試;</p><p> 3. 進一步了解了8255A各引腳的功能, 8255A和系統(tǒng)總線之間的連接, 8255A和CPU之間的數(shù)據(jù)交換,以及8255A的內(nèi)部邏輯結構。深入掌握了8255A顯示電路的基本功能及編程方法,同時也深入了解了8255等芯片的工作方式、作用,受益匪淺。</p><p><b> 附表1: </b></p><
31、;p> 循環(huán)彩燈系統(tǒng)匯編源程序清單:</p><p> data segment</p><p> MY8255_A equ 90h ;8255的A端口地址</p><p> MY8255_B equ 92h ;8255的B端口地址</p><p> MY8255_C equ 94h ;8255的C端口地址<
32、/p><p> MY8255_MODE equ 96h ;8255控制寄存器地址 </p><p> MODE_A db 10001001b ;控制字 89h; A端口輸出工作方式0,端口C輸入 </p><p> dz db 01h,03h,07h,0fh,1fh,3fh,7fh,0f
33、fh,00h,0ffh,00h,0ffh </p><p> data ends </p><p> code segment</p><p> assume cs:code,ds:data </p><p> start: mov dx,MY8255_MODE</
34、p><p> mov al,MODE_A</p><p> out dx,al ;控制字 初始化</p><p> ;--------------------------------------------------</p><p><b> select:</b></p>
35、<p> mov dx, MY8255_C </p><p> in al,dx ;讀取C端口地址 </p><p><b> goexit:</b></p><p> test al,10h </p><
36、;p> jz exit ;結果是0,CF=1,跳轉(zhuǎn)到exit去執(zhí)行 </p><p><b> set: </b></p><p> test al,20h</p><p> jz select ;若是結果是0,則繼續(xù)檢測按鍵</p><p> ; ***
37、**************** ;四種花型的判斷</p><p> and al,0fh ;屏蔽al的高四位 </p><p> cmp al,00h</p><p> jz cont1 ;花型1 循環(huán)左移</p><p> cmp al,01h</p><p> j
38、z cont2 ;花型2 循環(huán)右移</p><p> cmp al,02h</p><p> jz cont3 ;花型3 依次遞增后閃爍</p><p> cmp al,03h</p><p> jz cont4 ;花型4 交替閃爍</p><p> jmp select <
39、/p><p> ;----------------------------------------------------- </p><p> exit: </p><p> mov ah,4ch</p><p> int 21h ;4ch系統(tǒng)功能調(diào)用,返回操作系統(tǒng)</p&g
40、t;<p> ;----------------------------------------------------</p><p><b> cont1: </b></p><p> mov cx,08h </p><p> mov dx,MY8255_A </p><p> mov
41、 al,01h </p><p> k1: out dx,al ;寫A端口 </p><p> call delay</p><p> rol al,1 </p><p> loop k1 </p><p> jmp select</p><p> ;
42、---------------------------------------------------- </p><p><b> cont2: </b></p><p> mov cx,08h </p><p> mov dx,MY8255_A </p><p> mov al,
43、80h</p><p> k2: out dx,al</p><p> call delay</p><p><b> ror al,1</b></p><p><b> loop k2</b></p><p> jmp select </
44、p><p> ;-----------------------------------------------------</p><p><b> cont3:</b></p><p> mov dx,MY8255_A </p><p> mov bl,0bh</p><p><b&
45、gt; lea si,dz</b></p><p> diz: mov al,[si] ;向左遞增子程序</p><p><b> out dx,al</b></p><p> call delay</p><p> inc si ;加1存在si里面 </p&
46、gt;<p><b> dec bl</b></p><p> jnz diz ;bl!=0則繼續(xù)跳到diz執(zhí)行</p><p> jmp select</p><p> ;---------------------------------------------------</p><
47、;p><b> cont4: </b></p><p> mov dx,MY8255_A</p><p> mov al,55h</p><p><b> out dx,al</b></p><p> call delay</p><p> mov al,0
48、aah ; xor al,0ffh </p><p><b> out dx,al</b></p><p> call delay</p><p> jmp select</p><p> ;---------------------------------------
49、-------------- </p><p> ;delay proc ;定義延時子程序 </p><p> ; push cx</p><p> ; push bx</p><p> ; mov cx,0fh </p><p> ; d1: mo
50、v bx,0fh</p><p> ; d2: dec bx</p><p> ; jnz d2</p><p> ; pop bx</p><p> ; pop cx</p><p> ; ret</p><p> ; end
51、 endp </p><p> ;----------------------------------------------------</p><p> delay: ; 延時子程序 </p><p><b> pushf</b></p><p><b&g
52、t; push bx</b></p><p> push cx ;保護現(xiàn)場</p><p> mov bx, 0e0h</p><p> lp2: mov cx ,176h</p><p> lp1: pushf ;標志入棧</p><p> p
53、opf ;標志出棧</p><p><b> loop lp1</b></p><p><b> dec bx</b></p><p><b> jnz lp2 </b></p><p><b> pop cx</b>&l
54、t;/p><p><b> pop bx</b></p><p><b> popf</b></p><p><b> ret </b></p><p><b> code ends</b></p><p> end
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 微機原理課程設計 -- 基于8086彩燈控制器的設計
- 微機原理課程設計 -- 基于8086彩燈控制器的設計
- 微機原理課程設計 -- 基于8086彩燈控制器的設計.doc
- 微機課程設計--循環(huán)彩燈控制器 數(shù)字鐘
- 課程設計---循環(huán)彩燈
- 循環(huán)彩燈課程設計
- 循環(huán)彩燈控制器設計課程設計
- 課程設計--彩燈循環(huán)控制器的設計
- led循環(huán)彩燈課程設計
- 微機技術課程設計--彩燈控制器設計
- 彩燈循環(huán)顯示控制電路課程設計
- 課程設計---彩燈循環(huán)控制電路設計
- 數(shù)電課程設計循環(huán)彩燈控制器
- 數(shù)電課程設計循環(huán)彩燈控制器
- 數(shù)電課程設計----循環(huán)彩燈控制器
- 數(shù)電課程設計-循環(huán)彩燈控制器
- 循環(huán)彩燈數(shù)電課程設計
- 循環(huán)彩燈課程設計程序
- 模電課程設計-- 循環(huán)彩燈控制電路
- 微機控制課程設計報告
評論
0/150
提交評論