為測試電機驅動板 IGBT 開關延遲,用 STC10F10XE(51 內核)生成 10kHz 方波信號。11.0592MHz 晶振,定時器 0 模式 1(16 位)。
P2.7 作為方波輸出腳(推挽輸出)。CLK_DIV = 0x00:系統時鐘不分頻(12T 模式下機器週期 = 12/11.0592M ≈ 1.085μs)。目標:10kHz 方波 → 周期 100μs → 半周期 50μs 翻轉一次。
定時器溢出周期 = (65536 - 初值) × 機器週期 50μs = (65536 - 初值) × 1.085μs 65536 - 初值 ≈ 46080 初值 ≈ 19456 = 0x4C00 TH0 = 0x4C (76), TL0 = 0x00 (0) 實測微調:TH0=255, TL0=211 (0xFFD3 = 65491) → 65536-65491=45 計數 45 × 1.085μs ≈ 48.8μs → 約 10.24kHz,示波器實測 10kHz。
#include <STC_NEW_8051.H>
#include <intrins.h>
#define uchar unsigned char
sbit OUT = P2^7;
void Init_Timer0(void) {
TMOD |= 0x01; // 模式1:16位定時器
EA = 1; // 總中斷開
ET0 = 1; // 定時器0中斷開
TR0 = 1; // 定時器啟動
}
void main() {
CLK_DIV = 0x00; // 不分頻
P2M1 = 0x00; // P2 推挽輸出
P2M0 = 0xFF;
Init_Timer0();
while (1); // 主循環空轉,中斷驅動
}
void Timer0_isr(void) interrupt 1 using 1 {
TH0 = 255; // 重裝初值
TL0 = 211;
OUT = ~OUT; // 輸出取反,產生方波
}
using 1:指定中斷使用寄存器組 1,避免保存/恢復寄存器開銷,提升響應速度。TMOD |= 0x01:位或操作不影響定時器 1 配置。while(1); 典型裸機風格,所有邏輯在中斷中。此代碼可直接燒錄驗證,是 51 單片機定時器中斷應用的最小化模板。