普中51单片机电机测速代码
时间: 2023-07-23 20:43:08 浏览: 55
以下是一份基于普中51单片机的电机测速代码:
```c
#include<reg52.h>
sbit IN1 = P1^0; //电机驱动IN1口
sbit IN2 = P1^1; //电机驱动IN2口
unsigned int count = 0; //计数器,用于计算电机转速
unsigned int time = 0; //计时器,用于测量时间
unsigned int speed = 0; //电机转速
void Timer0Init()
{
TMOD |= 0x01; //设置定时器0为模式1
TH0 = 0xFC; //设置定时器0初值
TL0 = 0x67;
ET0 = 1; //开启定时器0中断
TR0 = 1; //启动定时器0
EA = 1; //开启总中断
}
void main()
{
Timer0Init();
IN1 = 1; //设置电机初始状态为正转
IN2 = 0;
while(1)
{
if(count >= 20) //计数器达到20个脉冲,则计算电机转速
{
speed = 60000/time; //计算电机转速,单位为RPM
count = 0;
time = 0;
}
}
}
//定时器0中断服务函数
void Timer0() interrupt 1
{
TH0 = 0xFC; //重新设置定时器0初值
TL0 = 0x67;
count++; //计数器加1
time++; //计时器加1
}
```
该代码中使用定时器0来计时并产生中断,每次中断时计数器加1,计时器加1。当计数器达到20个脉冲时,计算电机转速,单位为RPM。在主函数中循环等待计算电机转速,并设置电机的初始状态为正转。其中,IN1和IN2为电机驱动芯片的输入端,用于控制电机的正反转。需要根据具体的电机驱动芯片和电机参数进行调整。