⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serial.c

📁 本代码以低成本的瑞萨单片机为主控制器
💻 C
📖 第 1 页 / 共 2 页
字号:
			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 + -