|
void PWMX()
{
if(STLbiao==0)
{ asm("DISI #2000");
if(ma1[k]==0x84) //PWM
{if(mp1.b.a0==1)
{np=k+3;
pf_r();
np=k+7;
pf1_r();
if(ma1[k+10]==0x00)
{
if(OC2CON!=0X2006) OC2CON=0X2006;
if(T2CON!=0XA010) T2CON=0XA010;
PR2=*pf;
if(PR2<0XEFF0)
asm("nop");
OC2RS=*pf1;
if(OC2RS>101)
asm("nop");
}
else if(ma1[k+10]==0x01)
{
if(OC3CON!=0X200E) OC3CON=0X200E;
if(T3CON!=0XA010) T3CON=0XA010;
PR3=*pf;
OC3RS=*pf1;
}
}
else if(mp1.b.a0==0)
{if(ma1[k+10]==0x00)
{OC2CON=0X0;
T2CON=0X0;
}
if(ma1[k+10]==0x01)
{OC3CON=0X0;
T3CON=0X0;
}
}
mpn=0;
k=k+12;
}
asm("DISI #0");
}
}
void PLSY()
{
if(STLbiao==0)
{
maicong(); //脉冲数传递
if(ma1[k]==0x83) //DPLSY
{
np=k+3;
pf2_r();
np=k+11;
pf3_r();
d32a=*pf2;
d32b=*pf3;
x=18;
}
if(ma1[k]==0x82) //PLSY
{
np=k+3;
pf_r();
np=k+7;
pf1_r();
d32a=*pf;
d32b=*pf1;
x=10;
}
if(mp1.b.a0==1)
{
if(ma1[k+x]==0x00)
{
if(d8[288]==0x0)
{
if(OC2CON!=0X2006) OC2CON=0X2006;
if(T2CON!=0Xe010) T2CON=0Xe010;
if(T1CON!=0Xe002) T1CON=0Xe002;
pf2=&d8[208]; //执行时的最高速度2低位
*pf2=d32a; //写频率到执行时的最高速度2低位
pf2=&d8[200]; //Y0总脉冲 d8[200]
*pf2=d32b; //写脉冲数到 Y0总脉冲 d8[200]
/////运算参数
pf3=&d8[208]; //执行时的最高速度2低位
d32c=*pf3;
dingwei2(); //传递速度y0
pf2=&d8[200]; //Y0总脉冲 d8[200]
if(*pf2>0xffff)
{
PR1=0xfffc;
TMR1_D=0xffff;
*pf2=*pf2-0xffff;
}
else
{
PR1=*pf2-3;
TMR1_D=*pf2;
*pf2=0;
}
_T1IF=0;
_T1IE=1;
_T1IP=3;
d8[288]=0x55;
b[483]=b[483]&0xdf; //M8029 =0;
b[498]=b[498]|0x8; //M8147 Y00脉冲输出中1
}
else
asm("nop");
}
else if(ma1[k+x]==0x01)
{
if(d8[289]==0x0)
{
if(OC3CON!=0X200E) OC3CON=0X200E;
if(T3CON!=0Xe010) T3CON=0Xe010;
if(T4CON!=0XE002) T4CON=0XE002;
pf2=&d8[196]; //Y1执行时的最高速度2低位
*pf2=d32a; //写频率到Y1执行时的最高速度2低位
pf2=&d8[204]; //Y1总脉冲 d8[204]
*pf2=d32b; //写脉冲数到 Y0总脉冲 d8[200]
/////运算参数
pf3=&d8[196]; //Y1执行时的最高速度2低位
d32c=*pf3;
dingwei3(); //传递速度y1
pf2=&d8[204]; //Y1总脉冲 d8[200]
if(*pf2>0xffff)
{
PR4=0xfffd;
TMR4_D=0xffff;
*pf2=*pf2-0xffff;
}
else
{
PR4=*pf2-2;
TMR4_D=*pf2;
*pf2=0;
}
_T4IF=0;
_T4IE=1;
_T4IP=3;
d8[289]=0x55;
b[483]=b[483]&0xdf; //M8029 =0;
b[498]=b[498]|0x10; //M8147 Y01脉冲输出中1
}
else
asm("nop");
}
}
else if(mp1.b.a0==0)
{
if(ma1[k+x]==0x00)
{
pf2=&d8[176]; //Y0脉冲数低位
*pf2=*pf2+TMR1;
TMR1_D=0;
T1CON=0;
_T1IE=0;
_T2IE=0;
OC2CON=0X0;
T2CON=0X0;
T1CON=0;
TMR1=0;
d8[288]=0X0;
}
if(ma1[k+x]==0x01)
{
pf2=&d8[180]; //Y1脉冲数低位
*pf2=*pf2+TMR4;
TMR4_D=0;
TMR4=0;
OC3CON=0X0;
T3CON=0X0;
T4CON=0;
_T4IE=0;
_T3IE=0;
d8[289]=0X0;
}
}
mpn=0;
}
tingji();
if(ma1[k]==0x83) //DPLSY
k=k+24;
else
k=k+12;
}
void PLSR()
{
if(STLbiao==0)
{
maicong(); //脉冲数传递
if(ma1[k]==0x87) //DPLSR
{
np=k+3;
pf2_r();
np=k+11;
pf3_r();
d32a=*pf2;
d32b=*pf3;
np=k+19;
pf3_r();
d32c=*pf3;
x=26;
}
if(ma1[k]==0x86) //PLSR
{
np=k+3;
pf_r();
np=k+7;
pf1_r();
d32a=*pf;
d32b=*pf1;
np=k+11;
pf1_r();
d32c=*pf1;
x=14;
}
if(mp1.b.a0==1)
{
if(ma1[k+x]==0x00)
{
if(d8[288]==0x0) //D8[288]=Y0RUN标志D8[289]=Y1RUN标志
{
if(OC2CON!=0X6006) OC2CON=0X6006; //PLSR
if(T2CON!=0Xe010) T2CON=0Xe010;
if(T1CON!=0Xe002) T1CON=0Xe002;
pf2=&d8[208]; //执行时的最高速度2低位
*pf2=d32a; //写频率到执行时的最高速度2低位
pf2=&d8[200]; //Y0总脉冲 d8[200]
*pf2=d32b; //写脉冲数到 Y0总脉冲 d8[200]
pf1=&d8[236]; //执行时的加减速时间
*pf1=d32c;
/////运算参数
pf2=&d8[200]; //Y0总脉冲 d8[200]
pf3=&d8[228];
*pf3=*pf2;
pf2=&d8[228]; // y0 脉冲总数
s=*pf2;
pf=&d8[236];
t1=*pf;
pf=&d8[290];
vl=*pf;
pf2=&d8[208];
vh=*pf2;
if(s<vh*t1/1000)
{pf2=&d8[200]; //Y0总脉冲 d8[200]
PR1=*pf2>>1;
TMR1_D=PR1;
PR1=PR1-2;
sy0=*pf2-(*pf2>>1);
*pf2=0;
}
else
{
pf2=&d8[200]; //Y0总脉冲 d8[200]
sy0=vh+vl;
sy0=sy0*t1/2000;
*pf2=*pf2-sy0;
if(*pf2>0xffff)
{
PR1=0xfffd;
TMR1_D=0xffff;
*pf2=*pf2-0xffff;
}
else
{
PR1=*pf2-2;
TMR1_D=*pf2;
*pf2=0;
}
}
pf1=&d8[290]; //执行时的偏执速度
d32c=*pf1;
dingwei2(); //传递速度y0
_T1IF=0;
_T1IE=1;
_T1IP=3;
d8[192]=0; //Y0减速标志
d8[226]=0xa5;//y0加减速标志
d8[224]=0; //减速定时器10MS
pf2=&d8[260]; //y0脉冲运行时间
*pf2=0;
d8[288]=0x55;
b[483]=b[483]&0xdf; //M8029 =0;
b[498]=b[498]|0x8; //M8147 Y00脉冲输出中1
d8[186]=0; //Y0脉冲结束标志
}
else
asm("nop");
}
else if(ma1[k+x]==0x01)
{
if(d8[289]==0x0) //D8[288]=Y0RUN标志D8[289]=Y1RUN标志
{
if(OC3CON!=0X600E) OC3CON=0X600E; //PLSR
if(T3CON!=0Xe010) T3CON=0Xe010;
if(T4CON!=0Xe006) T4CON=0Xe006;
pf2=&d8[196]; //Y1执行时的最高速度2低位
*pf2=d32a; //写频率到Y1执行时的最高速度2低位
pf2=&d8[204]; //Y1总脉冲 d8[204]
*pf2=d32b; //写脉冲数到 Y0总脉冲 d8[200]
pf1=&d8[238]; //执行时的加减速时间
*pf1=d32c;
/////运算参数
pf2=&d8[204]; //Y1总脉冲 d8[204]
pf3=&d8[232];
*pf3=*pf2;
pf2=&d8[232];
s=*pf2;
pf=&d8[238];
t1=*pf;
pf=&d8[290];
vl=*pf;
pf2=&d8[196];
vh=*pf2;
if(s<vh*t1/1000)
{pf2=&d8[204]; //Y1总脉冲 d8[204]
PR4=*pf2>>1;
TMR4_D=PR4;
PR4=PR4-1;
sy1=*pf2-(*pf2>>1);
*pf2=0;
}
else
{
pf2=&d8[204]; //Y1总脉冲 d8[204]
sy1=vh+vl;
sy1=sy1*t1/2000;
*pf2=*pf2-sy1;
if(*pf2>0xffff)
{
PR4=0xfffE;
TMR4_D=0xffff;
*pf2=*pf2-0xffff;
}
else
{
PR4=*pf2-1;
TMR4_D=*pf2;
*pf2=0;
}
}
pf1=&d8[290]; //执行时的偏执速度
d32c=*pf1;
dingwei3(); //传递速度y1
_T4IF=0;
_T4IE=1;
_T4IP=3;
d8[193]=0; //Y1减速标志
d8[227]=0xa5;//y1加减速标志
d8[225]=0; //y1减速定时器10MS
pf2=&d8[188]; //y1脉冲运行时间
*pf2=0;
d8[289]=0x55;
b[483]=b[483]&0xdf; //M8029 =0;
b[498]=b[498]|0x10; //M8147 Y01脉冲输出中1
d8[187]=0; //Y1脉冲结束标志
}
else
asm("nop");
}
}
else if(mp1.b.a0==0)
{if(ma1[k+x]==0x00)
{
if(T1CON<0X8000)
{ sy0=0;
OC2CON=0X0;
T2CON=0X0;
T1CON=0;
TMR1=0;
d8[288]=0x0;
d8[226]=0;
d8[194]=0;
}
else if(d8[186]==0) //Y0脉冲结束标志
{ d8[186]=0X55;
pf2=&d8[200]; //Y0总脉冲 d8[200]
*pf2=0;
d8[192]=0x57; //减速开始
pf=&d8[236];
pf2=&d8[260]; //y0脉冲运行时间
asm("DISI #300");
if(*pf2>*pf)
{
*pf2=*pf;
ka=sy0;
}
else
{
ka=TMR1;
}
T1CON=0;
TMR1=0;
sy0=0;
T1CON=0xe006;
PR1=ka;
TMR1_D=ka;
_T1IF=0;
asm("DISI #0");
}
}
if(ma1[k+x]==0x01)
{
if(T4CON<0X8000)
{ sy1=0;
OC3CON=0X0;
T3CON=0X0;
T4CON=0;
TMR4=0;
d8[289]=0x0;
d8[227]=0;
d8[195]=0;
}
else if(d8[187]==0) //Y1脉冲结束标志
{ d8[187]=0X55;
pf2=&d8[204]; //Y1总脉冲 d8[204]
*pf2=0;
d8[193]=0x57; //Y1减速开始
pf=&d8[238];
pf2=&d8[188]; //y0脉冲运行时间
asm("DISI #300");
if(*pf2>*pf)
{
*pf2=*pf;
ka=sy1;
}
else
{
ka=TMR4;
}
PR4=ka;
TMR4_D=ka;
TMR4=0;
_T4IF=0;
sy1=0;
asm("DISI #0");
}
}
}
mpn=0;
}
tingji();
if(ma1[k]==0x87) //DPLSR
k=k+32;
else
k=k+16;
}
void dingweiy0()
{if(d8[226]==0xa5)//y0减速标志
{ d8[224]=d8[224]++; //减速定时器10MS
pf2=&d8[260]; //y0脉冲运行时间
if(d8[192]==0)
*pf2=*pf2+1;
else
*pf2=*pf2-1;
if(d8[224]==10)
{ d8[224]=0;
pf2=&d8[260]; //y0脉冲运行时间
t4=*pf2;
pf2=&d8[228]; // y0 脉冲总数
s=*pf2;
pf=&d8[236];
t1=*pf;
t3=*pf;
pf=&d8[290];
vl=*pf;
pf2=&d8[208];
vh=*pf2;
d32a=vh+vl;
d32a=d32a*t1/1000;
d32a=s-d32a;
if(d32a<=0)
t2=0;
else
t2=d32a*1000/vh;
dwyunsan();
pf2=&d8[196];
*pf2=vh;
dingwei2(); //传递速度y0
}
}
}
void dingweiy1()
{if(d8[227]==0xa5)//y1减速标志
{
d8[225]=d8[225]++; //减速定时器10MS
pf2=&d8[188]; //y1脉冲运行时间
if(d8[193]==0)
*pf2=*pf2+1;
else
*pf2=*pf2-1;
if(d8[225]==10)
{d8[225]=0;
pf2=&d8[188]; //y1脉冲运行时间
t4=*pf2;
pf2=&d8[232];
s=*pf2;
pf=&d8[238];
t1=*pf;
t3=*pf;
pf=&d8[290];
vl=*pf;
pf2=&d8[196];
vh=*pf2;
d32a=vh+vl;
d32a=d32a*t1/1000;
d32a=s-d32a;
if(d32a<=0)
t2=0;
else
t2=d32a*1000/vh;
dwyunsan();
pf2=&d8[208];
*pf2=vh;
dingwei3(); //传递速度y1
}
}
}
void dingwei2() //传递速度y0
{
pf2=&d8[264]; ///y0 要发的脉冲周期
d32b=2500000;
*pf2=d32b/d32c; //写脉冲周期到 y0 要发的脉冲周期
pf2=&d8[272]; //y0要发的脉冲宽度
d32b=1000000;
*pf2=d32b/d32c; //写脉冲宽度到 y0 要发的脉冲宽度
*pf2=*pf2-1;
pf2=&d8[264]; ///y0 要发的脉冲周期
if(*pf2<=65535)
{
if((d8[194]==0x0)||(PR2==0)||(PR2==0xffff)) // T2中断执行标志
PR2=*pf2;
d8[194]=0xa5;
PR2_D=*pf2; //写脉冲周期到PWM 周期
pf3=&d8[272];
OC2RS=*pf3;
}
else
{ if((d8[194]==0x0)||(PR2==0)||(PR2==0xffff)) // T2中断执行标志
PR2=0xfffe;
d8[194]=0xa5;
PR2_D=0xfffe;
OC2RS=0x8000;
}
_T2IP=4;
_T2IF=0;
_T2IE=1;
}
void dingwei3() //传递速度y1
{
pf2=&d8[268]; ///y1 要发的脉冲周期
d32b=2500000;
*pf2=d32b/d32c; //写脉冲周期到 y0 要发的脉冲周期
pf2=&d8[276]; //y1要发的脉冲宽度
d32b=1000000;
*pf2=d32b/d32c; //写脉冲宽度到 y0 要发的脉冲宽度
*pf2=*pf2-1; //写脉冲宽度到 y0 要发的脉冲宽度
pf2=&d8[268]; ///y1 要发的脉冲周期
if(*pf2<=65535)
{
if((d8[195]==0x0)||(PR2==0)||(PR3==0xffff)) // T3中断执行标志
PR3=*pf2;
d8[195]=0xa5;
PR3_D=*pf2; //写脉冲周期到PWM 周期
pf3=&d8[276];
OC3RS=*pf3;
}
else
{ if((d8[195]==0x0)||(PR2==0)||(PR3==0xffff)) // T3中断执行标志
PR3=0xfffe;
d8[195]=0xa5;
PR3_D=0xfffe;
OC3RS=0x8000;
}
_T3IP=4;
_T3IF=0;
_T3IE=1;
}
//t1=加速时间,t2=第2段运行时间,t3=减加速时间,s=总脉冲数,s1=第一段脉冲,S2=第2段脉冲,S3=第3段脉冲,vl=基底速度,vh=最高速度,t4=运行时间,d32=当前速度
void dwyunsan()
{
if(t4<t1)
{
d32a=vh-vl;
d32b=t4*(d32a);
d32b=d32b/t1;
d32c=d32b+vl;
}
else if(t4>=t1)
{d32c=vh;}
if(d32c<vl)
d32c=vl;
}
void tingji()
{
x=b[498]&0x02;
y=b[498]&0x04;
if(x==2)
{pf2=&d8[176]; //Y0脉冲数低位
if(d8[184]==0x55) //Y0方向标志
*pf2=*pf2-TMR1;
else
*pf2=*pf2+TMR1;
TMR1_D=0;
TMR1=0;
sy0=0;
OC2CON=0X0;
T2CON=0X0;
T1CON=0;
_T1IE=0;
_T2IE=0;
}
if(y==4)
{pf2=&d8[180]; //Y1脉冲数低位
if(d8[185]==0x55) //Y1方向标志
*pf2=*pf2-TMR4;
else
*pf2=*pf2+TMR4;
TMR4_D=0;
sy1=0;
TMR4=0;
OC3CON=0X0;
T3CON=0X0;
T4CON=0;
_T4IE=0;
_T3IE=0;
}
}
void maicong() //脉冲数传递
{
pf2=&d8[176]; //Y0脉冲数低位缓冲
pf3=&d8[280]; //Y0脉冲数低位
if(*pf3==0)
{
*pf2=0;
}
if(d8[184]==0x55) //Y0方向标志
*pf3=*pf2-TMR1;
else
*pf3=*pf2+TMR1;
pf2=&d8[180]; //Y1脉冲数低位缓冲
pf3=&d8[284]; //Y1脉冲数低位
if(*pf3==0)
*pf2=0;
if(d8[185]==0x55) //Y1方向标志
*pf3=*pf2-TMR4;
else
*pf3=*pf2+TMR4;
}
void fangxian()
{
if(ma1[k+x]==0x00)
{
if(d32a<d32b)
{d8[184]=0x55; //Y0方向标志
ka1=0;
}
else
{
d8[184]=0x0; //Y0方向标志
ka1=1;
}
}
else if(ma1[k+x]==0x01)
{
if(d32a<d32b)
{
d8[185]=0x55; //Y1方向标志
ka1=0;
}
else
{
d8[185]=0x0; //Y1方向标志
ka1=1;
}
}
pf=&b[0];
kd.b.h=ma1[k+ka+2];
kd.b.l=ma1[k+ka];
kd.f=(kd.f&0xff0)>>4;
pf=pf+kd.f;
w1=*pf;
w2=ma1[k+ka]&0Xf;
asm("mov.w _w1,w7");
asm("mov.w w7,w4");
asm("mov.w _w2,w7");
asm("mov.w w7,w3");
_C=ka1;
asm("bsw.c w4,w3");
asm("mov.w w4,_w4");
*pf=w4;
}
void PLSV()
{
if(STLbiao==0)
{
maicong(); //脉冲数传递
if(ma1[k]==0x4b) //DPLSv
{
np=k+3;
pf2_r();
d32a=*pf2;
x=10;
ka=18;
d32b=0;
fangxian();
}
if(ma1[k]==0x4a) //PLSv
{
np=k+3;
pf_r();
d32a=*pf;
d32b=0;
x=6;
ka=10;
fangxian();
}
if(mp1.b.a0==1)
{
if(ma1[k+x]==0x00)
{
pf2=&d8[208]; //执行时的最高速度2低位
*pf2=d32a; //写频率到执行时的最高速度2低位
if(*pf2<0)
*pf2=~*pf2;
/////运算参数
pf3=&d8[208]; //执行时的最高速度2低位
d32c=*pf3;
dingwei2(); //传递速度y0
pf2=&d8[200]; //Y0总脉冲 d8[200]
*pf2=0x0fffffff;
if(d8[288]==0x0)
{ if(OC2CON!=0X2006) OC2CON=0X2006;
if(T2CON!=0Xe010) T2CON=0Xe010;
if(T1CON!=0Xe002) T1CON=0Xe002;
PR1=0xfffc;
TMR1_D=0xffff;
TMR1=0;
_T1IF=0;
_T1IE=1;
_T1IP=3;
d8[288]=0x55;
b[483]=b[483]&0xdf; //M8029 =0;
b[498]=b[498]|0x8; //M8147 Y00脉冲输出中1
}
else
asm("nop");
}
else if(ma1[k+x]==0x01)
{
pf2=&d8[196]; //Y1执行时的最高速度2低位
*pf2=d32a; //写频率到Y1执行时的最高速度2低位
if(*pf2<0)
*pf2=~*pf2;
/////运算参数
pf3=&d8[196]; //Y1执行时的最高速度2低位
d32c=*pf3;
dingwei3(); //传递速度y1
pf2=&d8[204]; //Y1总脉冲 d8[200]
*pf2=0x0fffffff;
if(d8[289]==0x0)
{
if(OC3CON!=0X200E) OC3CON=0X200E;
if(T3CON!=0Xe010) T3CON=0Xe010;
if(T4CON!=0XE002) T4CON=0XE002;
PR4=0xfffd;
TMR4_D=0xffff;
TMR4=0;
_T4IF=0;
_T4IE=1;
_T4IP=3;
d8[289]=0x55;
b[483]=b[483]&0xdf; //M8029 =0;
b[498]=b[498]|0x10; //M8147 Y01脉冲输出中1
}
else
asm("nop");
}
}
else if(mp1.b.a0==0)
{
if(ma1[k+x]==0x00)
{
pf2=&d8[176]; //Y0脉冲数低位
if(d8[184]==0x55) //Y0方向标志
*pf2=*pf2-TMR1;
else
*pf2=*pf2+TMR1;
TMR1_D=0;
T1CON=0;
_T1IE=0;
_T2IE=0;
OC2CON=0X0;
T2CON=0X0;
T1CON=0;
TMR1=0;
d8[288]=0X0;
}
if(ma1[k+x]==0x01)
{
pf2=&d8[180]; //Y1脉冲数低位
if(d8[185]==0x55) //Y1方向标志
*pf2=*pf2-TMR4;
else
*pf2=*pf2+TMR4;
TMR4_D=0;
TMR4=0;
OC3CON=0X0;
T3CON=0X0;
T4CON=0;
_T4IE=0;
_T3IE=0;
d8[289]=0X0;
}
}
mpn=0;
}
tingji();
if(ma1[k]==0x83) //DPLSv
k=k+24;
else
k=k+12;
} |
|