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

📄 canuser.c

📁 用PIC18F2580完成A/D采集,CAN总线数据读取
💻 C
📖 第 1 页 / 共 2 页
字号:
void CanSendFixedValue(void)
{
	while(CANIsTxRdy() == 0);
	//CANPutTxPRI(3);							//Send Priority highest
	//EXIDE is clr in TXB0SIDL.EXIDE			//帧格式 =0标准帧; =1扩展帧;
	//TXRTR is clr in CANPutTxCnt(8);			//帧类型 =0数据帧; =1远程帧;
	//CANPutTxCnt(8);							//数据长度 Data DLC
	CANPutTxCID(BoardAddress,CAN_R_FIXED_VALUE);//CID 
	ComTxBuffer[0].bits.lbyte.L = 1;			//数据包号
    ComTxBuffer[0].bits.hbyte.H = 1;			//总包数
	ComTxBuffer[1].W            = T_K_VO1;		//1点温度系数
	ComTxBuffer[2].W 			= T_K_VO2;		//2点温度系数
	ComTxBuffer[3].W 			= C_K_VOL; 		//电压采集系数
	CANPutTxDataTyp0(ComTxBuffer);  
	CANSend(1); 

//	while(CANIsTxRdy() == 0);
//	//CANPutTxPRI(3);							//Send Priority highest
//	//EXIDE is clr in TXB0SIDL.EXIDE			//帧格式 =0标准帧; =1扩展帧;
//	//TXRTR is clr in CANPutTxCnt(8);			//帧类型 =0数据帧; =1远程帧;
//	//CANPutTxCnt(8);							//数据长度 Data DLC
//	CANPutTxCID(BoardAddress,CAN_R_FIXED_VALUE);//CID
//	ComTxBuffer[0].bits.lbyte.L = 2;			//数据包号
//  ComTxBuffer[0].bits.hbyte.H = 2;			//总包数
//	ComTxBuffer[1].W            = HI_TEMP;		//电池包温度上限
//	ComTxBuffer[2].W 			= LO_TEMP;		//电池包温度下限
//	ComTxBuffer[3].W 			= 0; 			//
//	CANPutTxDataTyp0(ComTxBuffer);  
//	CANSend(1);
}
/*********************************************************************
 * Function:        CanSendFixedValue(void)
 *
 * PreCondition:    The configure message has received.  
 *
 * Input:       	none
 *                  
 * Output:      	none
 *
 * Side Effects:  		
 *
 * Overview:        Send the configure Cell protect message to the top
 *					computer.
 *					
 * Note:          	
 ********************************************************************/
void CanFunction(unsigned char Functioncode)
{
	switch(Functioncode)
	{
		case CAN_R_CONFIG:				//读配置   0
		{
			CanSendConfig();
		}break;
		case CAN_W_CONFIG:				//写配置   1
		{
			CanReciveConfig();
		}break; 			
		case CAN_R_FIXED_VALUE:			//读定值   2
		{
			CanSendFixedValue();
		}break;
		case CAN_W_FIXED_VALUE:			//写定值   3
		{
			CanReceiveFixedValue();
		}break;
		case CAN_R_ANALOG:			    //读模拟量 4
		{
			CanSendAnalog();
		}break;
		default:break;
	}
}			
///*********************************************************************
// * Function:        void SystermInit(void)
// *
// * PreCondition:   	 
// *
// * Input:       	none
// *                  
// * Output:      	none
// *
// * Side Effects:  		
// *
// * Overview:        Initialize the module.
// *					
// * Note:          	
// ********************************************************************/
//void SystermInit(void)
//{
//	Name1 = eeprom_read_byte(0x00);
//	Name2 = eeprom_read_byte(0x01);
//	Name3 = eeprom_read_byte(0x02);
//	Name4 = eeprom_read_byte(0x03);
//	Name5 = eeprom_read_byte(0x04);
//    if((Name1 != 'L')			  		      //Systerm first time Power on
//	 &&(Name2 != 'I')			  		      //My name LIWEI
//     &&(Name3 != 'W')
//	 &&(Name4 != 'E')
//	 &&(Name5 != 'I'))
//	{
//		T_K_VO1 = 10000;                      //第一次上电各系数默认值为10000
//		T_K_VO2 = 10000;
//		C_K_VOL = 10000;
//		eeprom_write_byte(0x00,'L');
//		eeprom_write_byte(0x01,'I');
//		eeprom_write_byte(0x02,'W');
//		eeprom_write_byte(0x03,'E');
//		eeprom_write_byte(0x04,'I');
//		eeprom_write_byte(0x06, 55);		  //EEPROM address form 0x00 to 0xFF
//		eeprom_write_word( 8,T_K_VO1);        //将各路默认系数写入EEPROM
//		eeprom_write_word(10,T_K_VO2);
//		eeprom_write_word(12,C_K_VOL);
//		BoardAddress = eeprom_read_byte(6);	  //Board Address save in EEPROM address 0x01
//		tempaddress  = BoardAddress;
//		CANInit(tempaddress,0);           	  //CID and BitRate 50k
//	}
//    else if((Name1 == 'L')		  		  	  //Systerm is not first time Power on
//	 	  &&(Name2 == 'I')		  		  	  //My name LIWEI
//          &&(Name3 == 'W')
//	 	  &&(Name4 == 'E')
//		  &&(Name5 == 'I')) 
//         {
//			 BoardAddress = eeprom_read_byte(0x06); //Address save in EEPROM address 0x06
//		     tempaddress  = BoardAddress;	 
//		 	 CANInit(tempaddress,0);                //CID and BitRate 50k
//		 	 Tempervoltage0 = 0;                    //一点温度较准值
//			 Tempervoltage1 = 0;                    //二点温度较准值
//		 	 T_K_VO1 = eeprom_read_word(8);         //读取1、2点温度和单只电池电压系数
//		 	 if(T_K_VO1 > 6000 && T_K_VO1 < 15000)
//		 	 {
//		 	 	T_K_VO1 = 10000;
//		 	 }
//		 	 T_K_VO2 = eeprom_read_word(10);
//		 	 if(T_K_VO2 > 6000 && T_K_VO2 < 15000)
//		 	 {
//		 	 	T_K_VO2 = 10000;
//		 	 }
//		 	 C_K_VOL = eeprom_read_word(12);
//		 	 if(C_K_VOL > 6000 && C_K_VOL < 15000)
//			 {
//		 	 	C_K_VOL = 10000;
//		 	 }
//		 } 
//    TXB0CONbits.TXREQ = 0;				  			//send request bit clr
//	TRISCbits.TRISC3  = 0;                		    //RUNLED    =0 方向为输出;=1 方向为输入 		
//	TRISCbits.TRISC5  = 0;				  			//74HC138_A
//	TRISCbits.TRISC6  = 0;				  			//74HC138_B
//	TRISCbits.TRISC7  = 0;				  			//74HC138_C
//    TRISBbits.TRISB0  = 0;							//74HC138_E
//	TRISBbits.TRISB1  = 0;							//74HC138_F
//    TRISCbits.TRISC2  = 0;                          //FOR TEMPERATURE2 POWER 
//    TRISCbits.TRISC1  = 0;
//    TEMP0POWER = 1;                                 //TEMPERATURE POWER 
//    TEMP1POWER = 1;
//}
///*********************************************************************
// * Function:        void AnalogCollect(void)
// *
// * PreCondition:   	 
// *
// * Input:       	none
// *                  
// * Output:      	none
// *
// * Side Effects:  		
// *
// * Overview:        AnalogCollect includes voltage and temperature.
// *					
// * Note:          	
// ********************************************************************/
// void AnalogCollect(void)
// { 
//	ADUserV(4);
//	Delay1KTCYx(10);
////	TEMP0POWER = 1;                          //热敏电阻供电
////	TEMP1POWER = 1;
////	Delay1KTCYx(150);
//	
//	Temperature0 = ADUserT(0);
////	TEMP0POWER   = 0;
//		
//	Temperature1 = ADUserT(1);   
//	EVTemperature= (Temperature0+Temperature1)/2;         
////	TEMP1POWER   = 0;
// }
///*********************************************************************
// * Function:        void main(void)
// *
// * PreCondition:   	 
// *
// * Input:       	none
// *                  
// * Output:      	none
// *
// * Side Effects:  		
// *
// * Overview:        Initialize the module.
// *					
// * Note:          	
// ********************************************************************/
//void main(void)
//{
//    UINT work;
//	unsigned char confaddress;
//    unsigned char Functioncode; 
// 	SystermInit();
//    while(1)
//	{
//		//BoardAddress = eeprom_read(0x22);
//        if(BoardAddress != tempaddress)         //Set CANSFilter
//        {
//            tempaddress  = BoardAddress;
//			CANSetFilter (tempaddress);
//		}		
//		AnalogCollect();                        //采集电池电压与温度
//		RUNLED = ~RUNLED;                       //运行指示亮
//		//Delay1KTCYx(240);
//		if (CANIsRxRdy())
//		{		   
//			work.word   = CANGetRxCID();
//			confaddress = (unsigned char)((work.word&0x01E0)>>5);
//			Functioncode= (unsigned char)((work.word&0x7000)>>12);
//			CANGetRxDataTyp0(ComRxBuffer);      //将接收数据写入数据缓冲区以备后继使用
//			CANRead();
//            switch(Functioncode)
//			{
//				case CAN_R_CONFIG:				//读配置   0
//				{
//					CanSendConfig();
//				}break;
//				case CAN_W_CONFIG:				//写配置   1
//				{
//					CanReciveConfig();
//				}break; 			
//				case CAN_R_FIXED_VALUE:			//读定值   2
//				{
//					CanSendFixedValue();
//				}break;
//				case CAN_W_FIXED_VALUE:			//写定值   3
//				{
//					CanReceiveFixedValue();
//				}break;
//				case CAN_R_ANALOG:				//读模拟量 4
//				{
//					CanSendAnalog();
//				}break;
//				default:break;
//			}
//		}	
//	}
//}
///********************************************************************
//                            End Of File
//********************************************************************/

⌨️ 快捷键说明

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