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;:清除溢出标志,准备下一次使用。
你可能會有興趣的文章:
限會員,要發表迴響,請先登入



