📄 调试程序._c
字号:
for(i=0;i<1000;i++)
{
motor_left (2,1,1000);
}
}
// OutputMotor(0x02,0x00,0x00);
}
//******************************************************//
//旋转盘旋转初使化
//******************************************************//
void plate_init (void)
{
PIND=PORTD;
g[2]=PIND&0x40;
while(g[2]==0)
{
PIND=PORTD;
g[2]=PIND&0x40;
motor_right (3,2,600);
}
PIND=PORTD;
g[4]=PIND&0x20;
while(g[4]==0)
{
PIND=PORTD;
g[4]=PIND&0x20;
motor_right (3,2,600);
}
}
//**************************************************//
//进样泵复位向上初使化
//**************************************************//
void mustermotor_init (void)
{
PIND=PORTD;
g[3]=PIND&0x80;
while(g[3])
{
PIND=PORTD;
g[3]=PIND&0x80;
motor_left (4,4,400);
}
while(g[3]);
OutputMotor(0x04,0x00,0x00);
}
//**************************************************//
//升降臂下降清洗杯
//**************************************************//
void arm_down (uint down)
{
unsigned int s;
for (s=down;s>0;s--)
{
motor_left (1,8,800);
}
OutputMotor(0x01,0x00,0x00);
}
//***************************************************//
//进样泵0吸样1和进样
//any_muter进样多少 //updown 0排样//1吸样
//***************************************************//
void mustermotor_contorl (uint any_muter,uchar updown)
{ uint i;
if(updown)
{
for (i=0;i<any_muter;i++)
{
motor_right (4,4,350);
}
}
else
{
for (i=0;i<any_muter;i++)
{
motor_left (4,4,350);
}
}
OutputMotor(0x04,0x00,0x00);
}
//**********************************************//
//旋转盘逆时针进样走一个齿
//**********************************************//
void plate_oneround (void)
{ uint i;
for(i=0;i<640;i++)
{
motor_right (3,1,600);
}
PIND=PORTD;
g[4]=PIND&0x20;
while(g[4]==0)
{
PIND=PORTD;
g[4]=PIND&0x20;
motor_right (3,1,600);
}
while(g[4]==0);
}
//***************************************************//
//旋转盘逆时针进样
//sample=0试剂 sample=1样品
//sample_number 进样盘标号
//***************************************************//
void plate_round ( uchar newplate_number,uchar sample)
{ uint i,y;
if (sample)
{
if(newplate_number>30)
newplate_number=30;
if(newplate_number>=oldplate_number)
plate_sport=newplate_number-oldplate_number;
else
plate_sport=(newplate_number+30)-oldplate_number;
for(i=0;i<plate_sport;i++)
{
plate_oneround();
}
oldplate_number=newplate_number;
}
else
{
if(newplate_number>5)
newplate_number=5;
if(((newplate_number-1)*6)>=(oldplate_number-1))
plate_sport=((newplate_number-1)*6)-(oldplate_number-1);
else
plate_sport=(((newplate_number-1)*6)+30)-(oldplate_number-1);
for(i=0;i<plate_sport;i++)
{
plate_oneround();
}
oldplate_number=(newplate_number-1)*6+1;
}
if(oldplate_number>30)
oldplate_number-=30;
// OutputMotor(0x03,0x00,0x00);
}
//****************************************************//
//旋转臂进样出样控制
//n=0试剂 n=1样品
//m=0逆时针 m=1顺时针
//v=0上半周 v=1下半周
//****************************************************//
void armround_control (uchar m ,uchar n, uchar v)
{ uint i,z;
if(v)
{
if(n)
z=3200;
else
z=5300;
}
else
z=3000;
for(i=0;i<z;i++)
{
if(m)
motor_left (2,1,1000);
else
motor_right(2,1,1000);
}
PIND=PORTD;
g[5]=PIND&0x10;
while(g[5]==0)
{
PIND=PORTD;
g[5]=PIND&0x10;
if(m)
motor_left(2,1,1000);
else
motor_right (2,1,1000);
}
if(v)
{
if(m)
{
if(n==0)
{
// if(Debugger.add_sub==0)
// {
for(i=0;i<15+by_value;i++)
{ motor_left (2,1,1000);}
//}
/*else
{
for(i=0;i<by_value;i++)
{ motor_right(2,1,1000);}
}*/
}
else
{
//if(Debugger.add_sub==0)
// {
for(i=0;i<(15+yp_value);i++)
{ motor_left (2,1,1000);}
// }
/* else
{
for(i=0;i<(yp_value);i++)
{ motor_right (2,1,1000);}
}*/
}
}
}
else
{
for(i=0;i<(15+wz_value);i++)
{
motor_right (2,1,1000);
}
}
// OutputMotor(0x02,0x00,0x00);
}
//*****************************************************//
//旋转臂进样出样控制
//n=0试剂 n=1样品
//v=0上半周 v=1下半周
//****************************************************//
/* void armround_control (uchar n, uchar v)
{
PIND=PORTD;
g[5]=PIND&0x10;
if(v)
{
if(n)
{
while(g[5]==0)
{
PIND=PORTD;
g[5]=PIND&0x10;
motor_left(2,1,600);
}
}
else
{
while(g[5]==0)
{
PIND=PORTD;
g[5]=PIND&0x10;
motor_left(2,1,600);
}
while(g[5])
{
PIND=PORTD;
g[5]=PIND&0x10;
motor_left(2,1,600);
}
while(g[5]==0)
{
PIND=PORTD;
g[5]=PIND&0x10;
motor_left(2,1,600);
}
}
}
else
{
while(g[5]==0)
{
PIND=PORTD;
g[5]=PIND&0x10;
motor_right(2,1,600);
}
}
}
*/
//*******************************************************//
//定时器1益出中断函数(3S定时)
//******************************************************//
#pragma interrupt_handler TIMER1: 15
void TIMER1 (void)
{ uint i;
EIMSK = 0x00;
TCNT1 = 0X78F5;
TCNT1 = 0X78F5;
switch(over_flag)
{
case 0:
TxdBuf[0]=0x00;
break;
case 1:
{
over_flag=0;
TxdBuf[0]=0x0A;
TCCR1B = 0x00;
break;
}
case 2:
{
over_flag=0;
TxdBuf[0]=0x0B;
TCCR1B = 0x00;
break;
}
default:
break;
}
PIND=PORTD;
TxdBuf[1]=PIND&0X3F;
// outportb(D12_COMMAND, 0xF2);
//D12_ReadLastTransactionStatus(3);
D12_WriteEndpoint(3,2,TxdBuf);
EIMSK = 0x01;
}
//*******************************************************//
//写EEPROM
//******************************************************//
void write_eeprom (void)
{ uchar i;
EIMSK = 0x00;
i=EECR&0X02;
while(i);
switch( Debugger.place_number) //选择EEP地址
{
case 0:
EEAR=0X0001;
break;
case 1:
EEAR=0X0002;
break;
case 2:
EEAR=0X0003;
break;
case 3:
EEAR=0X0004;
break;
default:
break;
}
EEDR=Debugger.recoup_value; //数据送入EEP
EECR|=0X04;
EECR|=0X02;
EIMSK = 0x01;
}
//**********************************************************//
//读EEPROM
//**********************************************************//
uchar read_eeprom (uint address)
{ uint i;
EIMSK = 0x00;
i=EECR&0X02;
while(i);
EEAR=address;
EECR|=0X01;
return EEDR;
EIMSK = 0x01;
}
//***********************************************************//
//EEPROM数椐送入缓存
//***********************************************************//
void eeprom_value (void)
{
by_value=read_eeprom (0x0001); //标液杯处误差
yp_value=read_eeprom (0x0002); //样品杯处误差
wz_value=read_eeprom (0x0003); //钨舟处误差
zx_value=read_eeprom (0x0004); //钨舟深度误差
zx_value=zx_value*2;
}
//**********************************************************//
//主函数
//**********************************************************//
void main(void)
{
unsigned int k,u;
unsigned char Data;
unsigned char StrLen;
for(u=0;u<10000;u++);
init_devices(); //MCU初始化
INT_Init(); //设置中断
eeprom_value(); //读缓存中EEPROM的值
PORTF = 0xFF;
InitMotor(0x01); //四个步进电机初始化
InitMotor(0x02);
InitMotor(0x03);
InitMotor(0x04);
OutputMotor(0x01,0x00,0x00);
OutputMotor(0x02,0x00,0x00);
OutputMotor(0x03,0x00,0x00);
OutputMotor(0x04,0x00,0x00);
PORTC = 0x00;
MCUCR = 0x80;
// SFIOR = 0X00;
XMCRA = 0x00;
muster_init(); //进样过程初始化
EIMSK = 0x00;
reconnect_USB(); //重新连接USB
EIMSK = 0x01;
TCCR1A=0x00;
TCCR1B =0x00;
TCNT1 = 0X78F5;
TCNT1 = 0X78F5;
while(1)
{
if(configuration) //设备未配置返回
;
if (setup_packet)
{ //Setup包处理
EIMSK = 0x00;
setup_packet = 0;
EIMSK = 0x01;
control_handler(); //调用请求处理子程序
}
if(Work_flag) //进入工作状态
{
Work_flag=0;
Work_flag=0;
if(Work.clear_select<2)
one_course (); //完成一次进样过程或用酸清洗
else if(Work.clear_select==2)
push_air(); //进样泵推拉清洗
}
if(debug_flag==1) //进入调试状态
{
debug_flag=0;
if(Debugger.place_number<4)
write_eeprom();
if(Debugger.place_number==6)
{
switch( Debugger.init_place) //旋转臂四个位置定位
{
case 0:
{
arm_up ();
armround_init();
find_light();
break;
}
case 1:
{
arm_up ();
armround_init();
find_light();
armround_control (1,0,1);
break;
}
case 2:
{
arm_up ();
armround_init();
find_light();
armround_control (1,1,1);
break;
}
case 3:
{
arm_up ();
armround_init();
find_light();
armround_control (0,1,0);
break;
}
default:
break;
}
}
else if(Debugger.place_number==7) //升降臂升降
{
switch(Debugger.armup_down)
{
OutputMotor(0x02,0x00,0x00);
case 0:
{
for(k=0;k< Debugger.setp_num;k++)
{
motor_left (1,8,800);
}
break;
}
case 1:
{
for(k=0;k< Debugger.setp_num;k++)
{
motor_right (1,8,800);
}
break;
}
default:
break;
}
}
else if(Debugger.place_number==4)
{
if(Debugger.water_pump==1) //水阀开关
PORTF&=0XFE;
else
PORTF|=0X01;
}
else if(Debugger.place_number==5)
{
if(Debugger.air_pump==1) //气阀开关
PORTF&=0XFC;
else
PORTF|=0X02;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -