2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  摘要</b></p><p><b>  數(shù)字鬧鐘</b></p><p>  1、通過8253定時(shí)器產(chǎn)生秒脈沖定時(shí)中斷。在中斷服務(wù)程序中實(shí)現(xiàn)秒、分、小時(shí)的進(jìn)位(24小時(shí)制)。</p><p>  2、將當(dāng)前時(shí)分秒在七段LED顯示器上顯示(如:091132)。</p><p

2、>  3、可設(shè)置鬧鐘的時(shí)間當(dāng)前值(對準(zhǔn)時(shí)間),設(shè)置鬧鈴時(shí)間,鬧鈴功能的關(guān)閉和開放.</p><p>  關(guān)鍵詞:數(shù)字鬧鐘,8253定時(shí)器,LED顯示器,8255A并行口</p><p><b>  目 錄</b></p><p><b>  1.實(shí)驗(yàn)線路1</b></p><p><

3、b>  2.設(shè)計(jì)思想2</b></p><p><b>  3.功能流程圖4</b></p><p><b>  4.結(jié)果討論8</b></p><p>  5.源程序以及注釋9</p><p><b>  參考文獻(xiàn)26</b></p>

4、<p><b>  1.實(shí)驗(yàn)線路</b></p><p>  實(shí)驗(yàn)線路如圖1所示。</p><p><b>  2.設(shè)計(jì)思想</b></p><p><b>  一、概述:</b></p><p>  程序主體設(shè)計(jì):本程序共有分端口設(shè)置模塊,計(jì)數(shù)模塊,顯示模塊等幾個

5、模塊。</p><p>  C--DISPLAY 12, 45, 37 ----將鬧鐘設(shè)置為12:45: 37;</p><p>  G--GO AHEAD----開中斷,鬧鐘恢復(fù)走時(shí)</p><p>  D--STOP TO DISPLAY-----關(guān)中斷,鬧鐘停止走時(shí)</p><p>  E--EXIT TO DOS----返回DOS&l

6、t;/p><p>  M--SET THE CLOCK -----設(shè)置鬧鈴時(shí)間</p><p>  F--OPEN THE CLOCK-----設(shè)置鬧鐘功能為開</p><p>  B--CLOSE THE CLOCK-----設(shè)置鬧鐘功能為關(guān)</p><p>  P--POSITION THE BENINNING DATE------設(shè)置鬧鐘的

7、時(shí)間</p><p>  二、計(jì)時(shí)器軟件的設(shè)計(jì):</p><p>  主程序中,要對各個用到的芯片進(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í)鐘中斷信號,根據(jù)兩個計(jì)數(shù)器的

8、設(shè)置,系統(tǒng)每隔20毫秒便由8253A產(chǎn)生一次中斷請求,即每隔20豪秒執(zhí)行一次中斷處理程序。這個方法將與時(shí)間相關(guān)的兩個模塊即顯示模塊和計(jì)時(shí)模塊放在中斷處理程序中,這樣,就保證了數(shù)字顯示的穩(wěn)定,中斷處理程序完成計(jì)時(shí)功能要依靠兩個方面,因?yàn)橹袛嗵幚沓绦蚴敲?0豪秒執(zhí)行一次,但計(jì)時(shí)并不是以20豪秒為單位進(jìn)行的,而是以秒為單位進(jìn)行的,所以,計(jì)時(shí)功能的實(shí)現(xiàn)一方面要利用20毫秒這個基準(zhǔn)時(shí)間單位,另一方面借助一個計(jì)數(shù)單位。計(jì)數(shù)單位的初始值為50,每進(jìn)行

9、一次中斷,便使計(jì)數(shù)單元的內(nèi)容減1。每當(dāng)計(jì)數(shù)單元從50減為0時(shí),說明已經(jīng)過了1秒時(shí)間。并判斷是否有進(jìn)位,如有則進(jìn)行修改,實(shí)現(xiàn)進(jìn)位。并在LED上顯示。</p><p><b>  顯示部分:</b></p><p>  本程序顯示部分用了6個共陰極LED作為顯示管,顯示程序要做到每送一次段碼就送一次位碼,每送一次位碼后,將位碼中的0右移1位作為下次的位碼,從而可以實(shí)現(xiàn)從左

10、到右使6個LED依次顯示出相應(yīng)的數(shù)字。雖然CPU每隔一定時(shí)間便執(zhí)行顯示程序,但只要這個時(shí)間段不太長,由于人眼的視覺作用,就可以在6個LED上同時(shí)見到數(shù)字顯示。</p><p>  程序中,用8255A的PA口作為輸出,輸出掃描信號,PB口作為輸入,讀進(jìn)列值。</p><p>  本程序用行掃描法來識別鍵盤的閉合鍵。先使第0行接地,其余行為高電平,然后看第0行是否有鍵閉合,這是通過檢查列線電

11、位來實(shí)現(xiàn)的,即在第0行接地時(shí)看是否有哪條列線變成低電平。如果有某條列線變?yōu)榈碗娖?,則表示第0行和此列線位置上的鍵被按下如果沒有,則說明第0行上沒有鍵被按下。此后,再將第1行接地,然后檢測列線中是否有變?yōu)榈碗娖降木€。如此往下逐行掃描,直到最后一行。為消除鍵的抖動,所以調(diào)用延遲程序,然后再判斷具體按下的到底是哪個鍵,如果得到的是FFH,則程序在循環(huán)中等待。</p><p><b>  計(jì)數(shù)部分:見流程圖&l

12、t;/b></p><p><b>  時(shí)間設(shè)定模塊</b></p><p>  對于輸入的檢測,若超出范圍,則對其置F------,</p><p><b>  3.功能流程圖</b></p><p>  一、程序主流程控制圖(如圖2所示)</p><p>  二、中

13、斷服務(wù)子程序流程圖(如圖3所示)</p><p>  三、進(jìn)位處理部分流程圖(如圖4所示)</p><p><b>  4.結(jié)果討論</b></p><p>  本程序共有分端口設(shè)置模塊,計(jì)數(shù)模塊,顯示模塊等幾個模塊。經(jīng)過調(diào)試,本程序可以實(shí)現(xiàn)題目的要求。時(shí)、分、秒都分兩位。個位滿十后就向前進(jìn)一位。分秒的十位滿六十后也向前進(jìn)一位。顯示小時(shí)兩位在滿

14、二十四后重新計(jì)數(shù)。在置數(shù)時(shí),使用者可置任意值,但如果有某位超過計(jì)數(shù)值,則在LED顯示器上輸出出錯信息。程序中設(shè)置壓C鍵為LED顯示器清0,壓E鍵為退出,壓D鍵為計(jì)數(shù)暫停,壓P鍵為設(shè)置LED顯示器初始值。應(yīng)該注意的是,程序中設(shè)定的鍵值為實(shí)驗(yàn)臺上的小鍵盤的鍵值,并非計(jì)算機(jī)鍵盤。經(jīng)測試,程序中設(shè)置的功能全都可以良好運(yùn)行。</p><p>  本程序參照實(shí)驗(yàn)室電腦中16BIT文件中的kl.asm編制</p>

15、<p>  定時(shí)器/計(jì)數(shù)器8253計(jì)數(shù)初值的設(shè)定。</p><p>  下面對幾個重點(diǎn)部分的調(diào)試過程和遇到的問題作一定的討論:</p><p>  修改后的中斷服務(wù)子程序(改變進(jìn)位的條件)</p><p> ?。?)其中進(jìn)位的條件判斷以及后面的鬧鈴的程序段位置的設(shè)置都與程序結(jié)果有很大的關(guān)系.進(jìn)位判斷特別要注意仔細(xì),編程實(shí)現(xiàn)前應(yīng)該畫個流程圖,直接再源文件上

16、改不但不能節(jié)省時(shí)間,反而更加浪費(fèi)時(shí)間.</p><p> ?。?)此中斷服務(wù)子程序的類型設(shè)置為FAR調(diào)用,這里要特別注意.因?yàn)橄鄬τ谥袛喟l(fā)生時(shí)的運(yùn)行狀態(tài),此程序段與之不在同一代碼段,所以應(yīng)該定義為FAR類型.這樣產(chǎn)生了另外一個問題,在此程序段中若想調(diào)用此CODE段中以他過程,則那個過程也應(yīng)該被定義為FAR調(diào)用,當(dāng)然可以簡單的通過不使用過程調(diào)用解決.以解決此中斷子程序過程和其他普通過程對對應(yīng)過程的調(diào)用沖突.<

17、/p><p><b>  5.源程序以及注釋</b></p><p>  ;此程序?qū)崿F(xiàn)數(shù)字鬧鐘的設(shè)定,鬧鈴時(shí)間得設(shè)定,鬧鈴功能的開關(guān)</p><p>  ;試驗(yàn)硬件平臺是TPC-1型試驗(yàn)培訓(xùn)系統(tǒng)</p><p>  ;386以上微機(jī)適用</p><p>  ;純DOS下才能使用</p>

18、<p>  ;TASM4.1或以上編譯</p><p>  ;*********************;</p><p>  ;* 鍵盤顯示 8255LED *;</p><p>  ;*********************;</p><p>  IO_PLX_DEVICE_ID EQU 05406H;TPC卡

19、設(shè)備ID</p><p>  IO_PLX_VENDOR_IDEQU 010B5H;TPC卡廠商ID</p><p>  IO_PLX_SUB_ID EQU 0905410B5H;TPC卡子設(shè)備及廠商ID</p><p>  PA55 EQU 218H-200H;8255端口地址</p><p>

20、;  PB55 EQU 219H-200H</p><p>  P55CTL EQU 21BH-200H</p><p>  PORTSEG EQU 211H-200H;LED端口地址</p><p>  PORTBIT EQU 210H-200H

21、</p><p>  TIM_CTL EQU 203H-200H;8253端口地址</p><p>  TIMER0 EQU 200H-200H</p><p>  TIMER1 EQU 201H-200H</p><p>  MODE03

22、 EQU 36H ;0011-0111</p><p>  MODE12 EQU 74H ;0111-0101</p><p>  DATA SEGMENT</p><p>  CSREGDW?</p><p>  IPREGDW?

23、 ;舊中斷向量保存空間</p><p>  IO_9054BASE_ADDRESSDB 4 DUP(0);TPC卡PCI接口芯片I/O基地址暫存空間</p><p>  IO_BASE_ADDRESS DB 4 DUP(0);TPC卡I/O基地址暫存空間</p><p>  INTERRUPT_L

24、INE DB 2 DUP(0);TPC卡中斷號暫存空間</p><p>  PCICARDNOTFINDDB 0DH,0AH,'TPC PCI CARD NOT FIND OR ADDRESS/INTERRUPT ERROR !!!',0DH,0AH,'$'</p><p>  IO9054BASEADDRESSDB 0DH,0AH,

25、9;TPC PCI CARD 9054 CHIP I/O BASE ADDRESS : ','$'</p><p>  IOBASEADDRESSDB 0DH,0AH,'TPC PCI CARD I/O BASE ADDRESS : ','$'</p><p>  INTNUMBER DB 0DH,0AH,'TP

26、C PCI CARD INTERRUPT LINE : ','$'</p><p>  ENTER_RETURN DB 0DH,0AH,'$'</p><p>  MESS DB '8253A TIMER0 IN MODE3! COUNT=0200H',0AH,0DH</p><p>

27、;  DB '8253A TIMER1 IN MODE2! COUNT=0AH',0AH,0DH,'$'</p><p>  MESS1 DB 'I AM RINGING',0AH,0DH,'$'</p><p>  IRQ_VECTDB 08H,09H,0AH,0BH,0CH,0DH,0E

28、H,0FH,70H,71H,72H,73H,74H,75H,76H,77H</p><p>  ;新的中斷向量,中斷0-7的向量為:08H-0FH,中斷8-15的向量為:70H-77H</p><p>  IRQ_MASK_0_7_TABLEDB 011111110B,011111101B,011111011B,011110111B</p><p>  DB 01

29、1101111B,011011111B,010111111B,001111111B</p><p>  DB 011111011B,011111011B,011111011B,011111011B</p><p>  DB 011111011B,011111011B,011111011B,011111011B</p><p>  ;新的中斷掩碼,中斷0-7時(shí)從低至高

30、相應(yīng)位為零,中斷8-15時(shí)第2位為零</p><p>  IRQ_MASK_8_15_TABLEDB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH</p><p>  DB 011111110B,011111101B,011111011B,011110111B</p><p>  DB 011101111B,011011111B,

31、010111111B,001111111B</p><p>  ;新的中斷掩碼,中斷0-7時(shí)全一,中斷8-15時(shí)從低至高相應(yīng)位為零</p><p>  COUNT DB 15</p><p>  CTIME DB 00H,00H,00H,00H,00H,00H</p><p>  CLOCK DB 0AH,0A

32、H,0AH,0AH,0AH,0AH</p><p>  BUF DB 00H,00H,00H,00H,00H,00H;*****************</p><p>  MYBELL DB 00H;***********OFF***INITIALIZE</p><p>  MONTH3 DB 0</p><

33、p>  DAY3 DB 0</p><p>  CHAR1 DB ?</p><p>  INTMASK DB ?</p><p>  CONST1 DW ?</p><p>  LED DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H,

34、79H,00H</p><p>  TABLE1 DW 0101H,0201H,0401H,0801H,1001H,2001H,4001H,8001H</p><p>  DW 0102H,0202H,0402H,0802H,1002H,2002H,4002H,8002H</p><p>  DW 0104H,0204H,0404H,0804H,1004H

35、,2004H,4004H,8004H</p><p>  CHAR DB 'CDEFBA9845673210 RPMG'</p><p>  ;MAXDAY DB 00H,1FH,1CH,1FH,1EH,1FH,1EH,1FH,1FH,1EH,1FH,1EH,1FH</p><p>  MES DB '

36、;IN SMALL KEYRORD',0AH,0DH</p><p>  DB 'C--DISPLAY 12, 45, 37 ; G--GO AHEAD',0AH,0DH</p><p>  DB 'D--STOP TO DISPLAY ; E--EXIT TO DOS',0AH,0DH</p><p>  DB &

37、#39;M--SET THE CLOCK ; F--OPEN THE CLOCK',0AH,0DH</p><p>  DB 'B--CLOSE THE CLOCK',0AH,0DH</p><p>  DB 'P--POSITION THE BENINNING DATE',0AH,0DH,'$'</p>&

38、lt;p><b>  DATA ENDS</b></p><p>  STACKS SEGMENT</p><p>  DB 100 DUP (?)</p><p>  STA DW 512 DUP (?)</p><p>  TOP EQU LENGTH STA</p>&l

39、t;p>  STACKS ENDS</p><p>  CODE SEGMENT</p><p>  ;ASSUME CS:CODE,DS:DATA,SS:STACKS,ES:DATA</p><p><b>  START:</b></p><p>  ;ENABLE LOCAL INTERRUPT INPUT&

40、lt;/p><p><b>  .386</b></p><p><b>  CLI</b></p><p>  MOV AX,DATA</p><p><b>  MOV DS,AX</b></p><p><b>  MOV ES,AX<

41、/b></p><p>  MOV AX,STACKS</p><p><b>  MOV SS,AX</b></p><p>  CALLFINDTPC;查找TPC卡資源并顯示</p><p><b>  MOV AH,0</b></p><p>  INT 1

42、AH ;時(shí)間中斷,保存到DX中</p><p><b>  MOV BX,DX</b></p><p>  T1: MOV AH,0</p><p><b>  INT 1AH</b></p><p><b>  CMP BX,DX</b>

43、;</p><p><b>  JZ T1</b></p><p><b>  MOV BX,DX</b></p><p><b>  MOV SI,0</b></p><p>  T2: MOV AH,0</p><p><b>

44、;  INT 1AH</b></p><p>  MOV AX,800H</p><p>  T3: DEC AX ;循環(huán)800H次</p><p><b>  JNZ T3</b></p><p><b>  INC SI</b></p

45、><p><b>  CMP BX,DX</b></p><p><b>  JZ T2</b></p><p>  MOV AX,30H</p><p><b>  MOV BX,SI</b></p><p><b>  MUL BX</

46、b></p><p>  MOV BX,56H</p><p><b>  DIV BX</b></p><p>  MOV WORD PTR CONST1,AX</p><p>  MOV DX,WORD PTR IO_BASE_ADDRESS;初始化8253</p><p>  AD

47、D DX,TIM_CTL ;控制口</p><p>  MOV AL,MODE03 ;36H==0011 0110 ;計(jì)數(shù)器0工作在模式3(方波發(fā)生器),計(jì)數(shù)值采用二進(jìn)制格式</p><p>  OUT DX,AL</p><p>  MOV DX,WORD PTR IO_BASE_ADDRESS</

48、p><p>  ADD DX,TIMER0 ;計(jì)時(shí)器0</p><p>  MOV AL,00H</p><p>  OUT DX,AL</p><p>  MOV AL,02H</p><p>  OUT DX,AL</p><p>  

49、MOV DX,WORD PTR IO_BASE_ADDRESS</p><p>  ADD DX,TIM_CTL ;74H==0111 0100 ;設(shè)置計(jì)數(shù)器1工作在模式2(分頻器),計(jì)數(shù)值采用二進(jìn)制格式</p><p>  MOV AL,MODE12</p><p>  OUT DX,AL</p><p>  MOV DX,WOR

50、D PTR IO_BASE_ADDRESS</p><p>  ADD DX,TIMER1</p><p>  MOV AL,0AH</p><p>  OUT DX,AL</p><p>  MOV AL,00</p><p>  OUT DX,AL</p><p>  MOV D

51、X,OFFSET MES</p><p>  MOV AH,09</p><p><b>  INT 21H</b></p><p>  MOV DX,WORD PTR IO_9054BASE_ADDRESS</p><p>  ADD DX,68H ;設(shè)置

52、TPC 卡中9054芯片IO口,使能中斷</p><p><b>  IN AX,DX</b></p><p>  OR AX,0900H</p><p><b>  OUT DX,AX</b></p><p>  MOV BX,WORD PTR INTERRUPT_LINE ;保存原中斷向量

53、</p><p>  MOV AL,BYTE PTR [IRQ_VECT+BX]</p><p>  MOV AH,35H </p><p><b>  INT 21H</b>&

54、lt;/p><p><b>  MOV AX,ES</b></p><p>  MOV CSREG,AX</p><p>  MOV IPREG,BX</p><p>  MOV BX,WORD PTR INTERRUPT_LINE ;設(shè)置新中斷向量</p><p>  MOV AL,BYTE

55、PTR [IRQ_VECT+BX]</p><p><b>  MOV CX,CS</b></p><p><b>  MOV DS,CX</b></p><p>  MOV DX,OFFSET INT_PROC</p><p>  MOV AH,25H</p><p>&l

56、t;b>  INT 21H</b></p><p>  MOV AX,DATA</p><p><b>  MOV DS,AX</b></p><p><b>  MOV ES,AX</b></p><p>  IN AL, 21H ;

57、設(shè)置中斷掩碼</p><p>  MOV BX,WORD PTR INTERRUPT_LINE</p><p>  MOV AH,BYTE PTR [IRQ_MASK_0_7_TABLE+BX]</p><p><b>  ANDAL,AH</b></p><p>  OUT 21H, AL</p>

58、<p>  IN AL, 0A1H</p><p>  MOV BX,WORD PTR INTERRUPT_LINE</p><p>  MOV AH,BYTE PTR [IRQ_MASK_8_15_TABLE+BX]</p><p><b>  ANDAL,AH</b></p><p>  O

59、UT 0A1H, AL</p><p>  STI ;開中斷</p><p>  ;*********************************************************</p><p>  ;********************小鍵盤的查詢過程*******

60、**************</p><p>  LKEY: CALL KEY ;獲得TPC鍵盤輸入值</p><p>  MOV DL,[CHAR1] ;C--DISPLAY 12, 45, 37</p><p>  CMP DL,'C'</p><p><b>  JNZ LGY<

61、;/b></p><p><b>  CALL CPRO</b></p><p><b>  JMP LKEY</b></p><p>  LGY: CMP DL,'G'; G--GO AHEAD'</p><p><b>  JNZ LDY<

62、;/b></p><p><b>  CALL GPRO</b></p><p><b>  JMP LKEY</b></p><p>  LDY: CMP DL,'D'; D--STOP TO DISPLAY</p><p><b>  JNZ LPY&

63、lt;/b></p><p><b>  CALL DPRO</b></p><p><b>  JMP LKEY</b></p><p>  LPY: CMP DL,'P'; 'P--POSITION THE BENINNING</p><p><

64、b>  JNZ LMY</b></p><p><b>  CALL PPRO</b></p><p><b>  JMP LKEY</b></p><p>  LMY: CMP DL,'M' ;SET THE CLOCK TIME</p><

65、p><b>  JNZ LFY</b></p><p><b>  CALL MPRO</b></p><p><b>  JMP LKEY</b></p><p>  LFY: CMP DL,'F' ;BELLING ON/OFF</p>

66、<p><b>  JNZ LBY</b></p><p>  MOV MYBELL,01H;ON</p><p><b>  JMP LKEY</b></p><p>  LBY: CMP DL,'B';B--CLOSE THE CLOCK</p><p&g

67、t;<b>  JNZ LEY</b></p><p>  MOV MYBELL,00H;OFF</p><p><b>  JMP LKEY</b></p><p>  LEY: CMP DL,'E'; EXIT TO DOS'</p><p><b&g

68、t;  JNZ LKEY</b></p><p>  ;**********************非規(guī)定的按鍵時(shí)繼續(xù)等待*************</p><p>  ;*********************************************************</p><p>  EXIT: CLI</p>

69、<p>  MOV BX,WORD PTR INTERRUPT_LINE;恢復(fù)中斷掩碼</p><p>  MOV AH,BYTE PTR [IRQ_MASK_0_7_TABLE+BX]</p><p><b>  NOT AH</b></p><p>  INAL, 21H</p><p><b&

70、gt;  ORAL, AH</b></p><p>  OUT21H, AL</p><p>  MOV BX,WORD PTR INTERRUPT_LINE</p><p>  MOV AH,BYTE PTR [IRQ_MASK_8_15_TABLE+BX]</p><p><b>  NOT AH</b&g

71、t;</p><p>  INAL, 0A1H</p><p><b>  ORAL, AH</b></p><p>  OUT0A1H, AL</p><p>  MOV BX,WORD PTR INTERRUPT_LINE;恢復(fù)原中斷向量</p><p>  MOV AL,BYTE

72、PTR [IRQ_VECT+BX]</p><p>  MOV DX,IPREG</p><p>  MOV CX,CSREG</p><p><b>  MOV DS,CX</b></p><p>  MOV AH,25H</p><p><b>  INT 21H</b>

73、</p><p>  MOV AX,DATA;設(shè)置 TPC 卡中9054芯片IO口,關(guān)閉中斷</p><p><b>  MOV DS,AX</b></p><p>  MOV DX,WORD PTR IO_9054BASE_ADDRESS</p><p>  ADD DX,68H</p><p&g

74、t;<b>  IN AX,DX</b></p><p>  AND AX,0F7FFH</p><p><b>  OUT DX,AX</b></p><p>  MOV AX,4C00H</p><p>  INT 21H;退出</p><p>  ;-------

75、-----------------------------------------------------------</p><p>  INT_PROC PROC FAR ;修改后的中斷服務(wù)子程序(改變進(jìn)位的條件)</p><p>  ;此中斷服務(wù)子程序的類型設(shè)置為FAR調(diào)用,這里要特別注意.因?yàn)橄鄬τ谥袛喟l(fā)生時(shí)的運(yùn)行</p><p>  ;狀態(tài)

76、,此程序段與之不在同一代碼段,所以應(yīng)該定義為FAR類型.這樣產(chǎn)生了另外一個問題,</p><p>  ;在此程序段中若想調(diào)用此CODE段中以他過程,則那個過程也應(yīng)該被定義為FAR調(diào)用,當(dāng)然</p><p>  ;可以簡單的通過不使用過程調(diào)用解決.以解決此中斷子程序過程和其他普通過程對對應(yīng)過程</p><p><b>  ;的調(diào)用沖突</b>&l

77、t;/p><p><b>  CLI</b></p><p><b>  PUSH AX</b></p><p><b>  PUSH BX</b></p><p><b>  PUSH CX</b></p><p><b>

78、  PUSH DX</b></p><p><b>  PUSH SI</b></p><p><b>  PUSH DI</b></p><p><b>  PUSH DS</b></p><p>  MOV AX,DATA ;INTERR

79、UPT TO DO</p><p><b>  MOV DS,AX</b></p><p>  DEC [COUNT]</p><p><b>  JNZ DDD</b></p><p>  MOV [COUNT],20</p><p>  MOV DI,OFFSET CTI

80、ME</p><p>  MOV AL,[DI+4]</p><p>  MOV AH,0AH</p><p><b>  MUL AH</b></p><p>  ADD AL,[DI+5]</p><p>  CMP AX,59 ;先判斷秒鐘是否等于59秒,是則判斷分鐘,否

81、則加1</p><p>  JZ FENZHONG</p><p>  INC BYTE PTR [DI+5]</p><p>  CMP BYTE PTR [DI+5],0AH</p><p><b>  JNZ DDD</b></p><p>  MOV BYTE PTR [DI+5],00

82、H</p><p>  INC BYTE PTR [DI+4]</p><p><b>  JMP DDD</b></p><p>  FENZHONG: </p><p>  MOV WORD PTR [DI+4],0000H ;先將秒鐘置為0,再轉(zhuǎn)換分鐘為十進(jìn)制形式</p><p>

83、  MOV AL,[DI+2]</p><p>  MOV AH,0AH</p><p><b>  MUL AH</b></p><p>  ADD AL,[DI+3]</p><p>  CMP AX,59 ;判斷是否應(yīng)該向時(shí)鐘進(jìn)位</p><p&g

84、t;  JZ SHIZHONG</p><p>  INC BYTE PTR [DI+3]</p><p>  CMP BYTE PTR [DI+3],0AH</p><p><b>  JNZ DDD</b></p><p>  MOV BYTE PTR [DI+3],00H</p><p>

85、;  INC BYTE PTR [DI+2]</p><p><b>  JMPDDD</b></p><p>  SHIZHONG: MOV WORD PTR [DI+2],0000 </p><p>  MOV AL,[DI]</p><p>  MOV AH,0AH</p>&l

86、t;p><b>  MUL AH</b></p><p>  ADD AL,[DI+1]</p><p>  CMP AH,23 ;判斷時(shí)鐘該不該循環(huán)了</p><p><b>  JNZ QQQ</b></p><p>  MOV WORD P

87、TR [DI],0000H</p><p><b>  JMP DDD</b></p><p>  QQQ: INC BYTE PTR [DI+1]</p><p>  CMP BYTE PTR [DI+1],0AH</p><p><b>  JNZ DDD</b></p>

88、<p>  MOV BYTE PTR [DI+1],00H</p><p>  INC BYTE PTR [DI]</p><p>  DDD:;將鬧鈴功能鍵與鬧鈴條件的判斷放在20次中斷計(jì)數(shù)條件滿足后的執(zhí)行代碼中</p><p>  ;有效縮短延遲時(shí)間以及誤差時(shí)間</p><p>  CMP BYTE PTR MYBELL,

89、00H ;檢測鬧鈴有沒有開,</p><p><b>  JZ ZZZ</b></p><p>  LEA DI,CTIME</p><p>  LEA SI,CLOCK</p><p><b>  MOV CX,5</b></p><p>  CHE

90、CK: ;檢測門鈴時(shí)間是否到了</p><p>  MOV AL,[DI]</p><p>  MOV BL,[SI]</p><p><b>  CMP AL,BL</b></p><p><b>  JNZ ZZZ</b&g

91、t;</p><p><b>  INC DI</b></p><p><b>  INC SI</b></p><p>  LOOP CHECK</p><p>  ;************** 鬧鈴時(shí)的檢測輸出</p><p> 

92、 MOV DL,07H</p><p>  MOV AH,02H</p><p><b>  INT 21H</b></p><p>  LEA DX,MESS1</p><p>  MOV AH,09H</p><p><b>  INT 21H</b></p>

93、<p>  MOV BYTE PTR MYBELL,00H </p><p><b>  ZZZ:</b></p><p>  MOV AL,20H ;SEND EOI</p><p>  OUT 0A0H,AL</p><p>  OUT 20H,A

94、L</p><p>  MOV CX,0FFFFH</p><p><b>  LOOPX:</b></p><p><b>  NOP</b></p><p>  LOOP LOOPX ;延時(shí)</p><p><

95、b>  POP DS</b></p><p><b>  POP DI</b></p><p><b>  POP SI</b></p><p><b>  POP DX</b></p><p><b>  POP CX</b></

96、p><p><b>  POP BX</b></p><p><b>  POP AX</b></p><p><b>  STI</b></p><p><b>  IRET</b></p><p>  INT_PROC ENDP&l

97、t;/p><p>  ;------------------------------------------------------------------</p><p>  KEY PROC NEAR ;AB口端口讀取的控制,是對小鍵盤的控制</p><p><b>  PUSH CX</b><

98、;/p><p>  KST: MOV AL,82H</p><p>  MOV DX,WORD PTR IO_BASE_ADDRESS</p><p>  ADD DX,P55CTL</p><p><b>  OUT DX,AL</b></p><p>  MOV AL,00H<

99、/p><p>  MOV DX,WORD PTR IO_BASE_ADDRESS</p><p>  ADD DX,PA55</p><p><b>  OUT DX,AL</b></p><p>  MOV DX,WORD PTR IO_BASE_ADDRESS</p><p>  ADD

100、DX,PB55</p><p><b>  IN AL,DX</b></p><p>  OR AL,0F8H</p><p>  CMP AL,0FFH</p><p><b>  JZ DELAY</b></p><p><b>  PUSH AX</b&

101、gt;</p><p>  MOV CX,0A00H ;兩重循環(huán)</p><p>  DLY: MOV AX,WORD PTR CONST1</p><p>  DLY1: DEC AX</p><p>  JNZ DLY1</p>&

102、lt;p><b>  DEC CX</b></p><p><b>  JNZ DLY</b></p><p><b>  POP AX</b></p><p>  MOV CL,08H</p><p>  MOV AH,0FEH</p><

103、;p><b>  SCAN1:</b></p><p>  MOV DX,WORD PTR IO_BASE_ADDRESS;行列掃描,得到小鍵盤輸入</p><p>  ADD DX,PA55</p><p><b>  MOV AL,AH</b></p><p><b>  O

104、UT DX,AL</b></p><p>  MOV DX,WORD PTR IO_BASE_ADDRESS</p><p>  ADD DX,PB55</p><p><b>  IN AL,DX</b></p><p>  OR AL,0F8H</p><p>  CMP AL

105、,0FFH</p><p><b>  JNZ KEYN</b></p><p><b>  ROL AH,1</b></p><p><b>  DEC CL</b></p><p><b>  JNZ SCAN1</b></p><

106、p><b>  JMP KST</b></p><p>  KEYN: PUSH AX</p><p>  MOV DX,WORD PTR IO_BASE_ADDRESS</p><p>  ADD DX,PB55</p><p>  RELEA: IN AL,DX</p><p&

107、gt;  OR AL,0F8H</p><p>  CMP AL,0FFH</p><p><b>  JNZ RELEA</b></p><p><b>  POP AX</b></p><p><b>  NOT AX</b></p><p>  M

108、OV SI,OFFSET TABLE1</p><p>  MOV DI,OFFSET CHAR</p><p><b>  MOV CX,24</b></p><p>  TT: CMP AX,[SI]</p><p><b>  JZ NN</b></p><p&

109、gt;<b>  DEC CX</b></p><p><b>  JZ KST</b></p><p><b>  ADD SI,02</b></p><p><b>  INC DI</b></p><p><b>  JMP TT</

110、b></p><p>  NN: MOV DL,[DI]</p><p>  MOV [CHAR1],DL </p><p>  MOV AH,02H</p><p><b>  INT 21H</b></p><p><b>  POP CX</b><

111、;/p><p><b>  JMP YANG</b></p><p>  DELAY: CALL DISPLY</p><p><b>  JMP KST</b></p><p>  YANG: RET</p><p>  KEY ENDP</p>

112、<p>  ;---------------------------------------------------------------</p><p>  DISPLY PROC NEAR ;LED的顯示部分</p><p><b>  PUSH CX</b></p&

113、gt;<p>  MOV BX,OFFSET LED</p><p>  MOV CX,0006</p><p>  MOV SI,OFFSET CTIME</p><p>  MOV AH,01H</p><p>  DISPLY1: CLD</p><p><b>  LODSB</

114、b></p><p><b>  XLAT</b></p><p>  MOV DX,WORD PTR IO_BASE_ADDRESS</p><p>  ADD DX,PORTSEG</p><p><b>  OUT DX,AL</b></p><p><

115、b>  MOV AL,AH</b></p><p>  MOV DX,WORD PTR IO_BASE_ADDRESS</p><p>  ADD DX,PORTBIT</p><p><b>  OUT DX,AL</b></p><p><b>  SHL AH,1</b>

116、</p><p><b>  MOV AL,00</b></p><p><b>  OUT DX,AL</b></p><p>  LOOP DISPLY1</p><p><b>  POP CX</b></p><p><b>  RET

117、</b></p><p>  DISPLY ENDP</p><p>  ;---------------------------------------------------------------</p><p>  CPRO PROC NEAR ;C鍵按下時(shí)

118、執(zhí)行的過程,顯示預(yù)設(shè)時(shí)間</p><p><b>  CLI</b></p><p>  MOV WORD PTR [CTIME],0201H</p><p>  MOV WORD PTR [CTIME+2],0504H</p><p>  MOV WORD PTR [CTIME+4],0703H</p>

119、<p><b>  RET</b></p><p>  CPRO ENDP</p><p>  ;---------------------------------------------------------------</p><p>  GPRO PROC NEAR ;G鍵

120、按下時(shí)執(zhí)行的過程,開中斷,計(jì)時(shí)開始</p><p><b>  STI</b></p><p><b>  RET</b></p><p>  GPRO ENDP</p><p>  ;----------------------------------------------------

121、------------</p><p>  DPRO PROC NEAR ;D鍵按下時(shí)執(zhí)行的過程,關(guān)中斷,計(jì)時(shí)停止</p><p><b>  CLI</b></p><p><b>  RET</b></p><p>  DPRO ENDP

122、</p><p>  ;---------------------------------------------------------------</p><p>  PPRO PROC NEAR ;時(shí)間設(shè)置的過程</p><p><b>  CLI</b></p><p>

123、;<b>  PUSH AX</b></p><p><b>  PUSH BX</b></p><p>  MOV WORD PTR [CTIME],0C0CH</p><p>  MOV WORD PTR [CTIME+2],0C0CH</p><p>  MOV WORD PTR [CTIME

124、+4],0C0CH</p><p>  CALL DISPLY</p><p><b>  CALL KEY</b></p><p>  MOV DL,[CHAR1]</p><p>  CMP DL,'2' ;首位判斷是否小于2</p><

125、p><b>  JNG NEXT1</b></p><p><b>  JMP ERR1</b></p><p>  NEXT1: </p><p>  CMP DL,'2' ;第一位是否為1,是則判斷第二位是否小于3</p><p&g

126、t;  JNZ NORMAL</p><p>  SUB DL,30H</p><p>  MOV [CTIME],DL</p><p><b>  CALL KEY</b></p><p>  MOV DL,[CHAR1]</p><p>  CMP DL,'3' </p

127、><p><b>  JNG NEXT2</b></p><p><b>  JMP ERR1</b></p><p>  NORMAL: SUB DL,30H </p><p>  MOV [CTIME],DL</

128、p><p>  CALL DISPLY</p><p><b>  CALL KEY</b></p><p>  MOV DL,[CHAR1]</p><p>  CMP DL,'9' ;第三位的判斷,如此直到第六位</p><p><b&g

129、t;  JNG NEXT2</b></p><p><b>  JMP ERR1</b></p><p>  NEXT2: SUB DL,30H</p><p>  MOV [CTIME+1],DL</p><p>  CALL DISPLY</p><p><b> 

130、 CALL KEY</b></p><p>  MOV DL,[CHAR1]</p><p>  CMP DL,'5'</p><p><b>  JNG NEXT3</b></p><p><b>  JMP ERR1</b></p><p> 

131、 NEXT3: SUB DL,30H</p><p>  MOV [CTIME+2],DL</p><p>  CALL DISPLY</p><p><b>  CALL KEY</b></p><p>  MOV DL,[CHAR1]</p><p>  CMP DL,'9

132、9;</p><p><b>  JNG NEXT4</b></p><p><b>  JMP ERR1</b></p><p>  NEXT4: SUB DL,30H </p><p>  MOV [CTIM

133、E+3],DL</p><p>  CALL DISPLY</p><p><b>  CALL KEY</b></p><p>  MOV DL,[CHAR1]</p><p>  CMP DL,'5'</p><p><b>  JNG NEXT5</b>

134、</p><p><b>  JMP ERR1</b></p><p><b>  NEXT5:</b></p><p>  SUB DL,30H</p><p>  MOV [CTIME+4],DL</p><p>  CALL DISPLY</p><

135、p><b>  CALL KEY</b></p><p>  MOV DL,[CHAR1]</p><p>  CMP DL,'9'</p><p><b>  JNG NEXT6</b></p><p><b>  JMP ERR1</b></p&

136、gt;<p><b>  NEXT6:</b></p><p>  SUB DL,30H</p><p>  MOV [CTIME+5],DL</p><p>  CALL DISPLY</p><p>  JMP WW </p><p>  ERR1: MO

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論