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

📄 at24c.lis

📁 电梯楼层采集器代码
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 00C0           ;       AT24C_delay(AT24CWAIT);
 00C0 01E0              ldi R16,1
 00C2 9EDF              xcall _AT24C_delay
 00C4                   .dbline 107
 00C4           ;       SDA_HI();
 00C4 C09A              sbi 0x18,0
 00C6                   .dbline 108
 00C6           ;       SDA_OUTPUT();
 00C6 B89A              sbi 0x17,0
 00C8                   .dbline 109
 00C8           ;       SCL_HI();
 00C8 C19A              sbi 0x18,1
 00CA                   .dbline 110
 00CA           ;       AT24C_delay(AT24CWAIT);
 00CA 01E0              ldi R16,1
 00CC 99DF              xcall _AT24C_delay
 00CE                   .dbline 111
 00CE           ;       SCL_LO();
 00CE C198              cbi 0x18,1
 00D0                   .dbline 112
 00D0           ;       return(retc);
 00D0 042F              mov R16,R20
 00D2                   .dbline -2
 00D2           L19:
 00D2                   .dbline 0 ; func end
 00D2 6991              ld R22,y+
 00D4 4991              ld R20,y+
 00D6 0895              ret
 00D8                   .dbsym r retc 20 c
 00D8                   .dbsym r i 22 c
 00D8                   .dbend
 00D8                   .dbfunc e AT24_Read _AT24_Read fc
 00D8           ;              i -> R10
 00D8           ;            ret -> R22
 00D8           ;            num -> y+10
 00D8           ;           addr -> R20,R21
 00D8           ;         buffer -> R12,R13
                        .even
 00D8           _AT24_Read::
 00D8 0E940000          xcall push_xgsetF0FC
 00DC A901              movw R20,R18
 00DE 6801              movw R12,R16
 00E0                   .dbline -1
 00E0                   .dbline 117
 00E0           ; }
 00E0           ; 
 00E0           ; /*EEPROM数据读出*/
 00E0           ; unsigned char AT24_Read(unsigned char * buffer,unsigned int addr,unsigned char num)
 00E0           ; {
 00E0                   .dbline 119
 00E0           ;       unsigned char i,ret;
 00E0           ;       for(i=0;i<num;i++)
 00E0 AA24              clr R10
 00E2 2FC0              xjmp L30
 00E4           L27:
 00E4                   .dbline 120
 00E4           ;       {
 00E4                   .dbline 121
 00E4           ;               I2C_SendStart();
 00E4 9FDF              xcall _I2C_SendStart
 00E6                   .dbline 122
 00E6           ;               ret = I2C_SendByte(AT24_DEVICEADDR);
 00E6 00EA              ldi R16,160
 00E8 ACDF              xcall _I2C_SendByte
 00EA 602F              mov R22,R16
 00EC                   .dbline 123
 00EC           ;               if(ret != 1)
 00EC 0130              cpi R16,1
 00EE 11F0              breq L31
 00F0           X6:
 00F0                   .dbline 124
 00F0           ;                       return 0;
 00F0 0027              clr R16
 00F2 2CC0              xjmp L26
 00F4           L31:
 00F4                   .dbline 125
 00F4           ;               ret = I2C_SendByte(addr>>8);
 00F4 8A01              movw R16,R20
 00F6 012F              mov R16,R17
 00F8 1127              clr R17
 00FA A3DF              xcall _I2C_SendByte
 00FC 602F              mov R22,R16
 00FE                   .dbline 126
 00FE           ;               if(ret != 1)
 00FE 0130              cpi R16,1
 0100 11F0              breq L33
 0102           X7:
 0102                   .dbline 127
 0102           ;                       return 0;
 0102 0027              clr R16
 0104 23C0              xjmp L26
 0106           L33:
 0106                   .dbline 128
 0106           ;               ret = I2C_SendByte(addr);
 0106 042F              mov R16,R20
 0108 9CDF              xcall _I2C_SendByte
 010A E02E              mov R14,R16
 010C 6E2D              mov R22,R14
 010E                   .dbline 129
 010E           ;               if(ret != 1)
 010E 0130              cpi R16,1
 0110 11F0              breq L35
 0112           X8:
 0112                   .dbline 130
 0112           ;                       return 0;
 0112 0027              clr R16
 0114 1BC0              xjmp L26
 0116           L35:
 0116                   .dbline 131
 0116           ;               I2C_SendStart();
 0116 86DF              xcall _I2C_SendStart
 0118                   .dbline 132
 0118           ;               ret = I2C_SendByte(AT24_DEVICEADDR|0x01);
 0118 01EA              ldi R16,161
 011A 93DF              xcall _I2C_SendByte
 011C E02E              mov R14,R16
 011E 6E2D              mov R22,R14
 0120                   .dbline 133
 0120           ;               if(ret != 1)
 0120 0130              cpi R16,1
 0122 11F0              breq L37
 0124           X9:
 0124                   .dbline 134
 0124           ;                       return 0;
 0124 0027              clr R16
 0126 12C0              xjmp L26
 0128           L37:
 0128                   .dbline 135
 0128           ;               buffer[i] = I2C_ReceiveByte();
 0128 B5DF              xcall _I2C_ReceiveByte
 012A E02E              mov R14,R16
 012C EA2D              mov R30,R10
 012E FF27              clr R31
 0130 EC0D              add R30,R12
 0132 FD1D              adc R31,R13
 0134 E082              std z+0,R14
 0136                   .dbline 136
 0136           ;               I2C_SendStop();
 0136 7FDF              xcall _I2C_SendStop
 0138                   .dbline 137
 0138           ;               addr ++;
 0138 4F5F              subi R20,255  ; offset = 1
 013A 5F4F              sbci R21,255
 013C                   .dbline 138
 013C           ;               AT24C_delay(10);
 013C 0AE0              ldi R16,10
 013E 60DF              xcall _AT24C_delay
 0140                   .dbline 139
 0140           ;       }
 0140           L28:
 0140                   .dbline 119
 0140 A394              inc R10
 0142           L30:
 0142                   .dbline 119
 0142 0A84              ldd R0,y+10
 0144 A014              cp R10,R0
 0146 08F4              brsh X11
 0148 CDCF              xjmp L27
 014A           X11:
 014A           X10:
 014A                   .dbline 140
 014A           ;       return 1;
 014A 01E0              ldi R16,1
 014C                   .dbline -2
 014C           L26:
 014C                   .dbline 0 ; func end
 014C 0C940000          xjmp pop_xgsetF0FC
 0150                   .dbsym r i 10 c
 0150                   .dbsym r ret 22 c
 0150                   .dbsym l num 10 c
 0150                   .dbsym r addr 20 i
 0150                   .dbsym r buffer 12 pc
 0150                   .dbend
 0150                   .dbfunc e AT24_Write _AT24_Write fc
 0150           ;             ct -> R10
 0150           ;            ret -> R14
 0150           ;              i -> R22
 0150           ;            num -> R12
 0150           ;           addr -> y+12
 0150           ;         buffer -> y+10
                        .even
 0150           _AT24_Write::
 0150 0E940000          xcall push_arg4
 0154 0E940000          xcall push_xgsetF0FC
 0158 CE84              ldd R12,y+14
 015A                   .dbline -1
 015A                   .dbline 145
 015A           ; }
 015A           ; 
 015A           ; /*写数据到EEPROM*/
 015A           ; unsigned char AT24_Write(unsigned char * buffer,unsigned int addr,unsigned char num)
 015A           ; {
 015A                   .dbline 147
 015A           ;       unsigned char i,ct,ret;
 015A           ;       ct = 0;
 015A AA24              clr R10
 015C           L40:
 015C                   .dbline 149
 015C           ; nextpage:
 015C           ;       I2C_SendStart();
 015C 63DF              xcall _I2C_SendStart
 015E                   .dbline 150
 015E           ;       ret = I2C_SendByte(AT24_DEVICEADDR);
 015E 00EA              ldi R16,160
 0160 70DF              xcall _I2C_SendByte
 0162 E02E              mov R14,R16
 0164                   .dbline 151
 0164           ;       if(ret != 1)
 0164 0130              cpi R16,1
 0166 11F0              breq L41
 0168           X12:
 0168                   .dbline 152
 0168           ;               return 0;
 0168 0027              clr R16
 016A 3CC0              xjmp L39
 016C           L41:
 016C                   .dbline 153
 016C           ;       ret = I2C_SendByte(addr>>8);
 016C 0C85              ldd R16,y+12
 016E 1D85              ldd R17,y+13
 0170 012F              mov R16,R17
 0172 1127              clr R17
 0174 66DF              xcall _I2C_SendByte
 0176 E02E              mov R14,R16
 0178                   .dbline 154
 0178           ;       if(ret != 1)
 0178 0130              cpi R16,1
 017A 11F0              breq L43
 017C           X13:
 017C                   .dbline 155
 017C           ;               return 0;
 017C 0027              clr R16
 017E 32C0              xjmp L39
 0180           L43:
 0180                   .dbline 156
 0180           ;       ret = I2C_SendByte(addr);
 0180 0C85              ldd R16,y+12
 0182 5FDF              xcall _I2C_SendByte
 0184 402F              mov R20,R16
 0186 E42E              mov R14,R20
 0188                   .dbline 157
 0188           ;       if(ret != 1)
 0188 0130              cpi R16,1
 018A 11F0              breq L45
 018C           X14:
 018C                   .dbline 158
 018C           ;               return 0;
 018C 0027              clr R16
 018E 2AC0              xjmp L39
 0190           L45:
 0190                   .dbline 159
 0190           ;       for(i=0;i<num;i++)
 0190 6627              clr R22
 0192 22C0              xjmp L50
 0194           L47:
 0194                   .dbline 160
 0194           ;       {
 0194                   .dbline 161
 0194           ;               ret = I2C_SendByte(buffer[ct++]);
 0194 4A2D              mov R20,R10
 0196 5527              clr R21
 0198 842F              mov R24,R20
 019A 8F5F              subi R24,255    ; addi 1
 019C A82E              mov R10,R24
 019E E42F              mov R30,R20
 01A0 FF27              clr R31
 01A2 0A84              ldd R0,y+10
 01A4 1B84              ldd R1,y+11
 01A6 E00D              add R30,R0
 01A8 F11D              adc R31,R1
 01AA 0081              ldd R16,z+0
 01AC 4ADF              xcall _I2C_SendByte
 01AE 402F              mov R20,R16
 01B0 E42E              mov R14,R20
 01B2                   .dbline 162
 01B2           ;               if(ret != 1)
 01B2 0130              cpi R16,1
 01B4 11F0              breq L51
 01B6           X15:
 01B6                   .dbline 163
 01B6           ;                       return 0;
 01B6 0027              clr R16
 01B8 15C0              xjmp L39
 01BA           L51:
 01BA                   .dbline 164
 01BA           ;               addr ++;
 01BA 8C85              ldd R24,y+12
 01BC 9D85              ldd R25,y+13
 01BE 0196              adiw R24,1
 01C0 9D87              std y+13,R25
 01C2 8C87              std y+12,R24
 01C4                   .dbline 165
 01C4           ;               if((((unsigned char)addr)&0x7F) == 0)
 01C4 8F77              andi R24,127
 01C6 39F4              brne L53
 01C8           X16:
 01C8                   .dbline 166
 01C8           ;               {
 01C8                   .dbline 167
 01C8           ;                       I2C_SendStop();
 01C8 36DF              xcall _I2C_SendStop
 01CA                   .dbline 168
 01CA           ;                       AT24C_delay(20);
 01CA 04E1              ldi R16,20
 01CC 19DF              xcall _AT24C_delay
 01CE                   .dbline 169
 01CE           ;                       num -= i+1;
 01CE 862F              mov R24,R22
 01D0 8F5F              subi R24,255    ; addi 1
 01D2 C81A              sub R12,R24
 01D4                   .dbline 170
 01D4           ;                       goto nextpage;
 01D4 C3CF              xjmp L40
 01D6           L53:
 01D6                   .dbline 172
 01D6           ;               }
 01D6           ;       }
 01D6           L48:
 01D6                   .dbline 159
 01D6 6395              inc R22
 01D8           L50:
 01D8                   .dbline 159
 01D8 6C15              cp R22,R12
 01DA E0F2              brlo L47
 01DC           X17:
 01DC                   .dbline 173
 01DC           ;       I2C_SendStop();
 01DC 2CDF              xcall _I2C_SendStop
 01DE                   .dbline 174
 01DE           ;       AT24C_delay(15);
 01DE 0FE0              ldi R16,15
 01E0 0FDF              xcall _AT24C_delay
 01E2                   .dbline 175
 01E2           ;       return 1;
 01E2 01E0              ldi R16,1
 01E4                   .dbline -2
 01E4           L39:
 01E4                   .dbline 0 ; func end
 01E4 0E940000          xcall pop_xgsetF0FC
 01E8 2496              adiw R28,4
 01EA 0895              ret
 01EC                   .dbsym r ct 10 c
 01EC                   .dbsym r ret 14 c
 01EC                   .dbsym r i 22 c
 01EC                   .dbsym r num 12 c
 01EC                   .dbsym l addr 12 i
 01EC                   .dbsym l buffer 10 pc
 01EC                   .dbend
 01EC           ; }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -