![課題六數(shù)字鬧鐘_第1頁(yè)](http://file4.renrendoc.com/view/538824a2a3c2aac4911934fb74218951/538824a2a3c2aac4911934fb742189511.gif)
![課題六數(shù)字鬧鐘_第2頁(yè)](http://file4.renrendoc.com/view/538824a2a3c2aac4911934fb74218951/538824a2a3c2aac4911934fb742189512.gif)
![課題六數(shù)字鬧鐘_第3頁(yè)](http://file4.renrendoc.com/view/538824a2a3c2aac4911934fb74218951/538824a2a3c2aac4911934fb742189513.gif)
![課題六數(shù)字鬧鐘_第4頁(yè)](http://file4.renrendoc.com/view/538824a2a3c2aac4911934fb74218951/538824a2a3c2aac4911934fb742189514.gif)
![課題六數(shù)字鬧鐘_第5頁(yè)](http://file4.renrendoc.com/view/538824a2a3c2aac4911934fb74218951/538824a2a3c2aac4911934fb742189515.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
-.z.......word...目錄摘要…………………1實(shí)驗(yàn)線路……………1設(shè)計(jì)思想……………2功能流程圖…………3結(jié)果討論……………6設(shè)計(jì)心得……………6參考文獻(xiàn)……………7程序清單……………8摘要課題六:數(shù)字鬧鐘通過(guò)8253定時(shí)器產(chǎn)生秒脈沖定時(shí)中斷。在中斷效勞程序中實(shí)現(xiàn)秒、分、小時(shí)的進(jìn)位〔24小時(shí)制〕。將當(dāng)前時(shí)分秒在七段LED顯示器上顯示〔如:091132〕??稍O(shè)置鬧鐘的時(shí)間當(dāng)前值〔對(duì)準(zhǔn)時(shí)間〕,設(shè)置鬧鈴時(shí)間,鬧鈴功能的關(guān)閉和開放.關(guān)鍵詞:數(shù)字鬧鐘,8253定時(shí)器,LED顯示器,8255A并行口實(shí)驗(yàn)線路設(shè)計(jì)思想概述:程序主體設(shè)計(jì):本程序共有分端口設(shè)置模塊,計(jì)數(shù)模塊,顯示模塊等幾個(gè)模塊。C--DISPLAY12,45,37----將鬧鐘設(shè)置為12:45:37;G--GOAHEAD----開中斷,鬧鐘恢復(fù)走時(shí)D--STOPTODISPLAY-----關(guān)中斷,鬧鐘停頓走時(shí)E--E*ITTODOS----返回DOSM--SETTHECLOCK-----設(shè)置鬧鈴時(shí)間F--OPENTHECLOCK-----設(shè)置鬧鐘功能為開B--CLOSETHECLOCK-----設(shè)置鬧鐘功能為關(guān)P--POSITIONTHEBENINNINGDATE------設(shè)置鬧鐘的時(shí)間計(jì)時(shí)器軟件的設(shè)計(jì):主程序中,要對(duì)各個(gè)用到的芯片進(jìn)展初始化,目的是使其每20豪秒產(chǎn)生一次方波。8253A的定時(shí)器輸出與8259A的IR2連接,計(jì)數(shù)器0工作在模式3(方波發(fā)生器),計(jì)數(shù)值采用二進(jìn)制格式,輸出作為計(jì)數(shù)器1的輸入,計(jì)數(shù)器1工作在模式2(分頻器),計(jì)數(shù)值采用二進(jìn)制格式,輸出到總線IRQ2,向CPU發(fā)送時(shí)鐘中斷信號(hào),根據(jù)兩個(gè)計(jì)數(shù)器的設(shè)置,系統(tǒng)每隔20毫秒便由8253A產(chǎn)生一次中斷請(qǐng)求,即每隔20豪秒執(zhí)行一次中斷處理程序。這個(gè)方法將與時(shí)間相關(guān)的兩個(gè)模塊即顯示模塊和計(jì)時(shí)模塊放在中斷處理程序中,這樣,就保證了數(shù)字顯示的穩(wěn)定,中斷處理程序完成計(jì)時(shí)功能要依靠?jī)蓚€(gè)方面,因?yàn)橹袛嗵幚沓绦蚴敲?0豪秒執(zhí)行一次,但計(jì)時(shí)并不是以20豪秒為單位進(jìn)展的,而是以秒為單位進(jìn)展的,所以,計(jì)時(shí)功能的實(shí)現(xiàn)一方面要利用20毫秒這個(gè)基準(zhǔn)時(shí)間單位,另一方面借助一個(gè)計(jì)數(shù)單位。計(jì)數(shù)單位的初始值為50,每進(jìn)展一次中斷,便使計(jì)數(shù)單元的容減1。每當(dāng)計(jì)數(shù)單元從50減為0時(shí),說(shuō)明已經(jīng)過(guò)了1秒時(shí)間。并判斷是否有進(jìn)位,如有則進(jìn)展修改,實(shí)現(xiàn)進(jìn)位。并在LED上顯示。顯示局部:本程序顯示局部用了6個(gè)共陰極LED作為顯示管,顯示程序要做到每送一次段碼就送一次位碼,每送一次位碼后,將位碼中的0右移1位作為下次的位碼,從而可以實(shí)現(xiàn)從左到右使6個(gè)LED依次顯示出相應(yīng)的數(shù)字。雖然CPU每隔一定時(shí)間便執(zhí)行顯示程序,但只要這個(gè)時(shí)間段不太長(zhǎng),由于人眼的視覺作用,就可以在6個(gè)LED上同時(shí)見到數(shù)字顯示。程序中,用8255A的PA口作為輸出,輸出掃描信號(hào),PB口作為輸入,讀進(jìn)列值。本程序用行掃描法來(lái)識(shí)別鍵盤的閉合鍵。先使第0行接地,其余行為高電平,然后看第0行是否有鍵閉合,這是通過(guò)檢查列線電位來(lái)實(shí)現(xiàn)的,即在第0行接地時(shí)看是否有哪條列線變成低電平。如果有*條列線變?yōu)榈碗娖?,則表示第0行和此列線位置上的鍵被按下如果沒有,則說(shuō)明第0行上沒有鍵被按下。此后,再將第1行接地,然后檢測(cè)列線中是否有變?yōu)榈碗娖降木€。如此往下逐行掃描,直到最后一行。為消除鍵的抖動(dòng),所以調(diào)用延遲程序,然后再判斷具體按下的到底是哪個(gè)鍵,如果得到的是FFH,則程序在循環(huán)中等待。計(jì)數(shù)局部:見流程圖時(shí)間設(shè)定模塊對(duì)于輸入的檢測(cè),假設(shè)超出圍,則對(duì)其置F------,功能流程圖程序主流程控制圖D鍵.D鍵.P鍵.M鍵.F鍵.B鍵.E鍵.NNNNNNYYYYYYG鍵.NYC鍵.Y顯示初始化時(shí)間開場(chǎng)計(jì)時(shí)停頓計(jì)時(shí)開啟鬧鈴設(shè)置鬧鈴設(shè)置時(shí)間關(guān)閉鬧鈴?fù)顺龌氐紻OSN中斷效勞子程序流程圖收到50次中斷.進(jìn)位處理局部〔下〕收到50次中斷.進(jìn)位處理局部〔下〕鬧鈴開.計(jì)數(shù)值減一〔初值為50〕YN鬧鈴時(shí)間到.中斷進(jìn)入YYN響鈴?fù)顺鲋袛嘈陂_場(chǎng)秒鐘是否到59〔此局部的轉(zhuǎn)換從略〕開場(chǎng)秒鐘是否到59〔此局部的轉(zhuǎn)換從略〕秒加1秒十位和各位賦值為00NY分鐘是否到59〔此局部的轉(zhuǎn)換從略〕分鐘加1NY分鐘十位和各位賦值為00分鐘是否到23〔此局部的轉(zhuǎn)換從略〕小時(shí)加1NY小時(shí)十位和各位賦值為00鬧鈴判斷響鈴局部結(jié)果討論本程序共有分端口設(shè)置模塊,計(jì)數(shù)模塊,顯示模塊等幾個(gè)模塊。經(jīng)過(guò)調(diào)試,本程序可以實(shí)現(xiàn)題目的要求。時(shí)、分、秒都分兩位。個(gè)位滿十后就向前進(jìn)一位。分秒的十位滿六十后也向前進(jìn)一位。顯示小時(shí)兩位在滿二十四后重新計(jì)數(shù)。在置數(shù)時(shí),使用者可置任意值,但如果有*位超過(guò)計(jì)數(shù)值,則在LED顯示器上輸出出錯(cuò)信息。程序中設(shè)置壓C鍵為L(zhǎng)ED顯示器清0,壓E鍵為退出,壓D鍵為計(jì)數(shù)暫停,壓P鍵為設(shè)置LED顯示器初始值。應(yīng)該注意的是,程序中設(shè)定的鍵值為實(shí)驗(yàn)臺(tái)上的小鍵盤的鍵值,并非計(jì)算機(jī)鍵盤。經(jīng)測(cè)試,程序中設(shè)置的功能全都可以良好運(yùn)行。本程序參照實(shí)驗(yàn)室電腦中16BIT文件中的kl.asm編制定時(shí)器/計(jì)數(shù)器8253計(jì)數(shù)初值的設(shè)定。下面對(duì)幾個(gè)重點(diǎn)局部的調(diào)試過(guò)程和遇到的問(wèn)題作一定的討論:修改后的中斷效勞子程序(改變進(jìn)位的條件)其中進(jìn)位的條件判斷以及后面的鬧鈴的程序段位置的設(shè)置都與程序結(jié)果有很大的關(guān)系.進(jìn)位判斷特別要注意仔細(xì),編程實(shí)現(xiàn)前應(yīng)該畫個(gè)流程圖,直接再源文件上改不但不能節(jié)省時(shí)間,反而更加浪費(fèi)時(shí)間.2:此中斷效勞子程序的類型設(shè)置為FAR調(diào)用,這里要特別注意.因?yàn)橄鄬?duì)于中斷發(fā)生時(shí)的運(yùn)行狀態(tài),此程序段與之不在同一代碼段,所以應(yīng)該定義為FAR類型.這樣產(chǎn)生了另外一個(gè)問(wèn)題,在此程序段中假設(shè)想調(diào)用此CODE段中以他過(guò)程,則那個(gè)過(guò)程也應(yīng)該被定義為FAR調(diào)用,當(dāng)然可以簡(jiǎn)單的通過(guò)不使用過(guò)程調(diào)用解決.以解決此中斷子程序過(guò)程和其他普通過(guò)程對(duì)對(duì)應(yīng)過(guò)程的調(diào)用沖突.設(shè)計(jì)心得通過(guò)對(duì)數(shù)字鬧鐘的匯編實(shí)現(xiàn),對(duì)硬件特別是8253A,8255并行口的原理和實(shí)現(xiàn)都有了很深的了解。更加深了對(duì)匯編語(yǔ)言的使用.整個(gè)程序中涉及8253A,8255并行口的使用,匯編語(yǔ)言熟練掌握的要求。可以說(shuō)整個(gè)文件中最麻煩的就是進(jìn)位條件的判斷,編程中經(jīng)常犯想當(dāng)然的錯(cuò)誤。另外對(duì)于中斷效勞子程序的類型設(shè)置問(wèn)題,由于以前對(duì)這個(gè)概念的理解留于外表,編程中出現(xiàn)了不少奇怪的錯(cuò)誤。再調(diào)試中嘗試使用了分割法,對(duì)錯(cuò)誤模塊進(jìn)展定位,再進(jìn)展排查.在算法實(shí)現(xiàn)上要有一定的思路要更能表達(dá)設(shè)計(jì)的目的。同時(shí)上機(jī)調(diào)試也是十分重要的,在調(diào)試的過(guò)程中能夠不斷的發(fā)現(xiàn)在編寫算法時(shí)應(yīng)該注意的一些細(xì)節(jié)和算法語(yǔ)句的非法使用,在調(diào)試過(guò)程過(guò)對(duì)算法的不斷測(cè)試、更正、擴(kuò)大功能、修飾細(xì)節(jié),使算法程序不斷的得到完善。通過(guò)這次的課程設(shè)計(jì)使我認(rèn)識(shí)到要將微機(jī)原理這門計(jì)算機(jī)專業(yè)的課學(xué)好不僅僅是要把書上的根本知識(shí)學(xué)好而且還要不斷進(jìn)展實(shí)踐,將所學(xué)的跟實(shí)踐操作結(jié)合起來(lái)才能更好地穩(wěn)固所學(xué),才能提高自己實(shí)踐能力.通過(guò)這次的設(shè)計(jì)使我認(rèn)識(shí)到只停留在外表理解問(wèn)題是很難使問(wèn)題得到很好的解決的,實(shí)踐能力與理論知識(shí)同樣重要??梢哉f(shuō)此課程設(shè)計(jì)的理論難度并不大,但是假設(shè)要深入開掘其中的東西,并且實(shí)際去編程實(shí)現(xiàn),就遇到了相當(dāng)大的難度。因?yàn)榕c之涉及的很多方面并沒有學(xué)過(guò),需要自己去自學(xué)和實(shí)踐檢驗(yàn)。所以在以后的學(xué)習(xí)中一方面我要不斷的穩(wěn)固自己所學(xué)的理論知識(shí),一方面還要多參加實(shí)際操作工作以便提高自己的實(shí)際操作能力。其實(shí)這次課程設(shè)計(jì)的最大收獲應(yīng)該是找到了解決問(wèn)題的幾個(gè)很好的途徑:1.討論2.通過(guò)網(wǎng)絡(luò),在自己的上也收獲了很多,共享讓我們共同進(jìn)步。此外,我學(xué)會(huì)了看硬件構(gòu)造圖,并學(xué)會(huì)了自己去獨(dú)立的完善一個(gè)程序,對(duì)程序的效用等做思考。并體會(huì)到:?jiǎn)杽e人只能幫你開拓思路,真正解決問(wèn)題還是要靠自己去摸索。當(dāng)然討論是很好的學(xué)習(xí)途徑,它會(huì)讓你事半功倍.由于時(shí)間不是很充裕,程序中有很多值得改善的地方,我嘗試再其中參加更多的功能,但調(diào)試的結(jié)果沒有,所以需要繼續(xù)努力。參考文獻(xiàn)微機(jī)原理與接口技術(shù)〔復(fù)習(xí)與考試指導(dǎo)〕戴梅萼等.微型計(jì)算機(jī)技術(shù)及應(yīng)用.:清華大學(xué),2003王成耀等.匯編語(yǔ)言程序設(shè)計(jì).:機(jī)械工業(yè),2004 源程序以及注釋;此程序?qū)崿F(xiàn)數(shù)字鬧鐘的設(shè)定,鬧鈴時(shí)間得設(shè)定,鬧鈴功能的開關(guān);試驗(yàn)硬件平臺(tái)是TPC-1型試驗(yàn)培訓(xùn)系統(tǒng);386以上微機(jī)適用;純DOS下才能使用;TASM4.1或以上編譯;*********************;;*鍵盤顯示8255LED*;;*********************;IO_PL*_DEVICE_ID EQU05406H ;TPC卡設(shè)備IDIO_PL*_VENDOR_ID EQU010B5H ;TPC卡廠商IDIO_PL*_SUB_ID EQU0905410B5H ;TPC卡子設(shè)備及廠商IDPA55 EQU218H-200H ;8255端口地址PB55EQU219H-200HP55CTLEQU21BH-200HPORTSEGEQU211H-200H ;LED端口地址PORTBITEQU210H-200HTIM_CTLEQU203H-200H ;8253端口地址TIMER0EQU200H-200HTIMER1EQU201H-200HMODE03EQU36H;0011-0111MODE12EQU74H;0111-0101DATASEGMENTCSREG DW ?IPREG DW ? ;舊中斷向量保存空間IO_9054BASE_ADDRESS DB4DUP(0) ;TPC卡PCI接口芯片I/O基地址暫存空間IO_BASE_ADDRESS DB4DUP(0) ;TPC卡I/O基地址暫存空間INTERRUPT_LINE DB2DUP(0) ;TPC卡中斷號(hào)暫存空間PCICARDNOTFIND DB0DH,0AH,'TPCPCICARDNOTFINDORADDRESS/INTERRUPTERROR!!!',0DH,0AH,'$'IO9054BASEADDRESS DB0DH,0AH,'TPCPCICARD9054CHIPI/OBASEADDRESS:','$'IOBASEADDRESS DB0DH,0AH,'TPCPCICARDI/OBASEADDRESS:','$'INTNUMBER DB0DH,0AH,'TPCPCICARDINTERRUPTLINE:','$'ENTER_RETURN DB0DH,0AH,'$'MESS DB '8253ATIMER0INMODE3!COUNT=0200H',0AH,0DHDB'8253ATIMER1INMODE2!COUNT=0AH',0AH,0DH,'$'MESS1DB'IAMRINGING',0AH,0DH,'$'IRQ_VECT DB08H,09H,0AH,0BH,0CH,0DH,0EH,0FH,70H,71H,72H,73H,74H,75H,76H,77H ;新的中斷向量,中斷0-7的向量為:08H-0FH,中斷8-15的向量為:70H-77HIRQ_MASK_0_7_TABLE DB011111110B,011111101B,011111011B,011110111B DB011101111B,011011111B,010111111B,001111111B DB011111011B,011111011B,011111011B,011111011B DB011111011B,011111011B,011111011B,011111011B ;新的中斷掩碼,中斷0-7時(shí)從低至高相應(yīng)位為零,中斷8-15時(shí)第2位為零IRQ_MASK_8_15_TABLE DB0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB011111110B,011111101B,011111011B,011110111B DB011101111B,011011111B,010111111B,001111111B ;新的中斷掩碼,中斷0-7時(shí)全一,中斷8-15時(shí)從低至高相應(yīng)位為零COUNTDB15CTIMEDB00H,00H,00H,00H,00H,00HCLOCKDB0AH,0AH,0AH,0AH,0AH,0AHBUF DB00H,00H,00H,00H,00H,00H;*****************MYBELLDB00H ;***********OFF***INITIALIZEMONTH3DB0DAY3DB0CHAR1DB?INTMASKDB?CONST1DW?LEDDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H,79H,00HTABLE1DW0101H,0201H,0401H,0801H,1001H,2001H,4001H,8001HDW0102H,0202H,0402H,0802H,1002H,2002H,4002H,8002HDW0104H,0204H,0404H,0804H,1004H,2004H,4004H,8004HCHARDB'CDEFBA9845673210RPMG';MA*DAYDB00H,1FH,1CH,1FH,1EH,1FH,1EH,1FH,1FH,1EH,1FH,1EH,1FHMESDB'INSMALLKEYRORD',0AH,0DHDB'C--DISPLAY12,45,37;G--GOAHEAD',0AH,0DHDB'D--STOPTODISPLAY;E--E*ITTODOS',0AH,0DHDB'M--SETTHECLOCK;F--OPENTHECLOCK',0AH,0DHDB'B--CLOSETHECLOCK',0AH,0DHDB'P--POSITIONTHEBENINNINGDATE',0AH,0DH,'$'DATAENDSSTACKSSEGMENTDB100DUP(?)STADW512DUP(?)TOPEQULENGTHSTASTACKSENDSCODESEGMENT;ASSUMECS:CODE,DS:DATA,SS:STACKS,ES:DATASTART:;ENABLELOCALINTERRUPTINPUT.386CLIMOVA*,DATAMOVDS,A*MOVES,A*MOVA*,STACKSMOVSS,A* CALL FINDTPC ;查找TPC卡資源并顯示MOVAH,0INT1AH;時(shí)間中斷,保存到D*中MOVB*,D*T1:MOVAH,0INT1AHCMPB*,D*JZT1MOVB*,D*MOVSI,0T2:MOVAH,0INT1AHMOVA*,800HT3:DECA*;循環(huán)800H次JNZT3INCSICMPB*,D*JZT2MOVA*,30HMOVB*,SIMULB*MOVB*,56HDIVB*MOVWORDPTRCONST1,A* MOVD*,WORDPTRIO_BASE_ADDRESS ;初始化8253 ADDD*,TIM_CTL;控制口 MOVAL,MODE03;36H==00110110;計(jì)數(shù)器0工作在模式3(方波發(fā)生器),計(jì)數(shù)值采用二進(jìn)制格式 OUTD*,AL MOVD*,WORDPTRIO_BASE_ADDRESS ADDD*,TIMER0;計(jì)時(shí)器0 MOVAL,00H OUTD*,AL MOVAL,02H OUTD*,AL MOVD*,WORDPTRIO_BASE_ADDRESS ADDD*,TIM_CTL;74H==01110100;設(shè)置計(jì)數(shù)器1工作在模式2(分頻器),計(jì)數(shù)值采用二進(jìn)制格式 MOVAL,MODE12 OUTD*,AL MOVD*,WORDPTRIO_BASE_ADDRESSADDD*,TIMER1 MOVAL,0AH OUTD*,AL MOVAL,00 OUTD*,AL MOVD*,OFFSETMES MOVAH,09 INT21H MOVD*,WORDPTRIO_9054BASE_ADDRESS ADDD*,68H;設(shè)置TPC卡中9054芯片IO口,使能中斷INA*,D*ORA*,0900HOUTD*,A*MOVB*,WORDPTRINTERRUPT_LINE ;保存原中斷向量 MOVAL,BYTEPTR[IRQ_VECT+B*] MOVAH,35HINT21H MOVA*,ES MOVCSREG,A* MOVIPREG,B*MOVB*,WORDPTRINTERRUPT_LINE ;設(shè)置新中斷向量MOVAL,BYTEPTR[IRQ_VECT+B*]MOVC*,CSMOVDS,C* MOVD*,OFFSETINT_PROC MOVAH,25HINT21H MOVA*,DATA MOVDS,A* MOVES,A*INAL,21H;設(shè)置中斷掩碼MOVB*,WORDPTRINTERRUPT_LINE MOVAH,BYTEPTR[IRQ_MASK_0_7_TABLE+B*] AND AL,AHOUT21H,ALINAL,0A1HMOVB*,WORDPTRINTERRUPT_LINE MOVAH,BYTEPTR[IRQ_MASK_8_15_TABLE+B*] AND AL,AHOUT0A1H,AL STI;開中斷;*********************************************************;********************小鍵盤的查詢過(guò)程*********************LKEY:CALLKEY;獲得TPC鍵盤輸入值MOVDL,[CHAR1];C--DISPLAY12,45,37CMPDL,'C'JNZLGYCALLCPROJMPLKEYLGY:CMPDL,'G' ;G--GOAHEAD'JNZLDYCALLGPROJMPLKEYLDY:CMPDL,'D' ;D--STOPTODISPLAYJNZLPYCALLDPROJMPLKEYLPY:CMPDL,'P' ;'P--POSITIONTHEBENINNINGJNZLMYCALLPPROJMPLKEYLMY:CMPDL,'M';SETTHECLOCKTIMEJNZLFYCALLMPROJMPLKEYLFY:CMPDL,'F';BELLINGON/OFFJNZLBYMOVMYBELL,01H ;ONJMPLKEYLBY:CMPDL,'B' ;B--CLOSETHECLOCKJNZLEYMOVMYBELL,00H ;OFFJMPLKEYLEY:CMPDL,'E' ;E*ITTODOS'JNZLKEY;**********************非規(guī)定的按鍵時(shí)繼續(xù)等待*************;*********************************************************E*IT:CLIMOVB*,WORDPTRINTERRUPT_LINE ;恢復(fù)中斷掩碼 MOVAH,BYTEPTR[IRQ_MASK_0_7_TABLE+B*] NOTAH IN AL,21H OR AL,AH OUT 21H,ALMOVB*,WORDPTRINTERRUPT_LINE MOVAH,BYTEPTR[IRQ_MASK_8_15_TABLE+B*] NOTAH IN AL,0A1H OR AL,AH OUT 0A1H,ALMOVB*,WORDPTRINTERRUPT_LINE ;恢復(fù)原中斷向量 MOVAL,BYTEPTR[IRQ_VECT+B*]MOVD*,IPREG MOVC*,CSREG MOVDS,C* MOVAH,25HINT21H MOVA*,DATA ;設(shè)置TPC卡中9054芯片IO口,關(guān)閉中斷MOVDS,A*MOVD*,WORDPTRIO_9054BASE_ADDRESS ADDD*,68H INA*,D*ANDA*,0F7FFH OUTD*,A* MOVA*,4C00H INT21H ;退出;------------------------------------------------------------------INT_PROCPROCFAR;修改后的中斷效勞子程序(改變進(jìn)位的條件);此中斷效勞子程序的類型設(shè)置為FAR調(diào)用,這里要特別注意.因?yàn)橄鄬?duì)于中斷發(fā)生時(shí)的運(yùn)行;狀態(tài),此程序段與之不在同一代碼段,所以應(yīng)該定義為FAR類型.這樣產(chǎn)生了另外一個(gè)問(wèn)題,;在此程序段中假設(shè)想調(diào)用此CODE段中以他過(guò)程,則那個(gè)過(guò)程也應(yīng)該被定義為FAR調(diào)用,當(dāng)然;可以簡(jiǎn)單的通過(guò)不使用過(guò)程調(diào)用解決.以解決此中斷子程序過(guò)程和其他普通過(guò)程對(duì)對(duì)應(yīng)過(guò)程;的調(diào)用沖突CLIPUSHA* PUSHB* PUSHC*PUSHD*PUSHSI PUSHDIPUSHDSMOVA*,DATA;INTERRUPTTODOMOVDS,A*DEC[COUNT]JNZDDDMOV[COUNT],20MOVDI,OFFSETCTIMEMOVAL,[DI+4]MOVAH,0AHMULAHADDAL,[DI+5]CMPA*,59;先判斷秒鐘是否等于59秒,是則判斷分鐘,否則加1JZFENZHONGINCBYTEPTR[DI+5]CMPBYTEPTR[DI+5],0AHJNZDDDMOVBYTEPTR[DI+5],00HINCBYTEPTR[DI+4]JMPDDDFENZHONG: MOVWORDPTR[DI+4],0000H;先將秒鐘置為0,再轉(zhuǎn)換分鐘為十進(jìn)制形式 MOVAL,[DI+2]MOVAH,0AHMULAHADDAL,[DI+3]CMPA*,59;判斷是否應(yīng)該向時(shí)鐘進(jìn)位JZSHIZHONG INCBYTEPTR[DI+3] CMPBYTEPTR[DI+3],0AHJNZDDD MOVBYTEPTR[DI+3],00H INCBYTEPTR[DI+2] JMP DDDSHIZHONG:MOVWORDPTR[DI+2],0000 MOVAL,[DI]MOVAH,0AHMULAHADDAL,[DI+1]CMPAH,23;判斷時(shí)鐘該不該循環(huán)了JNZQQQMOVWORDPTR[DI],0000HJMPDDDQQQ: INCBYTEPTR[DI+1] CMPBYTEPTR[DI+1],0AHJNZDDD MOVBYTEPTR[DI+1],00H INCBYTEPTR[DI]DDD: ;將鬧鈴功能鍵與鬧鈴條件的判斷放在20次中斷計(jì)數(shù)條件滿足后的執(zhí)行代碼中;有效縮短延遲時(shí)間以及誤差時(shí)間CMPBYTEPTRMYBELL,00H;檢測(cè)鬧鈴有沒有開,JZZZZLEADI,CTIMELEASI,CLOCKMOVC*,5CHECK:;檢測(cè)門鈴時(shí)間是否到了MOVAL,[DI]MOVBL,[SI]CMPAL,BLJNZZZZINCDIINCSILOOPCHECK;**************鬧鈴時(shí)的檢測(cè)輸出MOVDL,07HMOVAH,02HINT21HLEAD*,MESS1MOVAH,09HINT21H MOVBYTEPTRMYBELL,00HZZZ:MOVAL,20H;SENDEOIOUT0A0H,ALOUT20H,ALMOVC*,0FFFFHLOOP*:NOPLOOPLOOP*;延時(shí)POPDSPOPDI POPSIPOPD* POPC* POPB*POPA*STIIRETINT_PROCENDP;------------------------------------------------------------------KEYPROCNEAR;AB口端口讀取的控制,是對(duì)小鍵盤的控制PUSHC*KST:MOVAL,82H MOVD*,WORDPTRIO_BASE_ADDRESS ADDD*,P55CTLOUTD*,ALMOVAL,00H MOVD*,WORDPTRIO_BASE_ADDRESS ADDD*,PA55OUTD*,AL MOVD*,WORDPTRIO_BASE_ADDRESS ADDD*,PB55INAL,D*ORAL,0F8HCMPAL,0FFHJZDELAYPUSHA*MOVC*,0A00H;兩重循環(huán)DLY:MOVA*,WORDPTRCONST1DLY1:DECA*JNZDLY1DECC*JNZDLYPOPA*MOVCL,08HMOVAH,0FEHSCAN1: MOVD*,WORDPTRIO_BASE_ADDRESS;行列掃描,得到小鍵盤輸入 ADDD*,PA55MOVAL,AHOUTD*,AL MOVD*,WORDPTRIO_BASE_ADDRESS ADDD*,PB55INAL,D*ORAL,0F8HCMPAL,0FFHJNZKEYNROLAH,1DECCLJNZSCAN1JMPKSTKEYN:PUSHA* MOVD*,WORDPTRIO_BASE_ADDRESS ADDD*,PB55RELEA:INAL,D*ORAL,0F8HCMPAL,0FFHJNZRELEAPOPA*NOTA*MOVSI,OFFSETTABLE1MOVDI,OFFSETCHARMOVC*,24TT:CMPA*,[SI]JZNNDECC*JZKSTADDSI,02INCDIJMPTTNN:MOVDL,[DI]MOV[CHAR1],DLMOVAH,02HINT21HPOPC*JMPYANGDELAY:CALLDISPLYJMPKSTYANG:RETKEYENDP;---------------------------------------------------------------DISPLYPROCNEAR;LED的顯示局部PUSHC*MOVB*,OFFSETLEDMOVC*,0006MOVSI,OFFSETCTIMEMOVAH,01HDISPLY1:CLDLODSB*LAT MOVD*,WORDPTRIO_BASE_ADDRESS ADDD*,PORTSEGOUTD*,ALMOVAL,AH MOVD*,WORDPTRIO_BASE_ADDRESS ADDD*,PORTBITOUTD*,ALSHLAH,1MOVAL,00OUTD*,ALLOOPDISPLY1POPC*RETDISPLYENDP;---------------------------------------------------------------CPROPROCNEAR;C鍵按下時(shí)執(zhí)行的過(guò)程,顯示預(yù)設(shè)時(shí)間CLIMOVWORDPTR[CTIME],0201HMOVWORDPTR[CTIME+2],0504HMOVWORDPTR[CTIME+4],0703HRETCPROENDP;---------------------------------------------------------------GPROPROCNEAR;G鍵按下時(shí)執(zhí)行的過(guò)程,開中斷,計(jì)時(shí)開場(chǎng)STIRETGPROENDP;----------------------------------------------------------------DPROPROCNEAR;D鍵按下時(shí)執(zhí)行的過(guò)程,關(guān)中斷,計(jì)時(shí)停頓CLIRETDPROENDP;---------------------------------------------------------------PPROPROCNEAR;時(shí)間設(shè)置的過(guò)程CLIPUSHA*PUSHB*MOVWORDPTR[CTIME],0C0CHMOVWORDPTR[CTIME+2],0C0CHMOVWORDPTR[CTIME+4],0C0CHCALLDISPLYCALLKEYMOVDL,[CHAR1]CMPDL,'2';首位判斷是否小于2JNGNE*T1JMPERR1NE*T1:CMPDL,'2';第一位是否為1,是則判斷第二位是否小于3JNZNORMALSUBDL,30HMOV[CTIME],DLCALLKEYMOVDL,[CHAR1]CMPDL,'3'JNGNE*T2JMPERR1NORMAL:SUBDL,30HMOV[CTIME],DLCALLDISPLYCALLKEYMOVDL,[CHAR1]CMPDL,'9';第三位的判斷,如此直到第六位JNGNE*T2JMPERR1NE*T2:SUBDL,30HMOV[CTIME+1],DLCALLDISPLYCALLKEYMOVDL,[CHAR1]CMPDL,'5'JNGNE*T3JMPERR1NE*T3:SUBDL,30HMOV[CTIME+2],DLCALLDISPLYCALLKEYMOVDL,[CHAR1]CMPDL,'9'JNGNE*T4JMPERR1NE*T4:SUBDL,30HMOV[CTIME+3],DLCALLDISPLYCALLKEYMOVDL,[CHAR1]CMPDL,'5'JNGNE*T5JMPERR1NE*T5:SUBDL,30HMOV[CTIME+4],DLCALLDISPLYCALLKEYMOVDL,[CHAR1]CMPDL,'9'JNGNE*T6JMPERR1NE*T6:SUBDL,30HMOV[CTIME+5],DLCALLDISPLYJMPWWERR1:MOVWORDPTR[CTIME],0A0BH;輸入不全規(guī)時(shí)輸出,E-------MOVWORDPTR[CTIME+2],0A0AHMOVWORDPTR[CTIME+4],0A0AHCALLDISPLYWW:POPB*POPA*RETPPROENDP;---------------------------------------------------------------MPROPROCNEAR;鬧鈴設(shè)置,總體是先保存時(shí)間值,再調(diào)用P過(guò)程,再?gòu)?fù)原時(shí)間CLIPUSHDIPUSHSI LEADI,BUF LEASI,CTIME MOVC*,6BAOCUN:;保存時(shí)間MOVAL,[SI] MOV[DI],AL INCDI INCSI LOOPBAOCUNCALLPPRO LEASI,CTIME LEADI,CLOCK MOVC*,6ZHUAN:;把設(shè)置時(shí)間轉(zhuǎn)換到鬧鈴中MOVAL,[SI] MOV[DI],AL INCDI INCSI LOOPZHUAN LEASI,BUF LEADI,CTIME MOVC*,6HUAN: ;BUF->CTIME MOVAL,[SI] MOV[DI],AL INCSI INCDI LOOPHUAN LEASI,CTIME LEADI,CLOCK MOVC*,6TEST0:MOVDL,[SI];測(cè)試輸入的正確性,可以刪除 ADDDL,30H MOVAH,02H INT21H INCSI LOOPTEST0 MOVC*,6TEST1: MOVDL,[DI] ADDDL,30H MOVAH,02H INT21H INCDI LOOPTEST1
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 教育培訓(xùn)機(jī)構(gòu)評(píng)估居間合同
- 紡織品交易居間合同協(xié)議書
- 2025年度辦公室日常保潔與節(jié)能照明設(shè)備供應(yīng)服務(wù)合同
- 廣告投放數(shù)據(jù)分析合同
- 產(chǎn)品包裝設(shè)計(jì)技術(shù)指南
- 安全生產(chǎn)托管協(xié)議合同
- 工礦企業(yè)產(chǎn)品購(gòu)銷合同
- 廚房承包協(xié)議集錦
- 農(nóng)業(yè)質(zhì)量標(biāo)準(zhǔn)制定指南
- 能源行業(yè)能源供應(yīng)鏈優(yōu)化與智能倉(cāng)儲(chǔ)管理
- 2025年研究生考試考研英語(yǔ)(二204)試卷與參考答案
- DB31∕731-2020 船舶修正總噸單位產(chǎn)品能源消耗限額
- 2024-年全國(guó)醫(yī)學(xué)博士外語(yǔ)統(tǒng)一入學(xué)考試英語(yǔ)試題
- 初中物理典型易錯(cuò)習(xí)題(380道)含解析和答案
- 抗滑樁(旋挖樁)專項(xiàng)施工方案
- 《軌道交通工程盾構(gòu)施工技術(shù)》 課件 項(xiàng)目1 盾構(gòu)發(fā)展歷史認(rèn)知
- 2025年低壓電工作業(yè)證理論全國(guó)考試題庫(kù)(含答案)
- 中國(guó)慢性阻塞性肺疾病基層診療指南(2024年)解讀
- 《中華人民共和國(guó)學(xué)前教育法》專題培訓(xùn)
- 2023年高考真題-化學(xué)(福建卷) 含解析
- 天津市-2024年-社區(qū)工作者-上半年筆試真題卷
評(píng)論
0/150
提交評(píng)論