串联机械手程序.docx

上传人:b****5 文档编号:6410138 上传时间:2023-01-06 格式:DOCX 页数:14 大小:16.19KB
下载 相关 举报
串联机械手程序.docx_第1页
第1页 / 共14页
串联机械手程序.docx_第2页
第2页 / 共14页
串联机械手程序.docx_第3页
第3页 / 共14页
串联机械手程序.docx_第4页
第4页 / 共14页
串联机械手程序.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

串联机械手程序.docx

《串联机械手程序.docx》由会员分享,可在线阅读,更多相关《串联机械手程序.docx(14页珍藏版)》请在冰豆网上搜索。

串联机械手程序.docx

串联机械手程序

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

#defineulongunsignedlong

voiddelay(uchart);

uchardat[10]={0xfa,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0xfb};

ucharreceive[8]={0x8B,0x0A,0x62,0x4A,0x30,0x18,0x00,0xFF};//接收VB发下来的8个有效数据

uchari,com,step1,step2,step3;

//floata1,a2,a3,a4;

//uinta,b,c,d;

uchara;

ucharangle1=0;//角度初始化(同步控制)(控制角度1)

ucharangle2=0;//角度初始化(同步控制)(控制角度2)

ucharangle3=0;//角度初始化(同步控制)(控制角度3)

ucharjiaodu1=0;//角度初始化(控制角度1)

ucharjiaodu2=0;//角度初始化(控制角度2)

ucharjiaodu3=0;//角度初始化(控制角度2)

uchari=0;

sbitP20=P2^0;

sbitP21=P2^1;

sbitP26=P2^6;

sbitP27=P2^7;

sbitP24=P2^4;

sbitP25=P2^5;

sbitP00=P0^0;

sbitP01=P0^1;

sbitP02=P0^2;

sbitP03=P0^3;

sbitP07=P0^7;

sbitP04=P0^4;

uchardir,a1,a2,a3,com,S,scom1,scom2,scom3,scom4,scom5,scom6;//电机行走步数

voidinter();//****************初始化

voidsend_da();//串口发送数据

voidsend1_da();//串口停止发送数据

/**主函数***********************************************************************/

voidmain()

{

inter();

while

(1)

{switch(dir)

{

case1:

TR0=1;//启动定时器T0

P20=1;

P24=1;

P27=1;

if(jiaodu1==scom2)

{

dir=9;

ES=0;

SBUF=0XFC;//向VB发送结束标志每次结束后都发出FC

while(!

TI);

TI=0;

ES=1;

}

break;

case2:

TR0=1;//启动定时器T0

P20=1;

P24=1;

P27=0;

if(jiaodu1==scom2)

{

dir=9;

ES=0;

SBUF=0XFC;//向VB发送结束标志每次结束后都发出FC

while(!

TI);

TI=0;

ES=1;

}

break;

case3:

TR0=1;//启动定时器T0

P20=1;

P24=0;

P27=1;

if(jiaodu1==scom2)

{

dir=9;

ES=0;

SBUF=0XFC;//向VB发送结束标志每次结束后都发出FC

while(!

TI);

TI=0;

ES=1;

}

break;

case4:

TR0=1;//启动定时器T0

P20=1;

P24=0;

P27=0;

if(jiaodu1==scom2)

{

dir=9;

ES=0;

SBUF=0XFC;//向VB发送结束标志每次结束后都发出FC

while(!

TI);

TI=0;

ES=1;

}

break;

case5:

TR0=1;//启动定时器T0

P20=0;

P24=1;

P27=1;

if(jiaodu1==scom2)

{

dir=9;

ES=0;

SBUF=0XFC;//向VB发送结束标志每次结束后都发出FC

while(!

TI);

TI=0;

ES=1;

}

break;

case6:

TR0=1;//启动定时器T0

P20=0;

P24=1;

P27=0;

if(jiaodu1==scom2)

{

dir=9;

ES=0;

SBUF=0XFC;//向VB发送结束标志每次结束后都发出FC

while(!

TI);

TI=0;

ES=1;

}

break;

case7:

TR0=1;//启动定时器T0

P20=0;

P24=0;

P27=1;

if(jiaodu1==scom2)

{

dir=9;

ES=0;

SBUF=0XFC;//向VB发送结束标志每次结束后都发出FC

while(!

TI);

TI=0;

ES=1;

}

break;

case8:

TR0=1;//启动定时器T0

P20=0;

P24=0;

P27=0;

if(jiaodu1==scom2)

{

dir=9;

ES=0;

SBUF=0XFC;//向VB发送结束标志每次结束后都发出FC

while(!

TI);

TI=0;

ES=1;

}

break;

case9:

TR0=0;//关闭定时器T0

P00=0;

P01=0;

break;

case10:

if(scom5==1)

{

P24=0;

P1=0x0f;

}

else

{

P24=1;

P1=0xf0;

}

step3=scom5;

while(step3--)//电机2走VB计算的角度

{

P26=1;

delay(20);

P26=!

P26;

delay(20);

}

step3=0;

P1=0x00;

default:

break;

}

}

}

/**初始化***********************************************************************/

voidinter()

{

com=0;

TMOD=0x21;

SCON=0X50;

PCON=0X00;

TH1=0xfd;//9600

TL1=0xfd;

TR1=1;

EA=1;//打开总中断

ES=1;//允许串口中断

TR1=1;//启动定时器T1

REN=1;//允许接收

ET0=1;//允许定时器0中断*/

P21=0;

P25=0;

P26=0;

TH0=0xFF;

TL0=0x00;

TR0=0;

TF0=0;

}

voidclk_int(void)interrupt1

{

TR0=0;

if((scom2!

=0)&&(scom4!

=0)&&(scom6!

=0))

{

TH0=0xFF;

TL0=0x00;

TR0=1;

angle1++;

angle2++;

angle3++;

if(angle1==a1)

{angle1=0;

P21=!

P21;

jiaodu1++;

}

if(angle2==a2)

{angle2=0;

P26=!

P26;

jiaodu2++;

}

if(angle3==a3)

{angle3=0;

P25=!

P25;

jiaodu3++;

}

}

elseif((scom4==0)&&(scom6==0))//电机1单动

{

TR0=0;

TH0=0xFF;

TL0=0x00;

P21=!

P21;

jiaodu1++;

TR0=1;

if(jiaodu1==scom2)

{

jiaodu1=0;

TR0=0;

}

}

elseif((scom2==0)&&(scom6==0))//电机2单动

{

TH0=0xFF;

TL0=0x00;

P26=!

P26;

jiaodu1++;

TR0=1;

if(jiaodu2==scom4)

{

jiaodu2=0;

TR0=0;

}

}

elseif((scom2==0)&&(scom4==0))//电机4单动

{

TH0=0xFF;

TL0=0x00;

P25=!

P25;

jiaodu3++;

TR0=1;

if(jiaodu3==scom6)

{

jiaodu3=0;

TR0=0;

}

}

}

voidser()interrupt4

{

RI=0;

angle1=0;

angle2=0;

angle3=0;

jiaodu1=0;

jiaodu2=0;

jiaodu3=0;

if(com==0)

{

a=SBUF;

if(a==0x0c)

{com=1;}

else

{com=0;}

}

else

{S=SBUF;

if(com==1)

{

scom1=S;

}

if(com==2)

{

scom2=S;

}

if(com==3)

{

scom3=S;

}

if(com==4)

{

scom4=S;

}

if(com==5)

{

scom5=S;

}

if(com==6)

{

scom6=S;

}

if(com<6)

{com=com+1;}

else

{

com=0;

}

}

if((scom2!

=0)&&(scom4!

=0)&&(scom6!

=0))//三机联动控制的方向控制和脉宽控制

{

a1=(scom4*scom6);

a2=(scom2*scom6);

a3=(scom2*scom4);

if((scom1==1)&&(scom3==1)&&(scom5==1)){dir=1;}

elseif((scom1==1)&&(scom3==1)&&(scom5==2)){dir=2;}

elseif((scom1==1)&&(scom3==2)&&(scom5==1)){dir=3;}

elseif((scom1==1)&&(scom3==2)&&(scom5==2)){dir=4;}

elseif((scom1==2)&&(scom3==1)&&(scom5==1)){dir=5;}

elseif((scom1==2)&&(scom3==1)&&(scom5==2)){dir=6;}

elseif((scom1==2)&&(scom3==2)&&(scom5==1)){dir=7;}

elseif((scom1==2)&&(scom3==2)&&(scom5==2)){dir=8;}

else{dir=9;}

}

elseif((scom4==0)&&(scom6==0))//大臂电机1单动

{

if(scom1==1)

{

P20=0;

P1=0x0f;

}

else

{

P20=1;

P1=0x00;

}

step1=13*scom2;

while(step1--)//大臂电机1走VB计算的角度

{

P21=1;

delay(10);

P21=!

P21;

delay(10);

}

P1=0x00;

}

elseif((scom2==0)&&(scom6==0))//第二节电机2单动

{

if(scom3==1)

{

P27=0;

P1=0x0f;

}

else

{

P27=1;

P1=0xf0;

}

step2=scom4;

while(step2--)//电机2走VB计算的角度

{

P25=1;

delay(20);

P25=!

P25;

delay(20);

}

P1=0x00;

}

elseif((scom2==0)&&(scom4==0))//第二节电机2单动

{

dir=10;

}

}

voiddelay(uchart)

{

uchari;

for(;t>0;t--)

{

for(i=0;i<125;i++)

{;}

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1