4 Commits

Author SHA1 Message Date
585f3e7e8d 修改编码 2025-08-18 09:18:01 +08:00
f140674f11 解决温度传感器校验失败清零温度问题 2025-08-14 09:49:34 +08:00
93baee9527 解决过日无法休眠问题,适用于7-8号车 2025-08-05 07:05:51 +08:00
517a5f9ebb 增加交换机通道 2025-07-06 16:57:36 +08:00
18 changed files with 2186 additions and 1702 deletions

7
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,7 @@
{
"files.associations": {
"MAIN.C": "cpp",
"CAN.C": "cpp",
"temperature.C": "cpp"
}
}

310
CAN.C
View File

@@ -12,7 +12,7 @@
// @Description: This file contains functions that use the CAN module.
//
//----------------------------------------------------------------------------
// @Date 2024/8/22 08:23:16
// @Date 2025/1/18 20:45:35
//
//****************************************************************************
@@ -113,7 +113,7 @@
// @Parameters None
//
//----------------------------------------------------------------------------
// @Date 2024/8/22
// @Date 2025/1/18
//
//****************************************************************************
@@ -150,11 +150,14 @@ void CAN_vInit(void)
/// General Configuration of the Node 0:
/// - set INIT and CCE
/// - enable interrupt generation upon a change of BOFF or EWARN or upon a
/// set of LLE, LOE or INIT
/// - alert interrupt node pointer: MultiCAN SRN 0
//-----------CAN_NCR0 = 0x00000041-------------------------------------
//-----------CAN_NCR0 = 0x00000049-------------------------------------
CAN_vWriteCANAddress(CAN_NCR0); // Addressing CAN_NCR0
CAN_DATA0 = 0x41; // load NODE 0 control register[7-0]
CAN_DATA0 = 0x49; // load NODE 0 control register[7-0]
CAN_vWriteEN(D0_VALID+ADR_INC); // Data0 is Valid for transmission and
// Write is EnabledCAN Address pointing
// to the CAN_NSR0.
@@ -195,14 +198,14 @@ void CAN_vInit(void)
/// - required baud rate = 250.000 kbaud
/// - real baud rate = 250.000 kbaud
/// - sample point = 75.00 %
/// - there are 5 time quanta before sample point
/// - there are 2 time quanta after sample point
/// - there are 11 time quanta before sample point
/// - there are 4 time quanta after sample point
/// - the (re)synchronization jump width is 2 time quanta
//-----------CAN_NBTR0 = 0x00001457-------------------------------------
//-----------CAN_NBTR0 = 0x00003A4B-------------------------------------
CAN_DATA0 = 0x57; // load NBTR0_SJW, BRP
CAN_DATA1 = 0x14; // load NBTR0_DIV8, TSEG2, TSEG1
CAN_DATA0 = 0x4B; // load NBTR0_SJW, BRP
CAN_DATA1 = 0x3A; // load NBTR0_DIV8, TSEG2, TSEG1
CAN_vWriteEN(D0_VALID+D1_VALID+ADR_INC); // Data0, 1 are valid for
// transmission and Write is
// Enabled with Auto
@@ -277,6 +280,9 @@ void CAN_vInit(void)
CAN_vSetListCommand(0x01070002); // MO7 for list 1
CAN_vSetListCommand(0x01090002); // MO9 for list 1
CAN_vSetListCommand(0x010A0002); // MO10 for list 1
CAN_vSetListCommand(0x010B0002); // MO11 for list 1
CAN_vSetListCommand(0x010C0002); // MO12 for list 1
CAN_vSetListCommand(0x010D0002); // MO13 for list 1
/// -----------------------------------------------------------------------
/// Configuration of the CAN Message Objects 0 - 31:
@@ -396,12 +402,12 @@ void CAN_vInit(void)
/// - priority class 3; transmit acceptance filtering is based on the list
/// order (like class 1)
/// - standard 11-bit identifier
/// - identifier 11-bit: 0x711
/// - extended 29-bit identifier
/// - identifier 29-bit: 0x15000001
//--------------MOAR6 = 0xDC440000---------------------------------------
//--------------MOAR6 = 0xF5000001---------------------------------------
CAN_vWriteAMData(0xDC440000); // load MO6 arbitration register
CAN_vWriteAMData(0xF5000001); // load MO6 arbitration register
// CAN Address pointing to the CAN_MODATAH6
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
@@ -422,7 +428,7 @@ void CAN_vInit(void)
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
/// - only accept receive frames with matching IDE bit
/// - acceptance mask 11-bit: 0x7FF
/// - acceptance mask 29-bit: 0x1FFFFFFF
//--------------CAN_MOAMR6 = 0x3FFFFFFF------------------------------------
@@ -473,12 +479,12 @@ void CAN_vInit(void)
/// - priority class 3; transmit acceptance filtering is based on the list
/// order (like class 1)
/// - standard 11-bit identifier
/// - identifier 11-bit: 0x712
/// - extended 29-bit identifier
/// - identifier 29-bit: 0x15000002
//--------------MOAR7 = 0xDC480000---------------------------------------
//--------------MOAR7 = 0xF5000002---------------------------------------
CAN_vWriteAMData(0xDC480000); // load MO7 arbitration register
CAN_vWriteAMData(0xF5000002); // load MO7 arbitration register
// CAN Address pointing to the CAN_MODATAH7
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
@@ -499,7 +505,7 @@ void CAN_vInit(void)
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
/// - only accept receive frames with matching IDE bit
/// - acceptance mask 11-bit: 0x7FF
/// - acceptance mask 29-bit: 0x1FFFFFFF
//--------------CAN_MOAMR7 = 0x3FFFFFFF------------------------------------
@@ -536,26 +542,26 @@ void CAN_vInit(void)
/// Configuration of Message Object 8:
/// -----------------------------------------------------------------------
/// - message object 8 is valid
/// - message object is used as receive object
/// - message object is used as transmit object
/// - this message object is assigned to list 1 (node 0)
//--------------MOCTR8 = 0x00A00000---------------------------------------
//--------------MOCTR8 = 0x0EA80000---------------------------------------
CAN_vWriteCANAddress(CAN_MOCTR8); // Addressing MO8 control register
CAN_vWriteAMData(0x00A00000); // load MO8 control register
CAN_vWriteAMData(0x0EA80000); // load MO8 control register
// CAN Address pointing to the CAN_MOAR8
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
/// - priority class 3; transmit acceptance filtering is based on the list
/// order (like class 1)
/// - standard 11-bit identifier
/// - identifier 11-bit: 0x713
/// - extended 29-bit identifier
/// - identifier 29-bit: 0x11000002
//--------------MOAR8 = 0xDC4C0000---------------------------------------
//--------------MOAR8 = 0xF1000002---------------------------------------
CAN_vWriteAMData(0xDC4C0000); // load MO8 arbitration register
CAN_vWriteAMData(0xF1000002); // load MO8 arbitration register
// CAN Address pointing to the CAN_MODATAH8
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
@@ -576,7 +582,7 @@ void CAN_vInit(void)
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
/// - only accept receive frames with matching IDE bit
/// - acceptance mask 11-bit: 0x7FF
/// - acceptance mask 29-bit: 0x1FFFFFFF
//--------------CAN_MOAMR8 = 0x3FFFFFFF------------------------------------
@@ -705,11 +711,11 @@ void CAN_vInit(void)
/// - priority class 3; transmit acceptance filtering is based on the list
/// order (like class 1)
/// - extended 29-bit identifier
/// - identifier 29-bit: 0x11000000
/// - identifier 29-bit: 0x14000002
//--------------MOAR10 = 0xF1000000---------------------------------------
//--------------MOAR10 = 0xF4000002---------------------------------------
CAN_vWriteAMData(0xF1000000); // load MO10 arbitration register
CAN_vWriteAMData(0xF4000002); // load MO10 arbitration register
// CAN Address pointing to the CAN_MODATAH10
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
@@ -763,18 +769,238 @@ void CAN_vInit(void)
CAN_vWriteAMData(0x08000000); // load MO10 function control register
/// -----------------------------------------------------------------------
/// -----------------------------------------------------------------------
/// Configuration of Message Object 11:
/// -----------------------------------------------------------------------
/// - message object 11 is not valid
/// - message object 11 is valid
/// - message object is used as receive object
/// - this message object is assigned to list 1 (node 0)
//--------------MOCTR11 = 0x00A00000---------------------------------------
CAN_vWriteCANAddress(CAN_MOCTR11); // Addressing MO11 control register
CAN_vWriteAMData(0x00A00000); // load MO11 control register
// CAN Address pointing to the CAN_MOAR11
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
/// - priority class 3; transmit acceptance filtering is based on the list
/// order (like class 1)
/// - extended 29-bit identifier
/// - identifier 29-bit: 0x15000004
//--------------MOAR11 = 0xF5000004---------------------------------------
CAN_vWriteAMData(0xF5000004); // load MO11 arbitration register
// CAN Address pointing to the CAN_MODATAH11
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
//--------------MODATAH11 = 0x00000000---------------------------------------
CAN_vWriteAMData(0x00000000); // load MO11 data register high
// CAN Address pointing to the CAN_MODATAL11
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
//--------------MODATAL11 = 0x00000000---------------------------------------
CAN_vWriteAMData(0x00000000); // load MO11 data register low
// CAN Address pointing to the CAN_MOAMR11
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
/// - only accept receive frames with matching IDE bit
/// - acceptance mask 29-bit: 0x1FFFFFFF
//--------------CAN_MOAMR11 = 0x3FFFFFFF------------------------------------
CAN_vWriteAMData(0x3FFFFFFF); // load MO11 acceptance mask register
// CAN Address pointing to the CAN_MOIPR11
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
/// - use message pending register 0 bit position 11
//--------------MOIPR11 = 0x00000B00---------------------------------------
CAN_vWriteAMData(0x00000B00); // load MO11 interrupt pointer register
// CAN Address pointing to the CAN_MOFGPR11
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
//--------------MOFGPR11 = 0x00000000---------------------------------------
CAN_vWriteAMData(0x00000000); // load MO11 FIFO/gateway pointer register
// CAN Address pointing to the CAN_MOFCR11
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
/// - this object is a STANDARD MESSAGE OBJECT
/// - 8 valid data bytes
//--------------MOFCR11 = 0x08000000---------------------------------------
CAN_vWriteAMData(0x08000000); // load MO11 function control register
/// -----------------------------------------------------------------------
/// Configuration of Message Object 12:
/// -----------------------------------------------------------------------
/// - message object 12 is not valid
/// - message object 12 is valid
/// - message object is used as transmit object
/// - this message object is assigned to list 1 (node 0)
//--------------MOCTR12 = 0x0EA80000---------------------------------------
CAN_vWriteCANAddress(CAN_MOCTR12); // Addressing MO12 control register
CAN_vWriteAMData(0x0EA80000); // load MO12 control register
// CAN Address pointing to the CAN_MOAR12
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
/// - priority class 3; transmit acceptance filtering is based on the list
/// order (like class 1)
/// - extended 29-bit identifier
/// - identifier 29-bit: 0x15000003
//--------------MOAR12 = 0xF5000003---------------------------------------
CAN_vWriteAMData(0xF5000003); // load MO12 arbitration register
// CAN Address pointing to the CAN_MODATAH12
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
//--------------MODATAH12 = 0x00000000---------------------------------------
CAN_vWriteAMData(0x00000000); // load MO12 data register high
// CAN Address pointing to the CAN_MODATAL12
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
//--------------MODATAL12 = 0x00000000---------------------------------------
CAN_vWriteAMData(0x00000000); // load MO12 data register low
// CAN Address pointing to the CAN_MOAMR12
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
/// - only accept receive frames with matching IDE bit
/// - acceptance mask 29-bit: 0x1FFFFFFF
//--------------CAN_MOAMR12 = 0x3FFFFFFF------------------------------------
CAN_vWriteAMData(0x3FFFFFFF); // load MO12 acceptance mask register
// CAN Address pointing to the CAN_MOIPR12
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
/// - use message pending register 0 bit position 12
//--------------MOIPR12 = 0x00000C00---------------------------------------
CAN_vWriteAMData(0x00000C00); // load MO12 interrupt pointer register
// CAN Address pointing to the CAN_MOFGPR12
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
//--------------MOFGPR12 = 0x00000000---------------------------------------
CAN_vWriteAMData(0x00000000); // load MO12 FIFO/gateway pointer register
// CAN Address pointing to the CAN_MOFCR12
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
/// - this object is a STANDARD MESSAGE OBJECT
/// - 8 valid data bytes
//--------------MOFCR12 = 0x08000000---------------------------------------
CAN_vWriteAMData(0x08000000); // load MO12 function control register
/// -----------------------------------------------------------------------
/// Configuration of Message Object 13:
/// -----------------------------------------------------------------------
/// - message object 13 is not valid
/// - message object 13 is valid
/// - message object is used as receive object
/// - this message object is assigned to list 1 (node 0)
//--------------MOCTR13 = 0x00A00000---------------------------------------
CAN_vWriteCANAddress(CAN_MOCTR13); // Addressing MO13 control register
CAN_vWriteAMData(0x00A00000); // load MO13 control register
// CAN Address pointing to the CAN_MOAR13
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
/// - priority class 3; transmit acceptance filtering is based on the list
/// order (like class 1)
/// - extended 29-bit identifier
/// - identifier 29-bit: 0x14000001
//--------------MOAR13 = 0xF4000001---------------------------------------
CAN_vWriteAMData(0xF4000001); // load MO13 arbitration register
// CAN Address pointing to the CAN_MODATAH13
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
//--------------MODATAH13 = 0x00000000---------------------------------------
CAN_vWriteAMData(0x00000000); // load MO13 data register high
// CAN Address pointing to the CAN_MODATAL13
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
//--------------MODATAL13 = 0x00000000---------------------------------------
CAN_vWriteAMData(0x00000000); // load MO13 data register low
// CAN Address pointing to the CAN_MOAMR13
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
/// - accept reception of standard and extended frames
/// - acceptance mask 29-bit: 0x1FFFFFFF
/// - acceptance mask 11-bit: 0x7FF
//--------------CAN_MOAMR13 = 0x1FFFFFFF------------------------------------
CAN_vWriteAMData(0x1FFFFFFF); // load MO13 acceptance mask register
// CAN Address pointing to the CAN_MOIPR13
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
/// - use message pending register 0 bit position 13
//--------------MOIPR13 = 0x00000D00---------------------------------------
CAN_vWriteAMData(0x00000D00); // load MO13 interrupt pointer register
// CAN Address pointing to the CAN_MOFGPR13
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
//--------------MOFGPR13 = 0x00000000---------------------------------------
CAN_vWriteAMData(0x00000000); // load MO13 FIFO/gateway pointer register
// CAN Address pointing to the CAN_MOFCR13
CAN_ADCON = ADR_DEC; // Auto Decrement the current address(-1)
/// - this object is a STANDARD MESSAGE OBJECT
/// - 8 valid data bytes
//--------------MOFCR13 = 0x08000000---------------------------------------
CAN_vWriteAMData(0x08000000); // load MO13 function control register
/// -----------------------------------------------------------------------
/// Configuration of Message Object 14:
/// -----------------------------------------------------------------------
@@ -910,7 +1136,7 @@ void CAN_vInit(void)
// 32-bit Data
//
//----------------------------------------------------------------------------
// @Date 2024/8/22
// @Date 2025/1/18
//
//****************************************************************************
@@ -945,7 +1171,7 @@ void CAN_vWriteAMData(ulong ulValue)
// 32-bit Data
//
//----------------------------------------------------------------------------
// @Date 2024/8/22
// @Date 2025/1/18
//
//****************************************************************************
@@ -983,7 +1209,7 @@ void CAN_vSetListCommand(ulong ulVal)
// Pointer on a message object to be filled by this function
//
//----------------------------------------------------------------------------
// @Date 2024/8/22
// @Date 2025/1/18
//
//****************************************************************************
@@ -1140,7 +1366,7 @@ ubyte ubTemp;
// Number of the message object (0-31)
//
//----------------------------------------------------------------------------
// @Date 2024/8/22
// @Date 2025/1/18
//
//****************************************************************************
@@ -1183,7 +1409,7 @@ return(ubReturn);
// Number of the message object (0-31)
//
//----------------------------------------------------------------------------
// @Date 2024/8/22
// @Date 2025/1/18
//
//****************************************************************************
@@ -1227,7 +1453,7 @@ return(ubReturn);
// Number of the message object (0-31)
//
//----------------------------------------------------------------------------
// @Date 2024/8/22
// @Date 2025/1/18
//
//****************************************************************************
@@ -1267,7 +1493,7 @@ void CAN_vTransmit(ubyte ubObjNr)
// Pointer on a data buffer
//
//----------------------------------------------------------------------------
// @Date 2024/8/22
// @Date 2025/1/18
//
//****************************************************************************
@@ -1331,7 +1557,7 @@ void CAN_vLoadData(ubyte ubObjNr, ulong *ulpubData)
// Number of the message object (0-31)
//
//----------------------------------------------------------------------------
// @Date 2024/8/22
// @Date 2025/1/18
//
//****************************************************************************

12
CAN.H
View File

@@ -13,7 +13,7 @@
// the CAN module.
//
//----------------------------------------------------------------------------
// @Date 2024/8/22 08:23:15
// @Date 2025/1/18 20:45:35
//
//****************************************************************************
@@ -623,7 +623,7 @@ void CAN_vSetListCommand(ulong ulVal);
// @Parameters None
//
//----------------------------------------------------------------------------
// @Date 2024/8/22
// @Date 2025/1/18
//
//****************************************************************************
@@ -645,7 +645,7 @@ void CAN_vSetListCommand(ulong ulVal);
// Data Control Flags
//
//----------------------------------------------------------------------------
// @Date 2024/8/22
// @Date 2025/1/18
//
//****************************************************************************
@@ -666,7 +666,7 @@ void CAN_vSetListCommand(ulong ulVal);
// 16-bit Address
//
//----------------------------------------------------------------------------
// @Date 2024/8/22
// @Date 2025/1/18
//
//****************************************************************************
@@ -701,7 +701,7 @@ void CAN_vSetListCommand(ulong ulVal);
// 32-bit Data
//
//----------------------------------------------------------------------------
// @Date 2024/8/22
// @Date 2025/1/18
//
//****************************************************************************
@@ -734,7 +734,7 @@ void CAN_vSetListCommand(ulong ulVal);
// @Parameters None
//
//----------------------------------------------------------------------------
// @Date 2024/8/22
// @Date 2025/1/18
//
//****************************************************************************

Binary file not shown.

View File

@@ -9,7 +9,7 @@
; PLEASE DO NOT MODIFY THIS FILE !
;
;----------------------------------------------------------------------------
; Date 2024/8/22 08:23:16
; Date 2025/1/18 20:45:36
;
;****************************************************************************
@@ -611,8 +611,8 @@ CAN_MOAR0_IDE SET 1
CAN_MOAR0_PRI SET 3
; CAN Message Object 10 Arbitration Register
CAN_MOAR10_ID SET 285212672
CAN_MOAR10_IDE SET 1
CAN_MOAR10_ID SET 0
CAN_MOAR10_IDE SET 0
CAN_MOAR10_PRI SET 3
; CAN Message Object 11 Arbitration Register
@@ -746,18 +746,18 @@ CAN_MOAR5_IDE SET 1
CAN_MOAR5_PRI SET 3
; CAN Message Object 6 Arbitration Register
CAN_MOAR6_ID SET 532938752
CAN_MOAR6_IDE SET 0
CAN_MOAR6_ID SET 285212673
CAN_MOAR6_IDE SET 1
CAN_MOAR6_PRI SET 3
; CAN Message Object 7 Arbitration Register
CAN_MOAR7_ID SET 533200896
CAN_MOAR7_IDE SET 0
CAN_MOAR7_ID SET 285212674
CAN_MOAR7_IDE SET 1
CAN_MOAR7_PRI SET 3
; CAN Message Object 8 Arbitration Register
CAN_MOAR8_ID SET 533463040
CAN_MOAR8_IDE SET 0
CAN_MOAR8_ID SET 285212675
CAN_MOAR8_IDE SET 1
CAN_MOAR8_PRI SET 3
; CAN Message Object 9 Arbitration Register
@@ -782,11 +782,11 @@ CAN_MOCTR0_TXPND SET 0
CAN_MOCTR0_TXRQ SET 0
; CAN Message Object 10 Control Register
CAN_MOCTR10_CTRL SET 2569
CAN_MOCTR10_DIR SET 1
CAN_MOCTR10_LIST SET 1
CAN_MOCTR10_CTRL SET 0
CAN_MOCTR10_DIR SET 0
CAN_MOCTR10_LIST SET 0
CAN_MOCTR10_MSGLST SET 0
CAN_MOCTR10_MSGVAL SET 1
CAN_MOCTR10_MSGVAL SET 0
CAN_MOCTR10_NEWDAT SET 0
CAN_MOCTR10_RTSEL SET 0
CAN_MOCTR10_RXEN SET 0
@@ -1262,7 +1262,7 @@ CAN_MOCTR8_TXPND SET 0
CAN_MOCTR8_TXRQ SET 0
; CAN Message Object 9 Control Register
CAN_MOCTR9_CTRL SET 2567
CAN_MOCTR9_CTRL SET 2311
CAN_MOCTR9_DIR SET 1
CAN_MOCTR9_LIST SET 1
CAN_MOCTR9_MSGLST SET 0
@@ -1686,7 +1686,7 @@ CAN_MOFCR10_0 SET 0
CAN_MOFCR10_0 SET 0
CAN_MOFCR10_0 SET 0
CAN_MOFCR10_DATC SET 0
CAN_MOFCR10_DLC SET 8
CAN_MOFCR10_DLC SET 0
CAN_MOFCR10_DLCC SET 0
CAN_MOFCR10_FRREN SET 0
CAN_MOFCR10_GDFS SET 0
@@ -3504,9 +3504,9 @@ P0_DATA_P6 SET 0
P0_DATA_P7 SET 0
; RMAP=0 PAGE=0-P0 P0 Direction Register
P0_DIR_P0 SET 0
P0_DIR_P0 SET 1
P0_DIR_P1 SET 1
P0_DIR_P2 SET 0
P0_DIR_P2 SET 1
P0_DIR_P3 SET 1
P0_DIR_P4 SET 0
P0_DIR_P5 SET 0
@@ -3581,7 +3581,7 @@ P1_DIR_P3 SET 0
P1_DIR_P4 SET 0
P1_DIR_P5 SET 0
P1_DIR_P6 SET 0
P1_DIR_P7 SET 0
P1_DIR_P7 SET 1
; RMAP=0 PAGE=3-P1 P1 Open Drain Control Register
P1_OD_P0 SET 0
@@ -3596,20 +3596,20 @@ P1_OD_P7 SET 0
; RMAP=0 PAGE=1-P1 P1 Pull-Up/Pull-Down Enable Register
P1_PUDEN_P0 SET 1
P1_PUDEN_P1 SET 1
P1_PUDEN_P2 SET 1
P1_PUDEN_P3 SET 1
P1_PUDEN_P4 SET 1
P1_PUDEN_P5 SET 1
P1_PUDEN_P2 SET 0
P1_PUDEN_P3 SET 0
P1_PUDEN_P4 SET 0
P1_PUDEN_P5 SET 0
P1_PUDEN_P6 SET 1
P1_PUDEN_P7 SET 1
; RMAP=0 PAGE=1-P1 P1 Pull-Up/Pull-Down Select Register
P1_PUDSEL_P0 SET 1
P1_PUDSEL_P1 SET 1
P1_PUDSEL_P2 SET 0
P1_PUDSEL_P3 SET 0
P1_PUDSEL_P4 SET 0
P1_PUDSEL_P5 SET 0
P1_PUDSEL_P2 SET 1
P1_PUDSEL_P3 SET 1
P1_PUDSEL_P4 SET 1
P1_PUDSEL_P5 SET 1
P1_PUDSEL_P6 SET 1
P1_PUDSEL_P7 SET 0
@@ -3689,37 +3689,37 @@ P3_DIR_P1 SET 0
P3_DIR_P2 SET 1
P3_DIR_P3 SET 1
P3_DIR_P4 SET 1
P3_DIR_P5 SET 0
P3_DIR_P5 SET 1
P3_DIR_P6 SET 0
P3_DIR_P7 SET 0
; RMAP=0 PAGE=3-P3 P3 Open Drain Control Register
P3_OD_P0 SET 0
P3_OD_P1 SET 0
P3_OD_P2 SET 0
P3_OD_P3 SET 0
P3_OD_P4 SET 0
P3_OD_P5 SET 0
P3_OD_P2 SET 1
P3_OD_P3 SET 1
P3_OD_P4 SET 1
P3_OD_P5 SET 1
P3_OD_P6 SET 0
P3_OD_P7 SET 0
; RMAP=0 PAGE=1-P3 P3 Pull-Up/Pull-Down Enable Register
P3_PUDEN_P0 SET 1
P3_PUDEN_P1 SET 1
P3_PUDEN_P2 SET 1
P3_PUDEN_P3 SET 1
P3_PUDEN_P4 SET 1
P3_PUDEN_P5 SET 1
P3_PUDEN_P6 SET 1
P3_PUDEN_P2 SET 0
P3_PUDEN_P3 SET 0
P3_PUDEN_P4 SET 0
P3_PUDEN_P5 SET 0
P3_PUDEN_P6 SET 0
P3_PUDEN_P7 SET 1
; RMAP=0 PAGE=1-P3 P3 Pull-Up/Pull-Down Select Register
P3_PUDSEL_P0 SET 1
P3_PUDSEL_P1 SET 1
P3_PUDSEL_P2 SET 0
P3_PUDSEL_P3 SET 0
P3_PUDSEL_P4 SET 0
P3_PUDSEL_P5 SET 0
P3_PUDSEL_P2 SET 1
P3_PUDSEL_P3 SET 1
P3_PUDSEL_P4 SET 1
P3_PUDSEL_P5 SET 1
P3_PUDSEL_P6 SET 1
P3_PUDSEL_P7 SET 1
@@ -3754,7 +3754,7 @@ P4_DATA_P6 SET 0
P4_DATA_P7 SET 0
; RMAP=0 PAGE=0-P4 P4 Direction Register
P4_DIR_P0 SET 0
P4_DIR_P0 SET 1
P4_DIR_P1 SET 1
P4_DIR_P2 SET 0
P4_DIR_P3 SET 0
@@ -3777,7 +3777,7 @@ P4_OD_P7 SET 0
P4_PUDEN_P0 SET 1
P4_PUDEN_P1 SET 1
P4_PUDEN_P2 SET 1
P4_PUDEN_P3 SET 1
P4_PUDEN_P3 SET 0
P4_PUDEN_P4 SET 0
P4_PUDEN_P5 SET 0
P4_PUDEN_P6 SET 0
@@ -3787,7 +3787,7 @@ P4_PUDEN_P7 SET 0
P4_PUDSEL_P0 SET 0
P4_PUDSEL_P1 SET 0
P4_PUDSEL_P2 SET 1
P4_PUDSEL_P3 SET 0
P4_PUDSEL_P3 SET 1
P4_PUDSEL_P4 SET 1
P4_PUDSEL_P5 SET 1
P4_PUDSEL_P6 SET 1

BIN
CL2.0.dav

Binary file not shown.

110
CL2.0.dpt
View File

@@ -9,7 +9,7 @@
' PLEASE DO NOT MODIFY THIS FILE !
'
'----------------------------------------------------------------------------
; Date 2024/8/22 08:23:16
; Date 2025/1/18 20:45:36
'
'****************************************************************************
@@ -448,7 +448,7 @@ CAN_MCR_MPSEL=0
CAN_MITR_IT[31:8]=0
CAN_MITR_IT[7:0]=0
CAN_MO0_LISTPOS=0
CAN_MO10_LISTPOS=8
CAN_MO10_LISTPOS=0
CAN_MO11_LISTPOS=0
CAN_MO12_LISTPOS=0
CAN_MO13_LISTPOS=0
@@ -578,8 +578,8 @@ CAN_MOAMR9_MIDE=1
CAN_MOAR0_ID=268435457
CAN_MOAR0_IDE=1
CAN_MOAR0_PRI=3
CAN_MOAR10_ID=285212672
CAN_MOAR10_IDE=1
CAN_MOAR10_ID=0
CAN_MOAR10_IDE=0
CAN_MOAR10_PRI=3
CAN_MOAR11_ID=0
CAN_MOAR11_IDE=0
@@ -659,14 +659,14 @@ CAN_MOAR4_PRI=3
CAN_MOAR5_ID=3
CAN_MOAR5_IDE=1
CAN_MOAR5_PRI=3
CAN_MOAR6_ID=532938752
CAN_MOAR6_IDE=0
CAN_MOAR6_ID=285212673
CAN_MOAR6_IDE=1
CAN_MOAR6_PRI=3
CAN_MOAR7_ID=533200896
CAN_MOAR7_IDE=0
CAN_MOAR7_ID=285212674
CAN_MOAR7_IDE=1
CAN_MOAR7_PRI=3
CAN_MOAR8_ID=533463040
CAN_MOAR8_IDE=0
CAN_MOAR8_ID=285212675
CAN_MOAR8_IDE=1
CAN_MOAR8_PRI=3
CAN_MOAR9_ID=536870896
CAN_MOAR9_IDE=1
@@ -685,11 +685,11 @@ CAN_MOCTR0_TXEN0=0
CAN_MOCTR0_TXEN1=0
CAN_MOCTR0_TXPND=0
CAN_MOCTR0_TXRQ=0
CAN_MOCTR10_CTRL=2569
CAN_MOCTR10_DIR=1
CAN_MOCTR10_LIST=1
CAN_MOCTR10_CTRL=0
CAN_MOCTR10_DIR=0
CAN_MOCTR10_LIST=0
CAN_MOCTR10_MSGLST=0
CAN_MOCTR10_MSGVAL=1
CAN_MOCTR10_MSGVAL=0
CAN_MOCTR10_NEWDAT=0
CAN_MOCTR10_RTSEL=0
CAN_MOCTR10_RXEN=0
@@ -1105,7 +1105,7 @@ CAN_MOCTR8_TXEN0=0
CAN_MOCTR8_TXEN1=0
CAN_MOCTR8_TXPND=0
CAN_MOCTR8_TXRQ=0
CAN_MOCTR9_CTRL=2567
CAN_MOCTR9_CTRL=2311
CAN_MOCTR9_DIR=1
CAN_MOCTR9_LIST=1
CAN_MOCTR9_MSGLST=0
@@ -1397,7 +1397,7 @@ CAN_MOFCR10_0=0
CAN_MOFCR10_0=0
CAN_MOFCR10_0=0
CAN_MOFCR10_DATC=0
CAN_MOFCR10_DLC=8
CAN_MOFCR10_DLC=0
CAN_MOFCR10_DLCC=0
CAN_MOFCR10_FRREN=0
CAN_MOFCR10_GDFS=0
@@ -3055,12 +3055,12 @@ MUXFOR_MTSR_0(MASTER_TRANSMIT)=0
MUXFOR_MTSR_0(SLAVE_RECEIVE)=0
MUXFOR_MTSR_1(MASTER_TRANSMIT)=0
MUXFOR_MTSR_1(SLAVE_RECEIVE)=0
MUXFOR_P0_0=1
MUXFOR_P0_0=2
MUXFOR_P0_1=2
MUXFOR_P0_2=1
MUXFOR_P0_2=2
MUXFOR_P0_3=2
MUXFOR_P0_4=0
MUXFOR_P0_5=1
MUXFOR_P0_5=0
MUXFOR_P0_6=0
MUXFOR_P0_7=2
MUXFOR_P1_0=0
@@ -3070,24 +3070,24 @@ MUXFOR_P1_3=1
MUXFOR_P1_4=1
MUXFOR_P1_5=1
MUXFOR_P1_6=0
MUXFOR_P1_7=1
MUXFOR_P2_0=1
MUXFOR_P2_1=1
MUXFOR_P1_7=2
MUXFOR_P2_0=0
MUXFOR_P2_1=0
MUXFOR_P2_2=0
MUXFOR_P2_3=1
MUXFOR_P2_3=0
MUXFOR_P2_4=1
MUXFOR_P2_5=1
MUXFOR_P2_6=0
MUXFOR_P2_7=0
MUXFOR_P2_6=1
MUXFOR_P2_7=1
MUXFOR_P3_0=1
MUXFOR_P3_1=1
MUXFOR_P3_2=2
MUXFOR_P3_3=2
MUXFOR_P3_4=2
MUXFOR_P3_5=1
MUXFOR_P3_5=2
MUXFOR_P3_6=1
MUXFOR_P3_7=1
MUXFOR_P4_0=1
MUXFOR_P4_0=2
MUXFOR_P4_1=2
MUXFOR_P4_2=0
MUXFOR_P4_3=1
@@ -3186,9 +3186,9 @@ P0_DATA_P4=0
P0_DATA_P5=0
P0_DATA_P6=0
P0_DATA_P7=0
P0_DIR_P0=0
P0_DIR_P0=1
P0_DIR_P1=1
P0_DIR_P2=0
P0_DIR_P2=1
P0_DIR_P3=1
P0_DIR_P4=0
P0_DIR_P5=0
@@ -3258,7 +3258,7 @@ P1_DIR_P3=0
P1_DIR_P4=0
P1_DIR_P5=0
P1_DIR_P6=0
P1_DIR_P7=0
P1_DIR_P7=1
P1_NAME_P1_0=P1_0
P1_NAME_P1_1=P1_1
P1_NAME_P1_2=P1_2
@@ -3278,18 +3278,18 @@ P1_OD_P6=0
P1_OD_P7=0
P1_PUDEN_P0=1
P1_PUDEN_P1=1
P1_PUDEN_P2=1
P1_PUDEN_P3=1
P1_PUDEN_P4=1
P1_PUDEN_P5=1
P1_PUDEN_P2=0
P1_PUDEN_P3=0
P1_PUDEN_P4=0
P1_PUDEN_P5=0
P1_PUDEN_P6=1
P1_PUDEN_P7=1
P1_PUDSEL_P0=1
P1_PUDSEL_P1=1
P1_PUDSEL_P2=0
P1_PUDSEL_P3=0
P1_PUDSEL_P4=0
P1_PUDSEL_P5=0
P1_PUDSEL_P2=1
P1_PUDSEL_P3=1
P1_PUDSEL_P4=1
P1_PUDSEL_P5=1
P1_PUDSEL_P6=1
P1_PUDSEL_P7=0
P2_DATA_P0=0
@@ -3362,7 +3362,7 @@ P3_DIR_P1=0
P3_DIR_P2=1
P3_DIR_P3=1
P3_DIR_P4=1
P3_DIR_P5=0
P3_DIR_P5=1
P3_DIR_P6=0
P3_DIR_P7=0
P3_NAME_P3_0=P3_0
@@ -3376,26 +3376,26 @@ P3_NAME_P3_7=P3_7
P3_NOTES=
P3_OD_P0=0
P3_OD_P1=0
P3_OD_P2=0
P3_OD_P3=0
P3_OD_P4=0
P3_OD_P5=0
P3_OD_P2=1
P3_OD_P3=1
P3_OD_P4=1
P3_OD_P5=1
P3_OD_P6=0
P3_OD_P7=0
P3_PUDEN_P0=1
P3_PUDEN_P1=1
P3_PUDEN_P2=1
P3_PUDEN_P3=1
P3_PUDEN_P4=1
P3_PUDEN_P5=1
P3_PUDEN_P6=1
P3_PUDEN_P2=0
P3_PUDEN_P3=0
P3_PUDEN_P4=0
P3_PUDEN_P5=0
P3_PUDEN_P6=0
P3_PUDEN_P7=1
P3_PUDSEL_P0=1
P3_PUDSEL_P1=1
P3_PUDSEL_P2=0
P3_PUDSEL_P3=0
P3_PUDSEL_P4=0
P3_PUDSEL_P5=0
P3_PUDSEL_P2=1
P3_PUDSEL_P3=1
P3_PUDSEL_P4=1
P3_PUDSEL_P5=1
P3_PUDSEL_P6=1
P3_PUDSEL_P7=1
P4_ALTSEL0_P0=0
@@ -3422,7 +3422,7 @@ P4_DATA_P4=0
P4_DATA_P5=0
P4_DATA_P6=0
P4_DATA_P7=0
P4_DIR_P0=0
P4_DIR_P0=1
P4_DIR_P1=1
P4_DIR_P2=0
P4_DIR_P3=0
@@ -3446,7 +3446,7 @@ P4_OD_P7=0
P4_PUDEN_P0=1
P4_PUDEN_P1=1
P4_PUDEN_P2=1
P4_PUDEN_P3=1
P4_PUDEN_P3=0
P4_PUDEN_P4=0
P4_PUDEN_P5=0
P4_PUDEN_P6=0
@@ -3454,7 +3454,7 @@ P4_PUDEN_P7=0
P4_PUDSEL_P0=0
P4_PUDSEL_P1=0
P4_PUDSEL_P2=1
P4_PUDSEL_P3=0
P4_PUDSEL_P3=1
P4_PUDSEL_P4=1
P4_PUDSEL_P5=1
P4_PUDSEL_P6=1

107
CL2.0.rtf
View File

@@ -8,7 +8,7 @@
\par \plain\f4\fs22\cf0 Compiler: \tab\tab\b Keil
\par \plain\f4\fs22\cf0 Memory Model: \tab\b COMPACT
\par
\par \plain\f4\fs22\cf0 Date: \tab\tab\tab\b 2024/8/22 08:23:16
\par \plain\f4\fs22\cf0 Date: \tab\tab\tab\b 2025/1/18 20:45:36
\par
\par
\par \plain\f4\fs22\cf2\b Please read this document carefully and note
@@ -295,7 +295,9 @@
\par
\tab Configuration of Port P0:\par
\tab P0.0:\par
\tab - is used as general input\par
\tab - is used as general purpose output\par
\tab - push/pull output is selected\par
\tab - the pin status is low level\par
\tab - pull-down device is assigned\par
\tab P0.1:\par
\tab - is used as general purpose output\par
@@ -303,16 +305,15 @@
\tab - the pin status is low level\par
\tab - pull-down device is assigned\par
\tab P0.2:\par
\tab - is used as general input\par
\tab - is used as general purpose output\par
\tab - push/pull output is selected\par
\tab - the pin status is low level\par
\tab - pull-down device is assigned\par
\tab P0.3:\par
\tab - is used as general purpose output\par
\tab - push/pull output is selected\par
\tab - the pin status is low level\par
\tab - pull-down device is assigned\par
\tab P0.5:\par
\tab - is used as general input\par
\tab - pull device is disabled (tristate)\par
\tab P0.7:\par
\tab - is used as general purpose output\par
\tab - push/pull output is selected\par
@@ -329,33 +330,23 @@
\tab - pull-up device is assigned\par
\tab P1.2:\par
\tab - is used as general input\par
\tab - pull-down device is assigned\par
\tab - pull device is disabled (tristate)\par
\tab P1.3:\par
\tab - is used as general input\par
\tab - pull-down device is assigned\par
\tab - pull device is disabled (tristate)\par
\tab P1.4:\par
\tab - is used as general input\par
\tab - pull-down device is assigned\par
\tab - pull device is disabled (tristate)\par
\tab P1.5:\par
\tab - is used as general input\par
\tab - pull-down device is assigned\par
\tab - pull device is disabled (tristate)\par
\tab P1.7:\par
\tab - is used as general input\par
\tab - is used as general purpose output\par
\tab - push/pull output is selected\par
\tab - the pin status is low level\par
\tab - pull-down device is assigned\par
\par
\tab Configuration of Port P2:\par
\tab P2.0:\par
\tab - is used as general input\par
\tab - input driver is enabled\par
\tab - pull device is disabled (tristate)\par
\tab P2.1:\par
\tab - is used as general input\par
\tab - input driver is enabled\par
\tab - pull device is disabled (tristate)\par
\tab P2.3:\par
\tab - is used as general input\par
\tab - input driver is enabled\par
\tab - pull device is disabled (tristate)\par
\tab P2.4:\par
\tab - is used as general input\par
\tab - input driver is enabled\par
@@ -364,6 +355,14 @@
\tab - is used as general input\par
\tab - input driver is enabled\par
\tab - pull-up device is assigned\par
\tab P2.6:\par
\tab - is used as general input\par
\tab - input driver is enabled\par
\tab - pull-up device is assigned\par
\tab P2.7:\par
\tab - is used as general input\par
\tab - input driver is enabled\par
\tab - pull-up device is assigned\par
\par
\tab Configuration of Port P3:\par
\tab P3.0:\par
@@ -374,32 +373,36 @@
\tab - pull-up device is assigned\par
\tab P3.2:\par
\tab - is used as general purpose output\par
\tab - push/pull output is selected\par
\tab - open drain output is selected\par
\tab - the pin status is low level\par
\tab - pull-down device is assigned\par
\tab - pull device is disabled (tristate)\par
\tab P3.3:\par
\tab - is used as general purpose output\par
\tab - push/pull output is selected\par
\tab - open drain output is selected\par
\tab - the pin status is low level\par
\tab - pull-down device is assigned\par
\tab - pull device is disabled (tristate)\par
\tab P3.4:\par
\tab - is used as general purpose output\par
\tab - push/pull output is selected\par
\tab - open drain output is selected\par
\tab - the pin status is low level\par
\tab - pull-down device is assigned\par
\tab - pull device is disabled (tristate)\par
\tab P3.5:\par
\tab - is used as general input\par
\tab - pull-down device is assigned\par
\tab - is used as general purpose output\par
\tab - open drain output is selected\par
\tab - the pin status is low level\par
\tab - pull device is disabled (tristate)\par
\tab P3.6:\par
\tab - is used as general input\par
\tab - pull-up device is assigned\par
\tab - pull device is disabled (tristate)\par
\tab P3.7:\par
\tab - is used as general input\par
\tab - pull-up device is assigned\par
\par
\tab Configuration of Port P4:\par
\tab P4.0:\par
\tab - is used as general input\par
\tab - is used as general purpose output\par
\tab - push/pull output is selected\par
\tab - the pin status is low level\par
\tab - pull-down device is assigned\par
\tab P4.1:\par
\tab - is used as general purpose output\par
@@ -408,7 +411,7 @@
\tab - pull-down device is assigned\par
\tab P4.3:\par
\tab - is used as general input\par
\tab - pull-down device is assigned\par
\tab - pull device is disabled (tristate)\par
\par
\par \plain\f4\fs20\cf0
@@ -1014,11 +1017,11 @@
\par
\tab - priority class 3; transmit acceptance filtering is based on the list\par
\tab order (like class 1)\par
\tab - standard 11-bit identifier\par
\tab - identifier 11-bit: 0x7F1\par
\tab - extended 29-bit identifier\par
\tab - identifier 29-bit: 0x11000001\par
\par
\tab - only accept receive frames with matching IDE bit\par
\tab - acceptance mask 11-bit: 0x7FF\par
\tab - acceptance mask 29-bit: 0x1FFFFFFF\par
\par
\tab - use message pending register 0 bit position 6\par
\par
@@ -1032,11 +1035,11 @@
\par
\tab - priority class 3; transmit acceptance filtering is based on the list\par
\tab order (like class 1)\par
\tab - standard 11-bit identifier\par
\tab - identifier 11-bit: 0x7F2\par
\tab - extended 29-bit identifier\par
\tab - identifier 29-bit: 0x11000002\par
\par
\tab - only accept receive frames with matching IDE bit\par
\tab - acceptance mask 11-bit: 0x7FF\par
\tab - acceptance mask 29-bit: 0x1FFFFFFF\par
\par
\tab - use message pending register 0 bit position 7\par
\par
@@ -1050,11 +1053,11 @@
\par
\tab - priority class 3; transmit acceptance filtering is based on the list\par
\tab order (like class 1)\par
\tab - standard 11-bit identifier\par
\tab - identifier 11-bit: 0x7F3\par
\tab - extended 29-bit identifier\par
\tab - identifier 29-bit: 0x11000003\par
\par
\tab - only accept receive frames with matching IDE bit\par
\tab - acceptance mask 11-bit: 0x7FF\par
\tab - acceptance mask 29-bit: 0x1FFFFFFF\par
\par
\tab - use message pending register 0 bit position 8\par
\par
@@ -1080,23 +1083,7 @@
\tab - 8 valid data bytes\par
\par
\tab Configuration of Message Object 10:\par
\tab - message object 10 is valid\par
\tab - message object is used as transmit object\par
\tab - this message object is assigned to list 1 (node 0)\par
\par
\tab - priority class 3; transmit acceptance filtering is based on the list\par
\tab order (like class 1)\par
\tab - extended 29-bit identifier\par
\tab - identifier 29-bit: 0x11000000\par
\par
\tab - only accept receive frames with matching IDE bit\par
\tab - acceptance mask 29-bit: 0x1FFFFFFF\par
\par
\tab - use message pending register 0 bit position 10\par
\par
\tab - this object is a STANDARD MESSAGE OBJECT\par
\tab - 8 valid data bytes\par
\par
\tab - message object 10 is not valid\par
\tab Configuration of Message Object 11:\par
\tab - message object 11 is not valid\par
\tab Configuration of Message Object 12:\par

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -17,8 +17,8 @@
</Extensions>
<DaveTm>
<dwLowDateTime>-1733316296</dwLowDateTime>
<dwHighDateTime>31126623</dwHighDateTime>
<dwLowDateTime>187610842</dwLowDateTime>
<dwHighDateTime>31157159</dwHighDateTime>
</DaveTm>
<Target>
@@ -303,20 +303,8 @@
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\CC6.C</PathWithFileName>
<FilenameWithoutPath>CC6.C</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>9</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\ADC.C</PathWithFileName>
<FilenameWithoutPath>ADC.C</FilenameWithoutPath>
<PathWithFileName>.\PS.C</PathWithFileName>
<FilenameWithoutPath>PS.C</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
@@ -330,9 +318,9 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>10</FileNumber>
<FileNumber>9</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\User.c</PathWithFileName>
@@ -342,7 +330,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>11</FileNumber>
<FileNumber>10</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -354,7 +342,7 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>12</FileNumber>
<FileNumber>11</FileNumber>
<FileType>2</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@@ -364,6 +352,30 @@
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>12</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\temperature.C</PathWithFileName>
<FilenameWithoutPath>temperature.C</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>13</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\RTC.c</PathWithFileName>
<FilenameWithoutPath>RTC.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
</ProjectOpt>

View File

@@ -412,14 +412,9 @@
<FilePath>.\WDT.C</FilePath>
</File>
<File>
<FileName>CC6.C</FileName>
<FileName>PS.C</FileName>
<FileType>1</FileType>
<FilePath>.\CC6.C</FilePath>
</File>
<File>
<FileName>ADC.C</FileName>
<FileType>1</FileType>
<FilePath>.\ADC.C</FilePath>
<FilePath>.\PS.C</FilePath>
</File>
</Files>
</Group>
@@ -441,6 +436,16 @@
<FileType>2</FileType>
<FilePath>.\XC88x_FLHANDLER.ASM</FilePath>
</File>
<File>
<FileName>temperature.C</FileName>
<FileType>1</FileType>
<FilePath>.\temperature.C</FilePath>
</File>
<File>
<FileName>RTC.c</FileName>
<FileType>1</FileType>
<FilePath>.\RTC.c</FilePath>
</File>
</Files>
</Group>
</Groups>

6
MAIN.C
View File

@@ -214,7 +214,6 @@ void main(void)
// ulong i,j;
// static ubyte tmp[8] = {0};
// for(j=0;j<200;j++){for(i=0;i<133;i++);}
// USER CODE END
MAIN_vInit();
@@ -238,6 +237,11 @@ void main(void)
RomNum = Search_ROM(romid); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>оƬ<D0BE><C6AC><EFBFBD><EFBFBD>ROM ID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>romid<69><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>оƬ<D0BE><C6AC><EFBFBD><EFBFBD>
// if(1 == power_state)//<2F><><EFBFBD><EFBFBD>ѲŸ<D1B2><C5B8><EFBFBD>ʱ<EFBFBD><CAB1>
// {
bm8563SetTime(&inittime);//20250802 <20><>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊʱ<CEAA><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD><EFBFBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// }
while(1)
{

281
RTC.c
View File

@@ -1,25 +1,8 @@
#include "MAIN.H"
#include <stdio.h>
#include "RTC.H"
unsigned char bySta = 0;
// <20><>̬<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><EFBFBD><EAA3AC><EFBFBD><EFBFBD>1~12<31><32>Ӧ1<D3A6><31>~12<31>£<EFBFBD>
ubyte days_in_month[12] = {
31, // 1<><31>
28, // 2<>£<EFBFBD>ƽ<EFBFBD>
31, // 3<><33>
30, // 4<><34>
31, // 5<><35>
30, // 6<><36>
31, // 7<><37>
31, // 8<><38>
30, // 9<><39>
31, // 10<31><30>
30, // 11<31><31>
31 // 12<31><32>
};
#include <string.h>
//unsigned char bySta = 0;
void SDAOut(bit c)
{
@@ -178,148 +161,94 @@ unsigned char BM8563_ReadReg(unsigned char reg)
return rdata;
}
// <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
ubyte leapYear(uword year) {
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
/**
* @brief <20><>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD><DDBA>·ݵ<C2B7><DDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param year: <20><><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2024<32><34>
* @param month: <20>·ݣ<C2B7>1-12<31><32>
* @retval <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30>
*/
ubyte getMonthDays(uword year, ubyte month) {
// <20><>̬<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><EFBFBD><EAA3AC><EFBFBD><EFBFBD>1~12<31><32>Ӧ1<D3A6><31>~12<31>£<EFBFBD>
ubyte days_in_month[13] = {
0, 31, 28, 31, 30, 31, 30,
31, 31, 30, 31, 30, 31
};
// <20><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>
if (month < 1 || month > 12) return 0;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32>
if (month == 2 && leapYear(year)) {
return 29;
}
// <20><><EFBFBD>س<EFBFBD><D8B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return days_in_month[month];
}
/**
* @brief <20><><EFBFBD><EFBFBD><E9B1A8><EFBFBD><EFBFBD>־AF<41>Ƿ<EFBFBD><C7B7><EFBFBD>λ<EFBFBD><CEBB>Bit3<74><33>
* @retval true-<2D><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD><D1B4><EFBFBD><EFBFBD><EFBFBD>false-<2D>ޱ<EFBFBD><DEB1><EFBFBD>
*/
bool bm8563CheckAlarmFlag(void) {
ubyte reg_val = BM8563_ReadReg(BM8563_CSR2);
return (reg_val & BM8563_AF_BIT) != 0; // <20><><EFBFBD><EFBFBD>Bit3
bool bm8563CheckAlarmFlag(void)
{
ubyte reg_val = BM8563_ReadReg(BM8563_CSR2);
return (reg_val & BM8563_AF_BIT) != 0; // <20><><EFBFBD><EFBFBD>Bit3,<2C><><EFBFBD><EFBFBD>Ϊ0<CEAA>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>Ǿ<EFBFBD>
}
/**
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־AF<41><46>Bit3<74><33>
* @note <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>Bit1 AIE<49><45>־<EFBFBD><D6BE>״̬
*/
void bm8563ClearAlarmFlag(void) {
ubyte reg_val = BM8563_ReadReg(BM8563_CSR2);
reg_val &= ~BM8563_AF_BIT; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Bit3
BM8563_WriteReg(BM8563_CSR2, reg_val);
// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>Сֵ<D0A1><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ֮<D6B5><D6AE>
ubyte constrain(ubyte value, ubyte min_val, ubyte max_val)
{
if (value < min_val)
{
return min_val;
}
else if (value > max_val)
{
return max_val;
}
else
{
return value;
}
}
/**
* @brief <20><><EFBFBD><EFBFBD>BM8563<36><33>ǰʱ<C7B0><EFBFBD><E4A3A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>·ݼĴ<DDBC><C4B4><EFBFBD><EFBFBD><EFBFBD>
* @param pTime: ʱ<><CAB1><EFBFBD><EFBFBD><E1B9B9>ָ<EFBFBD><EFBFBD><EBA3A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1984<38><34>2024<32><34>
* @retval <20><>
*/
void bm8563SetTime(UnTimeOutput *pTime) {
void bm8563SetTime(UnTimeOutput *pTime)
{
ubyte reg_sec = 0;
UnTimeOutput time_temp = {0};
ubyte century_bit = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ubyte reg_sec = 0;
ubyte month_bcd = 0;
if (pTime == NULL) return;
if (pTime == NULL) {
return; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ
}
memcpy(&time_temp,pTime,sizeof(UnTimeOutput));//<2F>ȿ<EFBFBD><C8BF><EFBFBD>
// --- <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD> ---
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD>־<EFBFBD><D6BE>0:20<32><30><EFBFBD>ͼ<EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD>1:19<31><39><EFBFBD>ͣ<EFBFBD>
// uint8_t century_bit = (pTime->bit_data.year >= 2000) ? 0 : 1; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
time_temp.bit_data.year = constrain(time_temp.bit_data.year,0,99);//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Χ
time_temp.bit_data.month = constrain(time_temp.bit_data.month,1,12);//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Χ
time_temp.bit_data.day = constrain(time_temp.bit_data.day,1,31);//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>Χ
time_temp.bit_data.hour = constrain(time_temp.bit_data.hour,0,23);//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Χ
time_temp.bit_data.week = constrain(time_temp.bit_data.week,0,6);//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Χ
time_temp.bit_data.minute = constrain(time_temp.bit_data.minute,0,59);//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Χ
time_temp.bit_data.second = constrain(time_temp.bit_data.second,0,59);//<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Χ
// --- <20>Ĵ<EFBFBD><C4B4><EFBFBD>д<EFBFBD><EFBFBD><EBA3A8><EFBFBD><EFBFBD><EFBFBD>룩---
BM8563_WriteReg( BM8563_YEAR, DecToBcd(pTime->bit_data.year) );//д<><EFBFBD><EAA3AC><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ΪBCD<43><44>
BM8563_WriteReg( BM8563_MONTH, DecToBcd(pTime->bit_data.month)&0x1F);//д<>£<EFBFBD><C2A3><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ΪBCD<43><44>
BM8563_WriteReg( BM8563_DAY, DecToBcd(pTime->bit_data.day)&0x3F);//д<>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ΪBCD<43><44>
BM8563_WriteReg( BM8563_HOUR, DecToBcd(pTime->bit_data.hour)&0x3F);//дСʱ<D0A1><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ΪBCD<43><44>
BM8563_WriteReg( BM8563_WEEK, pTime->bit_data.week&0x07 );//д<>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>Ҫת
BM8563_WriteReg( BM8563_MIN, DecToBcd( pTime->bit_data.minute)&0x7F);//д<><D0B4><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ΪBCD<43><44>
// <20><EFBFBD><EBA3A8>ַ0x02<30><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Bit7<74><37>CHʱ<48><CAB1>ֹͣλ<D6B9><CEBB>
reg_sec = BM8563_ReadReg(BM8563_SEC) & 0x80;
BM8563_WriteReg(BM8563_SEC, reg_sec | (DecToBcd(pTime->bit_data.second) & 0x7F));
// <20>֣<EFBFBD><D6A3><EFBFBD>ַ0x03<30><33>
BM8563_WriteReg(BM8563_MIN, DecToBcd(pTime->bit_data.minute) & 0x7F);
// Сʱ<D0A1><CAB1><EFBFBD><EFBFBD>ַ0x04<30><34><EFBFBD><EFBFBD>24Сʱ<D0A1><CAB1>
BM8563_WriteReg(BM8563_HOUR, DecToBcd(pTime->bit_data.hour) & 0x3F);
// <20>գ<EFBFBD><D5A3><EFBFBD>ַ0x05<30><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>λ
BM8563_WriteReg(BM8563_DAY, DecToBcd(pTime->bit_data.day) & 0x3F);
// <20>ܣ<EFBFBD><DCA3><EFBFBD>ַ0x06<30><36><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Χ1-7
BM8563_WriteReg(BM8563_WEEK, pTime->bit_data.week & 0x07);
// <20>£<EFBFBD><C2A3><EFBFBD>ַ0x07<30><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λд<CEBB><D0B4>Bit7<74><37><EFBFBD>·<EFBFBD>ռ<EFBFBD><D5BC>
month_bcd = DecToBcd(pTime->bit_data.month);
BM8563_WriteReg(BM8563_MONTH, (century_bit << 7) | (month_bcd & 0x1F));
// <20><EFBFBD><EAA3A8>ַ0x08<30><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>2024<32><34>0x24<32><34>
BM8563_WriteReg(BM8563_YEAR, DecToBcd(pTime->bit_data.year));
reg_sec = BM8563_ReadReg(BM8563_SEC) & 0x80;//
BM8563_WriteReg(BM8563_SEC, reg_sec | (DecToBcd(pTime->bit_data.second) & 0x7F));//ע<><D7A2><EFBFBD><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>ָʾ
}
/**
* @brief <20><>ȡBM8563<36><33>ǰʱ<C7B0><EFBFBD><E4B5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param pTime: UnTimeOutput<75><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EBA3A8><EFBFBD>ڴ洢<DAB4><E6B4A2>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>
* @retval <20><>
*/
void bm8563GetTime(UnTimeOutput *pTime) {
if (pTime == NULL) {
return; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ
}
// <20><>ȡ<EFBFBD><EFBFBD><EBA3A8>ַ0x02<30><32>
pTime->bit_data.second = BcdToDec(BM8563_ReadReg(BM8563_SEC) & 0x7F); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Чλ
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD>ַ0x03<30><33>
pTime->bit_data.minute = BcdToDec(BM8563_ReadReg(BM8563_MIN) & 0x7F);
// <20><>ȡСʱ<D0A1><CAB1><EFBFBD><EFBFBD>ַ0x04<30><34>
pTime->bit_data.hour = BcdToDec(BM8563_ReadReg(BM8563_HOUR) & 0x3F); // 24Сʱ<D0A1><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Bit6-7
// <20><>ȡ<EFBFBD>գ<EFBFBD><D5A3><EFBFBD>ַ0x05<30><35>
pTime->bit_data.day = BcdToDec(BM8563_ReadReg(BM8563_DAY) & 0x3F); // <20><><EFBFBD>ο<EFBFBD><CEBF><EFBFBD>λ
// <20><>ȡ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD>ַ0x06<30><36>BM8563<36><33>ֵΪ0x01-0x07<30><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD>BCDת<44><D7AA><EFBFBD><EFBFBD>
pTime->bit_data.week = BM8563_ReadReg(BM8563_WEEK) & 0x07; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ȡ<EFBFBD>£<EFBFBD><C2A3><EFBFBD>ַ0x07<30><37>
pTime->bit_data.month = BcdToDec(BM8563_ReadReg(BM8563_MONTH) & 0x1F); // <20><><EFBFBD><EFBFBD>Bit5-7
// <20><>ȡ<EFBFBD><EFBFBD><EAA3A8>ַ0x08<30><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ2000+<2B>
pTime->bit_data.year = BcdToDec(BM8563_ReadReg(BM8563_YEAR));
void bm8563GetTime(UnTimeOutput *pTime)
{
pTime->bit_data.year = BcdToDec(BM8563_ReadReg(BM8563_YEAR) );//<2F><>ȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>10<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pTime->bit_data.month = BcdToDec(BM8563_ReadReg(BM8563_MONTH)&0x1F);
pTime->bit_data.day = BcdToDec(BM8563_ReadReg(BM8563_DAY)&0x3F);
pTime->bit_data.hour = BcdToDec(BM8563_ReadReg(BM8563_HOUR)&0x3F);
pTime->bit_data.week = BM8563_ReadReg(BM8563_WEEK)&0x07;
pTime->bit_data.minute = BcdToDec(BM8563_ReadReg(BM8563_MIN)&0x7F);
pTime->bit_data.second = BcdToDec(BM8563_ReadReg(BM8563_SEC)&0x7F);
}
/**
* @brief <20><><EFBFBD><EFBFBD>BM8563<36><33><EFBFBD>ӣ<EFBFBD><D3A3>ֶ<EFBFBD>Ϊ0ʱ<30><CAB1><EFBFBD>ö<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param pTime: UnTimeOutput<75><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EBA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval <20><>
*/
ubyte bm8563SetAlarm(UnTimeOutput *pTime) {
UnTimeOutput un_temp_output = {0};//<2F><><EFBFBD><EFBFBD><EFBFBD>趨ʱ<E8B6A8><CAB1>
ubyte bm8563SetAlarm(UnTimeOutput *pTime)
{
UnTimeOutput current_time_temp = {0};
UnTimeOutput output_time_temp = {0};
ubyte carry_hour = 0;
ubyte carry_day = 0;
ubyte month_days = 0;
//-------------------------------------------------
// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
if( (pTime == NULL) || ( (0 == pTime->bit_data.minute) && (0 == pTime->bit_data.hour) && (0 == pTime->bit_data.day) ) )//<2F><><EFBFBD>ݶ<EFBFBD>Ϊ0<CEAA><30><EFBFBD><EFBFBD>ָ<EFBFBD>붼Ϊ0
{
@@ -327,47 +256,37 @@ ubyte bm8563SetAlarm(UnTimeOutput *pTime) {
return 1;
}
bm8563GetTime(&currenttime);
bm8563GetTime(&current_time_temp);//<2F>Ȼ<EFBFBD>ȡ<EFBFBD><C8A1>ǰʱ<C7B0><CAB1>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0-59<35><39>
un_temp_output.bit_data.minute = currenttime.bit_data.minute + pTime->bit_data.minute;
if (un_temp_output.bit_data.minute >= 60) {
un_temp_output.bit_data.minute -= 60;
carry_hour = 1; // <20><>Сʱ<D0A1><CAB1>λ
}
// Сʱ<D0A1><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0-23<32><33>
un_temp_output.bit_data.hour = currenttime.bit_data.hour + pTime->bit_data.hour + carry_hour;
if (un_temp_output.bit_data.hour >= 24) {
un_temp_output.bit_data.hour -= 24;
carry_day = 1; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8BFBC><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
un_temp_output.bit_data.day = currenttime.bit_data.day + pTime->bit_data.day + carry_day;
//2<>¿<EFBFBD><C2BF><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
month_days = getMonthDays( (currenttime.bit_data.year+2000),currenttime.bit_data.month);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8BFBC><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (un_temp_output.bit_data.day > month_days)
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
output_time_temp.bit_data.minute = current_time_temp.bit_data.minute + pTime->bit_data.minute;
if( output_time_temp.bit_data.minute >= 60 )//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>λ
{
un_temp_output.bit_data.day -= month_days;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD>£<EFBFBD><C2A3><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>죬BM8563<36><33><EFBFBD><EFBFBD>ֻ֧<D6BB><D6A7><EFBFBD><EFBFBD>ô<EFBFBD><C3B4>
if(un_temp_output.bit_data.day == currenttime.bit_data.day)
{
un_temp_output.bit_data.day = (currenttime.bit_data.day - 1);
}
output_time_temp.bit_data.minute = output_time_temp.bit_data.minute - 60;
carry_hour = 1;
}
//<2F><><EFBFBD><EFBFBD>Сʱ
output_time_temp.bit_data.hour = current_time_temp.bit_data.hour + pTime->bit_data.hour + carry_hour;
if( output_time_temp.bit_data.hour >= 24 )//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>λ
{
output_time_temp.bit_data.hour = output_time_temp.bit_data.hour - 24;
carry_day = 1;
}
un_temp_output.bit_data.week = 0;//<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD>ܱ<EFBFBD><DCB1><EFBFBD>
output_time_temp.bit_data.day = current_time_temp.bit_data.day + pTime->bit_data.day + carry_day;
if( output_time_temp.bit_data.day >= 31 )//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>λ
{
output_time_temp.bit_data.day = 31;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD>ַ0x09<30><39>
BM8563_WriteReg(BM8563_ALARM_MIN, DecToBcd(un_temp_output.bit_data.minute) & 0x7F); // AE_M=0<><30><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>
// <20><><EFBFBD><EFBFBD>Сʱ<D0A1><CAB1><EFBFBD>ã<EFBFBD><C3A3><EFBFBD>ַ0x0A<30><41>
BM8563_WriteReg(BM8563_ALARM_HOUR, DecToBcd(un_temp_output.bit_data.hour) & 0x7F); // AE_H=0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>
// <20>ձ<EFBFBD><D5B1><EFBFBD>/<2F>ܱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BM8563_WriteReg(BM8563_ALARM_DAY, DecToBcd(un_temp_output.bit_data.day) & 0x7F); // AE_D=0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>գ<EFBFBD>
BM8563_WriteReg(BM8563_ALARM_WEEK, 0x80); // AE_W=1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD>
output_time_temp.bit_data.week = 0;
BM8563_WriteReg( BM8563_ALARM_DAY, DecToBcd(output_time_temp.bit_data.day)&0x3F);//д<>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ΪBCD<43><44>
BM8563_WriteReg( BM8563_ALARM_HOUR, DecToBcd(output_time_temp.bit_data.hour)&0x3F);//дСʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>ΪBCD<EFBFBD><EFBFBD>
BM8563_WriteReg( BM8563_ALARM_WEEK, 0x80 );//д<>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BM8563_WriteReg( BM8563_ALARM_MIN, DecToBcd(output_time_temp.bit_data.minute)&0x7F);//д<EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>ΪBCD<EFBFBD><EFBFBD>
// <20><EFBFBD><EBA3A8>ַ0x02<30><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Bit7<74><37>CHʱ<48><CAB1>ֹͣλ<D6B9><CEBB>
// ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6><CFA3><EFBFBD>ַ0x01<30><31>AIE=1<><31>AF=0<><30>
BM8563_WriteReg(BM8563_CSR2, 0x02);
@@ -383,33 +302,3 @@ ubyte bm8563SetAlarm(UnTimeOutput *pTime) {
//// <20><><EFBFBD><EFBFBD> BM8563 <20><><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD>ʵ<EFBFBD>ּ<EFBFBD><D6BC><EFBFBD> 4 Сʱ<D0A1>Ļ<EFBFBD><C4BB><EFBFBD>
//void BM8563_Set4HourAlarm()
//{
// unsigned char alarmMin = BcdToDec( BM8563_ReadReg(BM8563_MIN) );
// unsigned char alarmMinBcd = 0;
////------------------------------------------------------------
// alarmMin = (alarmMin + 2) % 60;//<2F><><EFBFBD><EFBFBD> 4 Сʱ<D0A1><CAB1><EFBFBD><EFBFBD>Сʱ<D0A1><CAB1>
// alarmMinBcd = DecToBcd(alarmMin);
// BM8563_WriteReg(BM8563_ALARM_MIN,alarmMinBcd&0x7F);// <20><><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// BM8563_WriteReg(BM8563_ALARM_HOUR, 0x80); // <20><>Ч
// BM8563_WriteReg(BM8563_ALARM_DAY , 0x80); // <20><>Ч
// BM8563_WriteReg(BM8563_ALARM_WEEK, 0x80); // <20><>Ч
//
// // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD><D3BF>ƼĴ<C6BC><C4B4><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
// BM8563_WriteReg(BM8563_CSR2, 0x02);
//}

9
RTC.h
View File

@@ -8,8 +8,6 @@
typedef enum {
STATE_INIT = 0, // <20><>ʼ<EFBFBD><CABC>״̬<D7B4><CCAC><EFBFBD>״<EFBFBD><D7B4><EFBFBD><EFBFBD>У<EFBFBD>
STATE_ON, // ON״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD>ģʽ<C4A3><CABD>
STATE_OFF, // OFF״̬<D7B4><CCAC>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD>
STATE_OFF2, // OFF2״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>أ<EFBFBD>
STATE_ON2 // ON2״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD>
} SystemState;
@@ -38,7 +36,7 @@ typedef union _UnTimeOutput
extern unsigned char bySta;
extern UnTimeOutput currenttime;
extern UnTimeOutput un_time_output1;//<2F><><EFBFBD><EFBFBD><EFBFBD>趨ʱ<E8B6A8><CAB1>
extern UnTimeOutput inittime;// Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2025<32>꣬8<EAA3AC><38>2<EFBFBD><32> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16<31><36>37<33><37>00
// <20><><EFBFBD><EFBFBD> BM8563 <20><> I2C <20><>ַ
@@ -64,6 +62,8 @@ extern UnTimeOutput un_time_output1;//
#define BM8563_AF_BIT 0x08 // AF<41><46>־λ<D6BE><CEBB>Bit3<74><33>
unsigned char BcdToDec(unsigned char bcd);
ubyte leapYear(uword year);
void BM8563_InitTime();
void BM8563_Set4HourCountdown();
@@ -74,7 +74,8 @@ void bm8563GetTime(UnTimeOutput *pTime);
ubyte bm8563SetAlarm(UnTimeOutput *pTime);
void bm8563SetTime(UnTimeOutput *pTime);
bool bm8563CheckAlarmFlag(void);
void bm8563ClearAlarmFlag(void);
void iic_start(void);
void iic_stop(void);

323
User.c
View File

@@ -17,6 +17,7 @@ uword RgCanPerid = 1000;
UnTimeOutput sleeptime = {0};
UnTimeOutput waketime = {0};
UnTimeOutput currenttime = {0};
UnTimeOutput inittime = {00,1,1,0,0,0,0,0};// Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2000<30>꣬1<EAA3AC><31>1<EFBFBD><31> <20><><EFBFBD>գ<EFBFBD>0<EFBFBD><30>0<EFBFBD><30>00
UnTimeOutput un_time_output1 = {0};//<2F><><EFBFBD><EFBFBD><EFBFBD>趨ʱ<E8B6A8><CAB1>
UnInfCanKGFOutput un_inf_can_kgf_output2 = {0};//kgf<67><66><EFBFBD><EFBFBD>
UnInfCanKGFOutput un_inf_can_kgf_output1 = {0};//kgf<67><66><EFBFBD><EFBFBD>
@@ -127,7 +128,7 @@ void CanTX(void)
UnInfCan_1.ArrData.Arr[0][7] = currenttime.bit_data.week;
UnInfCan_1.ArrData.Arr[0][6] = currenttime.bit_data.minute;
UnInfCan_1.ArrData.Arr[0][5] = currenttime.bit_data.second;
UnInfCan_1.ArrData.Arr[0][4] = sleepstate;
UnInfCan_1.ArrData.Arr[0][4] = waketime.bit_data.day;
CanTransmit();
}
@@ -136,231 +137,69 @@ void CanTX(void)
//------------------------------------------------------------------
void SystemStateMachine(SystemState *RgSTT)
{
ubyte i = 0;
//----------------------------------------------
switch (*RgSTT)
{
//-------------------------------------------
case STATE_INIT:
if(NORMAL == flg_wake_ecu)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if(STOP_PIN == ON) //<2F><>ͣ<EFBFBD><CDA3><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD>
{
*RgSTT = STATE_ON; // <20><><EFBFBD><EFBFBD>ΪON<4F><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBB9A4>״̬
wake_time_10min.bit_data.day = 0;
wake_time_10min.bit_data.hour = 0;
wake_time_10min.bit_data.week = 0;
wake_time_10min.bit_data.minute = 10;
bm8563ClearAlarmFlag(); //<2F><><EFBFBD><EFBFBD>0
bm8563SetAlarm(&wake_time_10min);//<2F><><EFBFBD><EFBFBD>10<31><30><EFBFBD><EFBFBD>
}
else
{
*RgSTT = STATE_OFF; // RTC<54><43><EFBFBD>ѣ<EFBFBD>ֱ<EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׼<EFBFBD><D7BC>
}
}
else
{
*RgSTT = STATE_INIT;
}
break;
if(NORMAL == flg_wake_ecu)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
bm8563SetAlarm(&waketime); //<2F><><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ʱ<EFBFBD><CAB1>
memcpy(&waketimelast,&waketime,sizeof(UnTimeOutput));
*RgSTT = STATE_ON;
}
else
{
*RgSTT = STATE_INIT;
}
break;
//-------------------------------------------
case STATE_ON:
if(bm8563CheckAlarmFlag() || ( (STOP_PIN == OFF) && (POWER_STANDBY == powerstate) ) || (WAKE_UP_PIN == OFF) )//10<31><30><EFBFBD>ӵ<EFBFBD><D3B5>˻<EFBFBD><CBBB>߰<EFBFBD><DFB0>¼<EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߻<EFBFBD><EFBFBD>߹ر<EFBFBD><EFBFBD>ܿ<EFBFBD><EFBFBD><EFBFBD>
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
bm8563ClearAlarmFlag();
bm8563SetAlarm(&sleeptime);
KGF_PIN = 0; //KGF<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CAN_PIN = 1; //canоƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BATTERY_PIN = 0;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*RgSTT = STATE_ON; // <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>Ѻ<EFBFBD><D1BA><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD>
PS_vSetPowerDown();//<2F><><EFBFBD><EFBFBD>
}
else if( (POWER_WORKING == powerstate) || (POWER_EMERGENCY == powerstate) )//<2F><><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD>״̬
{
*RgSTT = STATE_ON2; // <20><><EFBFBD><EFBFBD>STATE_ON2
}
else
{
*RgSTT = STATE_ON; // <20><><EFBFBD><EFBFBD>
}
// <20><><EFBFBD><EFBFBD>ON״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
//-------------------------------------------
if( bm8563CheckAlarmFlag() )//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD><EFBFBD>عر<EFBFBD>
{
bm8563SetTime(&inittime);//20250802 <20><>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊʱ<CEAA><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD><EFBFBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bm8563SetAlarm(&sleeptime);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
KGF_PIN = 0; //KGF<47><46><EFBFBD><EFBFBD>
CAN_PIN = 1; //canоƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BATTERY_PIN = 0;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*RgSTT = STATE_INIT; // <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>״̬
PS_vSetPowerDown();//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
else if(0 != memcmp(&waketimelast,&waketime,sizeof(UnTimeOutput)))//<2F>Ƚ<EFBFBD>ֵ<EFBFBD>Ƿ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
memcpy(&waketimelast,&waketime,sizeof(UnTimeOutput));
bm8563SetAlarm(&waketime);
*RgSTT = STATE_ON; // <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>Ѻ<EFBFBD><D1BA><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD>
}
else if( (POWER_WORKING == powerstate) || (POWER_EMERGENCY == powerstate) )//<2F><><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD>״̬
{
*RgSTT = STATE_ON2; // <20><><EFBFBD><EFBFBD>STATE_ON2
}
else
{
*RgSTT = STATE_ON; // <20><><EFBFBD><EFBFBD>
}
break;
case STATE_ON2:
if(POWER_STANDBY == powerstate)//<2F>µ<EFBFBD>ѹ<EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD><EFBFBD><EFBFBD>ON<EFBFBD><EFBFBD>ʱ<EFBFBD>ж<EFBFBD>
{
*RgSTT = STATE_ON; //
wake_time_10min.bit_data.day = 0;
wake_time_10min.bit_data.hour = 0;
wake_time_10min.bit_data.week = 0;
wake_time_10min.bit_data.minute = 10;
bm8563ClearAlarmFlag(); //<2F><><EFBFBD><EFBFBD>0
bm8563SetAlarm(&wake_time_10min);//<2F><><EFBFBD><EFBFBD>10<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
else if(WAKE_UP_PIN == OFF)//<2F>ܿ<EFBFBD><DCBF>عر<D8B9>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
bm8563ClearAlarmFlag();
bm8563SetAlarm(&sleeptime);
KGF_PIN = 0; //KGF<47><46><EFBFBD><EFBFBD>
CAN_PIN = 1; //canоƬ<D0BE><C6AC><EFBFBD><EFBFBD>
BATTERY_PIN = 0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*RgSTT = STATE_ON2; // <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>Ѻ<EFBFBD><D1BA><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD>
PS_vSetPowerDown();//<2F><><EFBFBD><EFBFBD>
}
else
{
*RgSTT = STATE_ON2; // <20><><EFBFBD><EFBFBD>
}
break;
//-------------------------------------------
case STATE_OFF:
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>´λ<C2B4><CEBB><EFBFBD>
bm8563ClearAlarmFlag();
bm8563SetAlarm(&waketime);
memcpy(&waketimelast,&waketime,sizeof(UnTimeOutput));
*RgSTT = STATE_OFF2; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC><EFBFBD>
break;
//-------------------------------------------
case STATE_OFF2:
if (STOP_PIN == ON) //<2F>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
*RgSTT = STATE_ON; // <20><><EFBFBD><EFBFBD>ΪON<4F><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBB9A4>״̬
wake_time_10min.bit_data.day = 0;
wake_time_10min.bit_data.hour = 0;
wake_time_10min.bit_data.week = 0;
wake_time_10min.bit_data.minute = 10;
bm8563ClearAlarmFlag(); //<2F><><EFBFBD><EFBFBD>0
bm8563SetAlarm(&wake_time_10min);//<2F><><EFBFBD><EFBFBD>10<31><30><EFBFBD><EFBFBD>
}
else if(POWER_WORKING == powerstate)//<2F><><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD>״̬
{
*RgSTT = STATE_ON2; // <20><><EFBFBD><EFBFBD>״̬
}
else if(0 != memcmp(&waketimelast,&waketime,sizeof(UnTimeOutput)))//<2F>Ƚ<EFBFBD>ֵ<EFBFBD>Ƿ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
memcpy(&waketimelast,&waketime,sizeof(UnTimeOutput));
bm8563SetAlarm(&waketime);
*RgSTT = STATE_OFF2; // <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>Ѻ<EFBFBD><D1BA><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD>
}
else if(bm8563CheckAlarmFlag()) //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD>
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
bm8563ClearAlarmFlag();
bm8563SetAlarm(&sleeptime);
KGF_PIN = 0; //KGF<47><46><EFBFBD><EFBFBD>
CAN_PIN = 1; //canоƬ<D0BE><C6AC><EFBFBD><EFBFBD>
BATTERY_PIN = 0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*RgSTT = STATE_OFF2; // <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>Ѻ<EFBFBD><D1BA><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD>
PS_vSetPowerDown();//<2F><><EFBFBD><EFBFBD>
}
else
{
*RgSTT = STATE_OFF2; // <20>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>
}
break;
default:break;
}
// switch (*RgSTT)
// {
// //-------------------------------------------
// case STATE_INIT:
// if(1 == flgwakeecu)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// {
// if (WAKE_UP_PIN == ON) {
// *RgSTT = STATE_ON; // <20><><EFBFBD><EFBFBD>ΪON<4F><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBB9A4>״̬
// } else {
// *RgSTT = STATE_OFF; // <20><><EFBFBD><EFBFBD>ΪOFF<46><46>ֱ<EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׼<EFBFBD><D7BC>
// }
// }
// else
// {
// *RgSTT = STATE_INIT;
// }
// break;
// //-------------------------------------------
// case STATE_ON:
// if( (WAKE_UP_PIN == OFF) || ( (STOP_PIN == OFF) && (POWER_STANDBY == powerstate) ) )//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܿ<EFBFBD><DCBF>ضϿ<D8B6><CFBF><EFBFBD><EFBFBD>߼<EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD>ذ<EFBFBD><D8B0><EFBFBD><EFBFBD>Ҵ<EFBFBD><D2B4><EFBFBD><EFBFBD>µ<EFBFBD>ģʽ
// {
// // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>´λ<C2B4><CEBB><EFBFBD>
// bm8563SetAlarm(&sleeptime);
// *RgSTT = STATE_OFF; // <20><><EFBFBD><EFBFBD>ΪOFF<46><46>ֱ<EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׼<EFBFBD><D7BC>
// KGF_PIN = 0; //KGF<47><46><EFBFBD><EFBFBD>
// CAN_PIN = 1; //canоƬ<D0BE><C6AC><EFBFBD><EFBFBD>
// PS_vSetPowerDown();//<2F><><EFBFBD><EFBFBD>
// }
// else
// {
// *RgSTT = STATE_ON; // <20><><EFBFBD><EFBFBD>ΪON<4F><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBB9A4>״̬
// }
// // <20><><EFBFBD><EFBFBD>ON״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// break;
// //-------------------------------------------
// case STATE_OFF:
// if (WAKE_UP_PIN == ON) {
// *RgSTT = STATE_ON; // <20>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>
// } else {
// // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>´λ<C2B4><CEBB><EFBFBD>
// bm8563SetAlarm(&waketime);
//
// memcpy(&waketimelast,&waketime,sizeof(UnTimeOutput));
//
// *RgSTT = STATE_OFF2; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC><EFBFBD>
// }
// break;
// //-------------------------------------------
// case STATE_OFF2:
// if (WAKE_UP_PIN == ON) //<2F>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// {
// *RgSTT = STATE_ON; // <20>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>
// }
// else if(0 != memcmp(&waketimelast,&waketime,sizeof(UnTimeOutput)))//<2F>Ƚ<EFBFBD>ֵ<EFBFBD>Ƿ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// {
// memcpy(&waketimelast,&waketime,sizeof(UnTimeOutput));
// bm8563SetAlarm(&waketime);
// *RgSTT = STATE_OFF2; // <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>Ѻ<EFBFBD><D1BA><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD>
// }
// else if (bm8563CheckAlarmFlag())
// {
// // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
// bm8563ClearAlarmFlag();
//
// bm8563SetAlarm(&sleeptime);
// KGF_PIN = 0; //KGF<47><46><EFBFBD><EFBFBD>
// CAN_PIN = 1; //canоƬ<D0BE><C6AC><EFBFBD><EFBFBD>
// *RgSTT = STATE_OFF2; // <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>Ѻ<EFBFBD><D1BA><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD>
// PS_vSetPowerDown();//<2F><><EFBFBD><EFBFBD>
// }
// else
// {
// *RgSTT = STATE_OFF2; // <20>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>
// }
// break;
// default:break;
// }
if(POWER_STANDBY == powerstate)//<2F>ܿ<EFBFBD><EFBFBD>عرջ<EFBFBD><EFBFBD>߽<EFBFBD><EFBFBD><EFBFBD>standy
{
bm8563SetTime(&inittime);//20250802 <20><>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊʱ<CEAA><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD><EFBFBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bm8563SetAlarm(&sleeptime);
KGF_PIN = 0; //KGF<47><46><EFBFBD><EFBFBD>
CAN_PIN = 1; //canоƬ<D0BE><C6AC><EFBFBD><EFBFBD>
BATTERY_PIN = 0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*RgSTT = STATE_INIT; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
PS_vSetPowerDown();//<2F><><EFBFBD><EFBFBD>
}
else
{
*RgSTT = STATE_ON2; // <20><><EFBFBD><EFBFBD>
}
break;
default:;
}
}
//CAN<41><4E><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>
void CanRXTX(void)
{
@@ -418,6 +257,7 @@ void CanRXTX(void)
UnInfCan_1.ArrData.ArrRX[0][5] = StrCanRx.ulDATAH.ubDB[2];
UnInfCan_1.ArrData.ArrRX[0][4] = StrCanRx.ulDATAH.ubDB[3];
CAN_vReleaseObj(DF_SwRx);
vcu_can_cnt ++;//<2F>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>߼<EFBFBD><DFBC><EFBFBD><EFBFBD>ۼ<EFBFBD>
@@ -426,7 +266,10 @@ void CanRXTX(void)
//<2F><EFBFBD><E8B6A8><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
TimeTemp = UnInfCan_1.ArrData.ArrRX[0][0] + ((ulong)UnInfCan_1.ArrData.ArrRX[0][1] << 8) ;//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
if(TimeTemp >= MAX_TIME)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>30<33><30>
{
TimeTemp = MAX_TIME;
}
// <20><><EFBFBD><EFBFBD> <20><> Сʱ
HoursTemp = TimeTemp / 60;
sleeptime.bit_data.minute = TimeTemp % 60;
@@ -435,9 +278,9 @@ void CanRXTX(void)
DaysTemp = HoursTemp / 24;
sleeptime.bit_data.hour = HoursTemp % 24;
if(DaysTemp >= 31)//<2F>³<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
if(DaysTemp >= 30)//<2F>ճ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
{
sleeptime.bit_data.day = 31;
sleeptime.bit_data.day = 30;
}
else
{
@@ -446,7 +289,10 @@ void CanRXTX(void)
//<2F><EFBFBD><E8B6A8><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
TimeTemp = UnInfCan_1.ArrData.ArrRX[0][2] + ((ulong)UnInfCan_1.ArrData.ArrRX[0][3] << 8);//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
if(TimeTemp > MAX_TIME)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>30<33><30>
{
TimeTemp = MAX_TIME;
}
// <20><><EFBFBD><EFBFBD> <20><> Сʱ
HoursTemp = TimeTemp / 60;
waketime.bit_data.minute = TimeTemp % 60;
@@ -455,9 +301,9 @@ void CanRXTX(void)
DaysTemp = HoursTemp / 24;
waketime.bit_data.hour = HoursTemp % 24;
if(DaysTemp >= 31)//<2F>³<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
if(DaysTemp >= 30)//<2F>ճ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
{
waketime.bit_data.day = 31;
waketime.bit_data.day = 30;
}
else
{
@@ -465,9 +311,6 @@ void CanRXTX(void)
}
}
UnSwSample_1.arr[2] = waketime.bit_data.minute;
UnSwSample_1.arr[1] = sleeptime.bit_data.minute;
//<2F><><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD>
SystemStateMachine(&sleepstate);
@@ -478,10 +321,23 @@ void CanRXTX(void)
FlgCan_1 = 1;
bm8563GetTime(&currenttime);//1s<31><73><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ʱ<EFBFBD><CAB1>
// CanTX();
UnSwSample_1.bit_data.temperature[1] = 0;
UnSwSample_1.bit_data.temperature[0] = 0;
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD>ַ0x03<30><33>
UnSwSample_1.arr[4] = (BM8563_ReadReg(BM8563_ALARM_MIN));
// <20><>ȡСʱ<D0A1><CAB1><EFBFBD><EFBFBD>ַ0x04<30><34>
UnSwSample_1.arr[2] = (BM8563_ReadReg(BM8563_ALARM_HOUR)); // 24Сʱ<D0A1><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Bit6-7
// <20><>ȡ<EFBFBD>գ<EFBFBD><D5A3><EFBFBD>ַ0x05<30><35>
UnSwSample_1.arr[1] = (BM8563_ReadReg(BM8563_ALARM_DAY)); // <20><><EFBFBD>ο<EFBFBD><CEBF><EFBFBD>λ
// <20><>ȡ<EFBFBD>գ<EFBFBD><D5A3><EFBFBD>ַ0x05<30><35>
UnSwSample_1.arr[5] = (BM8563_ReadReg(BM8563_ALARM_DAY)); // <20><><EFBFBD>ο<EFBFBD><CEBF><EFBFBD>λ
// <20><>ȡ<EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD>ַ0x06<30><36>BM8563<36><33>ֵΪ0x01-0x07<30><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD>BCDת<44><D7AA><EFBFBD><EFBFBD>
UnSwSample_1.arr[3] = BM8563_ReadReg(BM8563_ALARM_WEEK); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CanTX();
if(vcu_can_cnt == vcu_can_last)//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
{
@@ -489,16 +345,19 @@ void CanRXTX(void)
un_inf_can_kgf_output2.bit_data.KGF01 = 0x01;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
un_inf_can_kgf_output2.bit_data.KGF02 = 0x01;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
un_inf_can_kgf_output2.bit_data.KGF15 = 0x01;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
un_inf_can_kgf_output2.bit_data.KGF16 = 0x01;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// un_inf_can_kgf_output2.bit_data.KGF15 = 0x01;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// un_inf_can_kgf_output2.bit_data.KGF16 = 0x01;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
un_inf_can_kgf_output2.bit_data.KGF03 = 0x01;// ң<><D2A3><EFBFBD><EFBFBD>
un_inf_can_kgf_output2.bit_data.KGF05 = 0x01;// <20><><EFBFBD><EFBFBD><E7BDBB><EFBFBD><EFBFBD>
un_inf_can_kgf_output2.bit_data.KGF06 = 0x01;// <20><><EFBFBD><EFBFBD><E7BDBB><EFBFBD><EFBFBD>
un_inf_can_kgf_output1.bit_data.KGF09 = 0x01;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2
un_inf_can_kgf_output2.bit_data.KGF04 = 0x01;//KGF20<32>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
un_inf_can_kgf_output1.bit_data.KGF13 = 0x01;// <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>
if(1 == flg_KGF)//<2F>ȴ<EFBFBD>KGF<47><46><EFBFBD>Ѻ<EFBFBD><D1BA>ٷ<EFBFBD><D9B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
canSendTo(DF_SwTxKGF2,(ubyte *)&un_inf_can_kgf_output2.arr[0]);
@@ -518,7 +377,7 @@ void CanRXTX(void)
if(1 == flg_KGF)//<2F>ȴ<EFBFBD>KGF<47><46><EFBFBD>Ѻ<EFBFBD><D1BA>ٷ<EFBFBD><D9B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
canSendTo(DF_SwTxTemp,(ubyte *)&UnSwSample_1);
canSendTo(DF_SwTxTemp,(ubyte *)&UnSwSample_1.arr[0]);
}
}

View File

@@ -503,7 +503,7 @@ BOOL GetTemp(void)
for (i = 0; i < RomNum; i++) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>оƬ
{
iTemp[i] = 0;
// iTemp[i] = 0; 20250814ע<34><D7A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CRCʧ<43><CAA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD>
/*<2A><><EFBFBD><EFBFBD>*/
ReadTempWaiting(&iTemp[i], i);
@@ -512,7 +512,7 @@ BOOL GetTemp(void)
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD>з<EFBFBD><D0B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
signedInt_f_tem = (int)(fTemp*10);
// <20><EFBFBD> <20>з<EFBFBD><D0B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UnSwSample_1.bit_data.temperature[i] = (unsigned int)signedInt_f_tem;
UnSwSample_1.bit_data.temperature[1] = (unsigned int)signedInt_f_tem;
}
return TRUE;
}

1
user.H
View File

@@ -9,6 +9,7 @@
#define DF_SwTxTemp 12
#define DF_SwRxKGF2 13
#define MAX_TIME 43200 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD>30<33><30><EFBFBD><EFBFBD>
#define dfPwmH 10 //PWM<57>ĸߵ<C4B8>ƽʱ<C6BD>䣬10<31><30>10ms<6D><73><EFBFBD>ң<EFBFBD><D2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>20181227