我正在为一个使用8bit mcu(8051体系结构)的设备开发固件。我正在使用SDCC(小型设备C编译器)。我有一个功能,我用来设置步进电机的速度,我的电路正在驱动。通过将所需值加载到计时器的重新加载寄存器中来设置速度。我有一个可变的,在0到1200范围内的马达速度,它代表每秒对马达的脉冲。将MotorSpeed转换为正确的16位重新加载值的函数如下所示。我知道浮点运算非常慢,我想知道是否有一种更快的方法可以做到这一点。。。
void SetSpeed()
{
float t = MotorSpeed;
unsigned int j = 0;
t = 1/t ;
t = t / 0.000001;
j = MaxInt - t;
TMR3RL = j; // Set reload register for desired freq
return;
}
最佳答案
如果我理解正确的话,你想计算这个表达式
MaxInt - 1000000/MotorSpeed
其中,MotorSpeed是0到1200之间的一个数字,表示每秒的脉冲数。
如果编译器支持浮点运算,则必须支持整数除法。你为什么不试试呢。如果速度大于15,则没有问题,但对于0到15范围内的速度,结果为负。这意味着,如果计数器是16位宽的,并且以1兆赫的速率递增,就不可能产生低于16赫兹的脉冲。你有一个额外的预分频器,可以减少增加的频率吗?(我不知道8051)。
关于c - 在8位MCU中用C进行除法的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2744925/