uchar k;
while(p--)
{
for(k=0; k<117; k++)
{ }
}
}
t=1000/rate; //rate为上位机传来的速度命令,单位为步/S
delay(t);
下位机控制电机时,是按照腰关节,肩关节,肘关节,手爪的顺序依次控制。先通过上位机传来的命令计算出每个电机运行所需的脉冲数,程序运行时不断检查当前电机的脉冲数是否与实际设定脉冲数相等,若相等,则当前电机停止运行,接着控制下一个电机,脉冲分别是从P0口、P1口、P2口、P3口输出。另外,当上位机有新的命令时,程序立即跳出当前程序转而执行新的命令。具体程序实现如下[21]
(1)电机正转:
number=0; //脉冲数
if(onoff[i]==1) //运行与停止标志,i为电机标识
{
v=0;
if(direction[i]==1) //
{
while(1)
{
if(number!=snum[i]) //脉冲数是否和设定不相等
{
if(point!=10) //上位机是否有新的命令传来
{
if(v==8) v=0;
else
{
number++;
switch(i)
{case 0: //腰部回转关节转动
P0 =FFW[v];
delay(t);
v++;
break;
case 1: //肩关节电机
P1 = FFW[v];
delay(t);
v++;
break;
case 2: //肘关节电机 AT89S51单片机全地形八足机器人机械手的设计(16):http://www.751com.cn/jixie/lunwen_2398.html