目的:输出n个方波(方波周期为m)暂停a秒;输出n个方波(方波周期为m)暂停a秒。。。如此循环,动作过程中,要求n,m,a三个参数可控 我的程序代码节选:
u16 speed; //控制方波周期
u32 step; //控制方波步数
u32 delay; //控制暂停时间
u32 count; //定时器中断中进行计数
u32 real_step; //记录实际输出的方波步数
float speed_buff = 0;
float step_buff = 0;
float delay_buff = 0;
TIM2_Int_Init((1000 - 1),(72 - 1)); // 中断周期为1ms
//Modbus_HoldReg[0~2] 由外部通过Modbus RTU通讯传递给单片机,此处直接赋值常数,方便进行脉冲输出验证
Modbus_HoldReg[0] = 10; //通讯时,数值扩大了10倍,需要除以10得到真实参数,数值调节范围是:5—20,即真实范围是:0.5—2.0。
Modbus_HoldReg[1] = 100; //通讯时,数值扩大了100倍,需要除以100得到真实参数,数值调节范围是:50—200,即真实范围是:0.50—2.00。
Modbus_HoldReg[2] = 100; //通讯时,数值扩大了100倍,需要除以100得到真实参数,数值调节范围是:50—200,即真实范围是:0.50—2.00。
speed_buff = (float)Modbus_HoldReg[0] * 0.1; //将参数还原,并赋值给浮点型变量,下同
step_buff = (float)Modbus_HoldReg[1] * 0.01;
delay_buff = (float)Modbus_HoldReg[2] * 0.01;
speed = (u16)(500/speed_buff); //经过计算,当Modbus_HoldReg[0] = 10时,理论上speed应等于500
step = (u32)step_buff * 5; //经过计算,当Modbus_HoldReg[1] = 100时,理论上step应等于5
delay = (u32)delay_buff * 5000;//经过计算,当Modbus_HoldReg[2] = 100时,理论上delay应等于5000
其他代码这里就省略了。。。在Debug下观察,speed、step、delay确实分别等于500、5、5000。但是却没有脉冲输出。但是直接给这三个参数赋值 时,脉冲输出正常。所以我猜测这里应该是由于进行了强制转换的原因,小弟才疏学浅,不知道为何会这样。。还请诸位大神不吝赐教!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
单片机里能不用除法就不用除法。尽量不用除法,做一次除法花费的时间太长了,当你处理流程需要时间限制时,最好不要用除法。你的问题肯定还不是这个原因。
一周热门 更多>