版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 微機(jī)原理-電子鐘課程設(shè)計(jì)
- 【微機(jī)原理課程設(shè)計(jì)】電子鐘的設(shè)計(jì)
- 微機(jī)原理課程設(shè)計(jì)--智能電子鐘
- 微機(jī)原理課程設(shè)計(jì)----簡單電子鐘設(shè)計(jì)
- 微機(jī)原理課程設(shè)計(jì)---電子鐘的設(shè)計(jì)報(bào)告
- 微機(jī)原理-多功能電子鐘課程設(shè)計(jì)
- 微機(jī)接口課程設(shè)計(jì)(電子鐘)
- 微機(jī)接口電子鐘課程設(shè)計(jì)報(bào)告
- 電子鐘課程設(shè)計(jì)報(bào)告——微機(jī)原理與接口技術(shù)
- 電子鐘課程設(shè)計(jì)----數(shù)字電子鐘的設(shè)計(jì)
- eda電子鐘課程設(shè)計(jì)----電子鐘的設(shè)計(jì)
- 電子鐘課程設(shè)計(jì)
- 電子鐘課程設(shè)計(jì)
- 電子鐘課程設(shè)計(jì)--多功能電子鐘
- 電子鐘課程設(shè)計(jì)
- 單片機(jī)原理課程設(shè)計(jì)--電子鐘
- 電子鐘課程設(shè)計(jì)--基于單片機(jī)的電子鐘設(shè)計(jì)
- eda課程設(shè)計(jì)-電子鐘
- 自動電子鐘課程設(shè)計(jì)
- 數(shù)字電子鐘課程設(shè)計(jì)
評論
0/150
提交評論