/*-------------关闭IAP----------------*/
void IapIdle()
{
IAP_CONTR = 0; //关闭IAP功能
IAP_CMD = 0; //清除命令寄存器
IAP_TRIG = 0; //清除触发寄存器
IAP_ADDRH = 0x80; //将地址设置到非IAP区域
IAP_ADDRL = 0;
}
/*-----从ISP/IAP/EEPROM区域读取一字节-----*/
BYTE IapReadByte(WORD addr)
{
BYTE dat; //数据缓冲区
IAP_CONTR = ENABLE_IAP; //使能IAP
IAP_CMD = CMD_READ; //设置IAP命令
IAP_ADDRL = addr; //设置IAP低地址
IAP_ADDRH = addr >> 8; //设置IAP高地址
IAP_TRIG = 0x5a; //写触发命令(0x5a)
IAP_TRIG = 0xa5; //写触发命令(0xa5)
_nop_(); //等待ISP/IAP/EEPROM操作完成
dat = IAP_DATA; //读ISP/IAP/EEPROM数据
IapIdle(); //关闭IAP功能
return dat; //返回
}
/*------写一字节数据到ISP/IAP/EEPROM区域--------*/
void IapProgramByte(WORD addr, BYTE dat)
{
IAP_CONTR = ENABLE_IAP; //使能IAP
IAP_CMD = CMD_PROGRAM; //设置IAP命令
IAP_ADDRL = addr; //设置IAP低地址
IAP_ADDRH = addr >> 8; //设置IAP高地址
IAP_DATA = dat; //写ISP/IAP/EEPROM数据
IAP_TRIG = 0x5a; //写触发命令(0x5a)
IAP_TRIG = 0xa5; //写触发命令(0xa5)
_nop_(); //等待ISP/IAP/EEPROM操作完成
IapIdle();
}
/*---------扇区擦除-----------*/
void IapEraseSector(WORD addr)
{
IAP_CONTR = ENABLE_IAP; //使能IAP
IAP_CMD = CMD_ERASE; //设置IAP命令
IAP_ADDRL = addr; //设置IAP低地址
IAP_ADDRH = addr >> 8; //设置IAP高地址
IAP_TRIG = 0x5a; //写触发命令(0x5a)
IAP_TRIG = 0xa5; //写触发命令(0xa5)
_nop_(); //等待ISP/IAP/EEPROM操作完成
IapIdle();
}
/*************写参数到EEPROM*******************************/
void Write_EEprom()
{
IapEraseSector(IAP_ADDRESS); //扇区擦除
IapProgramByte(IAP_ADDRESS+1,val1>>8&0XFF);/*A轴速度高八位*/
IapProgramByte(IAP_ADDRESS+2,val1&0x00FF); /*A轴速度低八位*/
IapProgramByte(IAP_ADDRESS+3,val2>>8&0XFF);/*B轴速度高八位*/
IapProgramByte(IAP_ADDRESS+4,val2&0x00FF); /*B轴速度低八位*/
IapProgramByte(IAP_ADDRESS+5,val3>>8&0XFF);/*C轴速度高八位*/
IapProgramByte(IAP_ADDRESS+6,val3&0x00FF); /*C轴速度低八位*/
IapProgramByte(IAP_ADDRESS+7,val4>>8&0XFF);/*D轴速度高八位*/
IapProgramByte(IAP_ADDRESS+8,val4&0x00FF); /*D轴速度低八位*/
IapProgramByte(IAP_ADDRESS+9,val5>>8&0XFF);/*润滑模数高八位*/
IapProgramByte(IAP_ADDRESS+10,val5&0x00FF);/*润滑模数低八位*/
IapProgramByte(IAP_ADDRESS+11,val6>>8&0XFF);/*润滑时间高八位*/
IapProgramByte(IAP_ADDRESS+12,val6&0x00FF); /*润滑时间低八位*/
IapProgramByte(IAP_ADDRESS+13,val7>>8&0XFF);/*吹气时间1高八位*/
IapProgramByte(IAP_ADDRESS+14,val7&0x00FF); /*吹气时间1低八位*/
IapProgramByte(IAP_ADDRESS+15,val8>>8&0XFF);/*吹气时间2高八位*/
IapProgramByte(IAP_ADDRESS+16,val8&0x00FF); /*吹气时间2低八位*/
IapProgramByte(IAP_ADDRESS+17,val9>>8&0XFF);/*打油次数高八位*/
IapProgramByte(IAP_ADDRESS+18,val9&0x00FF); /*打油次数低八位*/
IapProgramByte(IAP_ADDRESS+19,val10>>8&0XFF);/*间隙时间高八位*/
IapProgramByte(IAP_ADDRESS+20,val10&0x00FF); /*间隙时间低八位*/
IapProgramByte(IAP_ADDRESS+21,val11>>8&0XFF);/*攻丝超时高八位*/
IapProgramByte(IAP_ADDRESS+22,val11&0x00FF); /*攻丝超时低八位*/
IapProgramByte(IAP_ADDRESS+23,val12>>8&0XFF);/*旋转超时高八位*/
IapProgramByte(IAP_ADDRESS+24,val12&0x00FF); /*旋转超时低八位*/
IapProgramByte(IAP_ADDRESS+25,val13>>8&0XFF);/*退刀超时高八位*/
IapProgramByte(IAP_ADDRESS+26,val13&0x00FF); /*退刀超时低八位*/
IapProgramByte(IAP_ADDRESS+27,val14>>8&0XFF);/*润滑超时高八位*/
IapProgramByte(IAP_ADDRESS+28,val14&0x00FF); /*润滑超时低八位*/
//val15
IapProgramByte(IAP_ADDRESS+29,val15>>8&0XFF);/*过桥开时间高八位*/
IapProgramByte(IAP_ADDRESS+30,val15&0x00FF); /*过桥开时间低八位*/
IapProgramByte(IAP_ADDRESS+31,val16>>8&0XFF);/*手动速度高八位*/
IapProgramByte(IAP_ADDRESS+32,val16&0x00FF); /*手动速度低八位*/
}
/***********************************/
void red_eeprom(void)
{
uint m,n;
m=IapReadByte(IAP_ADDRESS+1); //A轴速度高八位
n=IapReadByte(IAP_ADDRESS+2); //A轴速度低八位
val1=(m*256+n)&0X7FFF; //A轴速度屏蔽最高负位 111 1111
m=IapReadByte(IAP_ADDRESS+3); //B轴速度高八位
n=IapReadByte(IAP_ADDRESS+4); //B轴速度低八位
val2=(m*256+n)&0X7FFF; //B轴速度屏蔽最高负位 111 1111
m=IapReadByte(IAP_ADDRESS+5); //C轴速度高八位
n=IapReadByte(IAP_ADDRESS+6); //C轴速度低八位
val3=(m*256+n)&0X7FFF; //C轴速度屏蔽最高负位 111 1111
m=IapReadByte(IAP_ADDRESS+7); //调整时间高八位
n=IapReadByte(IAP_ADDRESS+8); //调整时间低八位
val4=(m*256+n)&0X7FFF; //调整时间屏蔽最高负位 111 1111
m=IapReadByte(IAP_ADDRESS+9); //润滑模数高八位
n=IapReadByte(IAP_ADDRESS+10); //润滑模数低八位
val5=(m*256+n)&0X7FFF; //润滑模数屏蔽最高负位 111 1111
m=IapReadByte(IAP_ADDRESS+11); //润滑时间高八位
n=IapReadByte(IAP_ADDRESS+12); //润滑时间低八位
val6=(m*256+n)&0X7FFF; //润滑时间屏蔽最高负位 111 1111
m=IapReadByte(IAP_ADDRESS+13); //吹气时间1高八位
n=IapReadByte(IAP_ADDRESS+14); //吹气时间1低八位
val7=(m*256+n)&0X7FFF; //吹气时间1屏蔽最高负位 111 1111
m=IapReadByte(IAP_ADDRESS+15); //吹气时间2高八位
n=IapReadByte(IAP_ADDRESS+16); //吹气时间2低八位
val8=(m*256+n)&0X7FFF; //吹气时间2屏蔽最高负位 111 1111
m=IapReadByte(IAP_ADDRESS+17); //打油次数高八位
n=IapReadByte(IAP_ADDRESS+18); //打油次数低八位
val9=(m*256+n)&0X7FFF; //打油次数屏蔽最高负位 111 1111
m=IapReadByte(IAP_ADDRESS+19); //间隙时间高八位
n=IapReadByte(IAP_ADDRESS+20); //间隙时间低八位
val10=(m*256+n)&0X7FFF; //间隙时间屏蔽最高负位 111 1111
m=IapReadByte(IAP_ADDRESS+21); //攻丝超时高八位
n=IapReadByte(IAP_ADDRESS+22); //攻丝超时低八位
val11=(m*256+n)&0X7FFF; //攻丝超时屏蔽最高负位 111 1111
m=IapReadByte(IAP_ADDRESS+23); //攻丝超时高八位
n=IapReadByte(IAP_ADDRESS+24); //旋转超时低八位
val12=(m*256+n)&0X7FFF; //旋转超时屏蔽最高负位 111 1111
m=IapReadByte(IAP_ADDRESS+25); //退刀超时高八位
n=IapReadByte(IAP_ADDRESS+26); //退刀超时低八位
val13=(m*256+n)&0X7FFF; //退刀超时屏蔽最高负位 111 1111
m=IapReadByte(IAP_ADDRESS+27); //润滑超时高八位
n=IapReadByte(IAP_ADDRESS+28); //润滑超时低八位
val14=(m*256+n)&0X7FFF; //润滑超时屏蔽最高负位 111 1111
m=IapReadByte(IAP_ADDRESS+29); //过桥开时间高八位
n=IapReadByte(IAP_ADDRESS+30); //过桥开时间低八位
val15=(m*256+n)&0X7FFF; //过桥开时间屏蔽最高负位 111 1111
m=IapReadByte(IAP_ADDRESS+31); //手动速度高八位
n=IapReadByte(IAP_ADDRESS+32); //手动速度低八位
val16=(m*256+n)&0X7FFF; //手动速度屏蔽最高负位 111 1111
}
/*************恢复出厂值************/
void RESET_Data()
{
val1=10; //电机速度
val2=18000; //退丝补偿
val3=2; //补偿速度
val4=10; //调整时间
val5=100; //润滑模数
val6=20; //润滑时间
val7=1; //吹气时间1
val8=1; //吹气时间2
val9=10; //缺料计时
val10=2; //间隙时间
val11=10; //攻丝超时
val12=10; //旋转超时
val13=25; //退刀超时
val14=25; //润滑超时
val15=5; //过桥开时间
val16=1; //手动电机速度
}
/***********************************/
void Dis_Data(void)
{
printf("n0.val=%d\xff\xff\xff",val1); //电机速度
printf("n0.val=%d\xff\xff\xff",val1); //退丝补偿
printf("n1.val=%d\xff\xff\xff",val2); //补偿速度
printf("n2.val=%d\xff\xff\xff",val3); //C轴速度
printf("n3.val=%d\xff\xff\xff",val4); //D轴速度
printf("n4.val=%d\xff\xff\xff",val5); //润滑模数
printf("n5.val=%d\xff\xff\xff",val6); //润滑时间
printf("n6.val=%d\xff\xff\xff",val7); //吹气时间1
printf("n7.val=%d\xff\xff\xff",val8); //吹气时间2
printf("n9.val=%d\xff\xff\xff",val9); //打油次数
printf("n10.val=%d\xff\xff\xff",val10);//间隙时间
printf("n11.val=%d\xff\xff\xff",val11);//攻丝超时
printf("n12.val=%d\xff\xff\xff",val12);//旋转超时
printf("n13.val=%d\xff\xff\xff",val13);//退刀超时
printf("n14.val=%d\xff\xff\xff",val14);//润滑超时
}
/****************刷新显示*******************/
void Renovate(void)
{
uint mn;
mn=0X00;
printf("n0.val=%d\xff\xff\xff",mn); //A轴速度
printf("n0.val=%d\xff\xff\xff",mn); //A轴速度
printf("n1.val=%d\xff\xff\xff",mn); //B轴速度
printf("n2.val=%d\xff\xff\xff",mn); //C轴速度
printf("n3.val=%d\xff\xff\xff",mn); //D轴速度
printf("n4.val=%d\xff\xff\xff",mn); //润滑模数
printf("n5.val=%d\xff\xff\xff",mn); //润滑时间
printf("n6.val=%d\xff\xff\xff",mn); //吹气时间1
printf("n7.val=%d\xff\xff\xff",mn); //吹气时间2
printf("n9.val=%d\xff\xff\xff",mn); //打油次数
printf("n10.val=%d\xff\xff\xff",mn); //间隙时间
printf("n11.val=%d\xff\xff\xff",mn); //攻丝超时
printf("n12.val=%d\xff\xff\xff",mn); //旋转超时
printf("n13.val=%d\xff\xff\xff",mn); //退刀超时
printf("n14.val=%d\xff\xff\xff",mn); //润滑超时
red_eeprom();
Dis_Data();
}
/******************************************************/
void Data_Set(void )
{
if (a[0]==0XD5&&a[1]==0X00) //A轴速度
{
val1=a[3]*256+a[2]; //
Write_EEprom();
Renovate(); //刷新显示
}
else if (a[0]==0XD5&&a[1]==0X01) //B轴速度
{
val2=a[3]*256+a[2]; //
Write_EEprom();
Renovate(); //刷新显示
}
else if (a[0]==0XD5&&a[1]==0X02) //C轴速度
{
val3=a[3]*256+a[2]; //
Write_EEprom();
Renovate(); //刷新显示
}
else if (a[0]==0XD5&&a[1]==0X03) //D轴速度
{
val4=a[3]*256+a[2]; //
Write_EEprom();
Renovate(); //刷新显示
}
else if (a[0]==0XD5&&a[1]==0X04) //比例系数1
{
val5=a[3]*256+a[2]; //
Write_EEprom();
Renovate(); //刷新显示
}
else if (a[0]==0XD5&&a[1]==0X05) //比例系数2
{
val6=a[3]*256+a[2]; //
Write_EEprom();
Renovate(); //刷新显示
}
else if (a[0]==0XD5&&a[1]==0X06) //吹气时间1
{
val7=a[3]*256+a[2]; //
Write_EEprom();
Renovate(); //刷新显示
}
else if(a[0]==0XD5&&a[1]==0X07) //吹气时间2
{
val8=a[3]*256+a[2]; //
Write_EEprom();
Renovate(); //刷新显示
}
else if(a[0]==0XD5&&a[1]==0X08) //打油次数
{
val9=a[3]*256+a[2]; //
Write_EEprom();
Renovate(); //刷新显示
}
else if(a[0]==0XD5&&a[1]==0X09) //打油计数器
{
val10=a[3]*256+a[2]; //
Write_EEprom();
Renovate(); //刷新显示
}
else if(a[0]==0XD5&&a[1]==0X0A) //攻丝超时
{
val11=a[3]*256+a[2]; //
Write_EEprom();
Renovate(); //刷新显示
}
else if(a[0]==0XD5&&a[1]==0X0B) //旋转超时
{
val12=a[3]*256+a[2]; //
Write_EEprom();
Renovate(); //刷新显示
}
else if(a[0]==0XD5&&a[1]==0X0C) //退刀超时
{
val13=a[3]*256+a[2]; //
Write_EEprom();
Renovate(); //刷新显示
}
else if(a[0]==0XD5&&a[1]==0X0D) //润滑超时
{
val14=a[3]*256+a[2]; //
Write_EEprom();
Renovate(); //刷新显示
}
}