📄 main.c
字号:
{
IO0PIN = (0xD << 10) | (0x0 << 21);
}
else if( q3 == 3)
{
IO0PIN = (0x9 << 10) | (0x0 << 21);
}
else if( q3 == 4)
{
IO0PIN = (0xB << 10) | (0x1 << 21);
}
else if( q3 == 5)
{
IO0PIN = (0x3 << 10) | (0x1 << 21);
}
else if( q3 == 6)
{
IO0PIN = (0x7 << 10) | (0x1 << 21);
}
else if( q3 == 7)
{
IO0PIN = (0x6 << 10) | (0x1 << 21);
}
q3++;
}
void SMC4_out()
{
q4 = q4%8;
if(Direction == 0 ) //顺时针
{
if( q4 == 0 )
{
IO0PIN = (0xE << 3) | (0x0 << 20);
}
else if( q4 == 1)
{
IO0PIN = (0xC << 3) | (0x0 << 20);
}
else if( q4 == 2)
{
IO0PIN = (0xD << 3) | (0x1 << 20);
}
else if( q4 == 3)
{
IO0PIN = (0x9 << 3) | (0x1 << 20);
}
else if( q4 == 4)
{
IO0PIN = (0xB << 3) | (0x1 << 20);
}
else if( q4 == 5)
{
IO0PIN = (0x3 << 3) | (0x1 << 20);
}
else if( q4 == 6)
{
IO0PIN = (0x7 << 3) | (0x1 << 20);
}
else if( q4 == 7)
{
IO0PIN = (0x6 << 3) | (0x0 << 20);
}
}
else if(Direction == 1) //逆时针
{
if(q4 == 0 )
{
IO0PIN = (0x6 << 3) | (0x0 << 20);
}
else if( q4 == 1)
{
IO0PIN = (0x7 << 3) | (0x1 << 20);
}
else if( q4 == 2)
{
IO0PIN = (0x3 << 3) | (0x1 << 20);
}
else if( q4 == 3)
{
IO0PIN = (0xB << 3) | (0x1 << 20);
}
else if( q4 == 4 )
{
IO0PIN = (0x9 << 3) | (0x1 << 20);
}
else if( q4 == 5)
{
IO0PIN = (0xD << 3) | (0x1 << 20);
}
else if( q4 == 6)
{
IO0PIN = (0xC << 3) | (0x0 << 20);
}
else if( q4 == 7)
{
IO0PIN = (0xE << 3) | (0x0 << 20);
}
}
q4++;
}
void SMC4_out1()
{
q4 = q4%8;
if(Direction == 0) //顺时针
{
;
}
else if(Direction == 1) //逆时针
{
q4 = q4+6;
}
q4 = q4%8;
if( q4 == 0 )
{
IO0PIN = (0xE << 3) | (0x0 << 20);
}
else if( q4 == 1)
{
IO0PIN = (0xC << 3) | (0x0 << 20);
}
else if( q4 == 2)
{
IO0PIN = (0xD << 3) | (0x1 << 20);
}
else if( q4 == 3)
{
IO0PIN = (0x9 << 3) | (0x1 << 20);
}
else if( q4 == 4)
{
IO0PIN = (0xB << 3) | (0x1 << 20);
}
else if( q4 == 5)
{
IO0PIN = (0x3 << 3) | (0x1 << 20);
}
else if( q4 == 6)
{
IO0PIN = (0x7 << 3) | (0x1 << 20);
}
else if( q4 == 7)
{
IO0PIN = (0x6 << 3) | (0x0 << 20);
}
q4++;
}
void T0_ini()
{
T0TC = 0; //定时器设置为0
T0PR = 0; //时钟不分频
T0MCR = 0x03; //设置T0MR0匹配后复位T0TC,并产生中断标志
T0MR0 = Fpclk / 290; //1/290秒定时
T0TCR = 0x01; //启动定时器
}
void SMC_ini()
{
PINSEL0 = 0x00000000; //所有管脚连接GPIO
PINSEL1 = 0x00000000;
PINSEL2 = PINSEL2 & (~0x08); //P1[25:16]连接GPIO
IO0DIR = M;
IO1DIR = ~MD;
}
void Motor(int num,int dir,int step,int speed)
{
int i;
T0_ini();
if(speed == 0)
{
T0MR0 = Fpclk / 100; //100Hz
}
else if(speed == 1)
{
T0MR0 = Fpclk / 150; //150Hz
}
else if(speed == 2)
{
T0MR0 = Fpclk / 200; //200Hz
}
else if(speed == 3)
{
T0MR0 = Fpclk / 250; //250Hz
}
else if(speed == 4)
{
T0MR0 = Fpclk / 290; //290Hz
}
else
{
T0MR0 = Fpclk / 290; //290Hz
}
MotorSelected = num;
Direction = dir;
for(i=0;i<step;i++)
{
while((T0IR & 0x01) == 0);
T0IR = 0x01;
if(MotorSelected == 0)
{
;
}
else if(MotorSelected == 1)
{
//SMC1_out();
}
else if(MotorSelected == 2)
{
SMC2_out1();
if(SampleOverFlag == 1)
{
Continue[8]++;
if(Continue[8] == '9')
{
Continue[8] = '0';
Continue[7]++;
if(Continue[7] == '9')
{
Continue[7] = '0';
Continue[6]++;
if(Continue[6] == '9')
{
Continue[6] = '0';
Continue[5]++;
}
}
}
}
USB_WriteEndpoint(3, 10, Continue);//GenEpBuf); /* 发送10个字节到PC */
}
else if(MotorSelected == 3)
{
SMC3_out1();
USB_WriteEndpoint(3, 10, Continue);//GenEpBuf); /* 发送10个字节到PC */
}
else if(MotorSelected == 4)
{
SMC4_out1();
USB_WriteEndpoint(3, 10, Continue);//GenEpBuf); /* 发送10个字节到PC */
}
}
}
/////////////////////////////////////////////////////////////////
//void __irq IRQ_Eint1 (void)
//{
//Motor(2,1,1,4); //走一步
//EXTINT = 0x02; //清除EINT1中断标志
//VICVectAddr = 0x00; //向量中断结束
//}
//void EINT1_ini()
//{
//PINSEL0 = (PINSEL0 & 0xCFFFFFFF) | EINT1; //P0.14连接EINT1
//VICIntSelect = 0x00000000; //设置所有中断分配为IRQ中断
//VICVectCntl0 = 0x20 | 15; //分配外部中断1到向量中断0
//VICVectAddr0 = (uint32)IRQ_Eint1; //设置中断服务程序地址
//VICIntEnable = 1 << 15; //使能EINT1中断
//EXTINT = 0x02; //清除EINT1中断标志
//}
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
//Motor(int num,int dir,int step,int speed);
void M2Position_ini() //上下电机初始化
{
if(((IO1PIN & M2P) == 0)) //5不挡
{
if((IO1PIN & M2D)>>17 == 1) //6挡
{
Motor(2,1,5,4); //先向下走5步
M2PF = (IO1PIN & M2P);
M2DF = (IO1PIN & M2D);
while((M2PF == 0) | (M2DF == 0)) //先下,走到都挡为止
{
Motor(2,1,1,4);
M2PF = (IO1PIN & M2P);
M2DF = (IO1PIN & M2D);
}
Motor(2,0,80,4);
while((IO1PIN & M2D)>>17 == 1) //再上,走到6不挡为止
{
Motor(2,0,1,4);
}
}
}
else if(((IO1PIN & M2P)>>16 == 1))// & ((IO1PIN & M2D) == 1)) //5挡住
{
if((IO1PIN & M2D)>>17 == 1) //6挡住
{
while((IO1PIN & M2D)>>17 == 1) //往上,走到6不挡为止
{
Motor(2,0,1,4);
}
Motor(2,0,80,4); //先向上走80步
if((IO1PIN & M2P)>>16 == 1) //5挡
{
while((IO1PIN & M2D)>>17 == 1) //往上,走到6不挡为止
{
Motor(2,0,1,4);
}
}
else if(IO1PIN & M2P == 0) //5不挡
{
while((IO1PIN & M2D)>>17 == 1) //往下,走到6不挡为止
{
Motor(2,1,1,4);
}
}
}
else if((IO1PIN & M2D) == 0) //6不挡
{
Motor(2,0,80,4); //先向上走80步
if((IO1PIN & M2P)>>16 == 1) //5挡
{
while((IO1PIN & M2D)>>17 == 1) //往上,走到6不挡为止
{
Motor(2,0,1,4);
}
}
else if(IO1PIN & M2P == 0) //5不挡
{
;
}
}
}
}
void M3Position_ini() //左右电机初始化
{
Motor(3,1,15,4); //先逆15步
while(((IO1PIN & M3P)>>21 == 1) & ((IO1PIN & M3D)>>18 == 1)) //再顺转,走到3或4不挡为止
{
Motor(3,0,1,4);
}
if((IO1PIN & M3P) == 0) //是3先不挡,停
{
;
}
else if((IO1PIN & M3D) == 0) //是4先不挡
{
while((IO1PIN & M3P)>>21 == 1) //顺转,走到3不挡为止
{
Motor(3,0,1,4);
}
}
}
void M4Position_ini() //盘电机初始化
{
while((IO1PIN & M4P)>>19 == 1) //逆转,走到1不挡为止
{
Motor(4,1,1,4);
}
while((IO1PIN & M4D)>>20 == 1) //顺转,走到2不挡为止
{
Motor(4,0,1,4);
}
Motor(4,1,CDiskStep,4);
DiskNumNow = 1;
}
////////////////////////////////////////////////////////////////
void DelayNS(uint32 dly) //软件延时
{
uint32 i;
for ( ; dly>0; dly--)
{
for (i=0; i<50000; i++);
USB_WriteEndpoint(3, 10, Delay);//GenEpBuf); /* 发送10个字节到PC */
}
}
////////////////////////////////////////////////////////////////
void inStep(int ins,unsigned char *Frame) //微调步数统计
{
if(ins/10 == 0)
{
Frame[4] = '0';
Frame[5] = '0';
Frame[6] = ins + 0x30;
}
else if(ins/100 == 0)
{
Frame[4] = '0';
Frame[5] = ins/10 + 0x30;
Frame[6] = (ins - ins/10*10) + 0x30;
}
else if(ins/1000 == 0)
{
Frame[4] = ins/100 + 0x30;
Frame[5] = (ins/10-ins/100*10) + 0x30;
Frame[6] = (ins-ins/10*10) + 0x30;
}
}
void GF() //对准石墨管
{
M2Position_ini(); //上下电机初始化
M3Position_ini(); //左右电机初始化
while((IO1PIN & M3D)>>18 == 1) //逆转,走到4不挡为止
{
Motor(3,1,1,4);
}
Motor(2,1,80,4); //先向下走80步
while((IO1PIN & M2D)>>17 == 1) //往下,走到6不挡为止
{
Motor(2,1,1,4);
}
}
void GFin() //调进入深度
{
while(GFinFlag == 1)
{
ENABLE();
inStep(GFinStep,GFinStepF); //微调步数统计
USB_WriteEndpoint(3, 10, GFinStepF);//GenEpBuf); /* 发送10个字节到PC */
if(bEPPflags.bits.configuration == 1)
{
if(bEPPflags.bits.ep1_rxdone == 1)
{ /* 逻辑端点1收到数据 */
DISABLE();
bEPPflags.bits.ep1_rxdone = 0; /* 清除逻辑端点1收到数据标志 */
if(GenEpBuf[0]=='g' & GenEpBuf[1]=='f' & GenEpBuf[2]=='s' & GenEpBuf[3]=='t' & GenEpBuf[4]=='o' & GenEpBuf[5]=='p')
{
//inStep(GFinStep,GFinStepF); //微调步数统计
USB_WriteEndpoint(3, 10, ControlOK);//GenEpBuf); /* 发送10个字节到PC */
//if(GenEpBuf[6]=='#')
//{
// GFRStep = 0;
//}
//else if(GenEpBuf[7]=='#')
//{
// GFRStep = GenEpBuf[6] - 0x30;
//}
//else if(GenEpBuf[8]=='#')
//{
// GFRStep = (GenEpBuf[6] - 0x30) * 10 + (GenEpBuf[7] - 0x30);
//}
//else if(GenEpBuf[9]=='#')
//{
// GFRStep = (GenEpBuf[6] - 0x30) * 100 + (GenEpBuf[7] - 0x30) * 10 + (GenEpBuf[8] - 0x30);
//}
//USB_WriteEndpoint(3, 10, ReceiveOK);
GFinFlag = 0;
//Motor(2,0,GFRStep+30,4); //先往上多走30步
//while((IO1PIN & M2D)>>17 == 1) //往下,走到6不挡为止
//{
// Motor(2,1,1,4);
//}
//Motor(2,1,GFRStep,4);
//USB_WriteEndpoint(3, 10, ControlOK);//GenEpBuf); /* 发送10个字节到PC */
}
else
{
if(GFinStep < 99)
{
if((IO1PIN & K1) == 0) //往下的按钮按下
{
K1Flag = 1;
}
if(((IO1PIN & K1)>>25 == 1) & K1Flag == 1) //往下的按钮弹起
{
GFinStep++;
Motor(2,1,1,4);
K1Flag = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -