⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i2c.lst

📁 单片机开发列程
💻 LST
📖 第 1 页 / 共 4 页
字号:
 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 + -