微機(jī)原理課程設(shè)計(jì)報(bào)告-數(shù)字時(shí)鐘的實(shí)現(xiàn)(附代碼)_第1頁(yè)
微機(jī)原理課程設(shè)計(jì)報(bào)告-數(shù)字時(shí)鐘的實(shí)現(xiàn)(附代碼)_第2頁(yè)
微機(jī)原理課程設(shè)計(jì)報(bào)告-數(shù)字時(shí)鐘的實(shí)現(xiàn)(附代碼)_第3頁(yè)
微機(jī)原理課程設(shè)計(jì)報(bào)告-數(shù)字時(shí)鐘的實(shí)現(xiàn)(附代碼)_第4頁(yè)
微機(jī)原理課程設(shè)計(jì)報(bào)告-數(shù)字時(shí)鐘的實(shí)現(xiàn)(附代碼)_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余15頁(yè)可下載查看

下載本文檔

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

文檔簡(jiǎn)介

1、合肥工業(yè)大學(xué)計(jì)算機(jī)與信息學(xué)院課程設(shè)計(jì)課 程:微機(jī)原理與接口技術(shù)設(shè)計(jì)專業(yè)班級(jí):計(jì)算機(jī)科學(xué)與技術(shù) x班學(xué) 號(hào):姓 名:一、設(shè)計(jì)題目及要求:【課題6】數(shù)字時(shí)鐘分、小121040 )。1 .通過(guò)8253定時(shí)器作產(chǎn)生秒脈沖定時(shí)中斷。在中斷服務(wù)程序中實(shí)現(xiàn)秒、時(shí)的進(jìn)位 (24小時(shí)制)。2 .在七段數(shù)碼管上顯示當(dāng)前的時(shí)分秒(例如,12點(diǎn)10分40秒顯示為3 .按“C”可設(shè)置時(shí)鐘的時(shí)間當(dāng)前值(對(duì)準(zhǔn)時(shí)間)。二、設(shè)計(jì)思想:總體思想:資料.1、功能概述:實(shí)驗(yàn)箱連線:本實(shí)驗(yàn)建立在Dais實(shí)驗(yàn)箱基礎(chǔ)上完成的基本連線及程序如下 138譯碼器:A,B,C,D,分別連接 A2,A3,A4,GS ;y0連接8253的CS片選信號(hào)

2、;y1連接8259的CS片選信號(hào);8253連線:分頻信號(hào) T2接8253的CLK0 ;8253 的 OUT0 接 8259 的 IR7;8253的gate 信號(hào)接+5V ;8259連線:8259的數(shù)據(jù)線接入數(shù)據(jù)總線;本程序包括顯示模塊,鍵盤(pán)掃描模塊,時(shí)間計(jì)數(shù)模塊,設(shè)置模塊等幾個(gè)模塊,(1)程序運(yùn)行后,LED顯示000000初始值,并且開(kāi)始計(jì)數(shù)(2)按C鍵進(jìn)行設(shè)置初始時(shí)間,考慮到第一個(gè)數(shù)只能是0, 1, 2,當(dāng)?shù)谝粋€(gè)數(shù)顯示 2時(shí)第二個(gè)數(shù)只能顯示 04 ,同理下面各位應(yīng)滿足時(shí)鐘數(shù)值的合理的取值;(3)在手動(dòng)輸入初始值時(shí),按D鍵進(jìn)行回退1位修改已設(shè)置值,連續(xù)按 D鍵可以全部進(jìn)行刪除修改。2、主程序設(shè)

3、計(jì)主程序中完成通過(guò)調(diào)用子程序完成對(duì)8253及8259的初始化,對(duì)8259進(jìn)行中斷設(shè)置。主要在顯示子程序和鍵盤(pán)子處理程序之間不斷循環(huán),8253每一秒給8259 一個(gè)刺激,當(dāng)8259接受到刺激后會(huì)給 CPU 一個(gè)中斷請(qǐng)求,CPU會(huì)轉(zhuǎn)去執(zhí)行中斷子程序, 而中斷子程序設(shè)置成 時(shí)間計(jì)數(shù)加,即完成電子表的整體設(shè)計(jì)。詳細(xì)流程圖見(jiàn)圖三-1。3、LED顯示子程序設(shè)計(jì)本程序顯示部分用了 6個(gè)共陽(yáng)極LED作為顯示管,顯示程序要做到每送一次段碼就送 一次位碼,每送一次位碼后,將位碼中的0右移1位作為下次的位碼,從而可以實(shí)現(xiàn)從左到右使6個(gè)LED依次顯示出相應(yīng)的數(shù)字。 雖然CPU每隔一定時(shí)間便執(zhí)行顯示程序,但只要這個(gè)時(shí)間

4、段不太長(zhǎng),由于人眼的視覺(jué)作用,就可以在6個(gè)LED上同時(shí)見(jiàn)到數(shù)字顯示。4、鍵盤(pán)掃描子程序設(shè)計(jì)本程序需要用鍵盤(pán)對(duì)時(shí)間的初始值進(jìn)行設(shè)置,因此對(duì)鍵盤(pán)掃描的子程序需要滿足的功能如下:判斷是否是C鍵,若不是就返回至主程序,若是 C鍵就開(kāi)始對(duì)時(shí)間初始值進(jìn)行設(shè)置, 同時(shí)因注意到第一個(gè)值不可以超過(guò)2,第一個(gè)數(shù)是2時(shí)第二數(shù)不能超過(guò) 4,余下的同理要滿足時(shí)間數(shù)值的取值范圍呢, 若不是合法輸入不予反應(yīng)繼續(xù)等待輸入。當(dāng)遇到輸入數(shù)值錯(cuò)誤時(shí)可以按下D鍵進(jìn)行刪除一位重新設(shè)置;當(dāng) 6位初始值全部設(shè)置成功后,電子表將自動(dòng)開(kāi)始 走表。5、時(shí)間運(yùn)算子程序設(shè)計(jì)該子程序的主要功能是對(duì)時(shí)、分、秒的運(yùn)算,并把運(yùn)算出的最終結(jié)果存到事先已經(jīng)開(kāi)辟

5、的內(nèi)存單元里,以便顯示模塊即時(shí)地顯示出來(lái)。該模塊可以細(xì)分為秒定時(shí)模塊和運(yùn)算模塊。定時(shí)模塊交由8253通過(guò)對(duì)分頻出來(lái)的頻率進(jìn)行放大至1秒,因此每隔1秒對(duì)8259進(jìn)行刺激,進(jìn)而使CPU處理中斷子程序及時(shí)間運(yùn)算的子程序。另外,在中斷服務(wù)程序里,必須對(duì) 秒、分和時(shí)的單元內(nèi)的數(shù)值進(jìn)行判斷,當(dāng)秒加到 60時(shí),分必須加1、秒清零;當(dāng)分加到 60時(shí),時(shí)加1、分清零。當(dāng)時(shí)加到 24時(shí),直接清零。6、中斷設(shè)置8259芯片:在該系統(tǒng)中,8259主要擔(dān)負(fù)著處理 8253的一秒時(shí)間的脈沖信號(hào), 通過(guò)8253 的每秒的刺激下向 CPU發(fā)送中斷請(qǐng)求,進(jìn)而 CPU處理?yè)?dān)負(fù)時(shí)間計(jì)算的中斷子程序,即可 完成每秒鐘時(shí)間自加 1秒的

6、功能,因此8259的設(shè)置應(yīng)為:ICW1 :單片,邊沿觸發(fā),寫(xiě)入 ICW4ICW2 :寫(xiě)入 08H ICW3:7、定時(shí)器設(shè)置8253芯片:在系統(tǒng)中定時(shí)/計(jì)數(shù)芯片8253主要與CPU及中斷擴(kuò)展芯片 8259之間存在 著連接關(guān)系。8253主要擔(dān)負(fù)著時(shí)間計(jì)時(shí)的功能,通過(guò)對(duì)分頻單元提供的頻率信號(hào)進(jìn)行方法 產(chǎn)生一秒時(shí)間為周期的脈沖信號(hào),因此8253的設(shè)置應(yīng)為:控制口寫(xiě)入:00110100b;計(jì)算器0 選擇先低后高兩字節(jié)讀或?qū)懛绞?二進(jìn)制計(jì)數(shù);計(jì)數(shù)器0寫(xiě)入:38400 ;時(shí)間系數(shù)通過(guò)計(jì)算可以產(chǎn)生1秒的脈沖信號(hào);8、編址及控制字確定(1) 8259端口及控制字設(shè)置:Port_8259_0EQU 0FFE0HP

7、ort_8259_1EQU 0FFE1H8259初始化設(shè)置:ICW1 : 00010011 ,邊沿觸發(fā),單片方式,寫(xiě)入 ICW4 ;ICW2 : 00001000 ,INIT8259:MOV AL,13HMOV DX,Port_8259_0OUT DX,ALMOV AL,08HMOV DX,Port_8259_1OUT DX,ALMOV AL,09HOUT DX,ALMOV AL,7FH ;IRQ7OUT DX,AL RET(2) 8253端口及控制字設(shè)置:PORT_8253_00PORT_8253_01PORT_8253_10PORT_8253_118253初始化設(shè)置:EQU 0FFE4HE

8、QU 0FFE5HEQU 0FFE6HEQU 0FFE7HINITCLK0:MOV DX,PORT_8253_11MOV AL,00110100BOUT DX,ALMOV DX,PORT_8253_00MOV AX,38400OUT DX,AL MOV AL,AH OUT DX,AL RET(2) LED 端口:OUTSEG EQU 0FFDCHOUTBIT EQU 0FFDDH(3)鍵盤(pán)端口:IN_KEY EQU 0FFDEH(4) LED數(shù)碼管字型碼:;CLK0;段控制口;位控制口 /鍵掃口;鍵盤(pán)讀入口LEDMAP:DB0C0H,0F9H,0A4H,0B0H,099H,092H,082H,

9、0F8HDB080H,090H,088H,083H,0C6H,0A1H,086H,08EHDB 0BFH(5)鍵碼定義:KEYTABLE:DB 07H,04H,08H,05H,09H,06H,0AH,0BHDB 01H,00H,02H,0FH,03H,0EH,0CH,0DH三、功能流程圖:1、主程序流程圖調(diào)用由splay顯示子程序調(diào)用hmndl電k苗鍵盤(pán)處理程序調(diào)用中斷子程庠處理時(shí)間計(jì)額2、LED顯示子程序流程圖3、按鍵處理子程序流程圖;;ruad_kcv酒空顯j- <;:1<!:蓄輸 3輸入第一個(gè)值更新顯示里,位敝輸入史.數(shù)據(jù)輸入掂H個(gè)值輸入第二個(gè)數(shù)據(jù)4、中斷子程序-時(shí)間計(jì)數(shù)子程

10、序流程圖四、結(jié)果討論:1、實(shí)驗(yàn)結(jié)果:程序運(yùn)行,數(shù)碼管開(kāi)始從 000000走表,按 C鍵后顯示開(kāi)始對(duì)時(shí)鐘進(jìn)行初始值設(shè)置,設(shè)置初始值時(shí)可以按D鍵進(jìn)行回退修改。2、問(wèn)題解決:(1)添加D鍵的回退刪除功能: 在C鍵功能實(shí)現(xiàn)區(qū)域里不斷檢測(cè) D鍵是否按下,若按 下則將LED上一位數(shù)碼管設(shè)置成一并將設(shè)置時(shí)間的地址回退1,及可完成對(duì) D鍵的功能設(shè)置;(2)調(diào)試程序時(shí)發(fā)現(xiàn)時(shí)鐘初始值可以設(shè)置,D鍵回退功能也是可以的,8253gate信號(hào)也正確連接著,但是初始值設(shè)置完后時(shí)鐘并沒(méi)有走表,于是將8253的輸出端的線接入至手動(dòng)的單脈沖的發(fā)生器,進(jìn)行手動(dòng)給8259刺激,結(jié)果時(shí)鐘開(kāi)始隨手按動(dòng)開(kāi)始走表,可以斷定該8253芯片可

11、能已經(jīng)損壞,換了個(gè)試驗(yàn)箱后遇到了同樣的情況,直至換了功能正常的實(shí)驗(yàn) 箱后實(shí)驗(yàn)現(xiàn)象才正確展現(xiàn)。3、功能完善可以在課題要求的基礎(chǔ)上添加一些功能,使得電子時(shí)鐘的功能更加完善:(1)添加暫停功能,按鍵 A時(shí)間暫停,再按 A鍵時(shí)間繼續(xù)走;(2)添加鬧鈴功能,按鍵 B設(shè)置鬧鈴時(shí)間,時(shí)間到時(shí)控制鳴笛鬧鈴;(3)添加倒數(shù)計(jì)時(shí)的功能,按鍵E設(shè)置倒數(shù)的初始值,時(shí)間到即鳴笛鬧鈴;可以看出本次課程設(shè)計(jì)的課題可以完善的地方有很多,如果只滿意于已完成的則大錯(cuò)特錯(cuò)了,課程設(shè)計(jì)雖然已經(jīng)結(jié)束, 但是課下仍然可以對(duì)自己的課題進(jìn)行進(jìn)步的探索,不斷完善,不斷追求完美,這也是我們需要的。4、實(shí)驗(yàn)總結(jié)(1)通過(guò)此次課程設(shè)計(jì),將微機(jī)原理與

12、接口技術(shù)課程所學(xué)的知識(shí)運(yùn)用到了實(shí)際操作中, 并學(xué)會(huì)了數(shù)碼管顯示電子時(shí)鐘的制作方法;實(shí)驗(yàn)過(guò)程中遇到了一些困難和問(wèn)題,通過(guò)同學(xué)之間的討論和查找資料也一一攻破,順利完成了課程設(shè)計(jì),實(shí)驗(yàn)結(jié)果符合課題要求。(2)中斷服務(wù)程序設(shè)計(jì)時(shí)還應(yīng)注意以下幾個(gè)問(wèn)題:A.因?yàn)?086CPU在響應(yīng)中斷時(shí)不能自動(dòng)地保護(hù)它的各寄存器(除標(biāo)志寄存器外)內(nèi)容,雖然可用寄存器在主程序和中斷服務(wù)程序之間傳送參量和結(jié)果,但這樣做極易引起意想不到的錯(cuò)誤,所以應(yīng)當(dāng)避免,而采用指定內(nèi)存單元進(jìn)行參數(shù)傳遞;B.使用堆棧實(shí)現(xiàn)保護(hù)現(xiàn)場(chǎng)與恢復(fù)現(xiàn)場(chǎng)。使用時(shí)要注意堆棧的先進(jìn)后出的特性,同時(shí)要確保堆棧有足夠的空間,防止堆棧溢出;C.只有中斷服務(wù)程序用到的那

13、些寄存器(標(biāo)志寄存器除外)的內(nèi)容才需要加以保護(hù);D.在從中斷服務(wù)程序返回之前,即使CPU處于關(guān)中斷狀態(tài)也不必開(kāi)中斷。在執(zhí)行IERT指令后,CPU自動(dòng)恢復(fù)中斷前標(biāo)志寄存器。(3)調(diào)試的時(shí)候因?yàn)橛龅絻蓚€(gè)實(shí)驗(yàn)箱都是有問(wèn)題的,本來(lái)以為是程序出現(xiàn)了問(wèn)題,來(lái)回檢查程序,直到最后又換了個(gè)實(shí)驗(yàn)箱才知道程序是正確的,實(shí)驗(yàn)箱是實(shí)驗(yàn)的基礎(chǔ), 我們做實(shí)驗(yàn)時(shí)都應(yīng)該細(xì)心愛(ài)護(hù),弄壞了芯片,給自己和他人都帶來(lái)了不便。附錄:實(shí)驗(yàn)代碼:(完整的源程序)CODE SEGMENTASSUMECS:CODE,DS:CODE,ES:CODE ORG 3400HStart:JMP programLedMap:八段管顯示碼db0c0h,0f

14、9h,0a4h,0b0h,099h,092h,082h,0f8h db080h,090h,088h,083h,0c6h,0a1h,086h,08eh;db 0bfhdb 0f7hKeyTable:;鍵碼定義db07h,04h,08h,05h,09h,06h,0ah,0bh db01h,00h,02h,0fh,03h,0eh,0ch,0dhOUTSEGequ0ffdch;段控制口OUTBITequ0ffddh;位控制口 /鍵掃口IN_KEYequ0ffdeh;鍵盤(pán)讀入口LedBufdb6 dup;顯示緩沖CLIMOV AX,OFFSET int8259MOV BX,003cHMOV BX,AXM

15、OV BX,003EHMOV AX,0000HMOV BX,AX STI call init8259 call update_ledbuff mainLoop: call display call handle_key jmp mainLoop尸=initCLK0:mov dx,Port_8253_11 mov al,00110100b out dx,almov dx,Port_8253_00;clk0mov ax,38400 out dx,al mov al,ah out dx,al rettime DB 0,0,0,0,0,0;INTNum equ 20Port_8259_0Port_82

16、59_1Port_8253_00Port_8253_01Port_8253_10Port_8253_11EQU 0FFE0H ;1110_0000EQU 0FFE1HEQU 0FFE4H ; 0_01EQU 0FFE5HEQU 0FFE6HEQU 0FFE7Hprogram:call initCLK05=init8259:MOV AL,13HMOV DX,Port_8259_0OUT DX,AL MOV AL,08H MOV DX,Port_8259_1 OUT DX,ALMOV AL,09HOUT DX,ALMOV AL,7FH ;IRQ7OUT DX,ALjbnext3;=int8259:

17、movbyte ptr bx,0clidecbxpush axincbyte ptr bxpush bxincbxpush cxnext3: decbxMOV AL,20H0010cmpbyte ptr bx,6MOV DX,Port_8259_0jbnext2OUT DX,ALmovbyte ptr bx,0call timeIncdecbxcall update_ledbuffincbyte ptr bxpop cxincbxpop bxpop axnext2: decbxstidecbxiretcmpbyte ptr bx,2;jnzcmp10timeInc:cmp4:incbxpush

18、 bxcmpbyte ptr bx,4push cxjbnext1mov bx,offset timeadd bx,5;取 time5movbyte ptr bx,0inc byte ptr bxdecbxcmp byte ptr bx,10movbyte ptr bx,0jb next5jmpover_timeIncmov byte ptr bx,0;該位清零dec bx;下一位加 1cmp10:incbxinc byte ptr bxcmpbyte ptr bx,10inc bxjbnext1next5: dec bxcmp byte ptr bx,6movbyte ptr bx,0jb

19、next4decbxincbyte ptr bxmov byte ptr bx,0incbxdec bxinc byte ptr bxnext1: decbxinc bxcmpbyte ptr bx,3jbover_timeIncnext4: dec bxmovbyte ptr bx,0RETcmp byte ptr bx,10over_timeInc:pop cxpop bx ret尸=display:push axpush bxpush cxpush dxmov bx,offset LEDBufmov cl,6 ;共6個(gè)八段管;從左邊開(kāi)始顯示movah,00100000bDLoop:mov

20、 dx,OUTBITmov al,0out dx,al;關(guān)所有八段管mov al,bxmov dx,OUTSEGout dx,almov dx,OUTBITmov al,ahout dx,al;顯示一位八段管 pop cx pop bx pop ax ret;=update_ledbuff:push ax push bx push cx push dxmovcl,6uloop:movbx,offset timemoval,cldecalmovah,0xlat;取出 timecl-1movbx,offset LEDMAPmovah,0xlat;查找對(duì)應(yīng)字形碼movbx,offset LedBuf

21、movch,0addbx,cxdecbxmovbx,al;放入LedBufcl-1push axdecclmov ah,1jnzuloopcall Delaypopdxpop axpopcxpopbxshr ah,1popaxinc bxretdec cljnz DLoop;mov dx,OUTBITDelay:;延時(shí)子程序mov al,0pushcxout dx,al;關(guān)所有八段管movcx,256pop dxloop$pop cxmov byte ptr bx,16retcall update_ledbuffDelayl:延時(shí)子程序push cx mov cx,50Ixxx: call d

22、isplay looplxxxpopcxret;handle_key: call read_key cmp al,0ch jne nextR jmp nextCnextR: retnextC: cli mov bx, offset timemov cl,6 loop_d:mov byte ptr bx,16 inc bx loop loop_d call update_ledbuffmov bx, offset timet1:call Display call read_key cmp al,2 ja t1 t1_over: mov bx,al call update_ledbuff call

23、 Delay1call Displaycall read_keyCMP AL,0DHJNE T22call Delay1 JMP T1 T22:cmp al,9ja t2cmp byte ptr bx,2 je cmp_k_4 jmp t2_overcmp_k_4:cmpal,3ja t2jmp t2_overt2_over: inc bx mov bx,al call update_ledbuff call Delay1t3:call Display call read_key CMP AL,0DH JNE T33mov byte ptr bx,16 DEC BX call update_l

24、edbuff call Delay1JMP T2T33:cmp al,5ja t3t3_over: inc bx mov byte ptrbx,al call update_ledbuff call Delay1t4:call Display call read_keyCMP AL,0DHJNE T44mov byte ptr bx,16 DEC BX call update_ledbuff call Delay1 JMP T3T44:cmp al,9ja t4t4_over: inc bx mov bx,al call update_ledbuff call Delay1t5:call Display call read_key;+CMP AL,0DH JNE T55mov byte ptr bx,16 DEC BX call update_ledbuff call Delay1 J

溫馨提示

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

評(píng)論

0/150

提交評(píng)論