📄 main.c
字号:
#include "includes.h"
unsigned char Name1,
Name2,
Name3,
Name4,
Name5;
unsigned char BoardAddress;
unsigned char tempaddress;
unsigned int confaddress;
/*********************************************************************
* 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;
Tempervoltage0 = 0; //一点温度较准值
Tempervoltage1 = 0; //二点温度较准值
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, 56); //EEPROM address form 0x00 to 0xFF “defult address 55”
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 0x06
tempaddress = BoardAddress;
CANInit(tempaddress,50); //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,50); //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);
Temperature0 = ADUserT(0);//1点温度
Temperature1 = ADUserT(1);//2点温度
EVTemperature= (Temperature0+Temperature1)/2;
}
/*********************************************************************
* Function: void main(void)
*
* PreCondition:
*
* Input: none
*
* Output: none
*
* Side Effects:
*
* Overview: Initialize the module.
*
* Note:
********************************************************************/
void main(void)
{
UINT work;
unsigned char Functioncode;
SystermInit();
while(1)
{
//BoardAddress = eeprom_read_byte(0x06);
if(BoardAddress != tempaddress) //If address changed the board must set CANSFilter again.
{
tempaddress = BoardAddress;
CANSetFilter (tempaddress);
}
//AnalogCollect(); //采集电池电压与温度
RUNLED = ~RUNLED; //运行指示亮
Delay1KTCYx(150);
if (CANIsRxRdy())
{
work.word = CANGetRxCID();
confaddress = (unsigned char)((work.word&0x0FE0)>>5);
Functioncode= (unsigned char)((work.word&0x7000)>>12);
if(confaddress == 0)
{
CANGetRxDataTyp0(ComRxBuffer); //将接收数据写入数据缓冲区以备后继使用
CANRead();
CanFunction(Functioncode); //CAN功能函数
}
else if(confaddress == tempaddress)
{
CANGetRxDataTyp0(ComRxBuffer); //将接收数据写入数据缓冲区以备后继使用
CANRead();
CanFunction(Functioncode); //CAN功能函数
}
else CANRead();
}
}
}
/********************************************************************
End Of File
********************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -