ZDBMS/output/RTC.lst

284 lines
14 KiB
Plaintext
Raw Normal View History

2025-02-14 08:59:29 +00:00
C51 COMPILER V9.01 RTC 02/13/2025 10:07:28 PAGE 1
2025-02-06 07:35:32 +00:00
C51 COMPILER V9.01, COMPILATION OF MODULE RTC
OBJECT MODULE PLACED IN .\output\RTC.obj
COMPILER INVOKED BY: D:\Tool\Keil\C51\BIN\C51.EXE code_drv\RTC.c LARGE OPTIMIZE(7,SIZE) REGFILE(.\output\MCUCore_Load.OR
-C) BROWSE INTVECTOR(0X1000) INCDIR(.\header_app;.\header_drv;.\code_gasguage;.\code_classb\iec60730_lib\include;.\code_c
-lassb\iec60730_proc\Include;.\code_classb\config) DEBUG OBJECTEXTEND PRINT(.\output\RTC.lst) OBJECT(.\output\RTC.obj)
line level source
1 /********************************************************************************
2 Copyright (C), Sinowealth Electronic. Ltd.
3 Author: Sino
4 Version: V0.0
5 Date: 2020/04/26
6 History:
7 V2.0 2020/04/26 Preliminary
8 ********************************************************************************/
9 #include "Main.h"
10
11
12 BOOL bRTCErr;
13 BOOL bRTCTwiRWErr;
14 U8 xdata ucRTCTwiRWErrDelayCnt;
15 RTC_VAR xdata RTC; //For External RTC
16
17 /*************************************************************************************************
18 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: RTCTwiCheck
19 * <20><> <20><>: <20><>
20 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
21 * <20><> <20><>: <20><><EFBFBD><EFBFBD>5S<35><53><EFBFBD>⵽RTC<54><43>I2CͨѶ<CDA8><D1B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λbRTCErr=1
22 *************************************************************************************************/
23 void RTCTwiCheck(void)
24 {
25 1 if(bEnEEPRomBK)
26 1 {
27 2 if(bRTCTwiRWErr)
28 2 {
29 3 if(++ucRTCTwiRWErrDelayCnt >= TIME_1S_5S)
30 3 {
31 4 bRTCErr = 1;
32 4 ucRTCTwiRWErrDelayCnt = TIME_1S_5S;
33 4 }
34 3 }
35 2 else
36 2 {
37 3 ucRTCTwiRWErrDelayCnt = 0;
38 3 }
39 2 }
40 1 }
41
42
43 /*************************************************************************************************
44 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: RTCWrite
45 * <20><> <20><>: WrAddr: <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>Length<74><68><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>ȣ<EFBFBD>WrBuf<75><66><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD>Buf
46 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
47 * <20><> <20><>: RTCд<43>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
48 *************************************************************************************************/
49 BOOL RTCWrite(U8 WrAddr, U8 Length, U8 xdata *WrBuf)
50 {
51 1 BOOL Result = 0;
52 1 U8 i;
53 1
2025-02-14 08:59:29 +00:00
C51 COMPILER V9.01 RTC 02/13/2025 10:07:28 PAGE 2
2025-02-06 07:35:32 +00:00
54 1 if(!bRTCErr)
55 1 {
56 2 for(i=0; i<5; i++)
57 2 {
58 3 #ifdef TWI_Hardware_Module
59 3 if(TwiWrite(RTC_ID, WrAddr, TWI_ADDR_1B, Length, TWI_CRC_NO, WrBuf))
60 3 {
61 4 Result = 1;
62 4 break;
63 4 }
64 3 #else
if(Result = TwiWrite(RTC_ID, WrAddr, Length, WrBuf))
{
Result = 1;
break;
}
#endif
71 3 Delay1ms(1);
72 3 }
73 2 }
74 1 bRTCTwiRWErr = !Result;
75 1
76 1 return Result;
77 1 }
78
79
80 /*************************************************************************************************
81 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: RTCRead
82 * <20><> <20><>: RdAddr: <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>Length<74><68><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>ȣ<EFBFBD>WrBuf<75><66><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD>Buf
83 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
84 * <20><> <20><>: RTC<54><43><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
85 *************************************************************************************************/
86 BOOL RTCRead(U8 RdAddr, U8 Length, U8 xdata *RdBuf)
87 {
88 1 BOOL Result = 0;
89 1 U8 i;
90 1
91 1 if(!bRTCErr)
92 1 {
93 2 for(i=0; i<5; i++)
94 2 {
95 3 #ifdef TWI_Hardware_Module
96 3 if(TwiRead(RTC_ID, RdAddr, TWI_ADDR_1B, Length, TWI_CRC_NO, RdBuf))
97 3 {
98 4 Result = 1;
99 4 break;
100 4 }
101 3 #else
if(TwiRead(RTC_ID, RdAddr, Length, RdBuf))
{
Result = 1;
break;
}
#endif
108 3 Delay1ms(1);
109 3 }
110 2 }
111 1 bRTCTwiRWErr = !Result;
112 1
113 1 return Result;
114 1 }
115
2025-02-14 08:59:29 +00:00
C51 COMPILER V9.01 RTC 02/13/2025 10:07:28 PAGE 3
2025-02-06 07:35:32 +00:00
116 /*************************************************************************************************
117 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: RTCReadTime
118 * <20><> <20><>: RdAddr: <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>Length<74><68><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>ȣ<EFBFBD>WrBuf<75><66><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD>Buf
119 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
120 * <20><> <20><>: RTC<54><43><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
121 *************************************************************************************************/
122 BOOL RTCReadTime(RTC_VAR xdata *RtcRdVal)
123 {
124 1 U8 xdata rtcbuf[9];
125 1 BOOL Result = 0;
126 1
127 1 if(RTCRead(0x00, 9, &rtcbuf)) //<2F><>RTC<54><43>ȡʱ<C8A1><CAB1>
128 1 {
129 2 if((rtcbuf[7]&0x01) == 0x00) //judge RTCF bit<69><74><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
130 2 {
131 3 if( ((rtcbuf[2]&0x80) == 0) //<2F><><EFBFBD><EFBFBD>24Сʱ<D0A1><CAB1>
132 3 || ((rtcbuf[0]&0x70) > 0x50) || ((rtcbuf[0]&0x0F) > 0x09) || ((rtcbuf[0]&0x7F) > 0x59)
133 3 || ((rtcbuf[1]&0x70) > 0x50) || ((rtcbuf[1]&0x0F) > 0x09) || ((rtcbuf[1]&0x7F) > 0x59)
134 3 || ((rtcbuf[2]&0x30) > 0x20) || ((rtcbuf[2]&0x0F) > 0x09) || ((rtcbuf[2]&0x2F) > 0x24)
135 3 || ((rtcbuf[3]&0x30) > 0x30) || ((rtcbuf[3]&0x0F) > 0x09) || ((rtcbuf[3]&0x3F) > 0x31) || (!(r
-tcbuf[3]&0x3F))
136 3 || ((rtcbuf[4]&0x10) > 0x10) || ((rtcbuf[4]&0x0F) > 0x09) || ((rtcbuf[4]&0x1F) > 0x12) || (!(r
-tcbuf[4]&0x1F))
137 3 || ((rtcbuf[5]&0xF0) > 0x90) || ((rtcbuf[5]&0x0F) > 0x09) || ((rtcbuf[5]&0xFF) > 0x99)
138 3 || ((rtcbuf[6]&0x07) > 0x06) ) //<2F><>Сʱ<D0A1>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD>ݺϷ<DDBA><CFB7>Խ<EFBFBD><D4BD>м<EFBFBD><D0BC><EFBFBD>
139 3 {
140 4 rtcbuf[0] = RtcRdVal->Second; //<2F><><EFBFBD>ݲ<EFBFBD><DDB2>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪRTCδ<43><CEB4>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
141 4 rtcbuf[1] = RtcRdVal->Minute;
142 4 rtcbuf[2] = RtcRdVal->Hour;
143 4 rtcbuf[3] = RtcRdVal->Date;
144 4 rtcbuf[4] = RtcRdVal->Month;
145 4 rtcbuf[5] = RtcRdVal->Year;
146 4 rtcbuf[6] = RtcRdVal->Week;
147 4
148 4 Result = RTCModifyTime((RTC_VAR xdata *)(&rtcbuf));
149 4 }
150 3 else
151 3 {
152 4 RtcRdVal->Second = rtcbuf[0]; //<2F><><EFBFBD>ݺϷ<DDBA><CFB7><EFBFBD><EFBFBD>򱣴<EFBFBD><F2B1A3B4><EFBFBD>RTC<54><43><EFBFBD>ص<EFBFBD>ʱ<EFBFBD><CAB1>
153 4 RtcRdVal->Minute = rtcbuf[1];
154 4 RtcRdVal->Hour = rtcbuf[2]&0x1F;
155 4 RtcRdVal->Date = rtcbuf[3];
156 4 RtcRdVal->Month = rtcbuf[4];
157 4 RtcRdVal->Year = rtcbuf[5];
158 4 RtcRdVal->Week = rtcbuf[6];
159 4
160 4 Result = 1;
161 4 }
162 3 }
163 2 else //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪRTC<54><43>׼<EFBFBD><D7BC>
164 2 {
165 3 Result = RTCModifyTime((RTC_VAR xdata *)RtcRdVal); //<2F><><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>ʱ<EFBFBD><EFBFBD><E4A3AC><EFBFBD><EFBFBD>E2<45>ж<EFBFBD>ȡ<EFBFBD><C8A1>ʱ<EFBFBD><EFBFBD><E4A3AC><EFBFBD>̶<EFBFBD>
<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>RTC
166 3 }
167 2 }
168 1
169 1 return Result;
170 1 }
171
172
173 /*************************************************************************************************
174 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: RTCModifyTime
2025-02-14 08:59:29 +00:00
C51 COMPILER V9.01 RTC 02/13/2025 10:07:28 PAGE 4
2025-02-06 07:35:32 +00:00
175 * <20><> <20><>: RTC<54><43><EFBFBD><EFBFBD>RTC<54><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RTC<54><43><EFBFBD><EFBFBD>
176 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
177 * <20><> <20><>: RTC<54><43><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
178 *************************************************************************************************/
179 BOOL RTCModifyTime(RTC_VAR xdata *RtcMdyVal)
180 {
181 1 BOOL Result = 0;
182 1 U8 xdata rtcdata;
183 1 U8 xdata rtctemp[7];
184 1
185 1 rtcdata = 0x90;
186 1 Result = RTCWrite(RTC_REG_STATUS, 1, &rtcdata);
187 1
188 1 rtctemp[0] = RtcMdyVal->Second;
189 1 rtctemp[1] = RtcMdyVal->Minute;
190 1 rtctemp[2] = RtcMdyVal->Hour|0x80; //<2F><><EFBFBD><EFBFBD>Ϊ24Сʱ<D0A1><CAB1>
191 1 rtctemp[3] = RtcMdyVal->Date;
192 1 rtctemp[4] = RtcMdyVal->Month;
193 1 rtctemp[5] = RtcMdyVal->Year;
194 1 rtctemp[6] = RtcMdyVal->Week;
195 1
196 1 Result = RTCWrite(RTC_REG_SECOND, 7, (U8 xdata *)&rtctemp);
197 1
198 1 return Result;
199 1 }
200
201
202 /*************************************************************************************************
203 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: RTCInitTime
204 * <20><> <20><>: RTC<54><43><EFBFBD><EFBFBD>RTC<54><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RTC<54><43>ʼ<EFBFBD><CABC>
205 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
206 * <20><> <20><>: <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>EEP<45><50>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RTCʱ<43><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>һ<EFBFBD>γ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>EEPû<50>б<EFBFBD><D0B1><EFBFBD><E6A3AC>Ĭ<EFBFBD>ϳ<EFBFBD>ʼ<EFBFBD><CABC>ʱ<EFBFBD>䣺20<32><30>5<EFBFBD><35>1<EFBFBD>
-<2D>12<31><32>
207 *************************************************************************************************/
208 BOOL RTCInitTime(RTC_VAR xdata *RtcInitVal)
209 {
210 1 BOOL Result = 0;
211 1 U8 xdata rtcbuf[9];
212 1 U8 xdata i;
213 1 U8 xdata checksum = 0;
214 1
215 1 MemorySet(rtcbuf, 0, sizeof(rtcbuf));
216 1
217 1 E2PRomRead(E2PROM_RTC_ADDR, 9, rtcbuf); //<2F><>E2<45><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RTC<54><43><EFBFBD><EFBFBD>
218 1 for(i=0; i<7; i++)
219 1 {
220 2 checksum += rtcbuf[i];
221 2 }
222 1
223 1 if((rtcbuf[7]!=checksum) || (rtcbuf[8]!=0x5a)) //<2F><>У<EFBFBD><D0A3>ʧ<EFBFBD>ܣ<EFBFBD>˵<EFBFBD><CBB5>E2<45><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>ɿ<EFBFBD><C9BF><EFBFBD>ֱ<EFBFBD>Ӱѳ
-<2D><><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
224 1 {
225 2 rtcbuf[0] = 0x00; //second
226 2 rtcbuf[1] = 0x00; //minute
227 2 rtcbuf[2] = 0x12; //hour
228 2 rtcbuf[3] = 0x01; //date
229 2 rtcbuf[4] = 0x05; //month
230 2 rtcbuf[5] = 0x20; //year
231 2 rtcbuf[6] = 0x05; //week
232 2 }
233 1
234 1 MemoryCopy(rtcbuf, (U8 xdata *)RtcInitVal, 7); //<2F><>E2<45><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ȷŵ<C8B7>RTCʱ<43><CAB1><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
2025-02-14 08:59:29 +00:00
C51 COMPILER V9.01 RTC 02/13/2025 10:07:28 PAGE 5
2025-02-06 07:35:32 +00:00
-<2D>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>
235 1 Result = RTCReadTime((RTC_VAR xdata *)RtcInitVal);
236 1
237 1 return Result;
238 1 }
239
240
241
242
243
244
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 958 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 8 43
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = 2 5
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)