微機(jī)課程設(shè)計(jì)8086控制的循環(huán)彩燈報(bào)告_第1頁(yè)
已閱讀1頁(yè),還剩10頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  設(shè)計(jì)目的: </b></p><p>  1.鞏固和加深課堂所學(xué)知識(shí);熟悉各種指令的應(yīng)用及條件;</p><p>  2.學(xué)習(xí)掌握一般的軟硬件的設(shè)計(jì)方法和查閱、運(yùn)用資料的能力;</p><p>  3.深入了解與掌握8255A在PC機(jī)系統(tǒng)的典型接法和8255A的工作方法及應(yīng)用編程。</p><p

2、><b>  設(shè)計(jì)任務(wù)與要求:</b></p><p>  設(shè)計(jì)一個(gè)循環(huán)彩燈控制系統(tǒng),能輸出四種花型,輸出花型如下:</p><p>  1)00000001    左循環(huán)(1時(shí)亮,0時(shí)滅)</p><p>  2)10000000    右循環(huán)</p><p

3、>  3)按00000001,00000011,00000111-----11111111規(guī)律遞增,后同時(shí)閃爍一次,循環(huán)不斷。</p><p>  4)按01010101,10101010(或紅、綠彩燈)    交替閃爍。</p><p>  功能要求: 1)循環(huán)彩燈的循環(huán)速度可調(diào);</p><p><b>  2)按鍵

4、要求</b></p><p> ?、?啟動(dòng)/暫停,按SW0開(kāi)關(guān)啟動(dòng)系統(tǒng),按SW1開(kāi)關(guān)停止系統(tǒng)工作。</p><p>  ② 花型變換,由開(kāi)關(guān)SW2、SW3進(jìn)行四種花型切換;</p><p><b>  總體方案與說(shuō)明:</b></p><p>  根據(jù)所學(xué)內(nèi)容和對(duì)8255A的應(yīng)用,整個(gè)系統(tǒng)硬件采用8086微處

5、理器,74LS373鎖存器,和8255A可編程并行接口芯片和8個(gè)led彩燈。</p><p>  Intel 8255A是一種通用的可編程并行接口芯片,由于它是可以編程的,可以通過(guò)程序來(lái)設(shè)置芯片的工作方式,通用性強(qiáng),使用靈活,可為多種不同的CPU與外設(shè)之間提供并行輸入/輸出的通道;8086微處理器,選擇最小工作模式,所有的總線(xiàn)控制信號(hào)均由8086產(chǎn)生;8086CPU的地址\數(shù)據(jù)總線(xiàn)AD15-AD0和地址\狀態(tài)總線(xiàn)

6、A16/S3-A19/S6是復(fù)用的,必須通過(guò)地址鎖存器把地址總線(xiàn)和數(shù)據(jù)總線(xiàn)分離</p><p>  循環(huán)彩燈主要模塊流程圖</p><p><b>  軟件設(shè)計(jì)</b></p><p>  采用模塊化程序設(shè)計(jì)思想,將軟件劃分成若干單元,主要包括主程序、LED彩燈顯示子程序和延時(shí)子程序等。本系統(tǒng)具體匯編源程序見(jiàn)附表一。</p>&l

7、t;p><b>  使用軟件說(shuō)明:</b></p><p><b>  Proteus</b></p><p>  Proteus是世界上著名的EDA工具(仿真軟件),從原理圖布圖、代碼調(diào)試到單片機(jī)與外圍電路協(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結(jié)合了一個(gè)先進(jìn)的原始編輯器、組譯器、反組譯器、具除錯(cuò)功能的軟件模擬工具(虛擬PC),還有一個(gè)循序漸進(jìn)的指導(dǎo)工具,編譯源代碼,并在模擬器上一步一步的執(zhí)行??梢暬缑媪畈僮饕兹绶疲梢栽趫?zhí)行程序的同時(shí)可觀察寄存器,標(biāo)志位和內(nèi)存

9、.算術(shù)和邏輯運(yùn)算單元(ALU)顯示中央處理器內(nèi)部的工作情況.</p><p>  點(diǎn)擊編譯之生成.exe文件后,調(diào)試界面圖 </p><p><b>  硬件電路圖與說(shuō)明:</b></p><p>  8255A的數(shù)據(jù)線(xiàn),片選信號(hào),地址線(xiàn),讀寫(xiě)控制線(xiàn)等與系統(tǒng)總線(xiàn)相連,CS與譯碼器的也相連,通過(guò)譯碼器連接到系統(tǒng)總線(xiàn)。</p

10、><p>  鎖存控制電路74LS373</p><p>  在微控制器單元(MCU)中,寄存器是十分重要的資源。寄存器的主要作用是快速寄存算術(shù)邏輯運(yùn)算單元(ALU)運(yùn)算過(guò)程中的數(shù)據(jù),其鎖存功能利用74LS373來(lái)實(shí)現(xiàn), </p><p> ?。?) 鎖存使能控制端 LE。</p><p><b> ?。?) 控制輸入端</b&g

11、t;</p><p><b> ?。?) 數(shù)據(jù)輸入端</b></p><p>  通過(guò)鎖存器74LS373把數(shù)據(jù)存儲(chǔ)于集成塊中,當(dāng)LE鎖存控制端為1,\OE使能端為0時(shí),其具有輸入功能,反之其具有鎖存功能,在此系統(tǒng)中充當(dāng)一個(gè)橋梁的作用,將部分?jǐn)?shù)據(jù)傳送個(gè)8255A的A0,A1,和CS片選等等,從而驅(qū)動(dòng)發(fā)光二級(jí)管顯示不同的花色。</p><p> 

12、 由于地址鎖存器8282與74LS373有相同的功能,可以將此處的74LS373替換成8282,原理上同樣可以實(shí)現(xiàn)</p><p>  可編程并行通信接口芯片8255A:</p><p>  方式0為簡(jiǎn)單I/O,查詢(xún)方式,端口A、端口B、端口C均可使用。</p><p>  方式1為選通I/O,中斷方式,端口A、端口B可以使用,選通的輸入/輸出方式。</p&g

13、t;<p>  方式2為雙向I/O,中斷方式,只有端口A可以使用,雙向的傳輸方式。</p><p>  方式0也叫基本輸入/輸出方式。一種方式,不需要應(yīng)答聯(lián)絡(luò)信號(hào),端口A、端口B和端口C的高4位及低4位都可以作為輸入或輸出端口。方式0的應(yīng)用場(chǎng)合有無(wú)條件傳送和查詢(xún)傳送2種; 故根據(jù)我們系統(tǒng)設(shè)計(jì)的要求,綜上可知,選擇8255A為工作方式0。</p><p>  然而8255A的3

14、種基本工作方式:由方式選擇控制字來(lái)決定,D7=1(特征位)表明是設(shè)定方式選擇控制字;D7=0,則表示是端口C按位置位/復(fù)位控制字;</p><p>  端口C分成高4位(PC7~PC4)和低4位(PC3~PC0),可分別設(shè)置成輸入端口或輸出端口;端口C的高4位與端口A配合組成A組,端口C的低4位與端口B配合組成B組。</p><p>  綜上可得此系統(tǒng)需要滿(mǎn)足A端口為輸出,輸出數(shù)據(jù)給到8個(gè)

15、LED彩燈;端口C為輸入,需要檢測(cè)按鍵的輸入情況;</p><p>  問(wèn)題分析與解決方案:</p><p>  1. unknow 1-byte opcode at B900:7056! 61</p><p>  [SPICE]error---too many iterations without convergence</p><p> 

16、 在仿真過(guò)程中,出現(xiàn)以上兩行的錯(cuò)誤,太多的迭代沒(méi)有收斂性,和某個(gè)匯編語(yǔ)言在編碼過(guò)程中的地址不正確:</p><p>  說(shuō)明程序代碼過(guò)于分散,沒(méi)有模塊化,之后再將程序能夠模塊化的地方盡量改善,達(dá)到更加簡(jiǎn)潔易讀易運(yùn)行的目的由于程序中定義了 dz db 01h,03h,07h,0fh,1fh,3fh,7fh,0ffh,00h,0ffh,00h,0ffh 在在最初的調(diào)試的時(shí)候variable里面elements的

17、值總是顯示1,然而此處共有12個(gè)值,si共需要在此取11個(gè)偏移地址,所以改成11后,程序調(diào)試運(yùn)行正常;</p><p>  2.延時(shí)子程序模塊的編寫(xiě)方法多種,之前為了測(cè)試單一的彩燈循環(huán)左移是否能夠成功,采用nop延時(shí),由CPU晶振頻率計(jì)算,12M的晶振頻率,執(zhí)行一個(gè)nop需要時(shí)間1us,8086的晶振頻率是5MHz,所以執(zhí)行一個(gè)nop需要的時(shí)間是12/5us若要實(shí)現(xiàn)短暫而精確的延時(shí)可以用nop,然而此處流水燈的延

18、時(shí)僅僅用空指令nop并不具有很好的移植性和修改性,程序代碼也顯得冗余;</p><p>  一般一定功能的程序段設(shè)計(jì)成一個(gè)子程序,MASM宏匯編程序用“過(guò)程”(Procedure)來(lái)構(gòu)造子程序。如此段延時(shí)子程序:</p><p>  delay proc </p><p><b>  push cx</b></p><

19、p><b>  push bx</b></p><p>  mov cx,0fh ;修改此處的值,可以改變延時(shí)時(shí)間 </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>  在寫(xiě)此系統(tǒng)程序中,我采用的是分支結(jié)構(gòu)

21、編寫(xiě)延時(shí)程序,后查的一般分支程序?yàn)橛?jì)算機(jī)根據(jù)某種判斷,利用條件轉(zhuǎn)移指令,改變程序執(zhí)行順序所用;然而一般具有公用性,重復(fù)性,和相對(duì)獨(dú)立性的某段程序應(yīng)設(shè)計(jì)成子程序,這種結(jié)構(gòu)會(huì)給程序設(shè)計(jì)和調(diào)試帶來(lái)許多方便,在滿(mǎn)足匯編語(yǔ)言一定的規(guī)范性條件下,應(yīng)將延時(shí)模塊改成如上程序所示;</p><p>  3. 內(nèi)存空間分配,,匯編語(yǔ)言的重要特點(diǎn)之一是能夠直接利用機(jī)器指 或者偽指令為數(shù)據(jù)或者代碼程序分配內(nèi)存空間,86系列(如8086微

22、處理器)的存儲(chǔ)器結(jié)構(gòu)是分段的,有代碼段,數(shù)據(jù)段,堆棧段或附加段,在程序設(shè)計(jì)時(shí)要充分考慮分段結(jié)構(gòu),要執(zhí)行的程序段應(yīng)設(shè)在當(dāng)前段(活動(dòng)段)中;分配內(nèi)存空間:直接在proteus里面將8086CPU的internal memory size設(shè)置成一個(gè)足夠用的空間大小,如0x1000,默認(rèn)的空間大小是0x00000,如不改則仿真不成功。</p><p>  程序在運(yùn)行時(shí)所需要的工作單元應(yīng)盡可能的設(shè)在CPU寄存器中,這樣存取

23、速度快,而且操作方便;在此系統(tǒng)源程序中都采用8086CPU的全部通用寄存器:累加器AX,基數(shù)寄存器BX,基數(shù)寄存器CX,數(shù)據(jù)寄存器DX;和堆棧指針寄存器SI;</p><p>  4 在所有的程序模塊逐步成功之后,期待著整體銜接能夠成功,可是出現(xiàn)了一個(gè)現(xiàn)象:每次仿真只能實(shí)現(xiàn)一種花型,在仿真過(guò)程中按鍵根本無(wú)作用,也就是程序一直在某個(gè)彩燈子程序中運(yùn)行,無(wú)法去讀select處C端口的按鍵值,必須在仿真stop后,切換

24、按鍵值,在按仿真play后才能改變花型;</p><p>  后來(lái)發(fā)現(xiàn)原來(lái)是在每個(gè)彩燈子程序中,由于利用了loop循環(huán)去實(shí)現(xiàn)彩燈的左移與右移,使得程序跳不到下一條語(yǔ)句jmp select,一直以為有了jmp select,似乎就可以去讀取了按鍵值,后查loop的資料,loop的兩步操作:1、cx=cx-1;2、判斷cx的值,決定跳轉(zhuǎn)還是向下執(zhí)行;原來(lái)自己在子程序開(kāi)始忘記了mov cx,08h;即彩燈實(shí)現(xiàn)完一次花

25、型變換就去讀取按鍵的值,如果此時(shí)按鍵的值改變,就跳轉(zhuǎn)到相應(yīng)的程序段去執(zhí)行,否則繼續(xù)執(zhí)行當(dāng)前的彩燈花型;</p><p>  5.某個(gè)想法:在調(diào)試過(guò)程中,由于led燈一端都接地,按下啟動(dòng)鍵,并沒(méi)有什么現(xiàn)象,總讓人產(chǎn)生錯(cuò)覺(jué)是不是程序出現(xiàn)問(wèn)題,仿真不出來(lái);未來(lái)便于啟動(dòng)按鍵按下有現(xiàn)象,可將led燈的另一端接高電平,但是想來(lái)想去,如果是在現(xiàn)實(shí)中,不可能用彩燈突然全部亮來(lái)說(shuō)明系統(tǒng)啟動(dòng),故可以在連接啟動(dòng)鍵導(dǎo)線(xiàn)中用一個(gè)led燈是

26、否亮了來(lái)檢測(cè)系統(tǒng)的啟動(dòng)成功,此時(shí)所有的按鍵的另一端也要求接高電平了;</p><p>  6.整體調(diào)試過(guò)程中,SW0:?jiǎn)?dòng)/暫停能夠控制仿真過(guò)程中的狀態(tài),SW1:停止系統(tǒng),需要用到系統(tǒng)功能調(diào)用,返回當(dāng)前操作系統(tǒng);</p><p><b>  小結(jié)與體會(huì):</b></p><p>  1.cmp屬于加減運(yùn)算的范疇,而test屬于邏輯運(yùn)算的范疇&l

27、t;/p><p>  cmp主要用于比較兩數(shù)的關(guān)系,可以在有符號(hào)數(shù)和無(wú)符號(hào)數(shù)之間進(jìn)行比較。兩數(shù)相等影響ZF標(biāo)志,無(wú)符號(hào)數(shù)影響CF標(biāo)志,有符號(hào)數(shù)影響SF和OF標(biāo)志。一般根據(jù)標(biāo)志位的影響設(shè)置程序跳轉(zhuǎn),即根據(jù)不同的條件完成對(duì)應(yīng)的程序片段,類(lèi)似于高級(jí)語(yǔ)言的IF-ELSE結(jié)構(gòu)。所有的有條件轉(zhuǎn)移指令都可以用在這條指令之后。test通常用于檢測(cè)某些位是否為1,但又不希望改變操作數(shù)的場(chǎng)合。比如檢查AL中的位6和位2是否有一位為1

28、,可以用如下指令:test AL,01000100b,如果這兩個(gè)位全為0.則ZF的值為1,否則清0,那么根據(jù)標(biāo)志位設(shè)置的跳轉(zhuǎn)就只能為jz或jnz這兩條指令的相同點(diǎn)是都不會(huì)影響操作數(shù),只是通過(guò)標(biāo)志寄存器的某些位反映運(yùn)算結(jié)果。</p><p>  2. 首先,更一步深化了程序設(shè)計(jì)步驟的思想,之前的混亂狀態(tài)逐漸清晰起來(lái);編寫(xiě)程序時(shí)我遇到了許多的麻煩,開(kāi)始時(shí)我把程序編了出來(lái),但是我用Proteus仿真就和我想要的結(jié)

29、果不一致,然后我又通過(guò)認(rèn)真的分析,發(fā)現(xiàn)我的邏輯思維出錯(cuò)了,用匯編語(yǔ)言編寫(xiě)時(shí)要求有很好的邏輯思維能力,在今后的練習(xí)中得加強(qiáng)這方面的鍛煉;</p><p>  其次每一個(gè)獨(dú)立的子程序最好用回車(chē)把它與其它的語(yǔ)句分開(kāi),這樣就是為了在你查找程序錯(cuò)誤時(shí)能夠很清楚的找到錯(cuò)誤。 </p><p>  :以后在調(diào)程序時(shí),確定問(wèn)題后,要將流程和原理有非常清晰的理解,最好一步一步寫(xiě)下來(lái),這樣方便最初源程序的編寫(xiě)

30、和最后完工后的調(diào)試;</p><p>  3. 進(jìn)一步了解了8255A各引腳的功能, 8255A和系統(tǒng)總線(xiàn)之間的連接, 8255A和CPU之間的數(shù)據(jù)交換,以及8255A的內(nèi)部邏輯結(jié)構(gòu)。深入掌握了8255A顯示電路的基本功能及編程方法,同時(shí)也深入了解了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 ;結(jié)果是0,CF=1,跳轉(zhuǎn)到exit去執(zhí)行 </p><p><b>  set: </b></p><p>  test al,20h</p><p>  jz select ;若是結(jié)果是0,則繼續(xù)檢測(cè)按鍵</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 ;寫(xiě)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 ;定義延時(shí)子程序 </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: ; 延時(shí)子程序 </p><p><b>  pushf</b></p><p><b&g

52、t;  push bx</b></p><p>  push cx ;保護(hù)現(xiàn)場(chǎng)</p><p>  mov bx, 0e0h</p><p>  lp2: mov cx ,176h</p><p>  lp1: pushf ;標(biāo)志入棧</p><p>  p

53、opf ;標(biāo)志出棧</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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論