文章編號: 57851 - 上次校閱: 2006年11月21日 - 版次: 1.3

CALL 插斷的小型時間增量使用 BIOS 滴答計數

在此頁中

全部展開 | 全部摺疊

結論

時間 $ 函式在 Basic 以小時、 分鐘和秒為單位傳回目前的時間,從 DOS 或作業系統/2,但它無法傳回任何增量小於一秒。

但是,程式可以使用插斷常式,以呼叫 IBM ROM BIOS 插斷的函式 0 1A 十六進位 (十進位 26)。 這個函式傳回從午夜到現在的系統數目計時器刻度。 計時器刻度數目可以再用來計算的午夜經過的秒數。 您可以再時間解析度為 18.20648 每秒的刻度 (或.05492549 的第二個)。

此資訊適用於 Microsoft QuickBasic 版本 2.00、 3.00、 4.00、 4.00B 及 4.50 Microsoft 基本編譯器版本 6.00 和 6.00b 的 MS-DOS,7.00 和 7.10 的 MS-DOS 的 Microsoft 基本專業開發系統 (PDS) 版本。

其他相關資訊

以下是三種不同的方法,取得小時間間隔:

  1. 時間間隔 976 微秒的解析度的函式 86 十六進位 (或,十進位,134 函式的插斷 21) 使用 BIOS 插斷 15 十六進位,(976 百萬分之一或.000976 的第二個)。
  2. 使用 BIOS 插斷 1A 十六進位 (十進位 26) 函式 0 解析度,以在大約 18.20648 刻度每秒 (或.05492549 秒為單位)。
  3. 播放 ON 陳述式用於在 30 秒的時間 (或.0333333).解析度
本文將告訴方法 2 以上。 若要尋找兩個其他文件說明方法 1 和 3,搜尋中使用下列的確切文字此知識庫:
基本計時器和增加第二個和較小

電腦計時器刻度的說明

下面是電腦系統計時器如何運作的說明。 也包含是基本的程式範例,示範如何計算的秒數,因為與解析度的第二個.05492549 的午夜到百分之一放置。

計時器 」 刻度 」 是由電腦的系統計時器所產生的插斷。 此插斷時稱為 ROM BIOS 插斷處理常式,」,它會遞增計數,以保留以供錄製的刻度數午夜 ROM BIOS 資料區域中。

計時器刻度工作如下所示。 每秒發生的多個系統計時器刻度。 在就其實計時器刻度發生大約 18.2 次每隔一秒。 要更精確,計時器刻度發生每個 1,193,180 / 這是每個第二個 18.20648 次 65,536 時間每秒。 第一個的值 1,193,180,代表電腦系統計時器作業的頻率也就是 1.193 MHz。 這表示系統計時器實際上可以辨識為 1 小的增量 / 1,193,180 秒。

但是,因為極少的程式可能是可能需要時間增量這個小,系統計時器使用另一個方法來決定何時產生刻度。 系統計時器會維護一個內部的暫存器。 暫存器或 [向下 」 從計數為零的 65,535,計時器就會初始化為 65,535,然後遞減暫存器。 零時計時器就會產生的刻度 (它會實際產生的滴答計數會遞增的插斷)。 請注意這是位置的分數 1,193,180 下半部 / 65,536 來自。 如果計時器 1.93 MHz 及它遞減計數器 65,536 時間之前就會產生一個刻度,這表示除以該值倒數計時的計時器速度讓我們多少刻度會發生每秒。

如需有關電腦的系統計時器的詳細資訊,請參閱 」 的新 Peter Norton 程式設計人員指南 》 至在 IBM 電腦 (& S) PS/2 」 的頁面 145 (Microsoft 按,1988年)。

下列程式範例示範如何使用插斷 & 0 的 H1A 函式所傳回的滴答計數計算的午夜至 hundredth 位置的秒數。 若要執行此程式在 QB.EXE 編輯器中,您必須載入 /L 載入 QB.QLB 快速程式庫 (但基本的 PDS 7.00 或 7.10,使用 QBX /L 載入 QBX.QLB) 的程式。 如果您從命令列編譯時,您必須連結 QB.LIB 文件庫 (或 QBX.LIB 文件庫的基本 PDS 7.00) 中。

程式碼範例

REM   TIMEINT.BAS
DEFLNG A-Z
' $INCLUDE: 'QB.BI'
' For Basic PDS 7.00 you must change above line to QBX.BI
CONST tps = 18.2064819336# ' tps is ticks per second
DIM inregs AS RegType, outregs AS RegType
DIM flag AS INTEGER, Previous AS LONG
CLS
LOCATE 1, 20: PRINT "Hit any key to end"
WHILE INKEY$ = ""
        inregs.ax = 0
        CALL INTERRUPT(&H1A, inregs, outregs)
        ' CX should never be larger than &H0017, so direct
        ' assignment is possible.
        ticks& = outregs.cx * &H10000
        ' The following IF accounts for the fact that the
        ' interrupt is using an unsigned int (register) but Basic
        ' has only signed integers. Special action must be taken
        ' for numbers that appear to be negative.
        IF outregs.dx < 0 THEN
                a2& = (outregs.dx AND &H7FFF&)
                ticks& = (ticks& + a2&)
                ticks& = (ticks& OR &H8000&)
        ELSE
                ticks& = ticks& + outregs.dx
        END IF
        IF Previous > ticks& THEN BEEP ' It's midnight!
        Previous = ticks&

        Previous = ticks&
        seconds# = ticks& / tps 'ticks per second

        LOCATE 10, 10
        PRINT "Clock ticks since midnight: ";
        PRINT ticks&
        LOCATE 11, 10
        PRINT "Seconds since midnight: ";
        PRINT USING "######.##"; seconds#
WEND
END
				

這篇文章中的資訊適用於:
  • Microsoft QuickBasic 2.0
  • Microsoft QuickBasic 3.0
  • Microsoft QuickBasic 4.0
  • Microsoft QuickBASIC 4.0b
  • Microsoft QuickBasic 4.5 for MS-DOS
  • Microsoft BASIC Compiler 6.0
  • Microsoft BASIC Compiler 6.0b
  • Microsoft BASIC Professional Development System 7.0
  • Microsoft BASIC Professional Development System 7.1
關鍵字:?
kbmt KB57851 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:57851? (http://support.microsoft.com/kb/57851/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。
Retired KB Article依現狀不再更新的知識庫內容免責聲明
本文旨在說明 Microsoft 不再提供支援的產品。因此,本文係依「現狀」提供,不會再更新。
 

文章翻譯