計數器

在邏輯代數與電腦運算中，計數器是存儲（有時還有顯示）特定事件或過程發生次數的裝置，往往與定時器訊號有關聯。最常見的類型是有「時鐘」輸入線和多輸出線的時序邏輯電路。輸出線的值代表在二進位或BCD計數系統的數。每個施加到時鐘輸入的脈衝都會使計數器增加或是減少。

計數器電路通常由多個觸發器級聯連接而成。計數器在數字電路中使用非常廣泛，會製成積體電路晶片以及作為更大積體電路的一部分。

## 電子計數器

在電子學中，可以用像觸發器等寄存器型電路來實現計數器，也存在各種類型：

- 異步（紋波）計數器 – 改變狀態位用作後續狀態觸發器的的時鐘
- 同步計數器 – 所有狀態位都在單一時鐘的控制下
- 十進位計數器 – 每級經過10個狀態
- 遞增/遞減計數器 – 藉由輸入信號的控制，可以讓計數器遞增或是遞減
- 環形計數器 – 由移位寄存器組成，但有額外連接成環狀的反饋電路
- 詹森記數器 – 扭環形計數器
- 級聯計數器
- 模數計數器。

每種計數器都有不同的用途。計數器在其本質上是數字系統，用二進位計數。不過許多類型的計數器電路可作為數字電路的基本模組，例如4000系列晶片中實現的不同計數器。

有時使用計數序列而不使用自然二進位序列會比較方便—如BCD計數器、線性反饋移位寄存器及格雷碼計數器。

計數器用於數字時鐘和計時器中，出現在烤箱定時器以及VCR時鐘等內部。

### 異步（紋波）計數器

<image>

<image>

最簡單的異步（紋波）計數器是一個將反向輸出反饋給D輸入的D型觸發器。該電路可以存儲一個比特，因此在它溢出（從0重新開始）之前可以從零計數到一。該計數器每個時鐘周期會遞增一次，兩個時鐘周期會溢出，故每個周期會從0轉換到1，再從1轉換到0。異步計數器會產生一個新的新時鐘，頻率是輸入時鐘頻率的一半，占空比50%。

如果這個輸出再接到D型觸發器（其反向輸出也反饋給D輸入）作為時鐘，將會得到計數速度為其一半的另一個1位計數器。把它們整合在一起，就產生了兩位計數器：

周期｜Q1｜Q0｜(Q1:Q0)dec

0｜0｜0｜0

1｜0｜1｜1

2｜1｜0｜2

3｜1｜1｜3

4｜0｜0｜0

可以繼續添加觸發器（反向輸出需作為觸發器自己的輸入），並使用前一個觸發器的輸出作為時鐘信號。結果稱作紋波計數器，可以計數到2n - 1其中n為計數器的位數（觸發器的級數）。紋波計數器會受到級與級之間溢出「紋波」的不穩定輸出的影響，但紋波計數器常常應用在時脈訊號除頻的應用上。一位的異步計數器可以輸入一個時鐘信號，輸入一個頻率為一半的時鐘信號。二位的異步計數器可以輸入一個頻率為四分之一的時鐘信號……越多位的計數器其除頻比率就更高，在此應用下，瞬時的計數值不是主要考量，而整體除頻的比率才是重點。

因為用觸發器的輸出作為時鐘，因此計數的資料位元之間會有時鐘偏移，也因此異步計數器的技術無法和標準的同步電路設計相容。

### 同步計數器

<image>

在同步計數器中，所有觸發器的時鐘輸入端連接在一起，由輸入脈衝觸發。因此，所有的觸發器的狀態同時改變（並行）。下面的電路是一個4位同步計數器。FF0的J和K輸入接高電平。FF0的輸出接FF1的J和K輸入，FF0與FF1輸出經過AND閘後連接到FF2的J和K輸入，FF0、FF1與FF2輸出輸出經過AND閘後連接到FF3的J和K輸入（右圖中是FF2的J輸入和FF2的輸出，兩者在邏輯上是等價的）。接與門的輸出接收的反饋。若各觸發器以遞增方式編號，簡單實現此線路的方式就是讓每一個觸發器在編號較小的觸發器全部為高電位時反相（這也是右圖中所描述的情形）。例如位元1在位元0為高電位時反相，位元2在位元0和1均為高電位時反相，位元3在位元0,1,2均為高電位時反相……。

一般以硬體為基礎的計數器是以此架構進行。同步計數器也可以用硬體的有限狀態機實現，其架構比較複雜，但可以進行更平滑，更穩定的轉態。

### 十進位計數器

<image>

十進制計數器是用十進制計數的計數器，可能是用二進碼十進數（BCD）計數，就像7490 IC所作的一樣，或是用其他的編碼方式（如加三碼）。

十進制計數器的每個位數需要數0到9，然後復歸到0，一般的二進制四位數計數器可以數十進制的一位數字，若是用二進碼十進數的計數方式，只要像右圖一樣加入NAND閘，其輸入為FF2及FF4，輸出為每個閘的CLR輸入即可。在每一個脈波信號時，計數器會加1，當加到二進制1010（十進制的10時），將所有的閘都清除為零，此信號經過處理後也是進位信號，表示已經算到十了。

### 環形計數器

<image>

環形計數器是循環的移位寄存器，其中的觸發器中只有一個是高電位輸出，其餘的都是低電位輸出。移位寄存器是由觸發器層疊而成，若將最後一個觸發器的輸出接到第一個觸發器的輸入，形成一個環，即為環形計數器。

一般來說，環形計數器中循環的資料是只有一個位元為1的資料，因此任一時刻只有一個觸發器輸出為高電位。例如四位元的環形計數器，其初始狀態為1000，之後會是0001,0010,0100,1000……等。n位元的環形計數器會循環n次，每計數一次的漢明距離是2。

### 詹森記數器

<image>

詹森記數器（Johnson counter）也稱為尾端切換環形計數器（switchtail ring counter）、扭環計數器（twisted-ring counter）、走動環狀記數器（walking-ring counter）或莫比斯計數器（Moebius counter）是修改過的環形計數器，最後一個正反器的輸出反相後再接到第一個正反器。n位元的環形計數器會循環2n次，例如例如四位元的環形計數器，其初始狀態為0000，之後會是1000, 1100, 1110, 1111, 0111, 0011, 0001, 0000, ……等。每計數一次的漢明距離是1。

詹森記數器可以用D型正反器或是JK正反器組合，可以用在像數位類比轉換器之類的應用。

## 電腦科學中的計數器

在可計算性理論中，計數器被視為是一種記憶體，可以儲存一個自然數，一般從0開始，可以到任意長度。計數器一般會和有限狀態機（FSM）一起考慮，可以進行以下的步驟：

- 判斷計數器是否為零
- 計數器加一
- 計數器減一，若已經為零，計數器不變化。

以下的狀態機是以其功能來排序，前面的功能比後面的強：

- 有二個計數器的確定型或非確定型有限狀態機
- 加上一個堆棧的非確定有限狀態自動機
- 加上一個計數器的非確定有限狀態自動機
- 加上一個計數器的確定有限狀態自動機
- 沒有計數器或堆棧的確定型或非確定型有限狀態機

針對第一個或是最後一個，有限狀態機可以是確定型，也可以是非確定型。前二者及最後一個是依喬姆斯基譜系排列。

上述的第一種有限狀態機，也就是有二個計數器的有限狀態機，其計算能力和圖靈機等效。

### 網頁計數器

網頁計數器是一個電腦程式，可以顯示特定網頁瀏覽的次數。在設定後，只要有網頁瀏覽器連結到此網頁，網頁計數器就會加一。

網頁計數器一般會用數字圖像或是純文字顯示，也可能以早期的機械計數器方式顯示。圖案可以用不同的字型顯示，也可以用不同的風格，像是類似里程表的顯示方式。

網頁計數器在1980年代及1990年代相當流行，後來已被更多細節及更複雜的網站流量量測所取代。

### 以電腦為基礎的計數器

許多自動化系統用電腦或是手提電腦來監控機器的各種參數，並且產生資料。計數器可以計數資料，例如製作的工作數、生產批號、計算使用材料的數量等。

## 機械計數器

<image>

<image>

<image>

在發明電子設備之前，就已經用機械式的計數器，像手撳號碼計數器即為一例。機械式計數器一般是由幾個接在同一個軸上的轉盤組成，轉盤上有一到九的數字，每有一個事件，最右側轉盤都會加一。最左側以外的其他轉盤側面都有突起處，在旋轉一圈。會讓左側的轉盤進行一格。像腳踏車或是汽車上用的里程表就有這類計數器，像磁帶錄音機及加油機中也有。Veeder-Root公司是機械計數器的大廠商之一，因此公司的名稱有時也用做此計數器的名稱。

在資料處理產業的早期，機械計數器也用在製表機中來計算總和。