北郵微原硬件實(shí)驗(yàn)報(bào)告_第1頁
北郵微原硬件實(shí)驗(yàn)報(bào)告_第2頁
北郵微原硬件實(shí)驗(yàn)報(bào)告_第3頁
北郵微原硬件實(shí)驗(yàn)報(bào)告_第4頁
北郵微原硬件實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、,處均蜜大號beijing university of posts and ielccommunication2015-2016學(xué)年第一學(xué)期微機(jī)原理硬件實(shí)驗(yàn)報(bào)告學(xué)院:班級:序號:精品文檔目錄實(shí)驗(yàn)一 熟悉實(shí)驗(yàn)環(huán)境及io 的使用 31 實(shí)驗(yàn)?zāi)康?32 實(shí)驗(yàn)內(nèi)容 33 實(shí)驗(yàn)過程 31 實(shí)驗(yàn)原理 32 流程圖 33 源代碼 44 子程序清單 65 代碼分析 64 實(shí)驗(yàn)總結(jié) 6實(shí)驗(yàn)二8255a 并行接口應(yīng)用 71 實(shí)驗(yàn)?zāi)康?72 實(shí)驗(yàn)內(nèi)容 73 實(shí)驗(yàn)過程 71 八位數(shù)碼管位選規(guī)律 72 六位數(shù)碼管靜態(tài)顯示 83 六位數(shù)碼管動態(tài)顯示 114 擴(kuò)展:顯示鍵盤輸入學(xué)號 154 實(shí)驗(yàn)總結(jié) 21實(shí)驗(yàn)三 8253

2、計(jì)數(shù)器 / 定時(shí)器的應(yīng)用 221 實(shí)驗(yàn)?zāi)康?222 實(shí)驗(yàn)內(nèi)容 223 實(shí)驗(yàn)過程 221 蜂鳴器發(fā)音規(guī)律 222 音樂發(fā)生器 233 擴(kuò)展:小鍵盤彈琴功能 324 實(shí)驗(yàn)總結(jié) 383 歡迎下載。熟悉實(shí)驗(yàn)環(huán)境及 io 的使用實(shí)驗(yàn)?zāi)康? 通過實(shí)驗(yàn)了解和熟悉實(shí)驗(yàn)臺的結(jié)構(gòu),功能及使用方法。2 通過實(shí)驗(yàn)掌握直接使用debug的i、o命令來讀寫i/o端口。3 學(xué)會 debug 的使用及編寫匯編程序。二 實(shí)驗(yàn)內(nèi)容1 學(xué)習(xí)使用debug命令,并用i、o命令直接對端口進(jìn)行讀寫操作。2 用匯編語言編寫跑馬燈程序。實(shí)現(xiàn)功能:1)通過讀入端口狀態(tài),選擇工作模式(燈閃爍方式、速度等) ;2)通過輸出端口控制燈的工作狀態(tài)(低

3、電平燈亮)。三 實(shí)驗(yàn)過程1 實(shí)驗(yàn)原理1 在debug下,用i是命令讀輸入端口的狀態(tài),即撥碼開關(guān)的狀態(tài),用。命令向端口輸出數(shù)據(jù),通過led發(fā)光管來查看。測試結(jié)果:1) 使用命令:i 0eee0h讀取開關(guān)狀態(tài),得出的結(jié)果為左低右高,即 是低位, 是高位。2) 實(shí)驗(yàn)命令:o 0eee0h測試led,改變輸入的值可依次測試各個(gè)數(shù)碼管是否正常。led左邊為高位,右邊為低位。2 分析以下程序段的作用mov ah, 0bhint 21hor al, aljz 0100int 20h該段程序?qū)崿F(xiàn)了檢測鍵盤狀態(tài),在鍵盤有任意鍵輸入時(shí)退出程序返回dosw功能。該實(shí)現(xiàn)依賴于0bh號中斷調(diào)用和巧妙使用程序入口返回地址

4、直接返回。在dosw debugs式下,地址不用添加十六進(jìn)制h標(biāo)志。地址默認(rèn)為16進(jìn)制,多寫了反而畫蛇添足產(chǎn)生錯(cuò)誤。普通數(shù)據(jù)為了區(qū)分需要添加h。2 流程圖精品文檔begin movax data movds ax moval, 07fh movdx port movsi, 2start pushax in al, dx movbl, al popax test bl, 10hjnz two cmpsi, 1;011111113源代碼data segmentport equ0eee0hdata endsstack segmenstackstackdb 100 dup?)stack endscod

5、e segmentassumeds datacs codess stack;入棧保存;讀取撥碼開關(guān)狀態(tài);bl存儲撥碼開關(guān)狀態(tài);出棧恢復(fù);00010000.判斷左數(shù)第五個(gè)撥碼開關(guān)的狀態(tài),;實(shí)現(xiàn)燈型的變化;on狀態(tài)為兩個(gè)燈;判斷al狀態(tài)_ 。4歡迎下載精品文檔7 歡迎下載。jz contmovah, alrorah, 1or al, ahmovsi , 2jmpconttwo: cmp si , 2jz contmovah, alrorah, 1and al, ahmovsi , 1cont: out dx, altest bl, 08h jnz starttest bl, 02hjnz high

6、spmovbp, 0200hjmpmovehighsp: movbp, 0100hmove: call delaytest bl, 04hjnz leftright: roral, 1jmpexitleft:rol al, 1exit:test bl, 01hjz startmoval, 0ffhout dx, almovah, 4chint 21hdelay procmovcx, bploop1: pushcxmovcx, 0ffffhloop2: looploop2popcxlooploop1retdelay endpcodee ndsendbegin;si等于1時(shí)al有兩位為0,應(yīng)恢復(fù)為

7、只有一位為0,;al 恢復(fù)為只有一位為0, si 變?yōu)?2;si為2時(shí)只有al只有1位為0,應(yīng)對其變換;al 有兩位為 0;00001000. 判斷第四個(gè)撥碼開關(guān)的狀態(tài),實(shí)現(xiàn)暫停;on犬態(tài)實(shí)現(xiàn)暫停;00000010. 判斷第二個(gè)撥碼開關(guān)的狀態(tài),; 實(shí)現(xiàn)速度的變化;on犬態(tài)實(shí)現(xiàn)高速; 低速狀態(tài)時(shí)延; 高速狀態(tài)時(shí)延; 判斷第三個(gè)撥碼開關(guān)的狀態(tài),實(shí)現(xiàn)方向的變化;on狀態(tài)為方向向左; 右移,以備點(diǎn)亮下一盞燈; 左移,以備點(diǎn)亮下一盞燈; 判斷第一個(gè)撥碼開關(guān)的狀態(tài);off狀態(tài)繼續(xù)運(yùn)行,on犬態(tài)實(shí)現(xiàn)退出; 實(shí)現(xiàn)全滅;bp 越大延時(shí)次數(shù)越多,速度越慢4 子程序清單1)子程序名: delay功能:實(shí)現(xiàn)延遲顯示,

8、即控制每個(gè)led點(diǎn)亮持續(xù)一定時(shí)間;入口參數(shù):bp,賦彳1給cx控制循環(huán)次數(shù),從而實(shí)現(xiàn)速度的控制; 出口參數(shù):無;使用寄存器:cx, bp。5 代碼分析1) 通過讀取撥碼開關(guān)地址獲得撥碼開關(guān)狀態(tài),將該狀態(tài)的值賦給bl,實(shí)現(xiàn)對燈型、暫停、速度、方向以及退出的控制。2) 燈型的控制: 通過相應(yīng)撥碼開關(guān)的狀態(tài)選擇燈型。 燈型一共有兩種, 第一種為每次亮一盞燈, 此時(shí)控制輸出的寄存器al 中的值只有一位為 0, 其余七位為 1; 第二種為每次亮兩盞燈, 此時(shí)控制輸出的寄存器al 中的值兩位為 0 , 其余六位為 1。 使用寄存器 si 表示當(dāng)前寄存器 al 中 0 的個(gè)數(shù), 當(dāng) si 的值與控制燈型的信

9、息不一致時(shí),通過邏輯與/ 邏輯或的操作,修改 al 的值。3) 暫停的控制: 通過相應(yīng)撥碼開關(guān)的狀態(tài)判斷是否執(zhí)行暫停操作。 當(dāng)需要暫停時(shí), 控制輸出的寄存器al 中的值保持不變, 當(dāng)不需要暫停時(shí), 控制輸出的寄存器al 中的值循環(huán)左移 / 循環(huán)右移。4) 速度的控制:通過相應(yīng)撥碼開關(guān)的狀態(tài)判斷速度的大小。在不同的狀態(tài)下,對bp賦不同的值,bp作為delay?程序的入口參數(shù)控制延時(shí)的時(shí)間從而實(shí)現(xiàn)速度的變 化。bp越大,則外循環(huán)次數(shù)越多,所耗時(shí)間越長,每個(gè)led點(diǎn)亮持續(xù)時(shí)間越久,即速度越慢。5) 方向的控制: 通過相應(yīng)撥碼開關(guān)的狀態(tài)判斷方向。 在不同的狀態(tài)下, 對控制輸出的 寄存器al中的值循環(huán)左

10、移/循環(huán)右移,即可控制顯示的方向。6) 退出的控制:通過相應(yīng)撥碼開關(guān)的狀態(tài)判斷是否退出程序。實(shí)驗(yàn)總結(jié)雖然本次實(shí)驗(yàn)是第一次微原硬件實(shí)驗(yàn), 但是在此之前已經(jīng)有了一定的軟件編程基礎(chǔ), 并且在vhdl實(shí)驗(yàn)中我們也曾編寫過跑馬燈實(shí)驗(yàn),因而實(shí)驗(yàn)之前對實(shí)驗(yàn)原理及代碼結(jié)構(gòu)有初步的掌握。實(shí)驗(yàn)過程中我們按照講義中的要求先對撥碼開關(guān)及l(fā)ed進(jìn)行了測試,便捷了之后程序的編寫。 總而言之,通過本次實(shí)驗(yàn),我們對利用匯編語言對硬件進(jìn)行編程有了一定的掌握,對后續(xù)實(shí)驗(yàn)的開展奠定了良好的基礎(chǔ)。精品文檔9歡迎下載實(shí)驗(yàn)二8255a并行接口應(yīng)用一實(shí)驗(yàn)?zāi)康? 掌握8255a的功能及方式0、1的實(shí)現(xiàn)。2 熟悉8255a與cpu的接口,以及

11、傳輸數(shù)據(jù)的工作原理及編程方法。3 了解七段數(shù)碼管顯示數(shù)字的原理。4 掌握同時(shí)顯示多位數(shù)字的技術(shù)。二實(shí)驗(yàn)內(nèi)容1 八段數(shù)碼管的顯示規(guī)律及數(shù)碼管的位選規(guī)律。2 六位數(shù)碼管靜態(tài)顯示。在數(shù)碼管電路上靜態(tài)地顯示6位學(xué)號,當(dāng)主機(jī)鍵盤按下任意鍵時(shí),停止顯示,返回 dos3 六位數(shù)碼管動態(tài)顯示。要求在數(shù)碼管電路1 6位數(shù)碼管上,動態(tài)顯示字符串hello當(dāng)主機(jī)鍵盤按下任意鍵時(shí)結(jié)束。4 擴(kuò)展部分:完成掃描鍵盤(pc 口)輸入自己的學(xué)號,并在數(shù)碼管上顯示。三實(shí)驗(yàn)過程1八位數(shù)碼管位選規(guī)律在方式0 (輸入/輸出)下,以a 口為輸出口, b 口為輸出口, a 口接六個(gè)共陰極數(shù)碼 管的八位段碼,高電平點(diǎn)亮數(shù)碼管的某一段,b口

12、接數(shù)碼管的位選(即要使哪個(gè)數(shù)碼管亮),高電平選中某一位數(shù)碼管點(diǎn)亮。 測試結(jié)果如下圖:pa3*pa2-pampa3ipa*pa0*根據(jù)上述測試結(jié)果,不難得出0-9對應(yīng)的編碼,如下表:字形0123456789編碼0edh21h0f4h0f1h39h0d9h0ddh61h0fdh0f9h02六位數(shù)碼管靜態(tài)顯示2.1實(shí)驗(yàn)原理1) 電路6個(gè)數(shù)碼管的同名陽極段已經(jīng)復(fù)接,當(dāng)段選寄存器寄存了一個(gè)字型編碼之后,6個(gè)數(shù)碼管都將顯示出相同的數(shù)字。 如果要使6個(gè)數(shù)碼管“同時(shí)”顯示不同的數(shù)字, 必須采用掃描顯示的方法。2) 通過選位寄存器選擇某一位數(shù)碼管,顯示其數(shù)字(對應(yīng)段值為1),然后關(guān)閉此數(shù)碼管,再選擇下一位數(shù)碼管

13、進(jìn)行顯示;如果在一秒鐘內(nèi),每一位數(shù)碼管都能顯示 30次以上,則人眼看到的是幾位數(shù)碼管同時(shí)在顯示。實(shí)驗(yàn)證明,在掃描顯示過程 中,每一位顯示延遲 1ms是最佳選擇。3) 在本次實(shí)驗(yàn)中,采用行掃描方式,一次掃描6位數(shù)碼管,并進(jìn)行反復(fù)循環(huán),使得每位數(shù)碼管顯示雖然存在間隔, 但人眼仍為同時(shí)顯示。 每位數(shù)碼管顯示的時(shí)間即為顯 示延遲,在每一次掃面之后檢測鍵盤狀態(tài),若有任意鍵輸入,便退出返回do沸面。2.2流程圖結(jié)束精品文檔2.3 源代碼data segmentnumdb 0f4h, 21h, 0edh, 0ddh, 39h, 61h; 學(xué)號后六位為 210647data ends;stack segmen

14、sttack stackdb 100 dup( 0)stack endscode segmentassumecs: code, ds: data, ss: stackstat:moval, 10000000bmovdx, 0ee03hout dx, al movax, data movds, ax moves, axlop1:xorsi , simovcx, 06hmovdx, 0ee00hmovbl, 00000001blop2:moval, num si out dx, al moval, blinc dxout dx, al dec dxrol bl, 1inc sicall delay

15、call key looplop2 jmp lop1delay procnearpushbxpushcxmovbx, 000bhlop3:movcx, 00hloop$dec bxjnz lop3popcx;a,b,c 口均以方式0輸出; 設(shè)置控制地址; 送控制字到控制地址; 設(shè)置段地址;si 清零; 循環(huán) 6 次,即一個(gè)周期6位數(shù)碼管;a 口的地址賦給dx, a口接八位段碼; 高電平即選中該位數(shù)碼管點(diǎn)亮; 將需要顯示的數(shù)字賦給al;送al輸出至a端口; 將控制哪一位亮的功能賦給al;b 口的地址賦給dx, b口接六位數(shù)碼管;送al輸出至b端口,完成指定位顯示指定數(shù)字;重新將a 口地址賦給dx

16、; 循環(huán)移位,控制下一位數(shù)碼管亮;si 加1 ,使得下次顯示中改變所顯示的數(shù)字; 延時(shí),即每位數(shù)碼管點(diǎn)亮的時(shí)間; 判斷是否有鍵盤輸入; 循環(huán) 6 次, 6位數(shù)碼管依次按要求點(diǎn)亮; 循環(huán),重新于第一位開始點(diǎn)亮; 延時(shí)程序,雙重循環(huán);bx入棧,保留bx1?存器中的數(shù)據(jù);cx入棧,保留ow存器中的數(shù)據(jù);bx 重新賦值;cx 重新賦值;每循環(huán)一次,cxb減1,直至結(jié)果為0,即ff次;bx 減 1; 結(jié)果為0時(shí)停止,即循環(huán)11 次;cx 中數(shù)據(jù)恢復(fù)為入棧前的值pop bx;bx 中數(shù)據(jù)恢復(fù)為入棧前的值retdelay endp;key procnear; 判斷是否有鍵盤輸入pushax;ax入棧,保留b

17、xf?存器中的數(shù)據(jù)movah, 0bh; 檢查輸入設(shè)備狀態(tài)int 21hor al, al;無輸入字符al為00h,有輸入為ffhjz goon; 全為 0 即為無輸入,返回主程序movdx, 0ee01hmoval, 00houtdx al;完成b端口清零,即6位全滅movah, 4ch; 退出程序int 21hgoon: popaxretkey endp;code endsendstat2.4 子程序清單1)子程序名: delay功能:實(shí)現(xiàn)延遲顯示,即控制每個(gè)led點(diǎn)亮持續(xù)一定時(shí)間;入口參數(shù):無;出口參數(shù):無;使用寄存器:bx, cx, fr。2)子程序名:key功能:判斷是否有鍵盤輸入,

18、若有則退出程序;入口參數(shù):無;出口參數(shù):無使用寄存器:ax, dx, fr。2.5 代碼分析1) 靜態(tài)顯示的過程可以分為六個(gè)狀態(tài), 在每個(gè)狀態(tài)中, 只有一位數(shù)碼管工作, 顯示對 應(yīng)數(shù)字信息。 系統(tǒng)循環(huán)進(jìn)行這六個(gè)狀態(tài), 當(dāng)速度合適時(shí)有靜態(tài)顯示六位數(shù)字的效果。2) 在數(shù)據(jù)段中定義 num在numfr存入待顯示的“ 210647”六位數(shù)字,根據(jù)之前測試 得其對應(yīng)編碼為 0f4h, 21h, 0edh 0ddh 39h和61h; cx表示循環(huán)次數(shù);si表示 顯示數(shù)字在numfr的位置;bl控制數(shù)碼管的工作狀態(tài)。3)在每個(gè)狀態(tài)中,將需要顯示的信息賦值給al,送至8位段碼的a 口輸出,然后將bl賦給al,

19、送至控制6位數(shù)碼管的b 口輸出,從而使數(shù)碼管在不同的位置顯示數(shù)11 歡迎下載。精品文檔字信息。4) 在每個(gè)狀態(tài)結(jié)束時(shí),對bl做循環(huán)移位,si自加1,調(diào)用延時(shí)函數(shù)控制顯示的速度。 調(diào)用判斷鍵盤輸入函數(shù),延時(shí)之后若無鍵盤輸入,進(jìn)入下一狀態(tài)。如此循環(huán)完成6位數(shù)碼管的顯示。5)若循環(huán)一個(gè)周期仍無鍵盤輸入,則回到第一個(gè)狀態(tài)重新循環(huán),直至有鍵盤輸入。6)延時(shí)程序中,采用兩層嵌套循環(huán)實(shí)現(xiàn)延時(shí)。對bx, cx采用入棧操作后重新賦值,bx賦初值為000bh, cx為00h,內(nèi)循環(huán)為每循環(huán)一次, cx自減1,直至cx等于0, 即內(nèi)循環(huán)ffffh,外循環(huán)為每循環(huán)一次,bx減一,當(dāng)bx為0時(shí)終止循環(huán),即外循環(huán)0bh次

20、,總共實(shí)現(xiàn)ffffh*0bh時(shí)跳出循環(huán),bx, cx恢復(fù)為原值后返回主程 序,實(shí)現(xiàn)延時(shí)顯示。7)判斷有無鍵盤輸入時(shí),調(diào)用口0前令,ah為0bh即為判斷是否有鍵盤輸入,無字符輸入時(shí)al為00h,與自身或操作之后結(jié)果仍全為0,返回主程序,若有字符輸入時(shí)al與自身或操作之后結(jié)果不為 0,對b端口輸出00h,即6位數(shù)碼管全滅之后退 出程序。3六位數(shù)碼管動態(tài)顯示3.1實(shí)驗(yàn)原理6位靜態(tài)字符,每次顯示一定1)數(shù)碼管動態(tài)顯示“ hello字符串,相當(dāng)于每次顯示2)每次顯示靜態(tài)字符串的核心代碼與靜態(tài)顯示實(shí)驗(yàn)的代碼相同,因而可以將靜態(tài)顯示中的程序封裝為一個(gè)子程序直接使用。增加的功能為需要按一定時(shí)間間隔移位讀取“

21、hell。,程序中通過將其前加入六個(gè)空字符,作為碼表存儲,第一次讀取為六個(gè)空字符,第二次為五個(gè)空字符和字符“h,第三次為四個(gè)空字符和字符“he,依次類推,顯示時(shí)依次往后讀取即可。3)可以通過讀取撥碼開關(guān)輸入的狀態(tài),控制延時(shí)的時(shí)間,從而實(shí)現(xiàn)速度快慢的變化以及實(shí)現(xiàn)暫停的功能。14歡迎下載3.2流程圖產(chǎn)始初始化是 ,結(jié)耒3.3源代碼datasegmentmesgb 0, 0, 0, 0, 0, 0, 3dh 0dch 8ch 8ch 0edh 0;據(jù)顯示規(guī)律 hello對應(yīng)碼表為3dh,0dch,8ch,8ch,0edh dataends ;stack segmenttack stackdb 100

22、 dur0) stack ends ;code segmentassumeds datacs codess stack ;main procfarmovax data精品文檔movds, ax; 設(shè)置段地址moves, axmoval, 80hmovdx, 0ee03houtdxal;端口 a,b,c均以方式0輸出lop6 movbx, offsetmesg ; 設(shè)置偏移量movcx, 07h; 循環(huán)次數(shù),對應(yīng) 7個(gè)狀態(tài)lop5 movdx, 0eee0h; 撥碼開關(guān)狀態(tài)控制顯示速度in al, dx; 讀撥碼開關(guān)狀態(tài)給alinc al; 自加 1 ,預(yù)防全0時(shí)不便延時(shí)and al, 07h;

23、 取低三位的值xorah, ah; 高八位清零movdx, axdx表示顯示速度lopz call disp; 調(diào)用靜態(tài)顯示函數(shù)dec dxdx為撥碼開關(guān)后三位狀態(tài),自減1jnz lopzdx不為0時(shí)繼續(xù)顯示dx越大同一狀態(tài)顯示時(shí)間越長,速度越慢inc bx自力口 1, bx旨向下一狀態(tài)looplop5; 循環(huán) 7 次,實(shí)現(xiàn)滾動效果jmp lop6; 每次循環(huán)結(jié)束后回到第一個(gè)狀態(tài)mainendp;dispprocnear-; 將靜態(tài)顯示封裝為子程序pushcx; 入棧保護(hù)pushdxpushaxmovbp, 000ah; 控制延時(shí)lopx xorsi, simovcx, 06h; 循環(huán) 6次,

24、即依次點(diǎn)亮6位數(shù)碼管movdx, 0ee00hmovah, 00000001b; 一次只亮一位lop2moval, mesg bx+si ; 需要顯示的字符對應(yīng)的碼值賦給alout dx, al; 完成段碼輸出moval, ah; 控制第幾個(gè)數(shù)碼管工作inc dxout dx, al; 完成位碼輸出dec dxrol ah, 1; 下一個(gè)數(shù)碼管工作inc sicall delay; 調(diào)用延時(shí)函數(shù)實(shí)現(xiàn)每位數(shù)碼管的延時(shí)顯示call key; 調(diào)用判斷鍵盤輸入狀態(tài)的函數(shù)looplop2; 如此循環(huán)直至數(shù)碼管依次被點(diǎn)亮dec bp; 自減 1jnzlopx;bp不為0則繼續(xù)循環(huán),即顯示的字符串不變16

25、 歡迎下載。disppopaxpopdxpopcxretendp; 出棧恢復(fù);key procnearpushaxmovah, 0bhint 21hor al, aljz goonmovdx=0ee00hmoval, 00hout dx, almovah, 4chint 21hgoon: popaxretkey endp; 判斷是否有鍵盤輸入; 入棧保護(hù);dos調(diào)用,將鍵盤輸入信息賦給al; 若沒有輸入則繼續(xù)工作; 若有輸入則六個(gè)數(shù)碼管均不工作; 退出程序;delaylopd:delayprocpushaxpushcxmovax, 000bhmovcx, 0hloop$dec axjnz lo

26、pdpopcxpopaxretendp; 控制延時(shí),兩層循環(huán); 入棧保護(hù);外循環(huán)0bh;內(nèi)循環(huán)ffff次;codeendsendmain3.4 子程序清單1) 子程序名: delay功能:實(shí)現(xiàn)延遲顯示,即控制每個(gè)led點(diǎn)亮持續(xù)一定時(shí)間;入口參數(shù):無;出口參數(shù):無;使用寄存器:ax, cx, fr。精品文檔2) 子程序名:key功能:判斷是否有鍵盤輸入,若有則退出程序;入口參數(shù):無;出口參數(shù):無;使用寄存器:ax, dx fr。3) 子程序名:disp功能:靜態(tài)顯示6位指定字符;入口參數(shù):無; 出口參數(shù):無;使用寄存器:ax, cx dx, si, bp, fr3.5 代碼分析1)動態(tài)顯示的過程

27、可以分為七個(gè)狀態(tài),在每個(gè)狀態(tài)中,靜態(tài)顯示六位數(shù)碼管信息。系統(tǒng)循環(huán)進(jìn)行這七個(gè)狀態(tài),當(dāng)速度合適時(shí)有動態(tài)顯示的效果。2)在數(shù)據(jù)段中定義 mes嗷組,依次存入 “0,0,0q0q3dh,0dch,8ch,8ch,0edh,0 ; cx表示循環(huán)次數(shù),對應(yīng)表中的七個(gè)狀態(tài);bx表示當(dāng)前需要顯示的狀態(tài),dx表示動態(tài)顯示的速度。3)將靜態(tài)顯示的程序封裝為子程序以供調(diào)用,在每個(gè)狀態(tài)中調(diào)用子程序disp實(shí)現(xiàn)六位數(shù)碼管的靜態(tài)顯示,調(diào)用子程序delays現(xiàn)延時(shí),調(diào)用子程序key判斷鍵盤有無 輸入。4)每個(gè)狀態(tài)結(jié)束時(shí),bx加1,表示進(jìn)入下一狀態(tài),如此循環(huán)完成數(shù)碼管的動態(tài)顯示。5)主程序中通過讀取撥碼開關(guān)狀態(tài),將其后三位賦

28、給dx并在子程序 disp返回時(shí),自減實(shí)現(xiàn)延時(shí)。dx越大,循環(huán)時(shí)間越久,則對應(yīng)的滾動速度越慢。6)若循環(huán)一個(gè)周期仍無鍵盤輸入,則回到第一個(gè)狀態(tài)重新循環(huán),直至有鍵盤輸入。4擴(kuò)展:顯示鍵盤輸入學(xué)號4.1實(shí)驗(yàn)原理通過4*4鍵盤電路輸入學(xué)號,其控制原理如下:1) 通過地址為ee02的端口 c讀取鍵盤輸入,其中pc4 pc5 pc6 pc7分別接行輸入,pc3 pc2 pc_k 同日30272422201816后續(xù)實(shí)驗(yàn)的展開均基于上表規(guī)律。2音樂發(fā)生器2.1實(shí)驗(yàn)原理1)微機(jī)系統(tǒng)使用的8253,其3個(gè)通道均有固定的用途:0號計(jì)數(shù)器為系統(tǒng)時(shí)鐘源,每隔55ms向系統(tǒng)主8259ir0提一次中斷請求;1號計(jì)數(shù)器用

29、于動態(tài)存儲器的定時(shí)刷 新控制;2號計(jì)數(shù)器為系統(tǒng)的發(fā)聲源。2)用戶在使用微機(jī)系統(tǒng)的時(shí)候,可以使用0號和2號計(jì)數(shù)器,但不能改變對1號計(jì)數(shù)器的初始化。實(shí)驗(yàn)箱上的 8253,其數(shù)據(jù)線 d7 do,地址線a1、a0和控制線rd wr!過總線驅(qū)動卡和微機(jī)系統(tǒng)的三總線相連。3)除此之外,三個(gè)計(jì)數(shù)器的引出段和片選端都是懸空的,這意味著實(shí)驗(yàn)箱上的8253的三個(gè)計(jì)數(shù)器都?xì)w用戶使用,可以單獨(dú)使用其中的一個(gè)計(jì)數(shù)器,也可以串聯(lián)使用其中的2個(gè)或3個(gè)計(jì)數(shù)器。8253計(jì)數(shù)器的輸入信號,其頻率不能超過2mhz否則長時(shí)間使用,芯片過熱。4) 8253使用之前,需先對其進(jìn)行初始化編程,其步驟分為向控制寄存器端口寫入控制字對使用的計(jì)

30、數(shù)器規(guī)定其使用方法,向使用的計(jì)數(shù)器端口寫入計(jì)數(shù)初值。8253的控制字控制規(guī)律如下:d7d6d5d4d3d2d1d0計(jì)數(shù)器選擇讀寫方式選擇工作方式選擇數(shù)制選擇d7d6= 00:使用0號計(jì)數(shù)器,d7d6= 01:使用1號計(jì)數(shù)器d7d6= 10:使用2號計(jì)數(shù)器,d7d6= 11 :無效d5d4= 00:鎖存當(dāng)前計(jì)數(shù)值d5d4= 01 :只寫低8位(高8位為0),讀出時(shí)只讀低 8位d5d4= 10:只寫高8位(低8位為0),讀出時(shí)只讀高 8位d5d4= 11 :先讀/寫低8位,后讀/寫高8位計(jì)數(shù)值d3d2d4 000:選擇方式 0, d3d2d4 001:選擇方式 1d3d2d4x10:選擇方式 2,

31、 d3d2d4x11:選擇方式 3d3d2d4 100:選擇方式 4, d3d2d4 101:選擇方式 5d0= 0:計(jì)數(shù)初值為二進(jìn)制,d0= 1:計(jì)數(shù)初值為bc加數(shù)5) 8253控制端口地址為 ee23h定日器0地址為ee20h定日器1地址為ee21h定 時(shí)器2地址為ee22h2.2 電路連接圖q7(32khz)5v2.3 流程圖1)主程序流程圖凋用mp lfpvnvafl.rx-bx - lmusic去定si .性世器架擊 amr3rhyme .由川舞時(shí)2) read?程序3) led子程序altonbxah-ofdh右邊第二個(gè)leo高4) rhymef 程序精品文檔2.4 源代碼data

32、 segment ; 計(jì)時(shí)器計(jì)數(shù)初值lou db 122, 108, 97, 91,81, 72, 64middb 61, 54,48,45,40, 36, 32higdb 30, 27, 24, 22,20, 18, 16; 音符信息 1do 2re 3mi 4fa 5so 6la 7sibok ;曲一巴赫g大調(diào)小步舞曲db5,1,2,3,4,5, 1, 1db6,4,5,6,7, 1, 1, 1db 4, 5, 4, 3, 2, 3, 4, 3, 2, 1db 2, 1, 2, 3, 1, 2db5,1,2,3,4,5, 1, 1db3,1,2,3,4,5, 1, 1db 4, 5, 4,

33、 3, 2, 3, 4, 3, 2, 1db 2, 3, 2, 1, 2, 1 ; 曲二db 1, 2, 3, 4, 5, 6, 7db 1, 2, 3, 4, 5, 6, 7db 1, 2, 3, 4, 5, 6, 7db 1, 2, 3, 4, 5, 6, 7db 1, 2, 3, 4, 5, 6, 7db 1, 2, 3, 4, 5, 6, 7len1equ 64; 曲一音符總個(gè)數(shù)len2equ 42; 曲二音符總個(gè)數(shù); 音調(diào)信息 1 低調(diào) 2 中調(diào) 3 高調(diào)ton ; 曲一 音調(diào)db 2, 2, 2, 2, 2, 2, 2, 2db 2, 2, 2, 2, 2, 3, 2, 2db 2

34、, 2, 2, 2, 2, 2, 2, 2, 2, 2db 2, 2, 2, 2, 2, 2db 2, 2, 2, 2, 2, 2, 2, 2db 2, 2, 2, 2, 2, 2, 2, 2db 2, 2, 2, 2, 2, 2, 2, 2, 2, 2db 2, 2, 2, 2, 2, 2 ; 曲二db 1, 1, 1, 1, 1, 1, 1db 2, 2, 2, 2, 2, 2, 2db 3, 3, 3, 3, 3, 3, 3db 1, 1, 1, 1, 1, 1, 1db 2, 2, 2, 2, 2, 2, 2db 3, 3, 3, 3, 3, 3, 3; 節(jié)拍信息 2 半拍 4 一拍r

35、hy ; 曲一db 4, 2, 2, 2, 2, 4, 4, 4db 4, 2, 2, 2, 2, 4, 4, 4db 4, 2, 2, 2, 2, 4, 2, 2, 2, 2db 4, 2, 2, 2, 2, 4db 4, 2, 2, 2, 2, 4, 4, 4db 4, 2, 2, 2, 2, 4, 4, 4db 4, 2, 2, 2, 2, 4, 2, 2, 2, 2db 4, 2, 2, 2, 2, 4; 曲二db 2, 2, 2, 2, 2, 2, 2db 2, 2, 2, 2, 2, 2, 2db 2, 2, 2, 2, 2, 2, 2db 4, 4, 4, 4, 4, 4, 4d

36、b 4, 4, 4, 4, 4, 4, 4db 4, 4, 4, 4, 4, 4, 4;1-7 數(shù)碼管顯示key db 21h, 0f4h, 0f1h, 39h, 0d9h, 0ddh, 61h; 存儲用tbokdb 0ttondb 0trhydb 0count db 0dataends;stack segmentstack stackdb 50 dup(?)stack ends;codes egmentassumeds: data, cs: code, ss: stack;delay macrotime; 延時(shí)宏指令 形參 :timelocallopapushcxmovax, timelopa: movcx, 00h41 歡迎下載。loop$ dec ax jnz lopa popcx endm;music macromoval, count movdx, 0ee20h out dx, alendm;readprocnearmoval, bok bx xorah, ahmovsi , ax dec simovtbok, al moval, rhy bx movtrhy, almoval, ton bx cmpal, 1je islowcmpal, 2 je ismidcmpal, 3je

溫馨提示

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

評論

0/150

提交評論