首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

STC10F10XE 定時器中斷輸出 10kHz 方波:裸機 C 語言實現

     編輯:關於C語言

STC10F10XE 定時器中斷輸出 10kHz 方波:裸機 C 語言實現

為測試電機驅動板 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 單片機定時器中斷應用的最小化模板。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved