微機原理課程設計報告數字時鐘的實現附代碼_第1頁
微機原理課程設計報告數字時鐘的實現附代碼_第2頁
微機原理課程設計報告數字時鐘的實現附代碼_第3頁
微機原理課程設計報告數字時鐘的實現附代碼_第4頁
微機原理課程設計報告數字時鐘的實現附代碼_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

3、成通過調用子程序完成對8253及8259的初始化,對8259進行中斷設置。主要在顯示子程序和鍵盤子處理程序之間不斷循環(huán),8253每一秒給8259一個刺激,當8259接受到刺激后會給CPU一個中斷請求,CPU會轉去執(zhí)行中斷子程序,而中斷子程序設置成時間計數加,即完成電子表的整體設計。詳細流程圖見圖三-1。3、 LED顯示子程序設計本程序顯示部分用了6個共陽極LED作為顯示管,顯示程序要做到每送一次段碼就送一次位碼,每送一次位碼后,將位碼中的0右移1位作為下次的位碼,從而可以實現從左到右使6個LED依次顯示出相應的數字。雖然CPU每隔一定時間便執(zhí)行顯示程序,但只要這個時間段不太長,由于人眼的視覺作

4、用,就可以在6個LED上同時見到數字顯示。4、 鍵盤掃描子程序設計本程序需要用鍵盤對時間的初始值進行設置,因此對鍵盤掃描的子程序需要滿足的功能如下:判斷是否是C鍵,若不是就返回至主程序,若是C鍵就開始對時間初始值進行設置,同時因注意到第一個值不可以超過2,第一個數是2時第二數不能超過4,余下的同理要滿足時間數值的取值范圍呢,若不是合法輸入不予反應繼續(xù)等待輸入。當遇到輸入數值錯誤時可以按下D鍵進行刪除一位重新設置;當6位初始值全部設置成功后,電子表將自動開始走表。5、 時間運算子程序設計該子程序的主要功能是對時、分、秒的運算,并把運算出的最終結果存到事先已經開辟的內存單元里,以便顯示模塊即時地顯

5、示出來。該模塊可以細分為秒定時模塊和運算模塊。定時模塊交由8253通過對分頻出來的頻率進行放大至1秒,因此每隔1秒對8259進行刺激,進而使CPU處理中斷子程序及時間運算的子程序。另外,在中斷服務程序里,必須對秒、分和時的單元內的數值進行判斷,當秒加到60時,分必須加1 、秒清零;當分加到60時,時加1、分清零。當時加到24時,直接清零。6、 中斷設置8259芯片:在該系統中,8259主要擔負著處理8253的一秒時間的脈沖信號,通過8253的每秒的刺激下向CPU發(fā)送中斷請求,進而CPU處理擔負時間計算的中斷子程序,即可完成每秒鐘時間自加1秒的功能,因此8259的設置應為:ICW1:單片,邊沿觸

6、發(fā),寫入ICW4ICW2:寫入08HICW3:7、 定時器設置8253芯片:在系統中定時/計數芯片8253主要與CPU及中斷擴展芯片8259之間存在著連接關系。8253主要擔負著時間計時的功能,通過對分頻單元提供的頻率信號進行方法產生一秒時間為周期的脈沖信號,因此8253的設置應為:控制口寫入:00110100b;計算器0選擇先低后高兩字節(jié)讀或寫 方式2 二進制計數;計數器0寫入:38400;時間系數通過計算可以產生1秒的脈沖信號;8、 編址及控制字確定(1)8259端口及控制字設置:Port_8259_0 EQU 0FFE0H Port_8259_1 EQU 0FFE1H8259初始化設置:

7、ICW1:00010011,邊沿觸發(fā),單片方式,寫入ICW4;ICW2:00001000,INIT8259: MOV AL,13H MOV DX,Port_8259_0 OUT DX,AL MOV AL,08H MOV DX,Port_8259_1 OUT DX,AL MOV AL,09H OUT DX,AL MOV AL,7FH ;IRQ7 OUT DX,AL RET(2)8253端口及控制字設置:PORT_8253_00 EQU 0FFE4H PORT_8253_01 EQU 0FFE5HPORT_8253_10 EQU 0FFE6HPORT_8253_11 EQU 0FFE7H8253初

8、始化設置:INITCLK0:MOV DX,PORT_8253_11MOV AL,00110100B;OUT DX,ALMOV DX,PORT_8253_00;CLK0MOV AX,38400OUT DX,AL MOV AL,AHOUT DX,ALRET(2)LED端口:OUTSEG EQU 0FFDCH ;段控制口OUTBIT EQU 0FFDDH ;位控制口/鍵掃口(3)鍵盤端口:IN_KEY EQU 0FFDEH ;鍵盤讀入口(4)LED數碼管字型碼:LEDMAP: DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H DB 080H,090H,088H,0

9、83H,0C6H,0A1H,086H,08EH DB 0BFH(5)鍵碼定義:KEYTABLE: DB 07H,04H,08H,05H,09H,06H,0AH,0BH DB 01H,00H,02H,0FH,03H,0EH,0CH,0DH3、 功能流程圖:1、 主程序流程圖 2、 LED顯示子程序流程圖 3、按鍵處理子程序流程圖4、中斷子程序-時間計數子程序流程圖 4、 結果討論:1、 實驗結果:程序運行,數碼管開始從000000走表,按C鍵后顯示開始對時鐘進行初始值設置,設置初始值時可以按D鍵進行回退修改。2、 問題解決:(1) 添加D鍵的回退刪除功能:在C鍵功能實現區(qū)域里不斷檢測D鍵是否按下

10、,若按下則將LED上一位數碼管設置成并將設置時間的地址回退1,及可完成對D鍵的功能設置;(2) 調試程序時發(fā)現時鐘初始值可以設置,D鍵回退功能也是可以的,8253gate信號也正確連接著,但是初始值設置完后時鐘并沒有走表,于是將8253的輸出端的線接入至手動的單脈沖的發(fā)生器,進行手動給8259刺激,結果時鐘開始隨手按動開始走表,可以斷定該8253芯片可能已經損壞,換了個試驗箱后遇到了同樣的情況,直至換了功能正常的實驗箱后實驗現象才正確展現。3、 功能完善可以在課題要求的基礎上添加一些功能,使得電子時鐘的功能更加完善:(1) 添加暫停功能,按鍵A時間暫停,再按A鍵時間繼續(xù)走;(2) 添加鬧鈴功能

11、,按鍵B設置鬧鈴時間,時間到時控制鳴笛鬧鈴;(3) 添加倒數計時的功能,按鍵E設置倒數的初始值,時間到即鳴笛鬧鈴;可以看出本次課程設計的課題可以完善的地方有很多,如果只滿意于已完成的則大錯特錯了,課程設計雖然已經結束,但是課下仍然可以對自己的課題進行進步的探索,不斷完善,不斷追求完美,這也是我們需要的。4、實驗總結(1) 通過此次課程設計,將微機原理與接口技術課程所學的知識運用到了實際操作中,并學會了數碼管顯示電子時鐘的制作方法;實驗過程中遇到了一些困難和問題,通過同學之間的討論和查找資料也一一攻破,順利完成了課程設計,實驗結果符合課題要求。(2) 中斷服務程序設計時還應注意以下幾個問題:A.

12、 因為8086CPU在響應中斷時不能自動地保護它的各寄存器(除標志寄存器外)內容,雖然可用寄存器在主程序和中斷服務程序之間傳送參量和結果,但這樣做極易引起意想不到的錯誤,所以應當避免,而采用指定內存單元進行參數傳遞;B. 使用堆棧實現保護現場與恢復現場。使用時要注意堆棧的先進后出的特性,同時要確保堆棧有足夠的空間,防止堆棧溢出;C. 只有中斷服務程序用到的那些寄存器(標志寄存器除外)的內容才需要加以保護;D. 在從中斷服務程序返回之前,即使CPU處于關中斷狀態(tài)也不必開中斷。在執(zhí)行IERT指令后,CPU自動恢復中斷前標志寄存器。(3) 調試的時候因為遇到兩個實驗箱都是有問題的,本來以為是程序出現

13、了問題,來回檢查程序,直到最后又換了個實驗箱才知道程序是正確的,實驗箱是實驗的基礎,我們做實驗時都應該細心愛護,弄壞了芯片,給自己和他人都帶來了不便。附錄:實驗代碼:(完整的源程序)CODESEGMENTASSUME CS:CODE,DS:CODE,ES:CODEORG 3400HStart: JMP programLedMap: 八段管顯示碼 db 0c0h,0f9h,0a4h,0b0h,099h,092h,082h,0f8hdb 080h,090h,088h,083h,0c6h,0a1h,086h,08eh;db 0bfhdb0f7hKeyTable: ;鍵碼定義 db 07h,04h,0

14、8h,05h,09h,06h,0ah,0bh db 01h,00h,02h,0fh,03h,0eh,0ch,0dhOUTSEG equ 0ffdch ;段控制口OUTBIT equ 0ffddh ;位控制口/鍵掃口IN_KEY equ 0ffdeh ;鍵盤讀入口LedBuf db 6 dup(?) ;顯示緩沖time DB 0,0,0,0,0,0;INTNum equ 20Port_8259_0 EQU 0FFE0H ;1110_0000Port_8259_1 EQU 0FFE1HPort_8253_00 EQU 0FFE4H ; 0_01Port_8253_01 EQU 0FFE5HPort

15、_8253_10 EQU 0FFE6HPort_8253_11 EQU 0FFE7Hprogram: call initCLK0 CLI MOV AX,OFFSET int8259 MOV BX,003CH MOV BX,AX MOV BX,003EH MOV AX,0000H MOV BX,AX STI call init8259 call update_ledbuffmainLoop:call display call handle_keyjmp mainLoop;=initCLK0:mov dx,Port_8253_11mov al,00110100bout dx,almov dx,Po

16、rt_8253_00;clk0mov ax,38400out dx,al mov al,ahout dx,alret;=init8259: MOV AL,13H MOV DX,Port_8259_0 OUT DX,AL MOV AL,08H MOV DX,Port_8259_1 OUT DX,AL MOV AL,09H OUT DX,AL MOV AL,7FH ;IRQ7 OUT DX,AL RET;=int8259: cli push ax push bx push cx MOV AL,20H 0010 MOV DX,Port_8259_0 OUT DX,AL call timeInc ca

17、ll update_ledbuff pop cx pop bx pop ax sti iret;=timeInc: push bx push cx mov bx,offset time add bx,5 ;取time5 inc byte ptr bx cmp byte ptr bx,10 jb next5 mov byte ptr bx,0;該位清零 dec bx;下一位加1 inc byte ptr bx inc bxnext5: dec bx cmp byte ptr bx,6 jb next4 mov byte ptr bx,0 dec bx inc byte ptr bx inc bx

18、next4: dec bx cmp byte ptr bx,10 jb next3 mov byte ptr bx,0 dec bx inc byte ptr bx inc bxnext3: dec bx cmp byte ptr bx,6 jb next2 mov byte ptr bx,0 dec bx inc byte ptr bx inc bxnext2: dec bx dec bx cmp byte ptr bx,2 jnz cmp10cmp4: inc bx cmp byte ptr bx,4 jb next1 mov byte ptr bx,0 dec bx mov byte p

19、tr bx,0 jmp over_timeInccmp10: inc bx cmp byte ptr bx,10 jb next1 mov byte ptr bx,0 dec bx inc byte ptr bx inc bxnext1: dec bx cmp byte ptr bx,3 jb over_timeInc mov byte ptr bx,0over_timeInc: pop cx pop bx ret;=display: push ax push bx push cx push dx mov bx,offset LEDBuf mov cl,6 ;共6個八段管 ;從左邊開始顯示mo

20、v ah,00100000b DLoop: mov dx,OUTBIT mov al,0 out dx,al ;關所有八段管 mov al,bx mov dx,OUTSEG out dx,al mov dx,OUTBIT mov al,ah out dx,al ;顯示一位八段管 push ax mov ah,1 call Delay pop ax shr ah,1 inc bx dec cl jnz DLoop mov dx,OUTBIT mov al,0 out dx,al ;關所有八段管 pop dx pop cx pop bx pop ax ret;=update_ledbuff: pu

21、sh ax push bx push cx push dx mov cl,6uloop:mov bx,offset time mov al,cl dec al mov ah,0 xlat ;取出timecl-1 mov bx,offset LEDMAP mov ah,0 xlat ;查找對應字形碼 mov bx,offset LedBuf mov ch,0 add bx,cx dec bx mov bx,al ;放入LedBufcl-1 dec cl jnz uloop pop dx pop cx pop bx pop ax ret;=Delay: ;延時子程序 push cx mov cx,

22、256 loop $ pop cx retDelay1: 延時子程序 push cx mov cx,50lxxx: call display loop lxxx pop cx ret;=handle_key: call read_key cmp al,0ch jne nextR jmp nextCnextR: retnextC: cli mov bx, offset time mov cl,6loop_d: mov byte ptr bx,16 inc bx loop loop_d call update_ledbuffmov bx, offset timet1:call Displaycal

23、l read_key cmp al,2 ja t1t1_over: mov bx,al call update_ledbuff call Delay1t2: call Display call read_key CMP AL,0DH JNE T22mov byte ptr bx,16 call update_ledbuff call Delay1 JMP T1 T22: cmp al,9 ja t2 cmp byte ptr bx,2 je cmp_k_4 jmp t2_overcmp_k_4:cmp al,3 ja t2 jmp t2_overt2_over: inc bx mov bx,a

24、l call update_ledbuff call Delay1t3:call Displaycall read_keyCMP AL,0DHJNE T33mov byte ptr bx,16DEC BXcall update_ledbuff call Delay1JMP T2 T33: cmp al,5 ja t3t3_over: inc bx mov byte ptrbx,al call update_ledbuff call Delay1t4: call Display call read_keyCMP AL,0DHJNE T44mov byte ptr bx,16DEC BXcall update_ledbuff call Delay1JMP T3 T44: cmp al,9 ja t4t4_over: inc bx mov bx,al call update_ledbuff call Delay1t5:call Displaycall read_key ;+CMP AL,0DHJNE T55mov byte ptr bx,16DEC BXcall update_ledbuff call Delay1JMP T4 T55: cmp al,5 ja t5t5_over: inc bx mov

溫馨提示

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

評論

0/150

提交評論