




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、合肥工業(yè)大學(xué)計算機(jī)與信息學(xué)院課程設(shè)計課 程:微機(jī)原理與接口技術(shù)設(shè)計專業(yè)班級:計算機(jī)科學(xué)與技術(shù)x班學(xué) 號:姓 名: 一、設(shè)計題目及要求: 【課題6】 數(shù)字時鐘1 通過 8253 定時器作產(chǎn)生秒脈沖定時中斷。 在中斷服務(wù)程序中實(shí)現(xiàn)秒、 分、 小時的進(jìn)位 (24小時制) 。2在七段數(shù)碼管上顯示當(dāng)前的時分秒(例如,12 點(diǎn) 10 分 40 秒顯示為 121040) 。3按“C”可設(shè)置時鐘的時間當(dāng)前值(對準(zhǔn)時間) 。2、 設(shè)計思想:總體思想: 1、 功能概述:實(shí)驗(yàn)箱連線:本實(shí)驗(yàn)建立在Dais實(shí)驗(yàn)箱基礎(chǔ)上完成的基本連線及程序如下: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的數(shù)據(jù)線接入數(shù)據(jù)總線;本程序包括顯示模塊,鍵盤掃描模塊,時間計數(shù)模塊,設(shè)置模塊等幾個模塊,(1)程序運(yùn)行后,LED顯示000000初始值,并且開始計數(shù)(2)按C鍵進(jìn)行設(shè)置初始時間,考慮到第一個數(shù)只能是0,1,2,當(dāng)?shù)谝粋€數(shù)顯示2時第二個數(shù)只能顯示04,同理下面各位應(yīng)滿足時鐘數(shù)值的合理的取值;(3)在手動輸入初始值時,按D鍵進(jìn)行回退1位修改已設(shè)置值,連續(xù)按D鍵可以全部進(jìn)行刪除修改。2、 主程序設(shè)計主程序中完
3、成通過調(diào)用子程序完成對8253及8259的初始化,對8259進(jìn)行中斷設(shè)置。主要在顯示子程序和鍵盤子處理程序之間不斷循環(huán),8253每一秒給8259一個刺激,當(dāng)8259接受到刺激后會給CPU一個中斷請求,CPU會轉(zhuǎn)去執(zhí)行中斷子程序,而中斷子程序設(shè)置成時間計數(shù)加,即完成電子表的整體設(shè)計。詳細(xì)流程圖見圖三-1。3、 LED顯示子程序設(shè)計本程序顯示部分用了6個共陽極LED作為顯示管,顯示程序要做到每送一次段碼就送一次位碼,每送一次位碼后,將位碼中的0右移1位作為下次的位碼,從而可以實(shí)現(xiàn)從左到右使6個LED依次顯示出相應(yīng)的數(shù)字。雖然CPU每隔一定時間便執(zhí)行顯示程序,但只要這個時間段不太長,由于人眼的視覺作
4、用,就可以在6個LED上同時見到數(shù)字顯示。4、 鍵盤掃描子程序設(shè)計本程序需要用鍵盤對時間的初始值進(jìn)行設(shè)置,因此對鍵盤掃描的子程序需要滿足的功能如下:判斷是否是C鍵,若不是就返回至主程序,若是C鍵就開始對時間初始值進(jìn)行設(shè)置,同時因注意到第一個值不可以超過2,第一個數(shù)是2時第二數(shù)不能超過4,余下的同理要滿足時間數(shù)值的取值范圍呢,若不是合法輸入不予反應(yīng)繼續(xù)等待輸入。當(dāng)遇到輸入數(shù)值錯誤時可以按下D鍵進(jìn)行刪除一位重新設(shè)置;當(dāng)6位初始值全部設(shè)置成功后,電子表將自動開始走表。5、 時間運(yùn)算子程序設(shè)計該子程序的主要功能是對時、分、秒的運(yùn)算,并把運(yùn)算出的最終結(jié)果存到事先已經(jīng)開辟的內(nèi)存單元里,以便顯示模塊即時地顯
5、示出來。該模塊可以細(xì)分為秒定時模塊和運(yùn)算模塊。定時模塊交由8253通過對分頻出來的頻率進(jìn)行放大至1秒,因此每隔1秒對8259進(jìn)行刺激,進(jìn)而使CPU處理中斷子程序及時間運(yùn)算的子程序。另外,在中斷服務(wù)程序里,必須對秒、分和時的單元內(nèi)的數(shù)值進(jìn)行判斷,當(dāng)秒加到60時,分必須加1 、秒清零;當(dāng)分加到60時,時加1、分清零。當(dāng)時加到24時,直接清零。6、 中斷設(shè)置8259芯片:在該系統(tǒng)中,8259主要擔(dān)負(fù)著處理8253的一秒時間的脈沖信號,通過8253的每秒的刺激下向CPU發(fā)送中斷請求,進(jìn)而CPU處理擔(dān)負(fù)時間計算的中斷子程序,即可完成每秒鐘時間自加1秒的功能,因此8259的設(shè)置應(yīng)為:ICW1:單片,邊沿觸
6、發(fā),寫入ICW4ICW2:寫入08HICW3:7、 定時器設(shè)置8253芯片:在系統(tǒng)中定時/計數(shù)芯片8253主要與CPU及中斷擴(kuò)展芯片8259之間存在著連接關(guān)系。8253主要擔(dān)負(fù)著時間計時的功能,通過對分頻單元提供的頻率信號進(jìn)行方法產(chǎn)生一秒時間為周期的脈沖信號,因此8253的設(shè)置應(yīng)為:控制口寫入:00110100b;計算器0選擇先低后高兩字節(jié)讀或?qū)?方式2 二進(jìn)制計數(shù);計數(shù)器0寫入:38400;時間系數(shù)通過計算可以產(chǎn)生1秒的脈沖信號;8、 編址及控制字確定(1)8259端口及控制字設(shè)置:Port_8259_0 EQU 0FFE0H Port_8259_1 EQU 0FFE1H8259初始化設(shè)置:
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端口及控制字設(shè)置:PORT_8253_00 EQU 0FFE4H PORT_8253_01 EQU 0FFE5HPORT_8253_10 EQU 0FFE6HPORT_8253_11 EQU 0FFE7H8253初
8、始化設(shè)置: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數(shù)碼管字型碼: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、中斷子程序-時間計數(shù)子程序流程圖 4、 結(jié)果討論:1、 實(shí)驗(yàn)結(jié)果:程序運(yùn)行,數(shù)碼管開始從000000走表,按C鍵后顯示開始對時鐘進(jìn)行初始值設(shè)置,設(shè)置初始值時可以按D鍵進(jìn)行回退修改。2、 問題解決:(1) 添加D鍵的回退刪除功能:在C鍵功能實(shí)現(xiàn)區(qū)域里不斷檢測D鍵是否按下
10、,若按下則將LED上一位數(shù)碼管設(shè)置成并將設(shè)置時間的地址回退1,及可完成對D鍵的功能設(shè)置;(2) 調(diào)試程序時發(fā)現(xiàn)時鐘初始值可以設(shè)置,D鍵回退功能也是可以的,8253gate信號也正確連接著,但是初始值設(shè)置完后時鐘并沒有走表,于是將8253的輸出端的線接入至手動的單脈沖的發(fā)生器,進(jìn)行手動給8259刺激,結(jié)果時鐘開始隨手按動開始走表,可以斷定該8253芯片可能已經(jīng)損壞,換了個試驗(yàn)箱后遇到了同樣的情況,直至換了功能正常的實(shí)驗(yàn)箱后實(shí)驗(yàn)現(xiàn)象才正確展現(xiàn)。3、 功能完善可以在課題要求的基礎(chǔ)上添加一些功能,使得電子時鐘的功能更加完善:(1) 添加暫停功能,按鍵A時間暫停,再按A鍵時間繼續(xù)走;(2) 添加鬧鈴功能
11、,按鍵B設(shè)置鬧鈴時間,時間到時控制鳴笛鬧鈴;(3) 添加倒數(shù)計時的功能,按鍵E設(shè)置倒數(shù)的初始值,時間到即鳴笛鬧鈴;可以看出本次課程設(shè)計的課題可以完善的地方有很多,如果只滿意于已完成的則大錯特錯了,課程設(shè)計雖然已經(jīng)結(jié)束,但是課下仍然可以對自己的課題進(jìn)行進(jìn)步的探索,不斷完善,不斷追求完美,這也是我們需要的。4、實(shí)驗(yàn)總結(jié)(1) 通過此次課程設(shè)計,將微機(jī)原理與接口技術(shù)課程所學(xué)的知識運(yùn)用到了實(shí)際操作中,并學(xué)會了數(shù)碼管顯示電子時鐘的制作方法;實(shí)驗(yàn)過程中遇到了一些困難和問題,通過同學(xué)之間的討論和查找資料也一一攻破,順利完成了課程設(shè)計,實(shí)驗(yàn)結(jié)果符合課題要求。(2) 中斷服務(wù)程序設(shè)計時還應(yīng)注意以下幾個問題:A.
12、 因?yàn)?086CPU在響應(yīng)中斷時不能自動地保護(hù)它的各寄存器(除標(biāo)志寄存器外)內(nèi)容,雖然可用寄存器在主程序和中斷服務(wù)程序之間傳送參量和結(jié)果,但這樣做極易引起意想不到的錯誤,所以應(yīng)當(dāng)避免,而采用指定內(nèi)存單元進(jìn)行參數(shù)傳遞;B. 使用堆棧實(shí)現(xiàn)保護(hù)現(xiàn)場與恢復(fù)現(xiàn)場。使用時要注意堆棧的先進(jìn)后出的特性,同時要確保堆棧有足夠的空間,防止堆棧溢出;C. 只有中斷服務(wù)程序用到的那些寄存器(標(biāo)志寄存器除外)的內(nèi)容才需要加以保護(hù);D. 在從中斷服務(wù)程序返回之前,即使CPU處于關(guān)中斷狀態(tài)也不必開中斷。在執(zhí)行IERT指令后,CPU自動恢復(fù)中斷前標(biāo)志寄存器。(3) 調(diào)試的時候因?yàn)橛龅絻蓚€實(shí)驗(yàn)箱都是有問題的,本來以為是程序出現(xiàn)
13、了問題,來回檢查程序,直到最后又換了個實(shí)驗(yàn)箱才知道程序是正確的,實(shí)驗(yàn)箱是實(shí)驗(yàn)的基礎(chǔ),我們做實(shí)驗(yàn)時都應(yīng)該細(xì)心愛護(hù),弄壞了芯片,給自己和他人都帶來了不便。附錄:實(shí)驗(yàn)代碼:(完整的源程序)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 ;關(guān)所有八段管 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 ;關(guān)所有八段管 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 ;查找對應(yīng)字形碼 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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 留學(xué)簽證續(xù)簽與延期服務(wù)合同
- 旅游度假村特色攤位租賃與休閑娛樂合同
- 產(chǎn)業(yè)鏈整合廠房租賃合同續(xù)簽補(bǔ)充協(xié)議范本
- 高新技術(shù)產(chǎn)業(yè)園區(qū)廠房及場地租賃合同范本
- 車輛轉(zhuǎn)讓與駕駛技能培訓(xùn)及考試服務(wù)協(xié)議
- 大型倉儲物流園區(qū)物業(yè)運(yùn)營與管理合同
- 財務(wù)數(shù)據(jù)分析員勞動合同書
- 叉車操作員技能考核與晉升合同
- 采棉機(jī)智能化改造與運(yùn)營維護(hù)合同
- 社區(qū)車輛無償租賃管理公約
- 公路養(yǎng)護(hù)勘察設(shè)計工作大綱講義
- 認(rèn)識居民身份證微課說課稿課件
- 授受關(guān)系課件-高三日語一輪復(fù)習(xí)
- 2009年《四川省建設(shè)工程工程量清單計價定額》
- 生產(chǎn)設(shè)備點(diǎn)檢記錄表
- 鋼管樁支護(hù)工程檢驗(yàn)批質(zhì)量驗(yàn)收記錄表
- 假發(fā)行業(yè)知識產(chǎn)品
- GB∕T 33628-2017 風(fēng)力發(fā)電機(jī)組高強(qiáng)螺紋連接副安裝技術(shù)要求
- 超高壓技術(shù)介紹、應(yīng)用和工藝
- 公司治理完整測試題【附答案】
- 汽車維修工時收費(fèi)標(biāo)準(zhǔn)二類企業(yè)
評論
0/150
提交評論