📄 i2c.lst
字号:
281 2 {
282 3 UART0_Printf("\n\n Data Err Occur at 0x:%x \n\n", Addr);
283 3 }
284 2 }
285 1 UART0_Printf("\n FM24CL04 test OK! \n");
286 1 }
287
288 //****************************************************************************************************
289 //FM3104内部数据存储器测试
290 //传入参数:无
291 //返 回 值:无
292 //测试方法:写入512个随机数,再读回来比较
293 //****************************************************************************************************
294 void FM3104MemTest(void)
295 {
296 1 //------------------------------------------------------------
297 1 //I2C接口存储器FM24CL04内部存储器测试使用到的变量
298 1 //------------------------------------------------------------
299 1 uint xdata Addr;
300 1 uchar xdata DatWR; //写入的数据
301 1 uchar xdata WRStore[512] = {0}; //写入数据存储的数组
302 1 uchar xdata RDStore[512] = {0}; //读取的数据存储殊组
303 1 //------------------------------------------------------------
C51 COMPILER V8.01 I2C 09/30/2007 11:14:56 PAGE 6
304 1
305 1 Addr = 0x0000; //3104Mem的地址计数器
306 1
307 1 UART0_Printf("\n ->FM3104Mem test begin: \n");
308 1 //------------------------------------------------------------
309 1 //先将待写的数据存储,方便用写多字节的方法一次写入
310 1 //------------------------------------------------------------
311 1 for(Addr = 0x00; Addr < 512; Addr ++)
312 1 {
313 2 DatWR = (int)rand();
314 2 WRStore[Addr] = DatWR;
315 2 }
316 1
317 1 I2CNByteSend(SLA3104Mem, 0x00, WRStore, 512);
318 1
319 1 #ifdef FM3104MEMDATASHOW
UART0_Printf("\n\n Write to 0x:%x \n",0x0000);
for(Addr = 0x00; Addr < 512; Addr ++)
{
UART0_Printf(" %d ",(int)WRStore[Addr]);
}
#endif
326 1
327 1 //------------------------------------------------------------
328 1 //读出所有的数据并存起来,下面将其写入的数据挨个比较
329 1 //------------------------------------------------------------
330 1 I2CNByteRecv(SLA3104Mem, 0x00, RDStore, 512);
331 1
332 1 #ifdef FM3104MEMDATASHOW
UART0_Printf("\n\n Read from 0x:%x\n",0x0000);
for(Addr = 0x00; Addr < 512; Addr ++)
{
UART0_Printf(" %d ",(int)RDStore[Addr]);
}
#endif
339 1
340 1 for(Addr = 0x00; Addr < 512; Addr ++) //检查是否有错误
341 1 {
342 2 if(RDStore[Addr] == WRStore[Addr])
343 2 {;}
344 2 else
345 2 {
346 3 UART0_Printf("\n\n Data Err Occur at 0x:%x \n\n", Addr);
347 3 }
348 2 }
349 1 UART0_Printf("\n FM3104Mem test OK! \n");
350 1 }
C51 COMPILER V8.01 I2C 09/30/2007 11:14:56 PAGE 7
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION I2CMasterInit (BEGIN)
; SOURCE LINE # 16
; SOURCE LINE # 17
; SOURCE LINE # 18
0000 43F420 ORL PERIPHEN1,#020H
; SOURCE LINE # 20
0003 75D20C MOV I2CTIMING,#0CH
; SOURCE LINE # 21
0006 75D101 MOV I2CCONFIG,#01H
; SOURCE LINE # 23
0009 22 RET
; FUNCTION I2CMasterInit (END)
; FUNCTION L?0055 (BEGIN)
0000 120000 R LCALL WaitTxEmpty
0003 EC MOV A,R4
0004 L?0056:
0004 F5D5 MOV I2CRXTX,A
0006 120000 R LCALL WaitTxEmpty
0009 ED MOV A,R5
000A F5D5 MOV I2CRXTX,A
; FUNCTION WaitTxEmpty (BEGIN)
; SOURCE LINE # 30
; SOURCE LINE # 31
000C ?C0002:
; SOURCE LINE # 33
000C E5D4 MOV A,I2CSTATUS
000E 30E0FB JNB ACC.0,?C0002
; SOURCE LINE # 35
0011 ?C0004:
0011 22 RET
; FUNCTION WaitTxEmpty (END)
; FUNCTION WaitRxAvailable (BEGIN)
; SOURCE LINE # 43
; SOURCE LINE # 44
0000 ?C0005:
; SOURCE LINE # 46
0000 E5D4 MOV A,I2CSTATUS
0002 30E1FB JNB ACC.1,?C0005
; SOURCE LINE # 48
0005 ?C0007:
0005 22 RET
; FUNCTION WaitRxAvailable (END)
; FUNCTION L?0057 (BEGIN)
0000 43D102 ORL I2CCONFIG,#02H
0003 120000 R LCALL WaitRxAvailable
0006 E5D5 MOV A,I2CRXTX
0008 120000 E LCALL ?C?CSTPTR
000B 53D1FD ANL I2CCONFIG,#0FDH
; FUNCTION WaitI2CIdle (BEGIN)
; SOURCE LINE # 56
; SOURCE LINE # 57
000E ?C0008:
; SOURCE LINE # 59
000E E5D4 MOV A,I2CSTATUS
0010 30E3FB JNB ACC.3,?C0008
; SOURCE LINE # 61
C51 COMPILER V8.01 I2C 09/30/2007 11:14:56 PAGE 8
0013 ?C0010:
0013 22 RET
; FUNCTION WaitI2CIdle (END)
; FUNCTION _I2CNByteRecv (BEGIN)
; SOURCE LINE # 72
0000 900000 R MOV DPTR,#Sla
0003 EF MOV A,R7
0004 F0 MOVX @DPTR,A
;---- Variable 'pRecvBuf' assigned to Register 'R1/R2/R3' ----
;---- Variable 'SubAddr' assigned to Register 'R4/R5' ----
; SOURCE LINE # 73
; SOURCE LINE # 74
0005 F5D5 MOV I2CRXTX,A
; SOURCE LINE # 75
; SOURCE LINE # 76
; SOURCE LINE # 77
; SOURCE LINE # 78
; SOURCE LINE # 79
0007 120000 R LCALL L?0055
; SOURCE LINE # 81
000A 120000 R LCALL WaitI2CIdle
; SOURCE LINE # 83
000D E0 MOVX A,@DPTR
000E 04 INC A
000F F5D5 MOV I2CRXTX,A
; SOURCE LINE # 84
0011 120000 R LCALL WaitTxEmpty
; SOURCE LINE # 86
0014 ?C0011:
0014 D3 SETB C
0015 900000 R MOV DPTR,#Num+01H
0018 E0 MOVX A,@DPTR
0019 9401 SUBB A,#01H
001B 900000 R MOV DPTR,#Num
001E E0 MOVX A,@DPTR
001F 9400 SUBB A,#00H
0021 401F JC ?C0012
; SOURCE LINE # 87
; SOURCE LINE # 88
0023 120000 R LCALL WaitRxAvailable
; SOURCE LINE # 89
0026 E5D5 MOV A,I2CRXTX
0028 120000 E LCALL ?C?CSTPTR
; SOURCE LINE # 90
002B 7401 MOV A,#01H
002D 29 ADD A,R1
002E F9 MOV R1,A
002F E4 CLR A
0030 3A ADDC A,R2
0031 FA MOV R2,A
; SOURCE LINE # 91
0032 900000 R MOV DPTR,#Num+01H
0035 E0 MOVX A,@DPTR
0036 24FF ADD A,#0FFH
0038 F0 MOVX @DPTR,A
0039 900000 R MOV DPTR,#Num
003C E0 MOVX A,@DPTR
003D 34FF ADDC A,#0FFH
003F F0 MOVX @DPTR,A
0040 80D2 SJMP ?C0011
0042 ?C0012:
C51 COMPILER V8.01 I2C 09/30/2007 11:14:56 PAGE 9
; SOURCE LINE # 93
; SOURCE LINE # 94
; SOURCE LINE # 95
; SOURCE LINE # 97
; SOURCE LINE # 98
0042 120000 R LCALL L?0057
; SOURCE LINE # 100
0045 7F01 MOV R7,#01H
; SOURCE LINE # 101
0047 ?C0014:
0047 22 RET
; FUNCTION _I2CNByteRecv (END)
; FUNCTION _I2CNByteSend (BEGIN)
; SOURCE LINE # 112
;---- Variable 'Sla' assigned to Register 'R7' ----
;---- Variable 'pSendBuf' assigned to Register 'R1/R2/R3' ----
;---- Variable 'SubAddr' assigned to Register 'R4/R5' ----
; SOURCE LINE # 113
; SOURCE LINE # 114
0000 8FD5 MOV I2CRXTX,R7
; SOURCE LINE # 115
; SOURCE LINE # 116
; SOURCE LINE # 117
; SOURCE LINE # 118
; SOURCE LINE # 119
0002 120000 R LCALL L?0055
; SOURCE LINE # 121
0005 ?C0015:
0005 D3 SETB C
0006 900000 R MOV DPTR,#Num+01H
0009 E0 MOVX A,@DPTR
000A 9400 SUBB A,#00H
000C 900000 R MOV DPTR,#Num
000F E0 MOVX A,@DPTR
0010 9400 SUBB A,#00H
0012 401F JC ?C0016
; SOURCE LINE # 122
; SOURCE LINE # 123
0014 120000 E LCALL ?C?CLDPTR
0017 F5D5 MOV I2CRXTX,A
; SOURCE LINE # 124
0019 7401 MOV A,#01H
001B 29 ADD A,R1
001C F9 MOV R1,A
001D E4 CLR A
001E 3A ADDC A,R2
001F FA MOV R2,A
; SOURCE LINE # 125
0020 120000 R LCALL WaitTxEmpty
; SOURCE LINE # 126
0023 900000 R MOV DPTR,#Num+01H
0026 E0 MOVX A,@DPTR
0027 24FF ADD A,#0FFH
0029 F0 MOVX @DPTR,A
002A 900000 R MOV DPTR,#Num
002D E0 MOVX A,@DPTR
002E 34FF ADDC A,#0FFH
0030 F0 MOVX @DPTR,A
0031 80D2 SJMP ?C0015
0033 ?C0016:
; SOURCE LINE # 128
C51 COMPILER V8.01 I2C 09/30/2007 11:14:56 PAGE 10
0033 120000 R LCALL WaitI2CIdle
; SOURCE LINE # 129
0036 7F01 MOV R7,#01H
; SOURCE LINE # 130
0038 ?C0018:
0038 22 RET
; FUNCTION _I2CNByteSend (END)
; FUNCTION _FM24CL04NByteRecv (BEGIN)
; SOURCE LINE # 145
0000 900000 R MOV DPTR,#Sla
0003 EF MOV A,R7
0004 F0 MOVX @DPTR,A
;---- Variable 'pRecvBuf' assigned to Register 'R1/R2/R3' ----
;---- Variable 'SubAddr' assigned to Register 'R4/R5' ----
; SOURCE LINE # 146
; SOURCE LINE # 149
0005 D3 SETB C
0006 ED MOV A,R5
0007 94FF SUBB A,#0FFH
0009 EC MOV A,R4
000A 9400 SUBB A,#00H
000C 5003 JNC ?C0019
; SOURCE LINE # 150
; SOURCE LINE # 151
000E E0 MOVX A,@DPTR
; SOURCE LINE # 153
; SOURCE LINE # 154
; SOURCE LINE # 155
; SOURCE LINE # 156
; SOURCE LINE # 157
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -