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

📄 disp.c

📁 ATT7022B与C8051F的通讯licheng
💻 C
📖 第 1 页 / 共 5 页
字号:
			break;
		case 3:{//baudrate = 9600			
    			CKCON |= 0x00;	//1/12 Frequency
   				TH1 = 0xa0;
			}
			break;
		case 4:{//baudrate = 14400			
    			CKCON |= 0x00;	//1/12 Frequency
   				TH1 = 0xc0;
			}
			break;
		case 5:{//baudrate = 19200			
    			CKCON |= 0x00;	//1/12 Frequency
   				TH1 = 0xd0;
			}
			break;
		case 6:{//baudrate = 38400			
    			CKCON |= 0x00;	//1/12 Frequency
   				TH1 = 0xe8;
			}
			break;
/*		case 7:{//baudrate = 57600			
    			CKCON |= 0x01;	//1/4 Frequency
   				TH1 = 0xd0;
			}
			break;	  */
		default:{//baudrate = 9600,默认值			
    			CKCON = 0x00;	//1/12 Frequency
   				TH1 = 0xa0;
			}
			break;
	}
	if(baud_code > 2){//07-07-09  12分频
		freq_collect_times = ENERGY_COLLECT_TIME_12FRE;
	}
	else{			 //48分频
		freq_collect_times = ENERGY_COLLECT_TIME_48FRE;
	}
}

void ram_init()
{
	Ua.high_byte8 = 0; Ua.low_byte8 = 0; Ia.high_byte8 = 0; Ia.low_byte8 = 0; Pa.high_byte8 = 0; Pa.middle_byte8 = 0; Pa.low_byte8 = 0; Qa.high_byte8 = 0; Qa.middle_byte8 = 0; Qa.low_byte8 = 0; Pfa.high_byte8 = 0; Pfa.low_byte8 = 0; 
	Ub.high_byte8 = 0; Ub.low_byte8 = 0; Ib.high_byte8 = 0; Ib.low_byte8 = 0; Pb.high_byte8 = 0; Pb.middle_byte8 = 0; Pb.low_byte8 = 0; Qb.high_byte8 = 0; Qb.middle_byte8 = 0; Qb.low_byte8 = 0; Pfb.high_byte8 = 0; Pfb.low_byte8 = 0; 
	Uc.high_byte8 = 0; Uc.low_byte8 = 0; Ic.high_byte8 = 0; Ic.low_byte8 = 0; Pc.high_byte8 = 0; Pc.middle_byte8 = 0; Pc.low_byte8 = 0; Qc.high_byte8 = 0; Qc.middle_byte8 = 0; Qc.low_byte8 = 0; Pfc.high_byte8 = 0; Pfc.low_byte8 = 0;
	F.high_byte8 = 0; F.low_byte8 = 0; Uab.high_byte8 = 0; Uab.low_byte8 = 0; Ubc.high_byte8 = 0; Ubc.low_byte8 = 0; Uca.high_byte8 = 0; Uca.low_byte8 =0;
	Psum.high_byte8 = 0; Psum.middle_byte8 = 0; Psum.low_byte8 = 0; Qsum.high_byte8 = 0; Qsum.middle_byte8 = 0; Qsum.low_byte8 = 0; Pfsum.high_byte8 = 0; Pfsum.low_byte8 = 0;
	psd = 0; task_count_number = 0; watchdog_times = 0; negative_sign = 0;	Chk_time = 0;
	original_high_byte = 0; original_middle_byte = 0;original_low_byte = 0;	delay_num = 0;
	new_recombine_high = 0;new_recombine_low = 0; modbus_com.sendNumber = 0; modbus_com.recvNumber = 0; modbus_com.sendPosi = 0;
	psd = 0; task_count_number = 0; watchdog_times = 0;	energy_collect_count = 0; task_delay_num = 0;
	#ifdef HAVE_ENERGY_COLLECT
	
	#endif		 
	
} 		

void Init_Device()
{
	PCA0MD &= 0xbf;//Close watch dog
    Port_IO_Init();
    Oscillator_Init();
	  get_cpt_from_flash();//07-07-08
	  baudrate_select();//07-07-08
	  Timer_Init();
#ifdef HAVE_ENERGY_COLLECT
	  Int0_Init();
	  reset_type_identify();
#endif
	  init_7022B();			
	  init_disp_parameter();
	  ram_init();
}


 /*
***********************************************************************************************************
**函数原型		:  	spi_delay(uchar times)
**参数说明		:  	times	-->>	要延时的nop数
				:		
**返回值		:		
**说	明		:	本函数用于SPI传输数据的过程中,延时times个nop的时间
************************************************************************************************************/

void spi_delay(uchar times){
	uchar k = 0;
	uchar k1;
	k1 = times;
	for(k = 0;k < k1;k++){
		_nop_();
	}
}



/*
***********************************************************************************************************
**函数原型		:  	crcData(uchar *array, uint arrayLen)
**参数说明		:  	*array	-->>	要校验的数据
				:	arrayLen	-->>	要校验的数据的长度	
**返回值		:	对应校验数据的CRC校验码	
**说	明		:	本函数用于对下行数据进行CRC校验
************************************************************************************************************/	   

uint crcData(uchar *array, uint arrayLen)
{//CRC verify
	uchar CRCHi = 0xFF; // CRC high byte initital  
	uchar CRCLo = 0xFF;  //CRC low byte initital  
	unsigned long dataIndex; // CRC index in loop 
	while(arrayLen--){   	 
		dataIndex = CRCHi^ * array++;  //Calculation CRC  
		CRCHi = CRCLo^auchCRCHi[dataIndex]; 
		CRCLo = auchCRCLo[dataIndex]; 
	} 
	return(CRCHi << 8 | CRCLo);
}

/*
***********************************************************************************************************
**函数原型		:  	beginSend()
**参数说明		:  	
				:		
**返回值		:		
**说	明		:	本函数用于modbus通信中485串口发送
************************************************************************************************************/

void beginSend()
{//Begin send data
	modbus_com.sendPosi = 0;
	B485_READY_TO_SEND();//P4为485控制线,置1,准备发送
	delay(2);//为485转232做时间准备		 	
	TI0 = 0;//开始发送
	SBUF0 = modbus_com.send_dataBuf[modbus_com.sendPosi++];
}

 /*
***********************************************************************************************************
**函数原型		:  	getRegisterVal(uint addr)reentrant
**参数说明		:  	addr	-->>	上传数据的首地址
				:		
**返回值		:	对应地址的具体数据	
**说	明		:	本函数用于遥测,根据下行命令的地址来查询对应的数据
************************************************************************************************************/

uint getRegisterVal(uint addr) //Get register value,0 means OK
{
	uint tempAddr;
	uint result = 0;

#ifdef HAVE_ENERGY_COLLECT
	tempAddr = addr & 0xfff;
	switch(tempAddr & 0xff)
	{

#ifdef 	ADJUST_POWER
		case 0x06: result = COMBINE_2UCHAR_TO_16UINT(0,Pa.high_byte8);
				break;		
		case 0x08: result = COMBINE_2UCHAR_TO_16UINT(Pa.middle_byte8,Pa.low_byte8);
				break;
		case 0x16: result = COMBINE_2UCHAR_TO_16UINT(0,Pb.high_byte8);
				break;
		case 0x18: result = COMBINE_2UCHAR_TO_16UINT(Pb.middle_byte8,Pb.low_byte8);
				break;
 		case 0x26: result = COMBINE_2UCHAR_TO_16UINT(0,Pc.high_byte8);
				break;
		case 0x28: result = COMBINE_2UCHAR_TO_16UINT(Pc.middle_byte8,Pc.low_byte8);
				break;
		case 0x34: result = (0,Psum.high_byte8);
				break;		
		case 0x36: result = COMBINE_2UCHAR_TO_16UINT(Psum.middle_byte8,Psum.low_byte8);
				break;		
		case 0x38: result = COMBINE_2UCHAR_TO_16UINT(F.high_byte8,F.low_byte8);
				break;

#else	//和后台传输时,传只16位舍弃精度。所以后台通信系数P,Q为1*(3200/EC),3P,3Q为4*(3200/EC)
		case 0x06: result = COMBINE_2UCHAR_TO_16UINT(0,0);
				break;		
		case 0x08: result = COMBINE_2UCHAR_TO_16UINT(Pa.high_byte8,Pa.middle_byte8);
				break;
		case 0x16: result = COMBINE_2UCHAR_TO_16UINT(0,0);
				break;
		case 0x18: result = COMBINE_2UCHAR_TO_16UINT(Pb.high_byte8,Pb.middle_byte8);
				break;
 		case 0x26: result = COMBINE_2UCHAR_TO_16UINT(0,0);
				break;
		case 0x28: result = COMBINE_2UCHAR_TO_16UINT(Pc.high_byte8,Pc.middle_byte8);
				break; 
		case 0x34: result = COMBINE_2UCHAR_TO_16UINT(0,0);
				break;		
		case 0x36: result = COMBINE_2UCHAR_TO_16UINT(F.high_byte8,F.low_byte8);
				break;		
		case 0x38: result = COMBINE_2UCHAR_TO_16UINT(Psum.high_byte8,Psum.middle_byte8);
				break;
#endif

		case 0x00: result = COMBINE_2UCHAR_TO_16UINT(Ua.high_byte8,Ua.low_byte8);	 /*Basic variable parameter*/
				break;
		case 0x02: result = COMBINE_2UCHAR_TO_16UINT(Uca.high_byte8,Uca.low_byte8);//0;	
				break;
		case 0x04: result = COMBINE_2UCHAR_TO_16UINT(Ia.high_byte8,Ia.low_byte8);		
				break;									
		case 0x0a: result = COMBINE_2UCHAR_TO_16UINT(Pfa.high_byte8,Pfa.low_byte8);
				break;
		case 0x0c: result = COMBINE_2UCHAR_TO_16UINT(Qa.middle_byte8, Qa.low_byte8);
				break;			
		case 0x0e: result = 0;
				break;
		case 0x10: result = COMBINE_2UCHAR_TO_16UINT(Ub.high_byte8,Ub.low_byte8);
				break;		
		case 0x12: result = COMBINE_2UCHAR_TO_16UINT(Uab.high_byte8,Uab.low_byte8);//0;
				break;		
		case 0x14: result = COMBINE_2UCHAR_TO_16UINT(Ib.high_byte8,Ib.low_byte8);
				break;				
		case 0x1a: result = COMBINE_2UCHAR_TO_16UINT(Pfb.high_byte8,Pfb.low_byte8);
				break;
		case 0x1e: result = 0;
				break;
		case 0x20: result = COMBINE_2UCHAR_TO_16UINT(Uc.high_byte8,Uc.low_byte8);
				break;		
		case 0x22: result = COMBINE_2UCHAR_TO_16UINT(Ubc.high_byte8,Ubc.low_byte8);//0;
				break;
		case 0x24: result = COMBINE_2UCHAR_TO_16UINT(Ic.high_byte8,Ic.low_byte8);
				break;				
		case 0x2a: result = COMBINE_2UCHAR_TO_16UINT(Pfc.high_byte8,Pfc.low_byte8);
				break;								
		case 0x2c: result = COMBINE_2UCHAR_TO_16UINT(Qc.middle_byte8,Qc.low_byte8);
				break;
		case 0x2e: result = 0;
				break;
		case 0x30: result = 0;	
				break;
		case 0x32: result = 0;		
				break;		

		case 0x3a: result = COMBINE_2UCHAR_TO_16UINT(Pfsum.high_byte8,Pfsum.low_byte8);
				break;			
		case 0x3c: result = COMBINE_2UCHAR_TO_16UINT(Qsum.middle_byte8,Qsum.low_byte8);
				break;		
		case 0x3e: result = 0;
				break;
			 /*Power parameter*/
		case 0x42: result = (uint)TWH;
				break;		
		case 0x44: result = (uint)(TWH >> 16);
				break;
		case 0x46: result = (uint)TQH;
				break;
		case 0x48: result = (uint)(TQH >> 16);
				break;
		case 0x4a: result = (uint)Wha;
				break;
		case 0x4c: result = (uint)(Wha >> 16);
				break;
		case 0x4e: result = (uint)Whb;
				break;
		case 0x50: result = (uint)(Whb >> 16);
				break;		
		case 0x52: result = (uint)Whc;
				break;	  
		case 0x54: result = (uint)(Whc >> 16);
				break;
		case 0x56: result = (uint)Qha;
				break;
		case 0x58: result = (uint)(Qha >> 16);
				break;
		case 0x5a: result = (uint)Qhb;
				break;
		case 0x5c: result = (uint)(Qhb >> 16);
				break;				
		case 0x5e: result = (uint)Qhc;
				break;
		case 0x60: result = (uint)(Qhc >> 16);
				break;												
				
/****************************************add by zhugaoyun*******************/	
		
    case 0x62: result = (uint)ZWH;
				break;		
		case 0x64: result = (uint)(ZWH >> 16);
				break;
		case 0x66: result = (uint)ZQH;
				break;
		case 0x68: result = (uint)(ZQH >> 16);
				break;
		case 0x6a: result = (uint)Wza;
				break;
		case 0x6c: result = (uint)(Wza >> 16);
				break;
		case 0x6e: result = (uint)Wzb;
				break;
		case 0x70: result = (uint)(Wzb >> 16);
				break;		
		case 0x72: result = (uint)Wzc;
				break;	  
		case 0x74: result = (uint)(Wzc >> 16);
				break;
		case 0x76: result = (uint)Qza;
				break;
		case 0x78: result = (uint)(Qza >> 16);
				break;
		case 0x7a: result = (uint)Qzb;
				break;
		case 0x7c: result = (uint)(Qzb >> 16);
				break;				
		case 0x7e: result = (uint)Qzc;
				break;
		case 0x80: result = (uint)(Qzc >> 16);
				break;
    case 0x82: result = (uint)FWH;
				break;		
		case 0x84: result = (uint)(FWH >> 16);
				break;
		case 0x86: result = (uint)FQH;
				break;
		case 0x88: result = (uint)(FQH >> 16);
				break;
		case 0x8a: result = (uint)Wfa;
				break;
		case 0x8c: result = (uint)(Wfa >> 16);
				break;
		case 0x8e: result = (uint)Wfb;
				break;
		case 0x90: result = (uint)(Wfb >> 16);
				break;		
		case 0x92: result = (uint)Wfc;
				break;	  
		case 0x94: result = (uint)(Wfc >> 16);
				break;
		case 0x96: result = (uint)Qfa;
				break;
		case 0x98: result = (uint)(Qfa >> 16);
				break;
		case 0x9a: result = (uint)Qfb;
				break;
		case 0x9c: result = (uint)(Qfb >> 16);
				break;				
		case 0x9e: result = (uint)Qfc;
				break;
		case 0xa0: result = (uint)(Qfc >> 16);
				break;
/****************************************  end    *******************/
		default: result = 0;
				break;		
	}
	
	return result;

#else
	tempAddr = addr&0xfff;
	switch(tempAddr&0xff)
	{
		case 0x00: result = COMBINE_2UCHAR_TO_16UINT(Ua.high_byte8,Ua.low_byte8);	 /*Basic variable parameter*/
				break;
		case 0x02: result = COMBINE_2UCHAR_TO_16UINT(Uca.high_byte8,Uca.low_byte8);//0;	
				break;
		case 0x04: result = COMBINE_2UCHAR_TO_16UINT(Ia.high_byte8,Ia.low_byte8);		
				break;		
		case 0x06: result = 0;
				break;		
		case 0x08: result = COMBINE_2UCHAR_TO_16UINT(Pa.high_byte8,Pa.low_byte8);
				break;		
		case 0x0a: result = COMBINE_2UCHAR_TO_16UINT(Pfa.high_byte8,Pfa.low_byte8);
				break;
		case 0x0c: result = COMBINE_2UCHAR_TO_16UINT(Qa.high_byte8,Qa.low_byte8);
				break;			
		case 0x0e: result = 0;
				break;		
		case 0x10: result = COMBINE_2UCHAR_TO_16UINT(Ub.high_byte8,Ub.low_byte8);
				break;		
		case 0x12: result = COMBINE_2UCHAR_TO_16UINT(Uab.high_byte8,Uab.low_byte8);//0;
				break;		
		case 0x14: result = COMBINE_2UCHAR_TO_16UINT(Ib.high_byte8,Ib.low_byte8);
				break;
		case 0x16: result = 0;
				break;
		case 0x18: result = COMBINE_2UCHAR_TO_16UINT(Pb.high_byte8,Pb.low_byte8);
				break;
		case 0x1a: result = COMBINE_2UCHAR_TO_16UINT(Pfb.high_byte8,Pfb.low_byte8);
				break;
		case 0x1c: result = COMBINE_2UCHAR_TO_16UINT(Qb.high_byte8,Qb.low_byte8);
				break;
		case 0x1e: result = 0;
				break;
		case 0x20: result = COMBINE_2UCHAR_TO_16UINT(Uc.high_byte8,Uc.low_byte8);
				break;		
		case 0x22: result = COMBINE_2UCHAR_TO_16UINT(Ubc.high_byte8,Ubc.low_byte8);//0;
				break;

⌨️ 快捷键说明

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