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

📄 serial.c

📁 本代码以低成本的瑞萨单片机为主控制器
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "sfr_r81b.h"
#include "serial.h"
#include "global.h"
#include "iic.h"
//AT89S51JI PLC
uchar receive_array[60] ;
uint temp_mm ; 
uchar send_array[60];
uchar array_temp_write[10] ;

uchar read_check_one_array(uchar eeprom_block_address,uchar  *data_write_array,uchar read_long,uint eeprom_block_in_address);
void error_data_return(void);
void ok_data_return(uchar send_long);
union
{
	uint   di01;
	uchar di[2];
}di_union;

uchar test; 
void init_serial(void)
{
	pd1 = pd1|0x10 ;
	pd1 = pd1 & 0xdf ;
	u0mr = 0x65 ; 
//	u0c0 = 0x00 ;//00 4800 01 2400 
	u0brg = 0x40 ; 
	u0c0 = 0x01 ;//2400
	te_u0c1 = 1 ; 
	re_u0c1 = 1 ;
	u0rrm = 0 ; 
//	s0tic = 0x05 ; 
	s0ric = 0x04 ; 
	pd1_4 = 1 ;
}

void interrupt_serial0_tx(void)
{
	uchar i ; 
	i = 0 ;
	ti_u0c1 = 0 ;
	asm("nop") ;
	asm("nop") ;
	asm("nop") ;
	asm("nop") ;
}
void interrupt_serial0_rx(void)
{
	uchar i ; 
	i = 0 ;
	temp_mm = u0rb;
	series_receive_counter = 0x00 ;
	series_receive_sign = 0x01 ;										
	if(series_receive_long == 0 )
	{	
		if(	u0rbl == 0xfe)
		{
		}	
		else if(u0rbl == 0x68)
		{
			receive_array[series_receive_long] = u0rbl ;
			series_receive_long = 0x01  ;	
			ri_u0c1 = 0 ;
			series_receive_counter = 0x00 ;
			series_receive_sign = 0x01 ;
		}
		else
		{
			series_receive_counter = 0x00 ;
			series_receive_sign = 0x00 ;
		}
	}
	else
	{
		receive_array[series_receive_long++] = u0rbl ;
		ri_u0c1 = 0 ;
		if(series_receive_long == 0x08)
		{
			if(receive_array[7] != 0x68)
			{
				series_receive_long = 0;
				series_receive_sign = 0;
				series_receive_counter = 0 ; 					
			}
		}
		if(series_receive_long == 0x09)
		{
			if((receive_array[8]&0x80)==0x80)
			{
				series_receive_long = 0;
				series_receive_sign = 0;
				series_receive_counter = 0 ; 					
			} 				
		}										
	}
	ri_u0c1 = 0 ;
	u0rb = 0x0000; 	
}
void series_process(void)
{	
	uchar i ,j,series_temp; 
	uchar address_array_temp[20] ; 
	uchar check_even; 
	series_temp = 0x00 ; 
	if(series_receive_end == 0xaa)
	{
		for(i=0;i<20;i++){address_array_temp[i] = 0x00;}	
		series_receive_end =0x00 ;
	 	for(j=0;j<6;j++)
	 	{
	 		 if(receive_array[j+1] != 0xaa) break ; 
			 if(j == 5) goto  not_check_address ; 
	 	}	
	 	for(j=0;j<6;j++)
	 	{
	 		 if(receive_array[j+1] != 0x99) break ; 
			 if(j == 5) goto  not_check_address ; 
	 	}			
	 	for(i=0;i<6;i++) address_array_temp[i] = receive_array[i+1];
		for(i=0;i<6;i++){if(address_array_temp[i] == 0xaa ){address_array_temp[i] = 0 ;}}
		Read_EeprData(0xa1,address_array ,6,meter_number,0) ;
	 	for(i=0;i<6;i++) 
 		{
			if(address_array[i] != address_array_temp[i])
			{
				series_receive_long = 0 ;							
				return ; 
			}			
		}
not_check_address:		
		j = 10 + receive_array[9] ;
		for(i=0;i<j;i++){series_temp +=receive_array[i] ;}
		if(series_temp !=receive_array[j] ) 
		{
			series_receive_long = 0 ; 	
			return_read_function(0x00,address_array,0x00,0x00,0x01,0x01) ;
			return ; 
		}
		if(receive_array[j+1] != 0x16)
		{
			return_read_function(0x00,address_array,0x00,0x00,0x01,0x01) ;
			series_receive_long = 0 ; 
			return ;
		}
	 	if(receive_array[8]&0x40)
		{
			series_receive_long = 0 ;							
			return ; 	
		}		
		di_union.di[1] = receive_array[11] - 0x33 ;
		di_union.di[0] = receive_array[10] - 0x33;
		series_receive_long = 0 ;
		switch(receive_array[8]&0x1f)
		{
			case 0x01:
			{			
				switch(di_union.di01)
				{
					case 0x9010 :
					{
						if(read_check_one_array(0xa1,send_array+12,5,now_total_power) == 0x55){error_data_return();return;}	
						ok_data_return(4);return ; 				
					}
					case 0x9020 :
					{
						if(read_check_one_array(0xa1,send_array+12,5,fu_now_power) == 0x55){error_data_return();return;}	
						ok_data_return(4);return ; 				
					}
					case 0x901f:
					{
						if(read_check_one_array(0xa1,send_array+12,5,now_total_power) == 0x55){error_data_return();return;}	
						ok_data_return(4);return ; 											
					}
					case 0xc030 :
					{
						if(read_check_one_array(0xa1,send_array+12,4,kwh) == 0x55){error_data_return();return;}	
						ok_data_return(3);return ; 																																
					}					
					case 0xc032 :
					{
						if(read_check_one_array(0xa1,send_array+12,7,meter_number) == 0x55){error_data_return();return;}	
						ok_data_return(6);return ; 	
					}
					case 0xc033 ://user_number 
					{
						if(read_check_one_array(0xa1,send_array+12,7,user_number) == 0x55){error_data_return();return;}	
						ok_data_return(6);return ; 	
					}
					case 0xc034 ://sb_number 
					{
						if(read_check_one_array(0xa1,send_array+12,7,sb_number) == 0x55){error_data_return();return;}	
						ok_data_return(6);return ; 	
					}
					case 0xc035 ://password 
					{
						if(read_check_one_array(0xa1,send_array+12,5,password) == 0x55){error_data_return();return;}	
						ok_data_return(4);return ; 	
					}
					case 0xc036 ://password 
					{
						if(read_check_one_array(0xa1,send_array+12,5,password_didu) == 0x55){error_data_return();return;}	
						ok_data_return(4);return ; 	
					}
					default :
					{
						return_read_function(0x00,address_array,0x00,0x00,0x05,0x02) ;
						return ; 							
					}
				}
			}
			case 0x04:// 68 05 05 05 05 05 05 68 04 0C 66 F3 34 33 33 33 34 33 33 33 33 33 57 16 
			{
				if((receive_array[1] ==0xaa)&(receive_array[2] ==0xaa)&(receive_array[3] ==0xaa)&(receive_array[4] ==0xaa)&(receive_array[5] ==0xaa)){return ;}
//				if((receive_array[1] ==0x99)&(receive_array[2] ==0x99)&(receive_array[3] ==0x99)&(receive_array[4] ==0x99)&(receive_array[5] ==0x99)){return ;}
				switch 	(di_union.di01)
				{
					case 0xc030 :  
					{
						series_temp = receive_array[12] - 0x33 ; 
						if(series_temp == 0x01)
						{
							return_read_function(0xa0,receive_array+16,3,kwh,0x02,0x00) ;
						}
						return; 
					}					
				/*	case 0xc032 :
					{
						series_temp = receive_array[12] - 0x33 ; 
						if(series_temp == 0x01)
						{
							return_read_function(0xa0,receive_array+16,6,meter_number,0x02,0x00) ;
						}
						return; 
					}*/
					case 0xc033 : //write user_number
					{
						series_temp = receive_array[12] - 0x33 ; 
						if(series_temp == 0x01)
						{
							return_read_function(0xa0,receive_array+16,6,user_number,0x02,0x00) ;
                      	}
						return; 
					}
					case 0xc034 ://write sb_number
					{
						series_temp = receive_array[12] - 0x33 ; 
						if(series_temp == 0x01)
						{
							return_read_function(0xa0,receive_array+16,6,sb_number,0x02,0x00) ;
						}
						return; 
					}
					case 0xc119 ://68 11 11 11 11 11 11 68 04 0A 4C F4 33 33 33 33 33 33 33 33 1C 16
					{
						series_temp = receive_array[12] - 0x33 ; 
						if(series_temp == 0x00)
						{	
							return_read_function(0xa0,receive_array+16,4,now_total_power,0x07,0x00) ;
						}
						return ; 
					}
					default :
					{
						return_read_function(0x00,address_array,0x00,0x00,0x05,0x02) ;
						return;
					} 
				}
			}
			case 0x08:
			{
				return;
			}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -