8051架構是一種經典的微控制器架構,廣泛應用於各種嵌入式系統中。在8051架構中,中斷是一種重要的機制,用於處理非同步事件,如外部裝置的輸入、定時器的溢位等。每個中斷都有一個對應的中斷號,用於標識和處理不同的中斷源。
以下是8051架構中常見的中斷號及其對應的硬體資源:
-
外部中斷0 (INT0)
- 中斷號: 0
- 描述: 外部中斷0,通常連線到P3.2引腳。
-
定時器0中斷
- 中斷號: 1
- 描述: 定時器0溢位中斷。
-
外部中斷1 (INT1)
- 中斷號: 2
- 描述: 外部中斷1,通常連線到P3.3引腳。
-
定時器1中斷
- 中斷號: 3
- 描述: 定時器1溢位中斷。
-
序列通訊中斷 (UART)
- 中斷號: 4
- 描述: 序列通訊中斷,用於處理UART的接收和傳送事件。
-
定時器2中斷 (僅在某些8052系列中存在)
- 中斷號: 5
- 描述: 定時器2溢位中斷。
每個中斷號對應一箇中斷向量地址,CPU在響應中斷時會跳轉到相應的中斷向量地址執行中斷服務程式(ISR)。中斷向量地址通常是固定的,例如:
- 中斷號0的中斷向量地址是0x0003。
- 中斷號1的中斷向量地址是0x000B。
- 中斷號2的中斷向量地址是0x0013。
- 中斷號3的中斷向量地址是0x001B。
- 中斷號4的中斷向量地址是0x0023。
- 中斷號5的中斷向量地址是0x002B(僅在8052系列中存在)。
在編寫中斷服務程式時,需要確保ISR的入口地址與中斷向量地址一致,並且ISR的執行時間儘可能短,以避免影響其他中斷的響應。
例如,一個典型的定時器0中斷服務程式可能如下所示:
void Timer0_ISR(void) interrupt 1 {
// 中斷服務程式程式碼
// 清除定時器0中斷標誌
TF0 = 0;
}
在這個例子中,interrupt 1
表示這是一個定時器0的中斷服務程式。TF0 = 0
用於清除定時器0的中斷標誌,以確保下次中斷能正確觸發。