计数器

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

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

## 電子計數器

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

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

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

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

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

### 非同步（漣波）計數器

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

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

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

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

### 同步計數器

在同步計數器中，所有正反器的時鐘輸入端連接在一起，由輸入脈衝觸發。因此，所有的正反器的狀態同時改變（並列）。下面的電路是一個 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 均為高電位時反相……。

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

### 十進位計數器

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

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

### 環形計數器

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

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

### 詹森記數器

詹森記數器（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）一起考慮，可以進行以下的步驟：

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

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

1. 有二個計數器的確定型或非確定型有限狀態機
2. 加上一個堆疊的非確定有限狀態自動機
3. 加上一個計數器的非確定有限狀態自動機
4. 加上一個計數器的確定有限狀態自動機
5. 沒有計數器或堆疊的確定型或非確定型有限狀態機

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

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

### 網頁計數器

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

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

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

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

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

## 機械計數器

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

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

## 參見

* 時間 - 數位轉換器
* 步伐計數珠
* 日內瓦驅動器
* 念珠
* 蓋格計數器

## 參考文獻