《微機系統(tǒng)與匯編語言》-課程設計-實時時鐘的設計與實現(xiàn)_第1頁
《微機系統(tǒng)與匯編語言》-課程設計-實時時鐘的設計與實現(xiàn)_第2頁
《微機系統(tǒng)與匯編語言》-課程設計-實時時鐘的設計與實現(xiàn)_第3頁
《微機系統(tǒng)與匯編語言》-課程設計-實時時鐘的設計與實現(xiàn)_第4頁
《微機系統(tǒng)與匯編語言》-課程設計-實時時鐘的設計與實現(xiàn)_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

《微機系統(tǒng)與匯編語言》課程設計題目:實時時鐘的設計與實現(xiàn)姓名:班級:學號:2013年12月25日內(nèi)容要求:設計內(nèi)容設計并實現(xiàn)實時時鐘并通過LED顯示時、分、秒。設計要求①、通過8254產(chǎn)生1s信號中斷信號。②、每秒鐘產(chǎn)生中斷,在中斷子程序中修改時間。③、在LED上顯示時、分、秒。④、通過鍵盤修改時鐘。三.總體設計1.設計思路:初始化8259A,將中斷子程序入口地址寫入中斷向量表.使用8254的計數(shù)器0,方式0計數(shù),輸入CLK0=18.432KHz,計數(shù)初值等于48H.端口OUT0連接到SIR1(即從8259A的IR1).一秒鐘后,輸出高電平,請求中斷,中斷響應后,中斷子程序?qū)?nèi)存中存儲的時間的秒+1,同時控制分和時進位.通過轉(zhuǎn)換數(shù)據(jù)格式,將時間打入內(nèi)存中6個LED燈對應的位置,同時8254再次開始計數(shù).中斷結束.使用8255A控制LED燈的顯示,循環(huán)讀取內(nèi)存中的6位LED燈存儲信息,顯示、清屏、掃描鍵盤.通過鍵盤調(diào)節(jié)時間,讀取按鍵碼,調(diào)整數(shù)據(jù)格式,修改內(nèi)存中的時間,在下一秒刷新時間時,顯示修改后的時間.注:(第一次用8259A的主片的MIR7接口,第二次使用從片的SIR1接口.)(1)如果使用8259A的主片的MIR7接口請求中斷,向中斷向量表的003CH和003EH分別寫入中斷服務子程序的偏移地址和段基址,初始化主片的ICW2=08H,其中,中斷類型碼的高五位是00001B(計算方法是3CH÷4),中斷服務子程序結束時,OUT20H,20H;(結束中斷).(2)如果使用8259A的從片的SIR1接口請求中斷,向中斷向量表的00C4H和00C6H分別寫入中斷服務子程序的偏移地址和段基址,初始化主片的方法不變,初始化從片的ICW2=30H,中斷類型碼高五位是00110B(計算方法是C4H÷4),中斷服務子程序結束時,執(zhí)行OUT0A0H,20H和OUT20H,20H;(結束中斷).硬件連接圖圖一圖二圖三將中斷服務子程序入口地址寫入中斷向量表是調(diào)節(jié)按鍵將中斷服務子程序入口地址寫入中斷向量表是調(diào)節(jié)按鍵是調(diào)節(jié)按鍵還是數(shù)字按鍵?標志位指向高位(標志輸入時間的高位)如果是調(diào)時按鍵,調(diào)節(jié)時間指針指向時數(shù)據(jù)位如果是調(diào)分按鍵,調(diào)節(jié)時間指針指向分數(shù)據(jù)位如果是調(diào)秒按鍵,調(diào)節(jié)時間指針指向秒數(shù)據(jù)位如果是復位按鍵,內(nèi)存時間時鐘數(shù)據(jù)全部清零是低位是高位是數(shù)字鍵YESNO初始化主片8259A和從片8259A初始化內(nèi)存時鐘數(shù)據(jù)初始化8255A,寫入控制字初始化8254,寫入計數(shù)器初值,并開始計數(shù)調(diào)用顯示子程序清屏掃描是否有鍵盤輸入控制8255A讀取鍵盤字讀取標志,判斷高位還是低位?將輸入的2次按鍵數(shù)組合成一個時間位,填入時間指針指向的時間數(shù)據(jù)位中斷服務子程序,每隔一秒鐘請求中斷,CPU響應中斷之后,中斷子程序?qū)?nèi)存中存儲的時間的秒+1,同時控制分和時進位.通過轉(zhuǎn)換數(shù)據(jù)格式,將時間打入內(nèi)存中6個LED燈對應的位置,同時8254再次開始計數(shù).中斷結束.程序代碼代碼如下:MY8255_AEQU0600HMY8255_BEQU0602HMY8255_CEQU0604HMY8255_CONEQU0606HA8254EQU06C0H;計數(shù)器0的接口地址CON8254EQU06C6H;控制口SSTACKSEGMENTSTACKDW64DUP(?)SSTACKENDSDATASEGMENTTEMPWORDDW0000H;放置當前要調(diào)的是哪一位TEMPTDB01H,00H,00H;臨時數(shù)據(jù)TIMEDB00H,00H,00H;時分秒DTABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H;定義16進制數(shù)字DB7FH,6FH,77H,7CH,39H,5EH,79H,71HDATAENDSCODEEGMENTASSUMECS:CODE,DS:DATASTART:PUSHDS PUSHSIMOVAX,0000HMOVDS,AXMOVAX,OFFSETIRQ7;取中斷入口地址MOVSI,00C4H;中斷矢量地址MOV[SI],AX;填IRQ7的偏移矢量MOVAX,CS;段地址MOVSI,00C6HMOV[SI],AX;填IRQ7的段地址矢量CLI POPSIPOPDS;初始化主片8259 MOVAL,11HOUT20H,AL;ICW1MOVAL,08HOUT21H,AL;ICW2MOVAL,04H;表明,IR2接口上接從片OUT21H,AL;ICW3MOVAL,01HOUT21H,AL;ICW4;從片MOVAL,11HOUT0A0H,AL;ICW1MOVAL,30HOUT0A1H,AL;ICW2MOVAL,02H;02H=00000010BOUT0A1H,AL;ICW3(中斷類型碼是010,中斷源是IR2)MOVAL,01HOUT0A1H,AL;ICW4=10100001BMOVAL,0FDHOUT0A1H,AL;OCW1=11111101B(=0FDH)只有IR1不被屏蔽MOVAL,6BH;=01101011BOUT21H,AL;主8259OCW1(IR7,IR4,IR2不被屏蔽)STI ;以下內(nèi)容為時鐘顯示MOVAX,DATAMOVDS,AX MOVSI,3000HMOVAL,00HMOV[SI],AL;清顯示緩沖MOV[SI+1],ALMOV[SI+2],ALMOV[SI+3],ALMOV[SI+4],AL;第二個LEDMOV[SI+5],AL;第一個LED LEADI,TIMEMOVDX,MY8255_CON;寫8255控制字MOVAL,81H;10000001BA口,B口方式0,C口下半部輸入,其它口做輸出OUTDX,AL ;計數(shù)器PUSHDXPUSHAXMOVDX,CON8254MOVAL,00110000B;計數(shù)器0,16位計數(shù),方式0,2進制OUTDX,ALMOVDX,A8254MOVAL,00H;計數(shù)器初值是18432(十進制)OUTDX,AL;寫低8位MOVAL,48H;寫高8位OUTDX,ALSTI POPAX POPDX BEGIN:CALLDIS;調(diào)用顯示子程序CALLCLEAR;清屏CALLCCSCAN;掃描JNZINK1JMPBEGININK1:ALLDISCALLDALLYCALLDALLYCALLCLEARCALLCCSCANJNZINK2;有鍵按下,轉(zhuǎn)到INK2JMPBEGIN;確定按下鍵的位置INK2:MOVCH,0FEHMOVCL,00HCOLUM:MOVAL,CHMOVDX,MY8255_AOUTDX,ALMOVDX,MY8255_CINAL,DX;IN為輸入字節(jié)或字L1:TESTAL,01H;isL1?JNZL2MOVAL,00H;L1JMPKCODEL2:TESTAL,02H;isL2?JNZL3MOVAL,04H;L2JMPKCODEL3:TESTAL,04H;isL3?JNZL4MOVAL,08H;L3JMPKCODEL4:TESTAL,08H;isL4?JNZNEXTMOVAL,00H;==L4 ADDAL,CL CALLSETIME;用來確定是調(diào)時,還是調(diào)分,還是調(diào)秒,還是清零 JMPCONTINUEKCODE:ADDAL,CLCALLPUTBUFCONTINUE:PUSHAXKON:CALLDIS;調(diào)用顯示子程序CALLCLEAR;清屏CALLCCSCAN;掃描JNZKONPOPAXNEXT:INCCL;次數(shù)加1MOVAL,CHTESTAL,08HJZKERRROLAL,1;左移MOVCH,ALJMPCOLUMKERR:JMPBEGINCCSCAN:MOVAL,00H;鍵盤掃描子程序MOVDX,MY8255_AOUTDX,ALMOVDX,MY8255_CINAL,DXNOTALANDAL,0FHRETCLEAR:MOVDX,MY8255_B;清屏子程序MOVAL,00HOUTDX,ALRETDIS:PUSHAX;顯示子程序MOVSI,3000HMOVDL,0DFHMOVAL,DLAGAIN:PUSHDXMOVDX,MY8255_AOUTDX,ALMOVAL,[SI]MOVBX,OFFSETDTABLEANDAX,00FFHADDBX,AXMOVAL,[BX]MOVDX,MY8255_BOUTDX,ALCALLDALLYINCSIPOPDXMOVAL,DLTESTAL,01HJZOUT1RORAL,1MOVDL,ALJMPAGAINOUT1:POPAXRETDALLY:PUSHCX;延時子程序MOVCX,0006HT1:MOVAX,009FHT2:DECAXJNZT2LOOPT1POPCXRETPUTBUF:PUSHSI PUSHDX LEASI,TEMPT;TEMPT有3個字節(jié),第一個字節(jié)記錄輸入數(shù)據(jù)是十位還是個位,;第二和第三個數(shù)據(jù)放置十位和個位的值 MOVAH,[SI] CMPAH,01H JZPUT1 JMPPUT2PUT1: MOV[SI+1],ALMOVAH,02HMOV[SI],AH JMPGOBACKPUT2:MOVAH,01HMOV[SI],AHMOV[SI+2],ALMOVAL,[SI+1] MOVDL,0AH;=10 MULDL;AX=DL*AL MOVAH,[SI+2] ADDAL,AH;AL當前放的是兩次輸入的正確的時間,2位 LEASI,TEMPWORD MOVSI,[SI] MOV[SI],ALJMPGOBACKGOBACK:POPDXPOPSIRETSETIME:;找出最后一行陣列按的是第幾個,確定調(diào)整時分秒PUSHAX PUSHSI LEASI,TEMPT MOVAH,01H MOV[SI],AH LEASI,TEMPWORD LEADI,TIMECMPAL,00H JNZL41 MOV[SI],DI CALLSETIMENDL41: CMPAL,01H JNZL42 INCDI MOV[SI],DI CALLSETIMENDL42: CMPAL,02H JNZL43 INCDI INCDI MOV[SI],DI CALLSETIMENDL43:MOVSI,DI;時鐘全部置0MOVAH,00HMOV[SI],AH MOV[SI+1],AH MOV[SI+2],AHSETIMEND:POPSIPOPAXRETIRQ7:;中斷服務子程序,自動修改時間STIPUSHSIPUSHAXPUSHDXMOVDX,CON8254MOVAL,00110000B;計數(shù)器0,16位計數(shù),方式0,2進制OUTDX,ALMOVDX,A8254MOVAL,00H;計數(shù)器初值是18432(十進制)OUTDX,AL;寫低8位MOVAL,48H;寫高8位OUTDX,ALMOVDL,00111100B;=60MOVDH,00011000B;=24LEASI,TIMEMOVAX,0000H;清空MOVAL,[SI+2];取得時間,秒ADDAL,01H;秒+1DIVDL;取模60MOV[SI+2],AH;AH=余數(shù)(模),裝回去MOVAH,[SI+1];取時間,分ADDAL,AH;AL=秒位的進位(=1或0),分+1或0MOVAH,00HDIVDL;取模60MOV[SI+1],AH;AH=模(余數(shù)),裝回去MOVAH,[SI];小時ADD

溫馨提示

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

評論

0/150

提交評論