📄 serial.c
字号:
case 0x0a:// init iic command
{
series_temp = receive_array[12] - 0x33 ;
// if(series_temp == 0x01)
// {
return_read_function(0xa0,receive_array+10,6,meter_number,0x06,0x00) ;
// }
return;
}
case 0x0f:
{
series_temp = receive_array[10] - 0x33 ;
if(series_temp == 0x01)
{
return_read_function(0xa0,receive_array+14,4,password,0x03,0x00) ;
}
else if(series_temp == 0x00)
{
return_read_function(0xa0,receive_array+14,4,password_didu,0x03,0x00);
}
return ;
}
default:
{
return_read_function(0x00,address_array,0x00,0x00,0x05,0x02) ;
return ;
}
}
}
}
void interrupt_serial1(void)
{
uchar i ;
i = 0 ;
ri_u0c1 = 0 ;
i = u0rb ;
asm("nop") ;
asm("nop") ;
}
//return_read_function(0xa0,receive_array+16,6,meter_number,0x02,0x00) ;
void return_read_function(uchar IIC_address,uchar *read_array,uchar read_long,uint iic_block_address,uchar write_or_read,uchar error)
{
uchar i ,j,k,l ;
send_array[0] = 0x68 ;
send_array[7] = 0x68 ;
Read_EeprData(0xa1,send_array+1,6,meter_number,0 );
send_array[10] = receive_array[10];
send_array[11] = receive_array[11];
if(write_or_read == 0x00)
{
send_array[8] = 0x81 ;
send_array[9] = 0x02 + read_long;
Read_EeprData(IIC_address,array_temp_write,read_long+1,iic_block_address,0) ;
j = 0 ;
for(i=0;i<(read_long-1);i++)
{
j = j + *(array_temp_write+i);
}
if(j != *(array_temp_write+read_long - 1))
{
Read_EeprData(0xa3,array_temp_write,read_long+1,iic_block_address,0) ;
k = 0;
for(i=0;i<(read_long-1);i++)
{
k = k +*(array_temp_write+i);
}
if(k != *(array_temp_write+read_long - 1))
{
for(i=0;i<5;i++) array_temp_write[i] = 0x00 ;
data_add(array_temp_write,read_long) ;
Write_eeprom_function(0xa0,array_temp_write,read_long+1,iic_block_address) ;
Write_eeprom_function(0xa2,array_temp_write,read_long+1,iic_block_address) ;
send_array[8] = 0xc1 ;
send_array[9] = 0x01 ;
send_array[10] = 0x01 + 0x33;
}
else
{
data_add(array_temp_write,read_long) ;
Write_eeprom_function(0xa0,array_temp_write,read_long+1,iic_block_address) ;
for(i=0;i<read_long;i++) *(read_array+i) = *(array_temp_write +i);
}
}
else
{
for(i=0;i<read_long;i++) *(read_array+i) = *(array_temp_write +i);
}
for(i=0;i<read_long;i++)
{
send_array[i+12] = send_array[i+12] + 0x33 ;
}
}
else if( write_or_read == 0x01)
{
send_array[8] = 0xc1 ;
send_array[9] = 0x01 ;
send_array[10] = 0x01 + 0x33;
}
else if( write_or_read == 0x02)
{
Read_EeprData(0xa1,array_temp_write,5,password,0) ;
array_temp_write[1] = array_temp_write[1] + 0x33 ;
array_temp_write[2] = array_temp_write[2] + 0x33 ;
array_temp_write[3] = array_temp_write[3] + 0x33 ;
if((array_temp_write[1]==receive_array[13])&(array_temp_write[2]==receive_array[14])&(array_temp_write[3]==receive_array[15]))
{
for(j=0;j<read_long;j++){receive_array[16+j] = receive_array[16+j] - 0x33 ;}
send_array[8] = 0x84 ;
send_array[9] = 0x00 ;
data_add(read_array,read_long) ;
Write_eeprom_function(0xa0,read_array,read_long+1,iic_block_address) ;
Write_eeprom_function(0xa2,read_array,read_long+1,iic_block_address) ;
}
}
else if( write_or_read == 0x03)
{
// Read_EeprData(0xa1,array_temp_write,5,password,0) ;
Read_EeprData(0xa1,array_temp_write,5,iic_block_address,0) ;
array_temp_write[1] = array_temp_write[1] + 0x33 ;
array_temp_write[2] = array_temp_write[2] + 0x33 ;
array_temp_write[3] = array_temp_write[3] + 0x33 ;
if((array_temp_write[1]==receive_array[11])&(array_temp_write[2]==receive_array[12])&(array_temp_write[3]==receive_array[13]))
{
for(j=0;j<4;j++){receive_array[14+j] = receive_array[14+j] - 0x33 ;}
send_array[8] = 0x8f ;
send_array[9] = 0x04 ;
data_add(read_array,read_long) ;
Write_eeprom_function(0xa0,read_array,read_long+1,iic_block_address) ;
Write_eeprom_function(0xa2,read_array,read_long+1,iic_block_address) ;
for(j=0;j<6;j++){send_array[10+j] = receive_array[14+j]+0x33 ;}
}
}
else if( write_or_read == 0x04)
{
return ;
}
else if(write_or_read == 0x05)
{
send_array[8] = 0xc1 ;
send_array[9] = 0x01 ;
send_array[10] = 0x02 +0x33;
}
else if( write_or_read == 0x06)
{
for(j=0;j<6;j++){receive_array[10+j] = receive_array[10+j] - 0x33 ;}
send_array[8] = 0x8a ;
send_array[9] = 0x00 ;
data_add(read_array,read_long) ;
Write_eeprom_function(0xa0,read_array,read_long+1,iic_block_address) ;
Write_eeprom_function(0xa2,read_array,read_long+1,iic_block_address) ;
}
else if( write_or_read == 0x07)//68 11 11 11 11 11 11 68 04 0A 4C F4 33 33 33 33 33 33 33 38 21 16
{
Read_EeprData(0xa1,array_temp_write,5,password_didu,0) ;
array_temp_write[1] = array_temp_write[1] + 0x33 ;
array_temp_write[2] = array_temp_write[2] + 0x33 ;
array_temp_write[3] = array_temp_write[3] + 0x33 ;
if((array_temp_write[1]==receive_array[15])&(array_temp_write[2]==receive_array[14])&(array_temp_write[3]==receive_array[13]))
{
for(j=0;j<4;j++){receive_array[16+j] = receive_array[16+j] - 0x33 ;}
send_array[8] = 0x8a ;
send_array[9] = 0x00 ;
data_add(read_array,read_long) ;
Write_eeprom_function(0xa0,read_array,read_long+1,iic_block_address) ;
Write_eeprom_function(0xa2,read_array,read_long+1,iic_block_address) ;
}
}
j = 10 + send_array[9] ;
send_array[j] = 0x00 ;
for(i=0;i<j;i++){send_array[j] = send_array[j] +send_array[i] ; }
send_array[j+1] = 0x16 ;
series_send_process(j+2) ; ;
}
uchar read_check_one_array(uchar eeprom_block_address,uchar *data_write_array,uchar read_long,uint eeprom_block_in_address)
{
uchar check_even ;
uchar i ;
uchar data_check_even_temp[10] ;
Read_EeprData(eeprom_block_address,data_check_even_temp,read_long,eeprom_block_in_address,0 );
check_even = 0 ;
for(i=0;i<(read_long-1);i++)
{
check_even = *(data_check_even_temp+i) + check_even ;
}
if(check_even !=*(data_check_even_temp+ read_long - 1))
{
check_even = 0 ;
Read_EeprData(0xa3,data_check_even_temp,read_long,eeprom_block_in_address,0 );
for(i=0;i<(read_long-1);i++)
{
check_even = *(data_check_even_temp +i) + check_even ;
}
if(check_even !=*(data_check_even_temp + read_long - 1))
{
return (0x55);
}
else
{
Write_eeprom_function(eeprom_block_address,data_check_even_temp,read_long-1,eeprom_block_in_address );
for(i=0;i<(read_long-1);i++)
{
*(data_write_array + i) = *(data_check_even_temp + i) ;
}
}
}
else
{
for(i=0;i<(read_long-1);i++)
{
*(data_write_array+i) = *(data_check_even_temp+i) ;
}
}
return (0xaa) ;
}
void error_data_return(void)
{
uchar i,j ;
send_array[0] = 0x68 ;
send_array[7] = 0x68 ;
Read_EeprData(0xa1,send_array+1,6,meter_number,0 );
//for(i=1;i<7;i++){send_array[i] = receive_array[i] ;}
send_array[8] = 0xc1 ;
send_array[9] = 0x01 ;
send_array[10] = 0x01+ 0x33;
//for(i=0;i<1;i++){send_array[i+12] = send_array[i+12] + 0x33 ;}
j = 10 + send_array[9] ;
send_array[j] = 0x00 ;
for(i=0;i<j;i++){send_array[j] = send_array[j] +send_array[i] ; }
send_array[j+1] = 0x16 ;
series_send_process(j+1) ;
}
void ok_data_return(uchar send_long)
{
uchar i ,j ;
send_array[0] = 0x68 ;
send_array[7] = 0x68 ;
Read_EeprData(0xa1,send_array+1,6,meter_number,0 );
//for(i=1;i<7;i++){send_array[i] = receive_array[i] ;}
send_array[8] = 0x81 ;
send_array[9] = 0x02 + send_long;
send_array[10] = receive_array[10];
send_array[11] = receive_array[11];
if((di_union.di01 == 0x9010)||(di_union.di01 == 0x901f))
{
// if( power_counter<320)
// {
send_array[12] = send_array[12] + power_counter/32 ;
// }
}
for(i=0;i<send_long;i++){send_array[i+12] = send_array[i+12] + 0x33 ;}
j = 10 + send_array[9] ;
send_array[j] = 0x00 ;
for(i=0;i<j;i++){send_array[j] = send_array[j] +send_array[i] ; }
send_array[j+1] = 0x16 ;
series_send_process(j+2) ;
}
void series_send_process(uchar send_long)
{
uchar i ;
p1_6 = 1 ;
series_send_sign = 0x01 ;
series_send_counter = 0x00 ;
series_send_long = send_long ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -