📄 06.c
字号:
void downloadparameter(void)
{
unsigned char j=0;
unsigned short m;
unsigned char *p;
unsigned short adres;
adres=(rxbuf[2]<<8)+rxbuf[3]-40000;
adres=adres/100;
if(rxbuf[5]>=128)
{
answernum=0x02;
exceptionalanswer();
}
else
{
switch(adres)
{
case 20://系统设置1参数下载
flag.flag0620=1;
p=(unsigned char *)&systemsetup;
//i=2*rxbuf[4];
for(m=2*(rxbuf[3]-0x10);m<2*(rxbuf[3]-0x10+rxbuf[5]);m=m+2)
{
*(p+m)=rxbuf[7+j];
*(p+m+1)=rxbuf[6+j];
j=j+2;
}
flag.system=1;
break;
case 5://定值通道参数下载
if(rxbuf[3]>=0x3e)
{
flag.flag06511=1;
p=(unsigned char *)&Fixedvalue.alarm[0].logicalmode;
for(m=2*(rxbuf[3]-0x3e);m<2*(rxbuf[3]-0x3e+rxbuf[5]);m=m+2)
{
*(p+m)=rxbuf[7+j];
*(p+m+1)=rxbuf[6+j];
j=j+2;
}
}
else
{ flag.flag06501=1;
p=(unsigned char *)&rel;
for(m=2*(rxbuf[3]-0x34);m<2*(rxbuf[3]-0x34+rxbuf[5]);m=m+2) //为什么×2呢?应为上位机寄存器大小是十六位的
{
*(p+m)=rxbuf[7+j];
*(p+m+1)=rxbuf[6+j];
j=j+2;
}
}
break;
case 6://复费率参数下载
flag.flag0606=1;
p=(unsigned char *)&againfee;
for(m=2*(rxbuf[3]-0x98);m<2*(rxbuf[3]-0x98+rxbuf[5]);m=m+2) //为什么×2呢?应为上位机寄存器大小是十六位的
{
*(p+m)=rxbuf[7+j];
*(p+m+1)=rxbuf[6+j];
j=j+2;
}
break;
case 21://系统设置2参数下载
flag.flag0621=1;
p=(unsigned char *)&systemsetup1;
for(m=2*(rxbuf[3]-0x74);m<2*(rxbuf[3]-0x74+rxbuf[5]);m=m+2) //为什么×2呢?应为上位机寄存器大小是十六位的
{
*(p+m)=rxbuf[7+j];
*(p+m+1)=rxbuf[6+j];
j=j+2;
}
break;
default: break;
}
if(answernum==0x00)
{
txbuf[0]=rxbuf[0];
txbuf[1]=rxbuf[1];
txbuf[2]=rxbuf[2];
txbuf[3]=rxbuf[3];
txbuf[4]=rxbuf[4];
txbuf[5]=rxbuf[5];
T16=crc16(txbuf,6);
high8=T16 >> 8;
low8=T16 & 0xff;
txbuf[6]=high8;
txbuf[7]=low8;
P3OUT |= BIT7; //P4.2为高电平为发送模式
flag.transfer_ok=FAULT;
i=0;
flag.gb=1;
flag.ds=4;
do
{
TXBUF1=txbuf[i];
while((IFG2 & UTXIFG1) == 0) // USART0 TX buffer ready?
{
_NOP();
}
i++;
}while(i<8);
}
flag.transfer_ok=TRUE;
i=0;
answernum=0x00;
for(i=0;i<140;i++)
{
rxbuf[i]=0;
txbuf[i]=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -