STM32_NXP 发表于 2011-11-28 22:37:23

:三菱FX1N下载协议的51代码例子在STC12C5A56S2上调试通过

在STC12C5A56S2上调试通过   (注明:来自OURPLC)

sfr WDT = 0xA6;
sfr WDTSTC = 0xE1;
sfr WDT_CONTR = 0xC1;
sfr P4SW = 0XBB;
sfr P0 = 0x80;
sfr P1 = 0x90;
sfr P2 = 0xA0;
sfr P3 = 0xB0;
sfr P4 = 0xC0;
sfr PSW = 0xD0;
sfr ACC = 0xE0;
sfr B = 0xF0;
sfr SP = 0x81;
sfr DPL = 0x82;
sfr DPH = 0x83;
sfr PCON = 0x87;
sfr TCON = 0x88;
sfr TMOD = 0x89;
sfr TL0 = 0x8A;
sfr TL1 = 0x8B;
sfr TH0 = 0x8C;
sfr TH1 = 0x8D;
sfr IE = 0xA8;
sfr IP = 0xB8;
sfr SCON = 0x98;
sfr SBUF = 0x99;

sfr ADC_RES=0xBD;
sfr ADC_CONTR=0xBC;
sfr P1ASF=0x9D;

sfr ADC_CONTR1 = 0xc5;
sfr ADC_DATA = 0xc6;
sfr ADC_LOW2 = 0xbe;
sfr P1M0=0X91;
sfr P1M1=0X92;

sfr CMOD=0XD9;
sfr CCON=0XD8;
sfr CH=0XF9;
sfr CL=0XE9;
sfr PCA_PWM0=0XF2;
sfr PCA_PWM1=0XF3;
sfr CCAPM0=0XDA;
sfr CCAPM1=0XDB;
sfr CCAP0H=0XFA;
sfr CCAP0L=0XEA;
sfr CCAP1H=0XFB;
sfr CCAP1L=0XEB;

sfr CCAPM2=0XDC;
sfr CCAPM3=0XDD;
sfr CCAP2H=0XFC;
sfr CCAP2L=0XEC;
sfr CCAP3H=0XFD;
sfr CCAP3L=0XED;

sfr P3M0=0XB2;
sfr P3M1=0XB1;

sfr AUXR1=0XA2;

sbit CR=0XDE;

sbit CY = 0xD7;
sbit AC = 0xD6;
sbit F0 = 0xD5;
sbit RS1 = 0xD4;
sbit RS0 = 0xD3;
sbit OV = 0xD2;
sbit P = 0xD0;
sbit TF1 = 0x8F;
sbit TR1 = 0x8E;
sbit TF0 = 0x8D;
sbit TR0 = 0x8C;
sbit IE1 = 0x8B;
sbit IT1 = 0x8A;
sbit IE0 = 0x89;
sbit IT0 = 0x88;
sbit EA = 0xAF;
sbit ES = 0xAC;
sbit ET1 = 0xAB;
sbit EX1 = 0xAA;
sbit ET0 = 0xA9;
sbit EX0 = 0xA8;
sbit PS = 0xBC;
sbit PT1 = 0xBB;
sbit PX1 = 0xBA;
sbit PT0 = 0xB9;
sbit PX0 = 0xB8;
sbit RD = 0xB7;
sbit WR = 0xB6;
sbit T1 = 0xB5;
sbit T0 = 0xB4;
sbit INT1 = 0xB3;
sbit INT0 = 0xB2;
sbit TXD = 0xB1;
sbit RXD = 0xB0;
sbit SM0 = 0x9F;
sbit SM1 = 0x9E;
sbit SM2 = 0x9D;
sbit REN = 0x9C;
sbit TB8 = 0x9B;
sbit RB8 = 0x9A;
sbit TI = 0x99;
sbit RI = 0x98;

sbit Y0=0x80;
sbit Y1=0x81;
sbit Y2=0x82;
sbit Y3=0x83;
sbit Y4=0x84;
sbit Y5=0x85;
sbit Y6=0x86;
sbit Y7=0x87;
sbit X0=0x90;
sbit X1=0x91;
sbit X2=0x92;
sbit X3=0x93;
sbit X4=0x94;
sbit X5=0x95;
sbit X6=0x96;
sbit X7=0x97;

sbit SDA=0X96;
sbit SCL=0X97;

#define time_div 3200
#define time_div_10 320
#define FRQ 22118400
#define mod_addr 1
#define u8 unsigned char
#define u16 unsigned int
#define u32 unsigned long
#define lad eeprom_read

#define filters 0x3f


sfr isp_data=0xc2;
sfr isp_addrh=0xc3;
sfr isp_addrl=0xc4;
sfr isp_cmd=0xc5;
sfr isp_trig=0xc6;
sfr isp_contr=0xc7;


unsigned char y,ytemp,x;
unsigned char dly,mlei1,mlei2,mlei3;
unsigned char xdata m,m8000;
unsigned char xdata t,to,c,cflag,cout;
unsigned int xdata tc;//140 timer
unsigned int xdata ct;//75 counter
unsigned int xdata d;//80 D
unsigned char xdata s;
unsigned char idata xfir;
unsigned char ack,psx,YP;
unsigned int tmr,mlei;
unsigned char xdata v,vk;
unsigned char z,ST_ScanV=0;

unsigned char idata YPR,CMUT;
unsigned int idata DIV0,FD0,fvq0,fvq1,timu0,timu1,FV0,FV1,u0cnt,u1cnt;
unsigned long idata PMAX0,PCNT0;
unsigned int idata DIV1,FD1;
unsigned long idata PMAX1,PCNT1;

unsigned long xdata decp,decp1;


unsigned char down_lad=0,tscok;
unsigned int ci;
unsigned char calli=0,pust=0;
unsigned char tused;
unsigned int tus;
//unsigned int plsf;
//unsigned char psb;
unsigned char plscnt;
unsigned char mcbit;
unsigned char mcnum;

unsigned char puse,pusj;
unsigned int pusi;
unsigned char mkimps,mpsi;

unsigned char v8,v9;
unsigned int ad2,ad1,ad0;
unsigned char v4,v5,v6;
unsigned int address1,datalong;
unsigned int crc;
unsigned char hcrc,lcrc;
unsigned char Q,xmcu,start;

unsigned char mki;//梯形图节点导通标志
unsigned int unit,snum;
unsigned char li;//与ANB ORB MPS MPP 配合使用

u8 mtmr,mtmr1,mtmr2,mtmr3;

u8 FNO(unsigned int i);
u8 FLDX(u16 i);
u8 FSETY(u16 i);
u8 FRSTY(u16 i);
u8 FEND(u16 i);
u8 FSEC00(u16 i);
u8 FLDM2F(u16 i);
u8 FOUTY(u16 i);
u8 FOUTM8(u16 i);

code unsigned char (*fuc_b)(u16)={FSEC00,FNO,FNO,FNO,FNO,FNO,FNO,FNO, FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO,//0
FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO, FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO,//1
FNO,FNO,FNO,FNO,FLDX,FNO,FNO,FNO, FNO,FNO,FNO,FNO,FNO,FNO,FNO,FLDM2F,//2
FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO, FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO,//3
FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO, FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO,//4
FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO, FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO,//5
FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO, FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO,//6
FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO, FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO,//7

FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO, FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO,//8
FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO, FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO,//9
FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO, FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO,//A
FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO, FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO,//B
FNO,FNO,FNO,FNO,FNO,FOUTY,FNO,FNO, FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO,//C
FNO,FNO,FNO,FNO,FNO,FSETY,FNO,FNO, FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO,//D
FNO,FNO,FNO,FNO,FNO,FRSTY,FNO,FNO, FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO,//E
FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO, FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO//F
};
code unsigned char (*fuc_f1)(u16)=
{FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO, FNO,FNO,FNO,FNO,FNO,FNO,FNO,FEND,//0
FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO, FNO,FNO,FNO,FNO,FEND,FNO,FNO,FNO,//1
FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO, FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO,//2
FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO, FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO,//3
FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO, FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO,//4
FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO, FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO,//5
FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO, FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO,//6
FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO, FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO,//7

FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO, FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO,//8
FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO, FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO,//9
FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO, FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO,//A
FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO, FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO,//B
FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO, FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO,//C
FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO, FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO,//D
FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO, FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO,//E
FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO, FNO,FNO,FNO,FNO,FNO,FNO,FNO,FNO//F
};


code unsigned char (*fuc_f2)(u16);
code unsigned char (*fuc_f3)(u16);

void send_char_com(unsigned char ch);

void write_m(unsigned int i,unsigned char j)
{if(i<=247)
{
if(j==1)
m|=(0x01<<(i%8));
else
m&=(~(0x01<<(i%8)));
}
else
if(i>=8000)
{
if(j==1)
m8000[(i-8000)/8]|=(0x01<<((i-8000)%8));
else
m8000[(i-8000)/8]&=(~(0x01<<((i-8000)%8)));
}
}

u8 read_m(unsigned int i)
{ if(i<=247)
return(m&(0x01<<(i%8)));
else
if(i>=8000)
return(m8000[(i-8000)/8]&(0x01<<((i-8000)%8)));
}

void write_c(unsigned int i,unsigned char j)
{if(i<=40)
{
if(j==1)
c|=(0x01<<(i%8));
else
c&=(~(0x01<<(i%8)));
}
}

u8 read_c(unsigned int i)
{ if(i<=40)
return(c&(0x01<<(i%8)));

return 0;
}

void write_t(unsigned int i,unsigned char j)
{if(i<=40)
{
if(j==1)
t|=(0x01<<(i%8));
else
t&=(~(0x01<<(i%8)));
}
}

u8 read_t(unsigned int i)
{ if(i<=40)
return(t&(0x01<<(i%8)));

return 0;
}

void write_y(unsigned int i,unsigned char j)
{if(i<=15)
{
if(j==1)
ytemp|=(0x01<<(i%8));
else
ytemp&=(~(0x01<<(i%8)));
}
}

u8 read_y(unsigned int i)
{ if(i<=15)
return(y&(0x01<<(i%8)));

return 0;
}

void write_x(unsigned int i,unsigned char j)
{if(i<=15)
{
if(j==1)
x|=(0x01<<(i%8));
else
x&=(~(0x01<<(i%8)));
}
}

u8 read_x(unsigned int i)
{ if(i<=15)
return(x&(0x01<<(i%8)));

return 0;
}

unsigned char bytecg(unsigned char byt)
{if(byt<=0x39)if(byt>=0x30){byt=byt-0x30;return byt;}
if(byt<=0x46)if(byt>=0x41){byt=byt-0x40+0x09;return byt;}
return 0;
}

unsigned char bytech(unsigned char byt)
{if(byt<=0x09)//if(byt>=0x00)
{byt=byt+0x30;return byt;}
if(byt<=0x0f)if(byt>=0x0a){byt=byt-0x0a+0x41;return byt;}
return 0;
}

void sety(unsigned char j)
{
if(j<=9)ytemp|=(0x01<<(j%8));
}

void rsty(unsigned char j)
{
if(j<=9)ytemp&=(~(0x01<<(j%8)));
}

void eeprom_eares(unsigned int addres)//
{unsigned i;
isp_addrl=addres;//λ?
isp_addrh=addres>>8;//λ?
isp_contr=0x00;
isp_contr=isp_contr|0x81;//?ISP
isp_cmd=0x03;//

isp_trig=0x5A;//
isp_trig=0xA5;//

for(i=0;i<3;i++);
isp_addrl=0xff;
isp_addrh=0xff;
isp_contr=0x00;
isp_contr=isp_contr|0x81;//?ISP
isp_cmd=0x01;// д
isp_trig=0x00;

}

void eeprom_write(unsigned int addres,unsigned char write_data)//д?
{unsigned char i;
isp_data=write_data;//?д
isp_addrl=addres;//λ?
isp_addrh=addres>>8;//λ?
isp_contr=0x00;
isp_contr=isp_contr|0x81;//?ISP
isp_cmd=0x02;//д

isp_trig=0x5A;//
isp_trig=0xA5;//

for(i=0;i<3;i++);
isp_addrl=0xff;
isp_addrh=0xff;
isp_contr=0x00;
isp_contr=isp_contr|0x81;//?ISP
isp_cmd=0x01;// д
isp_trig=0x00;

}


unsigned char eeprom_read(unsigned int addres)
{unsigned char i;
isp_addrl=addres;//λ?
isp_addrh=addres>>8;//λ?
//isp_contr=0x00;
//isp_contr=isp_contr|0x81;//?ISP
//isp_cmd=0x01;// д

isp_trig=0x5A;//
isp_trig=0xA5;//

//for(i=0;i<3;i++);
//isp_addrl=0xff;
//isp_addrh=0xff;
//isp_contr=0x00;
//isp_cmd=0x00;
//isp_trig=0x00;
z=isp_data;
return(z);

}

unsigned char ReData(unsigned int i)
{unsigned char recedata;
if((i%2)==0)//高半字节
recedata=eeprom_read(i/2)>>4;
else
recedata=eeprom_read(i/2)&0x0f;//低半字节

if(recedata<=0x09)recedata=recedata+0x30;
else
recedata=recedata-0X0A+0X41;

if(recedata<0x30)recedata=0x46;
if(recedata>=0x3a)if(recedata<=0x40)recedata=0x46;
if(recedata>0x46)recedata=0x46;

return recedata;
}

void WrData(unsigned char val ,unsigned int add,unsigned char qn)
{unsigned int i,j;

unsigned char TEMP1,TEMP2;
//add是第几个梯形图程序单元,每单元32步,每步2字节
if((add%8)==0)
eeprom_eares(add*64);

for(i=0;i<qn;i++)
if((i%2)==0)
{TEMP1=v;
TEMP2=v;
if(TEMP1<=0X39)TEMP1=TEMP1-0X30;
else
TEMP1=TEMP1-0X41+0X0A;

if(TEMP2<=0X39)TEMP2=TEMP2-0X30;
else
TEMP2=TEMP2-0X41+0X0A;
TEMP1=TEMP1<<4;
eeprom_write((add%8)*64+(i/2)+(add/8)*512,TEMP1+TEMP2);
}


}

unsigned char ReSecret(unsigned char i)
{ return 0x30;
}


void _Nop()
{
}
void Start_I2c()
{
SDA=1; /*??*/
_Nop();
SCL=1;
_Nop(); /*??4.7us,?*/
_Nop();
_Nop();
_Nop();
_Nop();
SDA=0; /*??*/
_Nop(); /* ??4s*/
_Nop();
_Nop();
_Nop();
_Nop();
SCL=0; /*??I2C??? */
_Nop();
_Nop();
}
void Stop_I2c()
{
SDA=0; /*??*/
_Nop(); /*???*/
SCL=1; /*?4s*/
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
SDA=1; /*I2C??*/
_Nop();
_Nop();
_Nop();
_Nop();
}
void SendByte(unsigned char c)
{
unsigned char BitCnt,b;
for(BitCnt=0;BitCnt<8;BitCnt++) /*????8λ*/
{if(BitCnt==0)b=c&0x80;
if(BitCnt==1)b=c&0x40;
if(BitCnt==2)b=c&0x20;
if(BitCnt==3)b=c&0x10;
if(BitCnt==4)b=c&0x08;
if(BitCnt==5)b=c&0x04;
if(BitCnt==6)b=c&0x02;
if(BitCnt==7)b=c&0x01;
if(b)SDA=1;
else
SDA=0;
//if((c<<BitCnt)&0x80)SDA=1; /*ж?λ*/
//else SDA=0;
_Nop();
SCL=1; /*??????λ*/
_Nop();
_Nop(); /*??????4s*/
_Nop();
_Nop();
_Nop();
SCL=0;
}
_Nop();
_Nop();
SDA=1; /*8λ????λ*/
_Nop();
_Nop();
SCL=1;
_Nop();
_Nop();
_Nop();
if(SDA==1)ack=0;
else ack=1; /*ж????*/
SCL=0;
_Nop();
_Nop();
}
unsigned char RcvByte()
{
unsigned char retc;
unsigned char BitCnt;
retc=0;
SDA=1; /*???*/
for(BitCnt=0;BitCnt<8;BitCnt++)
{
_Nop();
SCL=0; /*????λ*/
_Nop();
_Nop(); /*?????4.7s*/
_Nop();
_Nop();
_Nop();
SCL=1; /*???Ч*/
_Nop();
_Nop();
retc=retc<<1;
if(SDA==1)retc=retc+1; /*λ,?λretc */
_Nop();
_Nop();
}
SCL=0;
_Nop();
_Nop();
return(retc);
}
void Ack_I2c(unsigned char a)
{
if(a==0)SDA=0;
else SDA=1;
_Nop();
_Nop();
_Nop();
SCL=1;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
SCL=0;
_Nop();
_Nop();
}




void timer0(void) interrupt 1 using 1
{
TL0=0x00;
TH0=0xff;
if(tmr<7){tmr++;}
else
{tmr=0;mtmr++;}
//if(mlei<time_div)mlei++;

xfir=xfir<<1;xfir=xfir|X0;
xfir=xfir<<1;xfir=xfir|X1;
xfir=xfir<<1;xfir=xfir|X2;
xfir=xfir<<1;xfir=xfir|X3;
xfir=xfir<<1;xfir=xfir|X4;
xfir=xfir<<1;xfir=xfir|X5;
xfir=xfir<<1;xfir=xfir|X6;
xfir=xfir<<1;xfir=xfir|X7;
/*
#if use_y0
if((YP&0X01)||((YP&0X04)&&((YP&0X40)==0)))
{ if(DIV0<FD0)DIV0++;
else
{
if(PMAX0>0)
{
if(PCNT0>0)
{DIV0=0;PCNT0--;
if(y&0x01){Y0=1;y=y&(~0x01);}
else
{Y0=0;y=y|0x01;}
}
else
{m|=0x04;if(YP&0X01){Y0=1;y=y&(~0x01);}}
}
else
{DIV0=0;
if(y&0x01){Y0=1;y=y&(~0x01);}
else
{Y0=0;y=y|0x01;}
}
}
}
#endif

#if use_y1
if((YP&0X02)||((YP&0X08)&&((YP&0X80)==0)))
{ if(DIV1<FD1)DIV1++;
else
{
if(PMAX1>0)
{
if(PCNT1>0)
{DIV1=0;PCNT1--;
if(y&0x02){Y1=1;y=y&(~0x02);}
else
{Y1=0;y=y|0x02;}
}
else
{m|=0x08;if(YP&0X02){Y1=1;y=y&(~0x02);}}
}
else
{DIV1=0;
if(y&0x02){Y1=1;y=y&(~0x02);}
else
{Y1=0;y=y|0x02;}
}
}
}
#endif
*/
}

void send_char_com(unsigned char ch)
{

SBUF=ch;
while(TI==0);
TI=0;

}


void serial () interrupt 4 using 3
{ unsigned char i,VP;
if(RI)
{
RI = 0;
VP=SBUF;
VP=VP&0X7F;
if(VP==0X05)
{send_char_com(06);
}

if(VP==0X02){vk=1;for(i=1;i<180;i++)v=0;}
if(VP!=0X02)if(VP!=0X05)
{ if(vk>179)vk=0;
v=VP;vk++;//02
if(vk>=3)
if(v==0x03)
ST_ScanV=1;//启动通信处理函数
}
}


}


/*
void delay(unsigned int delay_time) // ?
{
unsigned int n;
while(delay_time--)
{
n = 6000;
while(--n)
{

WDT_CONTR = 0x3C;

}
}
}

unsigned char get_AD_result(unsigned char channel)
{unsigned char j, AD_finished=0; //洢 A/D ??

ADC_RES = 0;

channel &= 0x07; //0000,0222 05λ
ADC_CONTR = 0X60;
j=0;
j++;
j++;
j++;
j++;
ADC_CONTR |= channel; //? A/D ??
j=0;
j++;
j++;
j++;
j++;
ADC_CONTR |= 0x80; // A/D ?
delay(1); //????
ADC_CONTR |= 0x08; //0000,1000 ADCS = 1, A/D?,
AD_finished = 0;
while (AD_finished ==0 ) //?A/D?
{
AD_finished = (ADC_CONTR & 0x10); //0001,0000 A/D?
}
ADC_CONTR &= 0xE7; //2221,0222 ADC_FLAG λ, ?A/D?,

return (ADC_RES); // A/D 8 λ?
}
*/

u8 FNO(unsigned int i)
{
return 0;
}

u8 FANB(u16 i)
{ //if(lad==0xf8)if(lad==0xff)//ANB
if((li==1)&&(mki==1)){mki=1;}
else
{mki=0;}
return 0;
}

u8 FORB(u16 i)
{//if(lad==0xf9)if(lad==0xff)//ORB
if(li|mki){mki=1;}
else
{mki=0;}
return 0;
}
u8 FMPS(u16 i)
{// if(lad==0xfa)if(lad==0xff)//MPS
mkimps=mki;
return 0;
}
u8 FMPP(u16 i)
{// if(lad==0xfc)if(lad==0xff)//MPP
mki=mkimps;mpsi--;
li=mki;
return 0;
}
u8 FMRD(u16 i)
{
// if(lad==0xfb)if(lad==0xff)//MRD
mki=mkimps;
li=mki;
return 0;
}
u8 FINV(u16 i)
{// if(lad==0xfd)if(lad==0xff)//INV
if(mki)mki=0;
else
mki=1;
return 0;
}


u8 FSECFF(u16 i)
{
return (*fuc_f2)(i);
}

u8 FLDM28(u16 i)
{
if(start==1){start=0;mpsi=0; }
else
li=mki;
if(read_m(lad(i))){mki=1;}
else {mki=0;}

return 0;
}
u8 FLDM2F(u16 i)
{
if(start==1){start=0;mpsi=0; }
else
li=mki;
if(read_m(lad(i)+8000)){mki=1;}
else {mki=0;}

return 0;
}
u8 FANDM48(u16 i)
{
if(read_m(lad(i))){if(mki){mki=1;}
else {mki=0;}
}
else {mki=0;}
return 0;
}
u8 FORM68(u16 i)
{
if(read_m(lad(i))||(mki==1)){mki=1;}
else {mki=0;}
return 0;
}
u8 FLDIM38(u16 i)
{
if(start==1){start=0;mpsi=0; }
else
li=mki;
if(!read_m(lad(i))){mki=1;}
else {mki=0;}

return 0;
}
u8 FANIM58(u16 i)
{
if(!read_m(lad(i))){if(mki){mki=1;}
else {mki=0;}
}
else {mki=0;}

return 0;
}
u8 FORIM78(u16 i)
{
if((!read_m(lad(i)))||(mki==1)){mki=1;}
else {mki=0;}

return 0;
}
u8 FLDT(u16 i)
{
if(start==1){start=0;mpsi=0; }
else
li=mki;
if(read_t(lad(i))){mki=1;}
else {mki=0;}

return 0;
}
u8 FANDT(u16 i)
{
if(read_t(lad(i))){if(mki){mki=1;}
else {mki=0;}
}
else {mki=0;}

return 0;
}

u8 FORT(u16 i)
{
if(read_t(lad(i))||(mki==1))mki=1;
else
mki=0;
return 0;
}

u8 FLDIT(u16 i)
{
if(start==1){start=0;mpsi=0; }
else
li=mki;
if(!read_t(lad(i))){mki=1;}
else {mki=0;}
return 0;
}
u8 FANIT(u16 i)
{
if(!read_t(lad(i))){if(mki){mki=1;}
else {mki=0;}
}
else {mki=0;}
return 0;
}

u8 FORIT(u16 i)
{
if((read_t(lad(i))==0)||(mki==1))mki=1;
else
mki=0;
return 0;
}
u8 FLDC(u16 i)
{
if(start==1){start=0;mpsi=0; }
else
li=mki;
if(read_c(lad(i))){mki=1;}
else {mki=0;}
return 0;
}

u8 FANDC(u16 i)
{
if(read_c(lad(i))){if(mki){mki=1;}
else {mki=0;}
}
else {mki=0;}
return 0;
}

u8 FORC(u16 i)
{
if((read_c(lad(i)))||(mki==1))mki=1;
else
mki=0;
return 0;
}
u8 FLDIC(u16 i)
{
if(start==1){start=0;mpsi=0; }
else
li=mki;
if(!read_c(lad(i))){mki=1;}
else {mki=0;}
return 0;
}
u8 FANIC(u16 i)
{
if(!read_c(lad(i))){if(mki){mki=1;}
else {mki=0;}
}
else {mki=0;}
return 0;
}

u8 FORIC(u16 i)
{
if((read_c(lad(i))==0)||(mki==1))mki=1;
else
mki=0;
return 0;
}

u8 FLDX(u16 i)
{
if(start==1){start=0;mpsi=0; }
else
li=mki;
if(read_x(lad(i))==0){mki=1;}
else {mki=0;}
return 0;
}
u8 FANDX(u16 i)
{
if(read_x(lad(i))==0){if(mki){mki=1;}
else {mki=0;}
}
else {mki=0;}
return 0;
}

u8 FLDIX(u16 i)
{
if(start==1){start=0;mpsi=0; }
else
li=mki;
if(read_x(lad(i))){mki=1;}
else {mki=0;}
return 0;
}
u8 FANIX(u16 i)
{
if(read_x(lad(i))){if(mki){mki=1;}
else {mki=0;}
}
else {mki=0;}
return 0;
}

u8 FORX(u16 i)
{
if((read_x(lad(i))==0)||(mki==1))mki=1;
else
mki=0;
return 0;
}

u8 FORIX(u16 i)
{
if((read_x(lad(i))==1)||(mki==1))mki=1;
else
mki=0;
return 0;
}

u8 FLDY(u16 i)
{
if(start==1){start=0;mpsi=0; }
else
li=mki;
if(read_y(lad(i))==1){mki=1;}
else {mki=0;}
return 0;
}
u8 FANDY(u16 i)
{
if(read_y(lad(i))==1){if(mki){mki=1;}
else {mki=0;}
}
else {mki=0;}
return 0;
}

u8 FORY(u16 i)
{
if((read_y(lad(i))==1)||(mki==1))mki=1;
else
mki=0;
return 0;
}

u8 FLDIY(u16 i)
{
if(start==1){start=0;mpsi=0; }
else
li=mki;
if(read_y(lad(i))==0){mki=1;}
else {mki=0;}
return 0;
}
u8 FANIY(u16 i)
{
if(read_y(lad(i))==0){if(mki){mki=1;}
else {mki=0;}
}
else {mki=0;}
return 0;
}

u8 FORIY(u16 i)
{
if((read_y(lad(i))==0)||(mki==1))mki=1;
else
mki=0;
return 0;
}

u8 FSETY(u16 i)
{
if((mki)&&(s&0x01))
sety(lad(i));
return 0;
}
u8 FRSTY(u16 i)
{ if((mki)&&(s&0x01))
rsty(lad(i));
return 0;
}
u8 FSETM8(u16 i)
{ if((mki)&&(s&0x01))
write_m(lad(i),1);
return 0;
}
u8 FRSTM8(u16 i)
{ if((mki)&&(s&0x01))
write_m(lad(i),0);
return 0;
}

u8 FOUTY(u16 i)
{ // if(lad==0xc5)//OUT Y
if((mki)&&(s&0x01))
{sety(lad(i));}
else {rsty(lad(i));}
return 0;
}
u8 FOUTM8(u16 i)
{
// if(lad==0xc8)//OUT m0-255
if((mki)&&(s&0x01))
write_m(lad(i),1);
else
write_m(lad(i),0);
return 0;
}


u8 FEND(u16 i)
{u16 j;

if (((lad(i)==0x1c)&&(tscok==1))||(lad(i)!=0x1c))
{
start=1;
write_m(8002,0);
tscok=1;


/*
if(x)xflag_79=1;
else
xflag_79=0;

if(x)xflag_78=1;
else
xflag_78=0;


m8000flag_13=m8000;
*/
if(ytemp&0x01)Y0=0;else Y0=1;
if(ytemp&0x02)Y1=0;else Y1=1;
if(ytemp&0x04)Y2=0;else Y2=1;
if(ytemp&0x08)Y3=0;else Y3=1;
if(ytemp&0x10)Y4=0;else Y4=1;
if(ytemp&0x20)Y5=0;else Y5=1;
if(ytemp&0x40)Y6=0;else Y6=1;
if(ytemp&0x80)Y7=0;else Y7=1;

y=ytemp;
y=ytemp;

return 255;
}
return 0;
}

u8 FSEC00(u16 i)
{/*
if(lad(i)==0x48)
{
if(lad(i+1)==0x01)
return (*fuc_f1(lad(i)))(i);

if(lad(i+1)==0x00)
return (*fuc_f2(lad(i)))(i);
}

if(lad(i)==0x49)
{
if(lad(i+1)==0x01)
return (*fuc_f1(lad(i)))(i);

if(lad(i+1)==0x00)
return (*fuc_f2(lad(i)))(i);
}

if(lad(i)==0x54)
{
if(lad(i+1)==0x00)
return (*fuc_f1(lad(i)))(i);

if(lad(i+1)==0x01)
return (*fuc_f2(lad(i)))(i);

if(lad(i+1)==0x11)
return (*fuc_f2(lad(i)))(i);
}

if(lad(i)==0x56)
{
if(lad(i+1)==0x00)
return (*fuc_f1(lad(i)))(i);

if(lad(i+1)==0x01)
return (*fuc_f2(lad(i)))(i);

if(lad(i+1)==0x11)
return (*fuc_f2(lad(i)))(i);
}

if(lad(i)==0x62)
{
if(lad(i+1)==0x00)
return (*fuc_f1(lad(i)))(i);

if(lad(i+1)==0x01)
return (*fuc_f2(lad(i)))(i);
}
*/
return ((*fuc_f1)(i));
}


void crcv(void)
{
crc=crc-(crc/256)*256;
hcrc=crc/16;
hcrc=hcrc&0x0f;
lcrc=crc-(crc/16)*16;
lcrc=lcrc&0x0f;
if(hcrc<=9)hcrc=3*16+hcrc;
else
hcrc=4*16+hcrc-10+1;
if(lcrc<=9)
lcrc =3*16+lcrc;
else
lcrc =4*16+lcrc-10+1;

}

void crcs(void)
{
crc=crc-(crc/256)*256;
hcrc=crc/16;
hcrc=hcrc&0x0f;
lcrc=crc-(crc/16)*16;
lcrc=lcrc&0x0f;
if(hcrc<=9)hcrc=3*16+hcrc;
else
hcrc=4*16+hcrc-10+1;
if(lcrc<=9)
lcrc =3*16+lcrc;
else
lcrc =4*16+lcrc-10+1;
send_char_com(0X03);
send_char_com(hcrc);
send_char_com(lcrc);
}


unsigned char scan(void)
{


unsigned int i,j,sy;
unsigned char dds0,dds1;
unsigned int k;

//02 45 38 32 35 30 45 03 35 43 远程设置运行
//02 45 37 32 35 30 45 03 35 42 远程设置中止
if(v==0X45)if(v==0X38)if(v==0X32)if(v==0X35)
if(v==0X30)if(v==0X45)if(v==0X03)if(v==0X35)if(v==0X43)
{

down_lad=0;
tscok=0; ci=0;calli=0;pust=0;
tus=0;tscok=0;plscnt=0;pusj=0;
mcnum=0;
mpsi=0;

//运行状态
write_m(8002,1);
write_m(8000,1);
send_char_com(0X06);
return 0;
}

if(v==0X45)if(v==0X37)if(v==0X32)if(v==0X35)
if(v==0X30)if(v==0X45)if(v==0X03)if(v==0X35)if(v==0X42)
{

down_lad=1;
//下载状态

tus=0;tscok=0;plscnt=0;pusj=0;
mcnum=0;
mpsi=0;
ci=0;calli=0;pust=0;

tscok=0;
//Y0_PLSY=0;
//Y0_PLSY=0;
//Y0P=0;
//Y1P=0;
//ZRNT=0;
//ZRNP=0;
//u0en=0;u1en=0;
/*
s=0xff;
for(j=0;j<=383;j++)
{m=0;}

for(j=0;j<=255;j++)
{m8000=0;}


for(j=0;j<10;j++)
{y=0;ytemp=0;xfir=0xff;}

for(j=0;j<256;j++)
{t=0;to=0;}

for(j=0;j<16;j++)
{ct=0;c=0;cflag=0;}
for(j=0;j<=19;j++)
{cth=0;c=0;cflag=0;}

for(j=0;j<256;j++)
{tc=0;}
mfir=0;mtmr=0;mtmr1=0;mtmr2=0;mtmr3=0;


for(j=0;j<=127;j++)
d=0;

for(j=0;j<=1000;j++)
fncp=0;

for(j=0;j<6;j++)
{dhs_used=0;
CYM=0;
CTX=0;
C251i=0;
}

pwm_max=0;
pwm_max=0;
*/

write_m(8002,0);
write_m(8000,0);

send_char_com(0X06);
return 0;
}

if(v==0X45)if(v==0X37)if(v==0X32)if(v==0X33)
if(v==0X30)if(v==0X45)if(v==0X03)if(v==0X35)if(v==0X39)
{
send_char_com(0X06);
for(i=0;i<180;i++){v=0;}
return 0;
}
if(v==0X45)if(v==0X37)if(v==0X32)if(v==0X34)
if(v==0X30)if(v==0X45)if(v==0X03)if(v==0X35)if(v==0X41)
{
send_char_com(0X06);
for(i=0;i<180;i++){v=0;}
return 0;

}
//////////////////////////////////////////////////////////////////////////////
//与触摸屏通讯部分
//02 30 31 30 30 30 30 34 03 35 38 read d0 d1
if(v==0X30)if((v>=0X31)||((v==0X30)&&(v>=0X45)))
if(v==0X30)if(v!=0X31)if(v==0X03)
{//02 30 30 30 30 30 30 30 30 03 38 33
crc=0;
for(i=1;i<=8;i++)crc=crc+v;
crcv();
if(hcrc==v)if(lcrc==v)
{
send_char_com(0X02);
crc=0;
if(v>0X30)
{
k=((v-0x31)*256*16+bytecg(v)*256+bytecg(v)*16+bytecg(v))/2 ;
if(k>100)if(k<8000)k=0;
}
if(v==0X30)if(v>=0X45){k=6000+((v-0x45)*256+bytecg(v)*16+bytecg(v))/2 ; }

if(k!=6001)
{
if(v>0X31)
for(i=0;i<(bytecg(v)/2);i++)
{
dds0=d/256;
dds1=d;
send_char_com(bytech(dds1/16));crc=crc+bytech(dds1/16);
send_char_com(bytech(dds1-(dds1/16)*16));crc=crc+bytech(dds1-(dds1/16)*16);
send_char_com(bytech(dds0/16));crc=crc+bytech(dds0/16);
send_char_com(bytech(dds0-(dds0/16)*16));crc=crc+bytech(dds0-(dds0/16)*16);
}
}
else
{
dds0=0x66;
dds1=0x62;
send_char_com(bytech(dds1/16));crc=crc+bytech(dds1/16);
send_char_com(bytech(dds1-(dds1/16)*16));crc=crc+bytech(dds1-(dds1/16)*16);
send_char_com(bytech(dds0/16));crc=crc+bytech(dds0/16);
send_char_com(bytech(dds0-(dds0/16)*16));crc=crc+bytech(dds0-(dds0/16)*16);
}
crc=crc+3;
crcs();
for(i=0;i<180;i++)v=0;
return 0;
}
}


//TO:02 31 31 30 30 30 30 34 31 33 31 31 30 30 30 30 03 44 46//WRITE D0 2223 D1 0000
if(v==0x31)if(v==0x30)if(v==0x34)if(v==0x03)
{
crc=0;
for(i=1;i<=16;i++)crc=crc+v;
crcv();
if(hcrc==v)if(lcrc==v)
{
if(v>0X30)
{
crc=((v-0x31)*256*16+bytecg(v)*256+bytecg(v)*16+bytecg(v))/2 ;
if(crc>100)if(crc<8000)crc=0;
}
if(v==0X30)if(v>=0X45){crc=6000+((v-0x45)*256+bytecg(v)*16+bytecg(v))/2 ; }

d=bytecg(v)*16+bytecg(v)+(bytecg(v)*16+bytecg(v))*256;

crc++;
d=bytecg(v)*16+bytecg(v)+(bytecg(v)*16+bytecg(v))*256;

send_char_com(0X06);
for(i=0;i<180;i++){v=0;}
return 0;
}
}

//TO:02 31 31 30 30 30 30 32 31 33 31 31 03 44 46//WRITE D0 2223
if(v==0x31)if(v==0x30)if(v==0x32)if(v==0x03)
{
crc=0;
for(i=1;i<=12;i++)crc=crc+v;
crcv();
if(hcrc==v)if(lcrc==v)
{
if(v>0X30)
{
crc=((v-0x31)*256*16+bytecg(v)*256+bytecg(v)*16+bytecg(v))/2 ;
if(crc>6255)if(crc<8000)crc=0;
}
if(v==0X30)if(v>=0X45){crc=6000+((v-0x45)*256+bytecg(v)*16+bytecg(v))/2 ; }

d=bytecg(v)*16+bytecg(v)+(bytecg(v)*16+bytecg(v))*256;

send_char_com(0X06);
for(i=0;i<180;i++){v=0;}
return 0;
}
}


//02 30 30 38 30 30 30 32 03 35 44 //read T0
if(v==0X30)if(v==0X30)if(v>=0X38)if(v<=0X39)
if(v==0X30)if(v>0X31)if(v==0X03)
{//02 30 30 30 30 30 30 30 30 03 38 33
crc=0;
for(i=1;i<=8;i++)crc=crc+v;
crcv();
if(hcrc==v)if(lcrc==v)
{
send_char_com(0X02);
crc=0;

k=((v-0X38)*256+bytecg(v)*16+bytecg(v))/2 ;

if(v>0X31)
for(i=0;i<(bytecg(v)/2);i++)
{
dds0=tc/256;
dds1=tc;
send_char_com(bytech(dds1/16));crc=crc+bytech(dds1/16);
send_char_com(bytech(dds1-(dds1/16)*16));crc=crc+bytech(dds1-(dds1/16)*16);
send_char_com(bytech(dds0/16));crc=crc+bytech(dds0/16);
send_char_com(bytech(dds0-(dds0/16)*16));crc=crc+bytech(dds0-(dds0/16)*16);
}
crc=crc+3;
crcs();
for(i=0;i<180;i++)v=0;
return 0;
}
}

//02 30 30 41 43 38 30 32 03 38 31 //READ C100
if(v==0X30)if(v==0X30)if(v>=0X41)if(v<=0X43)
if(v==0X30)if(v>0X31)if(v==0X03)
{//02 30 30 30 30 30 30 30 30 03 38 33
crc=0;
for(i=1;i<=8;i++)crc=crc+v;
crcv();
if(hcrc==v)if(lcrc==v)
{
send_char_com(0X02);
crc=0;

if(v<0x43)
k=((v-0X41)*256+bytecg(v)*16+bytecg(v))/2 ;
else
k=(bytecg(v)*16+bytecg(v))/4 ;

if(v>0X31)
for(i=0;i<(bytecg(v)/2);i++)
{
if(v<0x43)
{
dds0=ct/256;
dds1=ct;
}
else
{

}
send_char_com(bytech(dds1/16));crc=crc+bytech(dds1/16);
send_char_com(bytech(dds1-(dds1/16)*16));crc=crc+bytech(dds1-(dds1/16)*16);
send_char_com(bytech(dds0/16));crc=crc+bytech(dds0/16);
send_char_com(bytech(dds0-(dds0/16)*16));crc=crc+bytech(dds0-(dds0/16)*16);
}
crc=crc+3;
crcs();
for(i=0;i<180;i++)v=0;
return 0;
}
}


//02 37 30 32 30 34 03 30 30 //SET X2
if(v==0x37)if(v==0x30)if(v==0x34)if(v==0x03)
{
crc=0;
for(i=1;i<=6;i++)crc=crc+v;
crcv();
if(hcrc==v)if(lcrc==v)
{
sy=bytecg(v)*16+bytecg(v);
x=0;
xmcu=10;
send_char_com(0X06);
for(i=0;i<180;i++){v=0;}
return 0;
}
}

//02 38 30 32 30 34 03 30 30 //RST X2
if(v==0x38)if(v==0x30)if(v==0x34)if(v==0x03)
{
crc=0;
for(i=1;i<=6;i++)crc=crc+v;
crcv();
if(hcrc==v)if(lcrc==v)
{
sy=bytecg(v)*16+bytecg(v);
x=1;
xmcu=10;
send_char_com(0X06);
for(i=0;i<180;i++){v=0;}
return 0;
}
}

//TO:02 37 30 30 30 35 03 46 46//SET Y0
if(v==0x37)if(v==0x30)if(v==0x35)if(v==0x03)
{
crc=0;
for(i=1;i<=6;i++)crc=crc+v;
crcv();
if(hcrc==v)if(lcrc==v)
{
sy=bytecg(v)*16+bytecg(v);
sety(sy);
send_char_com(0X06);
for(i=0;i<180;i++){v=0;}
return 0;
}
}
//TO:02 38 30 30 30 35 03 46 46//RST Y0
if(v==0x38)if(v==0x30)if(v==0x35)if(v==0x03)
{
crc=0;
for(i=1;i<=6;i++)crc=crc+v;
crcv();
if(hcrc==v)if(lcrc==v)
{
sy=bytecg(v)*16+bytecg(v);
rsty(sy);
send_char_com(0X06);
for(i=0;i<180;i++){v=0;}
return 0;
}
}
//TO:02 37 30 38 30 38 03 30 41//SET M8
if(v==0x37)if(v==0x30)if(v>=0x38)if(v==0x03)
{
crc=0;
for(i=1;i<=6;i++)crc=crc+v;
crcv();
if(hcrc==v)if(lcrc==v)
{
sy=bytecg(v)*16+bytecg(v);
if(v<=0x44){dds0=v-0x38;sy=sy+256*dds0;}
if(v==0x46)sy=sy+8000;
write_m(sy,1);
send_char_com(0X06);
for(i=0;i<180;i++){v=0;}
return 0;
}
}
//TO:02 38 30 38 30 38 03 30 42//RST M8
if(v==0x38)if(v==0x30)if(v>=0x38)if(v==0x03)
{
crc=0;
for(i=1;i<=6;i++)crc=crc+v;
crcv();
if(hcrc==v)if(lcrc==v)
{
sy=bytecg(v)*16+bytecg(v);
if(v<=0x44){dds0=v-0x38;sy=sy+256*dds0;}
if(v==0x46)sy=sy+8000;
write_m(sy,0);
send_char_com(0X06);
for(i=0;i<180;i++){v=0;}
return 0;
}
}


//02 37 46 46 30 30 03 32 36 //SET S255
if(v==0x37)if(v==0x30)if(v<0x34)if(v==0x03)
{
crc=0;
for(i=1;i<=6;i++)crc=crc+v;
crcv();
if(hcrc==v)if(lcrc==v)
{
sy=bytecg(v)*16+bytecg(v);
s-0x30)*256]|=0x81;
send_char_com(0X06);
for(i=0;i<180;i++){v=0;}
return 0;
}
}

if(v==0x38)if(v==0x30)if(v<0x34)if(v==0x03)//rst s
{
crc=0;
for(i=1;i<=6;i++)crc=crc+v;
crcv();
if(hcrc==v)if(lcrc==v)
{
sy=bytecg(v)*16+bytecg(v);
s-0x30)*256]&=0x7e;
send_char_com(0X06);
for(i=0;i<180;i++){v=0;}
return 0;
}
}

//02 37 46 46 30 36 03 32 43 //SET T255
//02 37 30 32 30 36 03 30 32 //SET T2
if(v==0x37)if(v==0x30)if(v==0x36)if(v==0x03)
{
crc=0;
for(i=1;i<=6;i++)crc=crc+v;
crcv();
if(hcrc==v)if(lcrc==v)
{
sy=bytecg(v)*16+bytecg(v);
t=0x01;
send_char_com(0X06);
for(i=0;i<180;i++){v=0;}
return 0;
}
}

//02 38 46 46 30 36 03 32 43 //RST T255
//02 38 30 32 30 36 03 30 32 //RST T2
if(v==0x38)if(v==0x30)if(v==0x36)if(v==0x03)
{
crc=0;
for(i=1;i<=6;i++)crc=crc+v;
crcv();
if(hcrc==v)if(lcrc==v)
{
sy=bytecg(v)*16+bytecg(v);
t=0x00;
send_char_com(0X06);
for(i=0;i<180;i++){v=0;}
return 0;
}
}


//02 30 30 30 38 30 30 31 03 35 43 //READ X0-X7
if(v==0x30)if(v==0x30)if(v==0x30)if(v==0x38)
if(v>=0x30)if(v==0x30)if(v>=0x31)if(v==0x03)
{//02 30 30 03 36 33
crc=0;
for(i=1;i<=8;i++)crc=crc+v;
crcv();
if(hcrc==v)if(lcrc==v)
{
crc=0;
send_char_com(0X02);
dds1=0;
for(i=bytecg(v);i<bytecg(v)+bytecg(v);i++)
{
if(!(x))dds1=1;
if(!(x))dds1=dds1+2;
if(!(x))dds1=dds1+4;
if(!(x))dds1=dds1+8;
if(!(x))dds1=dds1+16;
if(!(x))dds1=dds1+32;
if(!(x))dds1=dds1+64;
if(!(x))dds1=dds1+128;
//dds1=x+x*2+x*4+x*8+x*16+x*32+x*64+x*128;
send_char_com(bytech(dds1/16));crc=crc+bytech(dds1/16);
dds0=dds1-(dds1/16)*16;
send_char_com(bytech(dds0));crc=crc+bytech(dds0);
}
crc=crc+3;
crcs();
for(i=0;i<180;i++)v=0;
return 0;
}
}

//TO:02 30 30 30 41 30 30 31 03 36 35//READ Y0-Y7
if(v==0x30)if(v==0x30)if(v==0x30)if(v==0x41)
if(v>=0x30)if(v==0x30)if(v>=0x31)if(v==0x03)
{//02 30 30 03 36 33
crc=0;
for(i=1;i<=8;i++)crc=crc+v;
crcv();
if(hcrc==v)if(lcrc==v)
{
crc=0;
send_char_com(0X02);

for(i=bytecg(v);i<bytecg(v)+bytecg(v);i++)
{
dds1=y+y*2+y*4+y*8+y*16+y*32+y*64+y*128;
send_char_com(bytech(dds1/16));crc=crc+bytech(dds1/16);
dds0=dds1-(dds1/16)*16;
send_char_com(bytech(dds0));crc=crc+bytech(dds0);
}
crc=crc+3;
crcs();
for(i=0;i<180;i++)v=0;
return 0;
}
}

//TO:02 30 30 31 30 30 30 31 03 35 35//READ M0-M7
if(v==0x30)if(v==0x30)if(v==0x31)if((v<=0x42)||(v>=0x45))if(v==0x30)if(v>=0x31)if(v==0x03)
{//02 30 30 03 36 33
crc=0;
for(i=1;i<=8;i++)crc=crc+v;
crcv();
if(hcrc==v)if(lcrc==v)
{
crc=0;
if(v<=0x42)
{
sy=(bytecg(v)*16+bytecg(v));

send_char_com(0X02);

for(i=sy;i<bytecg(v)+sy;i++)
{
dds1=m+m*2+m*4+m*8+m*16+m*32+m*64+m*128;
send_char_com(bytech(dds1/16));crc=crc+bytech(dds1/16);
dds0=dds1-(dds1/16)*16;
send_char_com(bytech(dds0));crc=crc+bytech(dds0);
}
}
else
{
sy=bytecg(v);
send_char_com(0X02);

for(i=sy;i<bytecg(v)+sy;i++)
{
dds1=m8000+m8000*2+m8000*4+m8000*8+m8000*16+m8000*32+m8000*64+m8000*128;
send_char_com(bytech(dds1/16));crc=crc+bytech(dds1/16);
dds0=dds1-(dds1/16)*16;
send_char_com(bytech(dds0));crc=crc+bytech(dds0);
}
}

crc=crc+3;
crcs();
for(i=0;i<180;i++)v=0;
return 0;
}
}
//
//02 30 30 30 30 43 30 31 03 36 37 //READ S100
//02 30 30 30 31 46 30 31 03 36 42 //READ S255
//02 30 30 30 32 30 30 31 03 35 36 //read S256

if(v==0x30)if(v==0x30)if(v==0x30)if(v<=0x37)if(v==0x30)if(v>=0x31)if(v==0x03)
{//02 30 30 03 36 33
crc=0;
for(i=1;i<=8;i++)crc=crc+v;
crcv();
if(hcrc==v)if(lcrc==v)
{
crc=0;

sy=(bytecg(v)*16+bytecg(v));

send_char_com(0X02);

for(i=sy;i<bytecg(v)+sy;i++)
{
dds1=(s&0x01)+(s&0x01)*2+(s&0x01)*4+(s&0x01)*8+(s&0x01)*16+(s&0x01)*32+(s&0x01)*64+(s&0x01)*128;
send_char_com(bytech(dds1/16));crc=crc+bytech(dds1/16);
dds0=dds1-(dds1/16)*16;
send_char_com(bytech(dds0));crc=crc+bytech(dds0);
}


crc=crc+3;
crcs();
for(i=0;i<180;i++)v=0;
return 0;
}
}
// 02 30 30 30 43 30 30 31 03 36 37 //READ T5 BIT
// 02 30 30 30 43 31 30 31 03 36 38 //READ T8 BIT
if(v==0x30)if(v==0x30)if(v==0x30)if(v>=0x43)if(v<=0x44)if(v==0x30)if(v>=0x31)if(v==0x03)
{//02 30 30 03 36 33
crc=0;
for(i=1;i<=8;i++)crc=crc+v;
crcv();
if(hcrc==v)if(lcrc==v)
{
crc=0;

sy=((v-0X43)*16+bytecg(v));
send_char_com(0X02);

for(i=sy;i<bytecg(v)+sy;i++)
{
dds1=t+t*2+t*4+t*8+t*16+t*32+t*64+t*128;
send_char_com(bytech(dds1/16));crc=crc+bytech(dds1/16);
dds0=dds1-(dds1/16)*16;
send_char_com(bytech(dds0));crc=crc+bytech(dds0);
}

crc=crc+3;
crcs();
for(i=0;i<180;i++)v=0;
return 0;
}
}

//02 30 30 31 44 46 30 31 03 37 46 //read c255 bit
if(v==0x30)if(v==0x30)if(v==0x31)if(v>=0x43)if(v<=0x44)if(v==0x30)if(v>=0x31)if(v==0x03)
{//02 30 30 03 36 33
crc=0;
for(i=1;i<=8;i++)crc=crc+v;
crcv();
if(hcrc==v)if(lcrc==v)
{
crc=0;

sy=((v-0X43)*16+bytecg(v));
send_char_com(0X02);

for(i=sy;i<bytecg(v)+sy;i++)
{
dds1=c+c*2+c*4+c*8+c*16+c*32+c*64+c*128;
send_char_com(bytech(dds1/16));crc=crc+bytech(dds1/16);
dds0=dds1-(dds1/16)*16;
send_char_com(bytech(dds0));crc=crc+bytech(dds0);
}


crc=crc+3;
crcs();
for(i=0;i<180;i++)v=0;
return 0;
}
}
//////////////////////////////////////////////////////////////////////////////


if(v==0X30)if(v==0X30)if(v==0X45)if(v==0X30)
if(v==0X32)if(v==0X30)if(v==0X32)if(v==0X03)
if(v==0X36)if(v==0X43)
{//固定通讯协议
send_char_com(0X02);
send_char_com(0X36);
send_char_com(0X32);
send_char_com(0X36);
send_char_com(0X36);
send_char_com(0X03);
send_char_com(0X44);
send_char_com(0X37);
for(i=0;i<180;i++){v=0;}
return 0;
}
if(v==0X45)if(v==0X30)if(v==0X30)if(v==0X30)
if(v==0X31)if(v==0X43)if(v==0X30)if(v==0X30)
if(v==0X31)if(v==0X03)if(v==0X44)if(v==0X44)
{//固定通讯协议
//PC : 02 45 30 30 30 31 43 30 30 31 03 44 44 // 查询PLC 当前状态:暂停\运行
//PLC: 02 30 41 03 37 34 // '0A'PLC 暂停;'09'PLC 运行

if(down_lad==0)
{
send_char_com(0X02);
send_char_com(0X30);
send_char_com(0X39);
send_char_com(0X03);
send_char_com(0X36);
send_char_com(0X43);
}
else
{
send_char_com(0X02);
send_char_com(0X30);
send_char_com(0X41);
send_char_com(0X03);
send_char_com(0X37);
send_char_com(0X34);
}
for(i=0;i<180;i++)v=0;
return 0;
}

if(v==0X45)if(v==0X30)if(v==0X31)if(v==0X38)
if(v==0X30)if(v==0X30)if(v==0X30)if(v==0X34)
if(v==0X30)if(v==0X03)if(v==0X44)if(v==0X35)
{//固定通讯协议

send_char_com(0X02);
send_char_com(0X30);
send_char_com(0X38);
send_char_com(0X30);
send_char_com(0X30);
send_char_com(0X44);
send_char_com(0X39);
send_char_com(0X31);
send_char_com(0X44);
for(j=1;j<=8;j++)
{send_char_com(0X30);}
for(j=1;j<=40;j++)
{
send_char_com(0X32);
send_char_com(0X30);
}

send_char_com(0X46);
send_char_com(0X34);
send_char_com(0X30);
send_char_com(0X39);
send_char_com(0X46);
send_char_com(0X46);
send_char_com(0X30);

send_char_com(0X42);
send_char_com(0X46);
send_char_com(0X34);
send_char_com(0X30);
send_char_com(0X31);
send_char_com(0X45);
send_char_com(0X37);

send_char_com(0X30);
send_char_com(0X33);
send_char_com(0X36);
send_char_com(0X34);
send_char_com(0X30);
send_char_com(0X45);
send_char_com(0X43);

send_char_com(0X37);
send_char_com(0X30);
send_char_com(0X45);
send_char_com(0X44);
send_char_com(0X43);
send_char_com(0X30);
send_char_com(0X45);

send_char_com(0X46);
send_char_com(0X46);
send_char_com(0X30);
send_char_com(0X45);
send_char_com(0X03);
send_char_com(0X46);
send_char_com(0X33);

for(i=0;i<180;i++)v=0;
return 0;
}
if(v==0X45)if(v==0X30)if(v==0X31)if(v==0X38)
if(v==0X30)if(v==0X34)if(v==0X30)if(v==0X31)
if(v==0X43)if(v==0X03)if(v==0X45)if(v==0X39)
{//固定通讯协议
send_char_com(0X02);
send_char_com(0X39);
send_char_com(0X30);
send_char_com(0X30);
send_char_com(0X31);
send_char_com(0X46);
send_char_com(0X45);
send_char_com(0X30);
send_char_com(0X33);

for(j=1;j<=48;j++)
{send_char_com(0X30);}
send_char_com(0X03);
send_char_com(0X42);
send_char_com(0X42);
for(i=0;i<180;i++)v=0;
return 0;
}

////GX ADD

//02 45 30 30 30 45 30 30 34 30 03 45 31
if(v==0X45)if(v==0X30)if(v==0X30)if(v==0X30)
if(v==0X45)if(v==0X30)if(v==0X30)if(v==0X34)
if(v==0X30)if(v==0X03)if(v==0X45)if(v==0X31)
{//固定通讯协议
send_char_com(0X02);

send_char_com(0X43);
send_char_com(0X38);
send_char_com(0X30);
send_char_com(0X30);

send_char_com(0X46);
send_char_com(0X36);
send_char_com(0X35);
send_char_com(0X45);

send_char_com(0X30);
send_char_com(0X38);
send_char_com(0X30);
send_char_com(0X30);
send_char_com(0X31);
for(j=1;j<=28;j++)
{send_char_com(0X30);}

send_char_com(0X41);
send_char_com(0X30);
send_char_com(0X30);
send_char_com(0X31);

send_char_com(0X34);
send_char_com(0X30);
send_char_com(0X30);
send_char_com(0X30);
send_char_com(0X41);

for(j=1;j<=76;j++)
{
send_char_com(0X30);
}


send_char_com(0X30);
send_char_com(0X30);
send_char_com(0X03);
send_char_com(0X38);
send_char_com(0X34);

for(i=0;i<180;i++)v=0;
return 0;
}
//02 45 30 30 30 45 34 30 34 30 03 45 35
if(v==0X45)if(v==0X30)if(v==0X30)if(v==0X30)
if(v==0X45)if(v==0X34)if(v==0X30)if(v==0X34)
if(v==0X30)if(v==0X03)if(v==0X45)if(v==0X35)
{//固定通讯协议
send_char_com(0X02);

for(j=1;j<=128;j++)
{send_char_com(0X30);}

send_char_com(0X03);
send_char_com(0X30);
send_char_com(0X33);

for(i=0;i<180;i++)v=0;
return 0;
}

//02 45 30 30 30 45 38 30 34 30 03 45 39
if(v==0X45)if(v==0X30)if(v==0X30)if(v==0X30)
if(v==0X45)if(v==0X38)if(v==0X30)if(v==0X34)
if(v==0X30)if(v==0X03)if(v==0X45)if(v==0X39)
{//固定通讯协议
send_char_com(0X02);

for(j=1;j<=128;j++)
{send_char_com(0X30);}

send_char_com(0X03);
send_char_com(0X30);
send_char_com(0X33);

for(i=0;i<180;i++)v=0;
return 0;
}

//02 45 30 30 30 45 43 30 34 30 03 46 34
if(v==0X45)if(v==0X30)if(v==0X30)if(v==0X30)
if(v==0X45)if(v==0X43)if(v==0X30)if(v==0X34)
if(v==0X30)if(v==0X03)if(v==0X46)if(v==0X34)
{//固定通讯协议
send_char_com(0X02);

for(j=1;j<=20;j++)
{send_char_com(0X30);}

send_char_com(0X46);
send_char_com(0X36);
send_char_com(0X35);
send_char_com(0X45);
send_char_com(0X30);
send_char_com(0X38);

for(j=1;j<=102;j++)
{send_char_com(0X30);}

send_char_com(0X03);
send_char_com(0X34);
send_char_com(0X31);

for(i=0;i<180;i++)v=0;
return 0;
}


//////



//SEND:02 45 30 31 38 30 30 38 30 38 03 45 31
//ACK: 02 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 03 31 33
if(v==0X45)if(v==0X30)if(v==0X31)if(v==0X38)
if(v==0X30)if(v==0X30)if(v==0X38)if(v==0X30)
if(v==0X38)if(v==0X03)if(v==0X45)if(v==0X31)
{send_char_com(0X02);
//固定通讯协议 读取密码
crc=0;
for(j=0;j<=7;j++)
{
send_char_com(ReSecret(j*2));crc=crc+ReSecret(j*2);//前8组是密码,空密码为32 30,33 31 为1 34 31为A
send_char_com(ReSecret(j*2+1));crc=crc+ReSecret(j*2+1);
}

crc=crc+3;
crcs();
for(i=0;i<180;i++)v=0;
return 0;
}

if(v==0X45)if(v==0X30)if(v==0X31)if(v==0X38)
if(v==0X30)if(v==0X30)if(v==0X30)if(v==0X32)
if(v==0X45)if(v==0X03)if(v==0X45)if(v==0X38)
{//固定通讯协议 读取密码
send_char_com(0X02);
crc=0;
send_char_com(0X30);crc+=0x30;
send_char_com(0X38);crc+=0x38;
send_char_com(0X30);crc+=0x30;
send_char_com(0X30);crc+=0x30;
send_char_com(0X43);crc+=0x43;
send_char_com(0X35);crc+=0x35;
send_char_com(0X44);crc+=0x44;
send_char_com(0X43);crc+=0x43;
for(j=1;j<=8;j++)
{send_char_com(0X30);crc+=0x30;}
for(j=0;j<=7;j++)
{
send_char_com(ReSecret(j*2));crc+=ReSecret(j*2);//前8组是密码,空密码为32 30,33 31 为1 34 31为A
send_char_com(ReSecret(j*2+1));crc+=ReSecret(j*2+1);
}
for(j=1;j<=30;j++)
{
send_char_com(0X32);crc+=0x32;
send_char_com(0X30);crc+=0x30;
}

crc=crc+3;
crcs();
for(i=0;i<180;i++)v=0;
return 0;
}

//写密码 ABCDEF12 02 45 31 31 38
// 30 30 38 30 38
// 34 31 34 32 34 33 34 34 34 35 34 36 33 31 33 32 03 31 38
if(v==0X45)if(v==0X31)if(v==0X31)if(v==0X38)
if(v==0X30)if(v==0X30)if(v==0X38)if(v==0X30)
if(v==0X38)if(v==0X03)
{
crc=0;
for(i=1;i<=26;i++)crc=crc+v;
crcv();
if(hcrc==v)if(lcrc==v)
{
//for(i=0;i<16;i++)
// data=v;//先读出整页数据
//如果密码等于12345678
if(ReSecret(0)==0x33)if(ReSecret(1)==0x31)
if(ReSecret(2)==0x33)if(ReSecret(3)==0x32)
if(ReSecret(4)==0x33)if(ReSecret(5)==0x33)
if(ReSecret(6)==0x33)if(ReSecret(7)==0x34)
if(ReSecret(8)==0x33)if(ReSecret(9)==0x35)
if(ReSecret(10)==0x33)if(ReSecret(11)==0x36)
if(ReSecret(12)==0x33)if(ReSecret(13)==0x37)
if(ReSecret(14)==0x33)if(ReSecret(15)==0x38)
{

}

// 写新密码

}
send_char_com(0X06);
for(i=0;i<180;i++)v=0;
return 0;
}

//读取PLC存储空间大小 PC : 02 45 30 30 30 45 43 43 30 32 03 30 35
// PLC : 02 30 38 30 30 03 43 42
if(v==0X45)if(v==0X30)if(v==0X30)if(v==0X30)
if(v==0X45)if(v==0X43)if(v==0X43)if(v==0X30)if(v==0X32)if(v==0X03)if(v==0X30)if(v==0X35)
{send_char_com(0X02);
send_char_com(0X30);
send_char_com(0X38);
send_char_com(0X30);
send_char_com(0X30);
send_char_com(0X03);
send_char_com(0X43);
send_char_com(0X42);
for(i=0;i<180;i++)v=0;
return 0;
}

//写8000步固定格式
//02 45 31 31 38 30 30 30 32 45 30 38 30 30 32 35 36 44
//30 30 30 30 30 30 30 30 32 30 32 30 32 30 32 30 32 30
//32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30
//32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30
//32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30 32 30
//32 30 32 30 32 30 32 30 32 30 32 30 03 39 45
if(v==0X45)if(v==0X31)if(v==0X31)if(v==0X38)
if(v==0X30)if(v==0X30)if(v==0X30)if(v==0X32)
if(v==0X45)if(v==0X30)if(v==0X38)if(v==0X30)
if(v==0X30)//if(v==0X32)if(v==0X35)if(v==0X36)
//if(v==0X44)
if(v==0X30)if(v==0X30)if(v==0X30)
{ send_char_com(0X06);
for(i=0;i<180;i++)v=0;
return 0;
}
//写8000步固定格式
// 02 45 31 31 38
// 30 32 45 32
// 45 32 30 32
// 30 46 34 30
// 39 46 46 30
// 42 46 34 30
// 31 45 37 30
// 33 36 34 30
// 45 43 37 30
// 45 44 43 30
// 45 46 46 30
// 45 39 30 30
// 31 46 45 30 33
// 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 03 45 32
if(v==0X45)if(v==0X31)if(v==0X31)if(v==0X38)
if(v==0X30)if(v==0X32)if(v==0X45)if(v==0X32)
if(v==0X45)if(v==0X32)if(v==0X30)if(v==0X32)
if(v==0X30)if(v==0X46)if(v==0X34)if(v==0X30)
if(v==0X39)if(v==0X46)if(v==0X46)if(v==0X30)
{send_char_com(0X06);
for(i=0;i<180;i++)v=0;
return 0;
}

if(v==0X45)if(v==0X30)if(v==0X31)if(v==0X38)
if(v==0X30)if(v==0X32)if(v==0X45)if(v==0X32)
if(v==0X45)if(v==0X03)if(v==0X46)if(v==0X46)
{//固定通讯协议
send_char_com(0X02);
send_char_com(0X32);
send_char_com(0X30);
send_char_com(0X32);
send_char_com(0X30);
send_char_com(0X46);
send_char_com(0X34);

send_char_com(0X30);
send_char_com(0X39);
send_char_com(0X46);
send_char_com(0X46);
send_char_com(0X30);
send_char_com(0X42);
send_char_com(0X46);
send_char_com(0X34);

send_char_com(0X30);
send_char_com(0X31);
send_char_com(0X45);
send_char_com(0X37);
send_char_com(0X30);
send_char_com(0X33);
send_char_com(0X36);
send_char_com(0X34);

send_char_com(0X30);
send_char_com(0X45);
send_char_com(0X43);
send_char_com(0X37);
send_char_com(0X30);
send_char_com(0X45);
send_char_com(0X44);
send_char_com(0X43);

send_char_com(0X30);
send_char_com(0X45);
send_char_com(0X46);
send_char_com(0X46);
send_char_com(0X30);
send_char_com(0X45);
send_char_com(0X39);
send_char_com(0X30);

send_char_com(0X30);
send_char_com(0X31);
send_char_com(0X46);
send_char_com(0X45);
send_char_com(0X30);
send_char_com(0X33);

for(j=1;j<=48;j++)
{send_char_com(0X30);}
send_char_com(0X03);
send_char_com(0X45);
send_char_com(0X35);
for(i=0;i<180;i++)v=0;
return 0;
}

if(v==0X45)if(v==0X30)if(v==0X30)if(v==0X30)
if(v==0X45)if(v==0X30)if(v==0X36)if(v==0X30)
if(v==0X32)if(v==0X03)if(v==0X45)if(v==0X35)
{//固定通讯协议
send_char_com(0X02);
send_char_com(0X31);
send_char_com(0X30);
send_char_com(0X30);
send_char_com(0X30);
send_char_com(0X03);
send_char_com(0X43);
send_char_com(0X34);
for(i=0;i<180;i++)v=0;
return 0;
}

//read code 
if(v==0X45)if(v==0X30)if(v==0X31)if(v>=0X38)
if(v==0X43)if(v==0X03)
{
crc=0;
for(i=1;i<=10;i++)crc=crc+v;
crcv();
if(hcrc==v)if(lcrc==v)
{
if(v<=0x39)v=v-0x38;//V基地址是0X38
if(v>=0x41)v=v-0x41+0X02;
if(v<=0x39)v=v-0x30;
if(v>=0x41)v=v-0x41+0X0A;
if(v<=0x39)v=v-0x30;
if(v>=0x41)v=v-0x41+0X0A;
if(v<=0x39)v=v-0x30;
if(v>=0x41)v=v-0x41+0X0A;
if(v<=0x39)v=v-0x30;
if(v>=0x41)v=v-0x41+0X0A;
ad2=v;
ad1=v;
ad0=v;//基地址是V=38 V=30 V=35
address1=(ad2*256+ad1*16+ad0-5)/4;//得到第几个程序单元,每32步为一个单元,每4个字节表示一步
datalong=(v*16+v)*2;//要读取的字节数,即步数的两倍

send_char_com(0X02);
crc=0;

for(j=0;j<=datalong-1;j++)
{
if(address1<=61)//8000˙ 250个单元
{
/*
if(ReSecret(0)==0x33)if(ReSecret(1)==0x31)
if(ReSecret(2)==0x33)if(ReSecret(3)==0x32)
if(ReSecret(4)==0x33)if(ReSecret(5)==0x33)
if(ReSecret(6)==0x33)if(ReSecret(7)==0x34)
if(ReSecret(8)==0x33)if(ReSecret(9)==0x35)
if(ReSecret(10)==0x33)if(ReSecret(11)==0x36)
if(ReSecret(12)==0x33)if(ReSecret(13)==0x37)
if(ReSecret(14)==0x33)if(ReSecret(15)==0x38)
{
send_char_com(0x46);
crc=crc+0x46;
goto NORA;
}
*/
send_char_com(ReData(address1*128+j)); //读AT24C256
crc=crc+ReData(address1*128+j); //crc校验码 从02后面一个字节开始累加到03,和的低8位再分成高4位和低4位,即03后面的两个字节
//三菱格式码 0 --30 1--31 2--32 3--33 4--34 5--35 6--36 7--37 8--38
// 9--39 A--41 B--42 C--43 D--44 E--45 F--46

NORA:_Nop();

}
else//高于8000步˙返回 nop=46 46 46 4
{
send_char_com(0x46);
crc=crc+0x46;
}

}
crc=crc+3;
crcs();
for(i=0;i<180;i++)v=0;
return 0;
}
}
if(v==0X45)if(v==0X37)if(v==0X37)if(v==0X36)
if(v==0X30)if(v==0X45)if(v==0X03)if(v==0X36)
if(v==0X31)
{ send_char_com(0X06);//固定通讯码
for(i=0;i<180;i++)v=0;
return 0;
}

//SEND: 02 45 38 37 36 30 45 03 36 32 (写结束标志 遇到这个协议,PLC才保存指令到存储
//器)
if(v==0X45)if(v==0X38)if(v==0X37)if(v==0X36)
if(v==0X30)if(v==0X45)if(v==0X03)if(v==0X36)
if(v==0X32)
{
send_char_com(0X06);//固定通讯码
for(i=0;i<180;i++)v=0;
return 0;
}

//write code
if(v==0X45)if(v==0X31)if(v==0X31)if(v==0X43)
if(v!=0)
{if(v<=0x39)v8=v-0x30;
if(v>=0x41)v8=v-0x41+0X0A;
if(v<=0x39)v9=v-0x30;
if(v>=0x41)v9=v-0x41+0X0A;
Q=v8<<4;
Q=Q+v9;
Q=Q<<1;//(v8*4+v9)*2为要写字节数
if(v==0x03)
{
crc=0;
for(i=1;i<=Q+10;i++)crc=crc+v;
crcv();
if(hcrc==v)if(lcrc==v)
{
if(v!=0x00)
{if(v<=0x39)v=v-0x38;
if(v>=0x41)v=v-0x41+0X02;
if(v<=0x39)v=v-0x30;
if(v>=0x41)v=v-0x41+0X0A;
if(v<=0x39)v=v-0x30;
if(v>=0x41)v=v-0x41+0X0A;
ad2=v;
ad1=v;
ad0=v;
address1=(ad2*256+ad1*16+ad0-5)/4;//同read code部分


if(address1<=61)
WrData(v,address1,Q);//写flash

send_char_com(0X06);

for(i=0;i<180;i++)v=0;
return 0;
}
}
}
}
if(v==0X42)if(v==0X03)if(v==0X34)if(v==0X35)
{
send_char_com(0X06);//固定通讯码
for(i=0;i<180;i++)v=0;
return 0;
}
return 0;
}


main()
{ unsigned char j;unsigned int i;


vk=0;

EA = 1;
ET0 = 1;
TMOD = 1;
TL0 = 0x00;
TH0 = 0xff;
TR0 = 1;


TMOD|=0x21;
SCON=0x50;
//TH1=256-22118400/9600/(12*32);
TH1=256-22118400/9600/(12*32);
TL1=TH1;//9600
TR1=1;
ES=1;





WDT_CONTR = 0x3C;


P4SW=0XFF;

/*
#if use_ad
#if STC4
P1ASF = ADCHL; //0000,0010, P1.1 ó?
ADC_CONTR |= 0x80; //1000,0000 A/D ??
#endif
#if STC1
ADC_CONTR1 |= 0x80; //1000,0000 A/D ??
P1M0|=ADCHL;
P1M1|=ADCHL;
#endif
#endif

if((DAC0)||(DAC1))
{
#if STC4
AUXR1=0x40;
#endif
CMOD=0X02;
CL=0;
CH=0;
#if DAC0
CCAPM0=0X42;
#endif
#if DAC1
CCAPM1=0X42;
#endif

#if DAC2
CCAPM2=0X42;
#endif
#if DAC3
CCAPM3=0X42;
#endif

CR=1;

#if DAC0
CCAP0H=255-d;
CCAP0L=255-d;
#endif
#if DAC1
CCAP1H=255-d;
CCAP1L=255-d;
#endif

#if DAC2
CCAP2H=255-d;
CCAP2L=255-d;
#endif
#if DAC3
CCAP3H=255-d;
CCAP3L=255-d;
#endif
*/



/*
if(PCON&0X10)PCON=PCON&0XEF;//PCON.4=1 ONLY WHEN POWER UP"
else
{
#if use_y0
if(y&0x01)Y0=0;else Y0=1;
#endif

#if use_y1
if(y&0x02)Y1=0;else Y1=1;
#endif

#if use_y2
if(y&0x04)Y2=0;else Y2=1;
#endif

#if use_y3
if(y&0x08)Y3=0;else Y3=1;
#endif

#if use_y4
if(y&0x10)Y4=0;else Y4=1;
#endif

#if use_y5
if(y&0x20)Y5=0;else Y5=1;
#endif

#if use_y6
if(y&0x40)Y6=0;else Y6=1;
#endif

#if use_y7
if(y&0x80)Y7=0;else Y7=1;
#endif

#if use_y10
if(y&0x01)Y10=0;else Y10=1;
#endif

#if use_y11
if(y&0x02)Y11=0;else Y11=1;
#endif

#if use_y12
if(y&0x04)Y12=0;else Y12=1;
#endif

#if use_y13
if(y&0x08)Y13=0;else Y13=1;
#endif

#if use_y14
if(y&0x10)Y14=0;else Y14=1;
#endif

#if use_y15
if(y&0x20)Y15=0;else Y15=1;
#endif

#if use_y16
if(y&0x40)Y16=0;else Y16=1;
#endif

#if use_y17
if(y&0x80)Y17=0;else Y17=1;
#endif

#if use_y20
if(y&0x01)Y20=0;else Y20=1;
#endif

#if use_y21
if(y&0x02)Y21=0;else Y21=1;
#endif

#if use_y22
if(y&0x04)Y22=0;else Y22=1;
#endif

#if use_y23
if(y&0x08)Y23=0;else Y23=1;
#endif

#if use_y24
if(y&0x10)Y24=0;else Y24=1;
#endif

#if use_y25
if(y&0x20)Y25=0;else Y25=1;
#endif

#if use_y26
if(y&0x40)Y26=0;else Y26=1;
#endif

#if use_y27
if(y&0x80)Y27=0;else Y27=1;
#endif

#if use_y30
if(y&0x01)Y30=0;else Y30=1;
#endif

#if use_y31
if(y&0x02)Y31=0;else Y31=1;
#endif

#if use_y32
if(y&0x04)Y32=0;else Y32=1;
#endif

#if use_y33
if(y&0x08)Y33=0;else Y33=1;
#endif

#if use_y34
if(y&0x10)Y34=0;else Y34=1;
#endif

#if use_y35
if(y&0x20)Y35=0;else Y35=1;
#endif

#if use_y36
if(y&0x40)Y36=0;else Y36=1;
#endif

#if use_y37
if(y&0x80)Y37=0;else Y37=1;
#endif

#if use_y40
if(y&0x01)Y40=0;else Y40=1;
#endif

#if use_y41
if(y&0x02)Y41=0;else Y41=1;
#endif

#if use_y42
if(y&0x04)Y42=0;else Y42=1;
#endif

#if use_y43
if(y&0x08)Y43=0;else Y43=1;
#endif
#if use_y44
if(y&0x10)Y44=0;else Y44=1;
#endif

#if use_y45
if(y&0x20)Y45=0;else Y45=1;
#endif

#if use_y46
if(y&0x40)Y46=0;else Y46=1;
#endif

#if use_y47
if(y&0x80)Y47=0;else Y47=1;
#endif
goto WDTRESET;
}
*/


P0=0XFF;P1=0XFF;P2=0XFF;P3=0XFF;

P4=0XFF;
ST_ScanV=0;

for(j=0;j<=1;j++)
{y=0;ytemp=0;}
/*
for(j=0;j<=23;j++)
{xfir=0xff;}

for(j=0;j<=4;j++)
{c=0;cflag=0;cout=0;}
for(j=0;j<=24;j++)
{t=0;to=0;}
for(j=0;j<=40;j++)
{tc=0;}
for(j=0;j<=79;j++)
{d=0;}
for(j=0;j<=40;j++)
{ct=0;}
tmr=0;
for(j=0;j<=31;j++)
{m=0x00;}
for(j=0;j<=11;j++)
{s=0;}

write_m(8000,1);
write_m(8002,1);
*/

//for(i=0;i<=255;i++)
// {fuc_b=FNO;fuc_f1=FNO;fuc_f2=FNO;fuc_f3=FNO;}

/*
fuc_b=FSECFF;
fuc_f2=FANB;
fuc_f2=FORB;
fuc_f2=FMPS;
fuc_f2=FMPP;
fuc_f2=FMRD;
fuc_f2=FINV;

fuc_b=FLDM28;
fuc_b=FANDM48;
fuc_b=FORM68;
fuc_b=FLDIM38;
fuc_b=FANIM58;
fuc_b=FORIM78;


fuc_b=FLDT;
fuc_b=FANDT;
fuc_b=FORT;
fuc_b=FLDIT;
fuc_b=FANIT;
fuc_b=FORIT;

fuc_b=FLDC;
fuc_b=FANDC;
fuc_b=FORC;
fuc_b=FLDIC;
fuc_b=FANIC;
fuc_b=FORIC;

fuc_b=FLDX;
fuc_b=FANDX;
fuc_b=FORX;
fuc_b=FLDIX;
fuc_b=FANIX;
fuc_b=FORIX;

fuc_b=FLDY;
fuc_b=FANDY;
fuc_b=FORY;
fuc_b=FLDIY;
fuc_b=FANIY;
fuc_b=FORIY;

fuc_b=FSETY;
fuc_b=FRSTY;
fuc_b=FSETM8;
fuc_b=FRSTM8;
*/
/*
fuc_b=FSEC00;
fuc_b=FSEC00;
fuc_b=FSEC00;
fuc_f1=FSETM8000;
fuc_f1=FRSTM8000;
*/
/*
fuc_f1=FTRD08;
fuc_f1=FTRD09;

fuc_f2=FPLSY;
fuc_f2=FPLSM8;
fuc_f2=FPLSM9;
fuc_f2=FPLSMA;
fuc_f2=FPLSMB;
fuc_f2=FPLSMC;
fuc_f2=FPLSMD;

fuc_f3=FPLFY;
fuc_f3=FPLFM8;
fuc_f3=FPLFM9;
fuc_f3=FPLFMA;
fuc_f3=FPLFMB;
fuc_f3=FPLFMC;
fuc_f3=FPLFMD;

fuc_f1=FTRD0A;
fuc_f1=FMCY;
fuc_f1=FMCM8;
fuc_f1=FMCM9;
fuc_f1=FMCMA;
fuc_f1=FMCMB;
fuc_f1=FMCMC;
fuc_f1=FMCMD;

fuc_f1=FMCR;

fuc_f1=FSFTL;
fuc_f1=FSFTR;

fuc_b=FOUTY;
fuc_b=FOUTM8;
fuc_b=FOUTM9;
fuc_b=FOUTMA;
fuc_b=FOUTMB;
fuc_b=FOUTMC;
fuc_b=FOUTMD;
fuc_f1=FOUTMF;

fuc_b=FOUTT;
fuc_b=FOUTC;

fuc_f1=FRSTCT;
fuc_f1=FZRST;
fuc_f1=FALT;

fuc_b=FSEC00;
fuc_f1=FLDP;
fuc_f1=FANDP;
fuc_f1=FLDF;
fuc_f1=FANDF;
fuc_f1=FORP;
fuc_f1=FORF;

fuc_f1=FMOV;
fuc_f1=FDMOV;
fuc_f1=FRSTD;
fuc_f1=FINC;
fuc_f1=FDINC;
fuc_f1=FDEC;
fuc_f1=FDDEC;

fuc_f1=FADD;
fuc_f1=FSUB;
fuc_f1=FMUL;
fuc_f1=FDIV;
fuc_f1=FCMP;

fuc_f1=FDHSCS;
fuc_f1=FDHSCS;

fuc_f1=FDADD;
fuc_f1=FDSUB;
fuc_f1=FDMUL;
fuc_f1=FDDIV;
fuc_f1=FDCMP;

fuc_f1=FLD0;//=
fuc_f1=FLDD1;//=
fuc_f1=FLD2;//>
fuc_f1=FLDD3;//>
fuc_f1=FLD4;//<
fuc_f1=FLDD5;//<
fuc_f1=FLD8;//<>
fuc_f1=FLDD9;//<>
fuc_f1=FLD_C;//>=
fuc_f1=FLDD_D;//>=
fuc_f1=FLD_A;//<=
fuc_f1=FLDD_B;//<=

fuc_f1=FAND0;//=
fuc_f1=FANDD1;//=
fuc_f1=FAND2;//>
fuc_f1=FANDD3;//>
fuc_f1=FAND4;//<
fuc_f1=FANDD5;//<
fuc_f1=FAND8;//<>
fuc_f1=FANDD9;//<>
fuc_f1=FAND_C;//>=
fuc_f1=FANDD_D;//>=
fuc_f1=FAND_A;//<=
fuc_f1=FANDD_B;//<=

fuc_f1=FOR0;//=
fuc_f1=FORD1;//=
fuc_f1=FOR2;//>
fuc_f1=FORD3;//>
fuc_f1=FOR4;//<
fuc_f1=FORD5;//<
fuc_f1=FOR8;//<>
fuc_f1=FORD9;//<>
fuc_f1=FOR_C;//>=
fuc_f1=FORD_D;//>=
fuc_f1=FOR_A;//<=
fuc_f1=FORD_B;//<=

fuc_f1=F_PLSY;
fuc_f1=F_DPLSY;
fuc_f1=F_ZRN;
fuc_f1=F_DZRN;
fuc_f1=F_PLSR;
fuc_f1=F_DPLSR;
fuc_f1=FEND;
fuc_f1=FEND;

fuc_b=FP;
fuc_f1=FCJ;
fuc_f1=FCALL;
fuc_f1=FSRET;

fuc_b=FSTL0;
fuc_b=FSTL1;
fuc_b=FSTL2;
fuc_b=FSTL3;

fuc_b=FRET;

fuc_f1=FSETS;
fuc_f1=FRSTS;
fuc_f1=FOUTS;

fuc_b=FLDS0;
fuc_b=FANDS0;
fuc_b=FORS0;
fuc_b=FLDIS0;
fuc_b=FANIS0;
fuc_b=FORIS0;

fuc_b=FLDS1;
fuc_b=FANDS1;
fuc_b=FORS1;
fuc_b=FLDIS1;
fuc_b=FANIS1;
fuc_b=FORIS1;

fuc_b=FLDS2;
fuc_b=FANDS2;
fuc_b=FORS2;
fuc_b=FLDIS2;
fuc_b=FANIS2;
fuc_b=FORIS2;

fuc_b=FLDS3;
fuc_b=FANDS3;
fuc_b=FORS3;
fuc_b=FLDIS3;
fuc_b=FANIS3;
fuc_b=FORIS3;

fuc_f1=FSPD;

fuc_f1=FZCP;
fuc_f1=FDZCP;
fuc_f1=FBCD;
fuc_f1=FBIN;
fuc_f1=FDBIN;
fuc_f1=FWAND;
fuc_f1=FDAND;
fuc_f1=FWOR;
fuc_f1=FDOR;

fuc_f2=FWXOR;
fuc_f2=FDXOR;

fuc_f1=FDECO;
fuc_f1=FENCO;

fuc_f1=FREF;
fuc_f1=FPWM;
fuc_f1=FRAMP;
fuc_f1=FPLSV;
fuc_f1=FDRVI;

fuc_f1=FDRVI;

fuc_f1=FTCMP;
fuc_f1=FTZCP;

fuc_f2=FTADD;
fuc_f2=FTSUB;

fuc_f1=FTRD;
fuc_f1=FTWR;

fuc_f2=FHOUR;
*/
ci=0; calli=0;pust=0; xmcu=0;
snum=50;
s=0xff;
tus=0;tscok=0;plscnt=0;pusj=0;
mcnum=0;
mpsi=0;
vk=1;

WDTRESET:
isp_contr=0x00;
isp_contr=isp_contr|0x81;
isp_cmd=0x01;



while (1)
{
start=0;
STARTRUN:

if(mtmr<=5)
write_m(8011,0);
else
write_m(8011,1);

if(mtmr>=10)//0.01S
{mtmr=0;mtmr1++;

if(mtmr1<=5)write_m(8012,0);
else write_m(8012,1);

}

if(mtmr1>=10)//0.1S
{mtmr1=0;mtmr2++;
if(mtmr2<=5)write_m(8013,0);
else write_m(8013,1);
}

if(mtmr2>=10)//1s
{mtmr2=0;mtmr3++;

if(mtmr3<=30)write_m(8014,0);
else write_m(8014,0);

if(mtmr3>=60)mtmr3=0;
}


if(xmcu==0)
{
for(i=0;i<=15;i++)
if(xfir&0x0F)write_x(i,1);
else
write_x(i,0);
}
else
xmcu--;

if(ST_ScanV){ST_ScanV=0;
scan();
}


WDT_CONTR = 0x3C;

if(down_lad==0)
for(i=0;i<4000;i=i+2)
{ //WDT_CONTR = 0x3C;
if(down_lad==1)
{tscok=0;
goto STARTRUN;
}

j=(*fuc_b)(i);

if(j<253)
{
i=i+j;
}
else
{ if(j==255)goto STARTRUN;
if(j==254)if(tscok==1)
{ i=i+2;
while(i<4000)
{if(lad(i+1)>=0xF0)if(lad(i+1)<=0xF3){i=i-2;break;}
if(lad(i+1)==0xF7){i=i-2;break;}
i=i+2;
}
}
if(j==253)
{
if(ci>=0)
if(ci<4000){i=ci;ci=0;}
if(i==0)i=3998;
else
if(i>=2)i=i-2;
}
}

for(j=0;j<mcnum;j++)
if(mcbit==0)mki=0;

}//for

start=1;

write_m(8002,0);
tscok=1;
/*
if(x)xflag_79=1;
else
xflag_79=0;

if(x)xflag_78=1;
else
xflag_78=0;

m8000flag_13=m8000;
*/

if(ytemp&0x01)Y0=0;else Y0=1;
if(ytemp&0x02)Y1=0;else Y1=1;
if(ytemp&0x04)Y2=0;else Y2=1;
if(ytemp&0x08)Y3=0;else Y3=1;
if(ytemp&0x10)Y4=0;else Y4=1;
if(ytemp&0x20)Y5=0;else Y5=1;
if(ytemp&0x40)Y6=0;else Y6=1;
if(ytemp&0x80)Y7=0;else Y7=1;

y=ytemp;
y=ytemp;


goto STARTRUN;

}

}

moyuker 发表于 2011-11-28 22:46:04

支持一下。

三菱FX1N PLC下载通信协议说明
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3253180

hefq 发表于 2011-11-29 00:35:22

支持

zouge888 发表于 2011-12-15 15:21:48

Build target 'Target 1'
compiling 123.c...
123.C(417): warning C280: 'i': unreferenced local variable
123.C(456): warning C280: 'val': unreferenced local variable
123.C(457): warning C280: 'j': unreferenced local variable
123.C(482): warning C280: 'i': unreferenced local variable
123.C(771): warning C280: 'i': unreferenced local variable
123.C(776): warning C280: 'i': unreferenced local variable
123.C(784): warning C280: 'i': unreferenced local variable
123.C(791): warning C280: 'i': unreferenced local variable
123.C(796): warning C280: 'i': unreferenced local variable
123.C(802): warning C280: 'i': unreferenced local variable
123.C(809): warning C280: 'i': unreferenced local variable
123.C(1133): warning C280: 'j': unreferenced local variable
123.C(2443): warning C280: 'NORA': unreferenced label
123.C(3094): warning C280: 'WDTRESET': unreferenced label
123.C(3224): error C249: 'DATA': SEGMENT TOO LARGE
Target not created
我怎么一编译不能生成HEX?楼出指点一下初级生

moxiaoxiong 发表于 2012-12-6 19:45:38

话说...无图无真相!还能有点其他的么

ljt80158015 发表于 2016-6-8 17:32:18

FX1N下载协议 与 FX2N下载协议不一样的吧?


pengtaoABC 发表于 2016-6-8 18:48:36

哈哈我调通了FX-3U的PLC

能控制24个Y点

http://www.amobbs.com/thread-5652236-1-1.html



有兴趣的可以自己测试下


当然啦 你得有PLC

easier 发表于 2016-6-9 09:39:30

唔知楼主為甚麽貼出這段程式,根本編釋不了。过百項人為錯誤!
页: [1]
查看完整版本: :三菱FX1N下载协议的51代码例子在STC12C5A56S2上调试通过