定时器84MHZ定时50ms
时间: 2024-12-02 17:12:06 浏览: 25
在84MHz频率下,要设置一个定时器来达到50毫秒的间隔,首先需要了解所使用的微控制器平台及其定时器的具体规格。一般的嵌入式系统中,定时器的工作通常基于晶振频率除以计数器预设值来计算实际周期。
假设我们有一个基本的定时器,其最大计数值可以表示大约几百微妙的时间范围,那么为了得到50毫秒(50000微妙),我们需要做如下的计算:
1. **确定最小分频系数**: 将晶振频率84MHz转换成微秒,然后找出能整除50000微秒的最大分频系数。例如,如果84MHz等于84000000微秒/s,那么至少需要找到一个系数使得\( \frac{84000000}{x} \geq 50000 \)。
2. **计算预设值**: 确定出这个分频系数后,将84MHz除以该系数得到定时器的预设值(Timer Prescaler Value)。举例来说,如果系数是167(因为\( 84000000 / 50000 = 168 \approx 167 \)),那么预设值将是\( \frac{84000000}{167} \)。
3. **配置定时器**: 根据具体的定时器API或寄存器设置,将预设值写入定时器的控制寄存器,配置为50毫秒的定时模式,并开启定时器。
请注意,实际操作会依赖于特定的硬件和编程语言库,你需要查阅相应的文档来获取正确的寄存器地址和编程步骤。
相关问题
84M定时器定时50ms
84M定时器通常是指一种基于84系列微控制器(如84C27、84C51等)的51单片机内部的定时器功能。其中“84M”代表晶振频率大约为8MHz,这是这类芯片比较常见的工作频率。
如果要用84M定时器设置一个50毫秒的延时,你需要配置定时器工作在模式1,即计数从TH1(高8位)和TL1(低8位)寄存器开始,外部时钟每计满13个时钟周期(因为8MHz / 13 ≈ 619ns),计数溢出一次,然后自动重置。具体步骤如下:
1. 将TMOD寄存器设为0x01(模式1),启用定时器1;
2. 计算50ms所需的定时初值:由于13个机器周期等于约619ns,50ms = 50 * 1000 * 13机器周期 = 650000机器周期。将这个数值分为两个8位部分,TH1=高8位,TL1=低8位;
3. 设置TH1和TL1的值:例如,如果650000除以256(8位最大计数值)余数为0,则TH1=0,TL1=650000;如果余数不为0,需要调整这两个值,使得溢出发生在50ms之后;
4. 开启中断请求(ET1)并启动定时器。
注意,以上步骤可能会因实际使用的84M型号以及是否支持特定的定时器操作模式而有所不同。此外,在实际应用中,还需要处理定时器溢出中断来实现准确的50ms定时。
51定时器50ms定时
在51单片机中,想要实现大约50毫秒(ms)的定时,通常会选用定时器1,因为它有一个较快的计数速率。由于51系列芯片的晶振频率不同,我们需要计算合适的预设初值来达到精确的50ms。假设系统采用12MHz的晶振频率,为了简化,我们可以选择每个机器周期等于1μs。
首先,50ms换算成微秒就是50000us。在模式1下,定时器的计数范围是0~255,所以我们需要将这个时间平分到这两个计数区间,然后找到接近50000us的那个点。
1. 计算周期数:50000us / 1us = 50000机器周期
因为一个机器周期由两个T1状态组成,所以总的计数次数将是50000 * 2 = 100000次。
2. 预设初值计算:我们将100000次除以256(即最高8位计数器的最大值),得到近似值。100000 / 256 ≈ 390.625,向下取整得到390。
```c
TH1 = 0x7D; // 高8位计数,因为我们要减去1(从255开始)
TL1 = 0x3B; // 低8位计数,390减去1
void setup_50ms_timer() {
TMOD = 0b0001; // 设置定时器1工作于模式1
TH1 = 0x7D; // 设置高8位计数值
TL1 = 0x3B; // 设置低8位计数值
IE = 0x81; // 开启定时器1中断
EA = 1; // 开启全局中断
TR1 = 1; // 启动定时器1
}
int main() {
setup_50ms_timer();
while(1);
return 0;
}
```
这样,当定时器1计数满溢时,就会触发中断,大约每50ms一次。
注意:上述计算基于理想条件,实际应用中可能会因CPU时钟速度误差等因素导致略有偏差。如果对精度要求更高,可以采用更复杂的算法或者外接晶体振荡器等设备。
阅读全文