C51单片机测量电机转速keil代码,定时器设置为100us
时间: 2024-03-23 22:38:42 浏览: 82
基于 C51 单片机的点击转速测量系统+源代码+文档说明
以下是基于C51单片机的Keil代码示例,用于测量电机转速,定时器设置为100us:
```C
#include <reg52.h>
#include <stdio.h>
#define PI 3.14159
#define PPR 1000 //编码器每转的脉冲数
#define SAMPLE_TIME 10 //采样周期,单位ms
unsigned int cnt = 0; //计数器
unsigned int rpm = 0; //电机转速,单位rpm
void timer0_init() //定时器0初始化
{
TMOD &= 0xF0; //16位定时器模式
TMOD |= 0x01;
TH0 = 0xFF; //设置计数器初值,定时100us
TL0 = 0x9C;
ET0 = 1; //开定时器0中断
EA = 1; //开全局中断
TR0 = 1; //启动定时器0
}
void timer0_isr() interrupt 1 //定时器0中断服务程序
{
cnt++; //计数器加1
}
void main()
{
timer0_init(); //定时器0初始化
while(1)
{
if(cnt >= SAMPLE_TIME) //达到采样周期
{
cnt = 0; //计数器清零
rpm = (unsigned int)((float)PPR / cnt * 6000.0 / SAMPLE_TIME); //计算转速
printf("RPM=%d\n", rpm); //输出转速
}
}
}
```
在上述代码中,我们将定时器0的计数器初值设置为0xFF9C,即100us,同时将采样周期设置为10ms。在中断服务程序中,我们对计数器进行累加,当计数器达到采样周期时,我们就可以计算出电机的转速,并将转速输出到串口通信中。该程序的输出结果为电机的转速,单位为rpm。
阅读全文