/*-------------关闭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();                       //刷新显示
                }
               }  











