Contents ...
udn網路城邦
51使用timer延時100us
2024/09/06 22:36
瀏覽23
迴響0
推薦0
引用0
#include


void Delay100us()

{

    TMOD = 0x01;  // 设置定时器0为模式1(16位定时器)

    TH0 = 0xFF;    // 定时器高8位初值

    TL0 = 0xA4;    // 定时器低8位初值

    TF0 = 0;       // 清除定时器溢出标志

    TR0 = 1;       // 启动定时器0

    while (!TF0);  // 等待定时器溢出

    TR0 = 0;       // 停止定时器0

    TF0 = 0;       // 清除溢出标志

}


void main()

{

    while(1)

    {

        // 调用100微秒延时函数

        Delay100us();

        // 其他代码

    }

}


  • 工作频率: 单片机晶振频率为11.0592MHz。
  • 机器周期: 8051单片机的机器周期为12个时钟周期,所以机器周期为1 / (11.0592MHz / 12) = 1.085μs
  • 计数次数: 为了产生100μs的延时,需要的计数次数为100μs / 1.085μs ≈ 92次
  • 初值计算: 定时器为16位计数器,最大计数为65536,所以定时器初值为65536 - 92 = 65444,转换为十六进制为0xFFA4
  • 定时器设置:
    • TMOD |= 0x01;:设置定时器0为模式1(16位定时器)。
    • TH0 = 0xFF;TL0 = 0xA4;:加载定时器初值。
    • TR0 = 1;:启动定时器。
    • while (!TF0);:等待定时器溢出。
    • TR0 = 0;:停止定时器。
    • TF0 = 0;:清除溢出标志,准备下一次使用。


全站分類:興趣嗜好 其他
自訂分類:8051
上一則: 74hc138 led副程式
下一則: led亮度由亮變暗

限會員,要發表迴響,請先登入