ZDBMS/output/TWI.lst

488 lines
24 KiB
Plaintext
Raw Normal View History

C51 COMPILER V9.01 TWI 02/11/2025 15:43:04 PAGE 1
2025-02-06 07:35:32 +00:00
C51 COMPILER V9.01, COMPILATION OF MODULE TWI
OBJECT MODULE PLACED IN .\output\TWI.obj
COMPILER INVOKED BY: D:\Tool\Keil\C51\BIN\C51.EXE code_drv\TWI.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\TWI.lst) OBJECT(.\output\TWI.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 #ifdef TWI_Hardware_Module
12
13 U8 code CRC8Table[256]=
14 { //120424-1 CRC Table
15 0x00,0x07,0x0E,0x09,0x1C,0x1B,0x12,0x15,0x38,0x3F,0x36,0x31,0x24,0x23,0x2A,0x2D,
16 0x70,0x77,0x7E,0x79,0x6C,0x6B,0x62,0x65,0x48,0x4F,0x46,0x41,0x54,0x53,0x5A,0x5D,
17 0xE0,0xE7,0xEE,0xE9,0xFC,0xFB,0xF2,0xF5,0xD8,0xDF,0xD6,0xD1,0xC4,0xC3,0xCA,0xCD,
18 0x90,0x97,0x9E,0x99,0x8C,0x8B,0x82,0x85,0xA8,0xAF,0xA6,0xA1,0xB4,0xB3,0xBA,0xBD,
19 0xC7,0xC0,0xC9,0xCE,0xDB,0xDC,0xD5,0xD2,0xFF,0xF8,0xF1,0xF6,0xE3,0xE4,0xED,0xEA,
20 0xB7,0xB0,0xB9,0xBE,0xAB,0xAC,0xA5,0xA2,0x8F,0x88,0x81,0x86,0x93,0x94,0x9D,0x9A,
21 0x27,0x20,0x29,0x2E,0x3B,0x3C,0x35,0x32,0x1F,0x18,0x11,0x16,0x03,0x04,0x0D,0x0A,
22 0x57,0x50,0x59,0x5E,0x4B,0x4C,0x45,0x42,0x6F,0x68,0x61,0x66,0x73,0x74,0x7D,0x7A,
23 0x89,0x8E,0x87,0x80,0x95,0x92,0x9B,0x9C,0xB1,0xB6,0xBF,0xB8,0xAD,0xAA,0xA3,0xA4,
24 0xF9,0xFE,0xF7,0xF0,0xE5,0xE2,0xEB,0xEC,0xC1,0xC6,0xCF,0xC8,0xDD,0xDA,0xD3,0xD4,
25 0x69,0x6E,0x67,0x60,0x75,0x72,0x7B,0x7C,0x51,0x56,0x5F,0x58,0x4D,0x4A,0x43,0x44,
26 0x19,0x1E,0x17,0x10,0x05,0x02,0x0B,0x0C,0x21,0x26,0x2F,0x28,0x3D,0x3A,0x33,0x34,
27 0x4E,0x49,0x40,0x47,0x52,0x55,0x5C,0x5B,0x76,0x71,0x78,0x7F,0x6A,0x6D,0x64,0x63,
28 0x3E,0x39,0x30,0x37,0x22,0x25,0x2C,0x2B,0x06,0x01,0x08,0x0F,0x1A,0x1D,0x14,0x13,
29 0xAE,0xA9,0xA0,0xA7,0xB2,0xB5,0xBC,0xBB,0x96,0x91,0x98,0x9F,0x8A,0x8D,0x84,0x83,
30 0xDE,0xD9,0xD0,0xD7,0xC2,0xC5,0xCC,0xCB,0xE6,0xE1,0xE8,0xEF,0xFA,0xFD,0xF4,0xF3
31 };
32 /*************************************************************************************************
33 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: CRC8cal
34 * <20><> <20><>: *p<><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD>룻counter<65><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
35 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
36 * <20><> <20><>: CRC8<43><38>ɢ
37 *************************************************************************************************/
38 U8 CRC8cal(U8 *p, U8 counter) //look-up table calculte CRC
39 {
40 1 U8 crc8 = 0;
41 1
42 1 for( ; counter > 0; counter--)
43 1 {
44 2 crc8 = CRC8Table[crc8^*p];
45 2 p++;
46 2 }
47 1 return(crc8);
48 1 }
49
50
51
52
53 /*************************************************************************************************
C51 COMPILER V9.01 TWI 02/11/2025 15:43:04 PAGE 2
2025-02-06 07:35:32 +00:00
54 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: TWICheckStatus
55 * <20><> <20><>: Status<75><73><EFBFBD><EFBFBD>ǰTWI<57><49>״̬
56 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
57 * <20><> <20><>: <20><><EFBFBD><EFBFBD>TWI<57>ĸ<EFBFBD><C4B8><EFBFBD>״̬<D7B4>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
58 *************************************************************************************************/
59 BOOL TWICheckStatus(U8 Status)
60 {
61 1 BOOL Result = 1;
62 1 U16 timeoutcount = 48000; //Ӳ<><D3B2>IICʱtimeoutcount<6E><74><EFBFBD><EFBFBD>100<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ<CDA8><D1B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IIC<49><43><EFBFBD><EFBFBD><E9B1A3>ԭֵ <20><><EFBFBD><EFBFBD>׼DEMO<4D><4F>
-<2D><>
63 1
64 1 while((TWICON&0x08)==0) //<2F>ȴ<EFBFBD>TWIͨѶ<CDA8><D1B6><EFBFBD><EFBFBD>
65 1 {
66 2 McuWDTClear(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD>
67 2 if(timeoutcount)
68 2 {
69 3 timeoutcount--;
70 3 }
71 2 else
72 2 {
73 3 break;
74 3 }
75 2 }
76 1 if((TWISTA&0xf8) != Status)
77 1 {
78 2 Result = 0; //Error
79 2 }
80 1
81 1 return Result;
82 1 }
83
84
85
86
87 /*************************************************************************************************
88 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: TwiWrite
89 * <20><> <20><>: SlaveID: Slave ID
90 WrAddr: д<><D0B4><EFBFBD><EFBFBD>ַ
91 AddrType<70><65><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ȣ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ1Byte<74><65>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ2Bytes
92 Length<74><68> <20><><EFBFBD>ݳ<EFBFBD><DDB3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD>CRC<52>ֽڣ<D6BD>
93 CrcFlg<6C><67> TwiͨѶ<CDA8>Ƿ<EFBFBD>֧<EFBFBD><D6A7>CRCУ<43>飬0<E9A3AC><30><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>CRC<52><43>1<EFBFBD><31>֧<EFBFBD><D6A7>CRC
94 *WrBuf<75><66> д<><D0B4><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4>ŵ<EFBFBD>ַ
95 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
96 * <20><> <20><>: Twiд<69><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>AFE<46><45>֧<EFBFBD><D6A7>CRC<52><43><EFBFBD><EFBFBD>RTC<54><43>EEPROM<4F><4D><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>Ϊ2Bytes<65><73>
97 *************************************************************************************************/
98 BOOL TwiWrite(U8 SlaveID, U16 WrAddr, U8 AddrType, U8 Length, U8 CrcFlg, U8 xdata *WrBuf)
99 {
100 1 U8 i;
101 1 U8 TempBuf[4];
102 1 BOOL Result = 1;
103 1 U16 timeoutcount = 48000;
104 1
105 1 TempBuf[0] = SlaveID;
106 1 TempBuf[1] = (U8)WrAddr;
107 1 TempBuf[2] = *WrBuf;
108 1 TempBuf[3] = CRC8cal(TempBuf, 3);
109 1
110 1 if(Length > 0)
111 1 {
112 2 HTimeoutChk();
113 2 TWICON = 0x60; //Start
114 2 if((!TWICheckStatus(0x08))&&(!TWICheckStatus(0x10)))
C51 COMPILER V9.01 TWI 02/11/2025 15:43:04 PAGE 3
2025-02-06 07:35:32 +00:00
115 2 {
116 3 Result = 0;
117 3 goto WrErr;
118 3 }
119 2
120 2 TWIDAT = SlaveID; //Slave<76><65>ַ
121 2 TWICON = 0x40;
122 2 if(!TWICheckStatus(0x18))
123 2 {
124 3 Result = 0;
125 3 goto WrErr;
126 3 }
127 2
128 2 if(AddrType == TWI_ADDR_2B)
129 2 {
130 3 TWIDAT = (U8)(WrAddr>>8); //д<>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڵ<D6BD>ַ-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>EEPROM
131 3 TWICON = 0x40;
132 3 if(!TWICheckStatus(0x28))
133 3 {
134 4 Result = 0;
135 4 goto WrErr;
136 4 }
137 3 }
138 2
139 2 TWIDAT = (U8)WrAddr; //д<>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ
140 2 TWICON = 0x40;
141 2 if(!TWICheckStatus(0x28))
142 2 {
143 3 Result = 0;
144 3 goto WrErr;
145 3 }
146 2
147 2 if(CrcFlg == TWI_CRC_YES) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>дAFE<46>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD>дһ<D0B4><D2BB><EFBFBD>ֽ<EFBFBD>+CRC
148 2 {
149 3 TWIDAT = *WrBuf; //Write Data
150 3 TWICON = 0x40;
151 3 if(!TWICheckStatus(0x28))
152 3 {
153 4 Result = 0;
154 4 goto WrErr;
155 4 }
156 3
157 3 TWIDAT = TempBuf[3]; //Write CRC
158 3 TWICON = 0x40;
159 3 if(!TWICheckStatus(0x28))
160 3 {
161 4 Result = 0;
162 4 goto WrErr;
163 4 }
164 3 }
165 2 else //дEEPROM<4F><4D>RTC
166 2 {
167 3 for(i=0; i<Length; i++)
168 3 {
169 4 TWIDAT = *WrBuf;
170 4 TWICON = 0x40;
171 4 if(!TWICheckStatus(0x28))
172 4 {
173 5 Result = 0;
174 5 goto WrErr;
175 5 }
176 4 WrBuf++;
C51 COMPILER V9.01 TWI 02/11/2025 15:43:04 PAGE 4
2025-02-06 07:35:32 +00:00
177 4 }
178 3 }
179 2 WrErr:
180 2 TWICON = 0x50;
181 2 while((TWICON&0x10)!=0)
182 2 {
183 3 McuWDTClear(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD>
184 3 if(timeoutcount)
185 3 {
186 4 timeoutcount--;
187 4 }
188 3 else
189 3 {
190 4 break;
191 4 }
192 3 }
193 2 }
194 1
195 1 return Result;
196 1 }
197
198
199 /*************************************************************************************************
200 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: TwiRead
201 * <20><> <20><>: SlaveID: Slave ID
202 RdAddr: <20><>ȡ<EFBFBD><C8A1>ַ
203 AddrType<70><65><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ȣ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ1Byte<74><65>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ2Bytes
204 Length<74><68> <20><><EFBFBD>ݳ<EFBFBD><DDB3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD>CRC<52>ֽڣ<D6BD>
205 CrcFlg<6C><67> TwiͨѶ<CDA8>Ƿ<EFBFBD>֧<EFBFBD><D6A7>CRCУ<43>飬0<E9A3AC><30><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>CRC<52><43>1<EFBFBD><31>֧<EFBFBD><D6A7>CRC
206 *RdBuf<75><66> <20><>ȡ<EFBFBD><C8A1><EFBFBD>ݴ<EFBFBD><DDB4>ŵ<EFBFBD>ַ
207 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
208 * <20><> <20><>: Twi<77><69>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡAFE<46><45>֧<EFBFBD><D6A7>CRC<52><43><EFBFBD><EFBFBD>RTC<54><43>EEPROM<4F><4D><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>Ϊ2Bytes<65><73>
209 *************************************************************************************************/
210 BOOL TwiRead(U8 SlaveID, U16 RdAddr, U8 AddrType, U8 Length, U8 CrcFlg, U8 xdata *RdBuf)
211 {
212 1 BOOL Result = 1;
213 1 U8 i;
214 1 U8 xdata TempBuf[46]; //AFEһ<45><D2BB><EFBFBD>Զ<EFBFBD>ȡ2Bytes+CRC
215 1 U8 RdCrc = 0;
216 1 U16 timeoutcount = 48000;
217 1
218 1 TempBuf[0] = SlaveID; //<2F><><EFBFBD>浽TempBuf<75><66><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>Ϊ<EFBFBD>˼<EFBFBD><CBBC><EFBFBD>CRC<52><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AFE<46><45>ȡ
219 1 TempBuf[1] = (U8)RdAddr;
220 1 //TempBuf[2] = Length;
221 1 TempBuf[2] = SlaveID | 0x01;
222 1
223 1 if(Length > 0)
224 1 {
225 2 HTimeoutChk();
226 2 TWICON = 0x60; //Start
227 2 if((!TWICheckStatus(0x08))&&(!TWICheckStatus(0x10)))
228 2 {
229 3 Result = 0;
230 3 goto RdErr;
231 3 }
232 2
233 2 TWIDAT = SlaveID; //<2F><><EFBFBD><EFBFBD>Slaveд<65><D0B4>ַ
234 2 TWICON = 0x40;
235 2 if(!TWICheckStatus(0x18))
236 2 {
237 3 Result = 0;
238 3 goto RdErr;
C51 COMPILER V9.01 TWI 02/11/2025 15:43:04 PAGE 5
2025-02-06 07:35:32 +00:00
239 3 }
240 2
241 2 if(AddrType == TWI_ADDR_2B) //<2F><>ַΪ2Bytes
242 2 {
243 3 TWIDAT = (U8)(RdAddr>>8); //<2F><><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڵ<D6BD>ַ-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>EEPROM
244 3 TWICON = 0x40;
245 3 if(!TWICheckStatus(0x28))
246 3 {
247 4 Result = 0;
248 4 goto RdErr;
249 4 }
250 3 }
251 2
252 2 TWIDAT = (U8)RdAddr; //<2F><><EFBFBD>ͼĴ<CDBC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڵ<D6BD>ַ
253 2 TWICON = 0x40;
254 2 if(!TWICheckStatus(0x28))
255 2 {
256 3 Result = 0;
257 3 goto RdErr;
258 3 }
259 2
260 2 // if(SlaveID != AFE_ID)
261 2 // {
262 2 // TWIDAT = Length; //<2F><><EFBFBD>Ͷ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
263 2 // TWICON = 0x40;
264 2 // if(!TWICheckStatus(0x28))
265 2 // {
266 2 // Result = 0;
267 2 // goto RdErr;
268 2 // }
269 2 // }
270 2
271 2 TWICON = 0x60; //<2F><><EFBFBD><EFBFBD>RStart
272 2 if((!TWICheckStatus(0x08))&&(!TWICheckStatus(0x10)))
273 2 {
274 3 Result = 0;
275 3 goto RdErr;
276 3 }
277 2
278 2 TWIDAT = SlaveID|0x01; //<2F><><EFBFBD><EFBFBD>Slave<76><65><EFBFBD><EFBFBD>ַ
279 2 TWICON = 0x40;
280 2 if(!TWICheckStatus(0x40))
281 2 {
282 3 Result = 0;
283 3 goto RdErr;
284 3 }
285 2
286 2 for(i=0; i<Length; i++)
287 2 {
288 3 if((CrcFlg == TWI_CRC_NO)) //<2F><>֧<EFBFBD><D6A7>CRC
289 3 {
290 4 if(i == Length-1)
291 4 {
292 5 TWICON = 0x40; //<2F><><EFBFBD><EFBFBD>NACK<43><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ζ<EFBFBD>
293 5 TWICheckStatus(0x58);
294 5 }
295 4 else
296 4 {
297 5 TWICON = 0x44; //<2F><><EFBFBD><EFBFBD>ACK<43><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
298 5 TWICheckStatus(0x50);
299 5 }
300 4 *RdBuf = TWIDAT;
C51 COMPILER V9.01 TWI 02/11/2025 15:43:04 PAGE 6
2025-02-06 07:35:32 +00:00
301 4 RdBuf++;
302 4 }
303 3 else //֧<><D6A7>CRC<52>ģ<EFBFBD><C4A3>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD>ʱBuf
304 3 {
305 4 TWICON = 0x44; //ACK
306 4 TWICheckStatus(0x50);
307 4 TempBuf[3+i] = TWIDAT;
308 4 }
309 3 }
310 2
311 2 if(CrcFlg == TWI_CRC_YES)
312 2 {
313 3 TWICON = 0x40; //No ACK
314 3 TWICheckStatus(0x58);
315 3 RdCrc = TWIDAT;
316 3 if(RdCrc == CRC8cal(TempBuf, 3+Length))
317 3 {
318 4 for(i=0; i<Length; i++)
319 4 {
320 5 *RdBuf = TempBuf[3+i];
321 5 RdBuf++;
322 5 }
323 4 }
324 3 else
325 3 {
326 4 Result = 0;
327 4 goto RdErr;
328 4 }
329 3 }
330 2 RdErr:
331 2 TWICON = 0x50; //TWI Stop
332 2 while((TWICON&0x10)!=0)
333 2 {
334 3 McuWDTClear(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD>
335 3 if(timeoutcount)
336 3 {
337 4 timeoutcount--;
338 4 }
339 3 else
340 3 {
341 4 break;
342 4 }
343 3 }
344 2 }
345 1
346 1 return Result;
347 1 }
348
349
350 /*************************************************************************************************
351 * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: TwiInit
352 * <20><> <20><>: FreqKHz: <20><><EFBFBD><EFBFBD>TWIͨѶƵ<D1B6><C6B5>
353 * <20><><EFBFBD><EFBFBD>ֵ: <20><>
354 * <20><> <20><>: <20><>ʼ<EFBFBD><CABC>TWI<57><49>ӳ<EFBFBD><D3B3>IO<49><4F>ͨѶƵ<D1B6>ʵ<EFBFBD>
355 //*************************************************************************************************/
356 //void TwiInit(void)
357 //{
358 // TWICR = 0x32; //Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>SCL--P0.5<EFBFBD><EFBFBD>SDA--P0.4
359 // TWITOUT = 0x00; //<2F>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8A3AC>оƬ<D0BE>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
360 // TWIBR = (24000/TWI_FREQ_KHz-16)/2/1; //<2F><><EFBFBD>÷<EFBFBD><C3B7>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD>߳<EFBFBD>ʱ<EFBFBD>жϣ<D0B6>f=fsys/(16+2*CR*TWI
-BR)=24MHz/(16+2*16*TWIBR)=**KHz
361 // TWISTA = 0x06; //16<31><36>Ƶ
C51 COMPILER V9.01 TWI 02/11/2025 15:43:04 PAGE 7
2025-02-06 07:35:32 +00:00
362 // TWICON = 0x40; //ENTWI <20><><EFBFBD><EFBFBD>ֹ<EFBFBD>ߵ<EFBFBD>ƽ<EFBFBD><C6BD>ʱ
363 // TWTFREE = 0xff; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
364 // TWIDAT = 0x00;
365 //}
366
367 void TwiInit(void)
368 {
369 1 TWICR = 0x32; //Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>SCL--P0.5<EFBFBD><EFBFBD>SDA--P0.4
370 1 TWITOUT = 0x00; //<2F>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8A3AC>оƬ<D0BE>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
371 1 TWISTA = 0x00;
372 1 TWIBR = (8000/TWI_FREQ_KHz-16)/2/1; //<2F><><EFBFBD>÷<EFBFBD><C3B7>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD>߳<EFBFBD>ʱ<EFBFBD>жϣ<D0B6>f=fsys/(16+2*CR*TWIBR)
-=24MHz/(16+2*16*TWIBR)=**KHz
373 1 TWISTA = 0x02; //16<31><36>Ƶ
374 1 // #if ((TWI_FREQ_KHz >= 10)&&(TWI_FREQ_KHz <= 400))
375 1 // {
376 1 // #if TWIBR1 < 256
377 1 // TWIBR = TWIBR1;
378 1 // TWISTA |= 0x06;
379 1 // #elif TWIBR2 < 256
380 1 // TWIBR = TWIBR2;
381 1 // TWISTA |= 0x04;
382 1 // #elif TWIBR3 < 256
383 1 // TWIBR = TWIBR3;
384 1 // TWISTA |= 0x02;
385 1 // #elif TWIBR4 < 256
386 1 // TWIBR = TWIBR4;
387 1 // TWISTA |= 0x00;
388 1 // #endif
389 1 // }
390 1 // #else
391 1 // {
392 1 // #error: "Please enter a number(TWI_FREQ_KHz) from 10 to 400!";
393 1 // }
394 1 //
395 1 // #endif
396 1
397 1 TWICON = 0x40; //ENTWI <20><><EFBFBD><EFBFBD>ֹ<EFBFBD>ߵ<EFBFBD>ƽ<EFBFBD><C6BD>ʱ
398 1 TWTFREE = 0xff; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
399 1 TWIDAT = 0x00;
400 1 }
401
402
403 //void TwiInit(void)
404 //{
405 // U16 i,k;
406 // U8 j;
407 // TWICR = 0x32; //Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>SCL--P0.5<EFBFBD><EFBFBD>SDA--P0.4
408 // TWITOUT = 0x00; //<2F>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8A3AC>оƬ<D0BE>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
409 // i = (24000/TWI_FREQ_KHz-16)/2; //<2F><><EFBFBD>÷<EFBFBD><C3B7>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD>߳<EFBFBD>ʱ<EFBFBD>жϣ<D0B6>f=fsys/(16+2*CR*TWIBR)=24
-MHz/(16+2*16*TWIBR)=**KHz
410 // for(j=1;j<4;j++)
411 // {
412 // k =1<<(2*j-2);
413 // if(i / k <= 255)
414 // {
415 // TWIBR = i / k;
416 // switch (j)
417 // {
418 // case 1:
419 // TWISTA = 0x00;
420 // break;
421 //
C51 COMPILER V9.01 TWI 02/11/2025 15:43:04 PAGE 8
2025-02-06 07:35:32 +00:00
422 // case 2:
423 // TWISTA = 0x02;
424 // break;
425 //
426 // case 3:
427 // TWISTA = 0x04;
428 // break;
429 //
430 // case 4:
431 // TWISTA = 0x06;
432 // break;
433 // }
434 // goto loop;
435 // }
436 // }
437 //loop:
438 //// TWISTA = 0x06; //16<31><36>Ƶ
439 // TWICON = 0x40; //ENTWI <20><><EFBFBD><EFBFBD>ֹ<EFBFBD>ߵ<EFBFBD>ƽ<EFBFBD><C6BD>ʱ
440 // TWTFREE = 0xff; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
441 // TWIDAT = 0x00;
442 //}
443
444 #endif
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 858 ----
CONSTANT SIZE = 256 ----
XDATA SIZE = ---- 72
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- 3
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)