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

📄 main.lis

📁 AT24C256 读写 atmega16单片机( ICC )
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 0122           ;  /*
 0122           ; AT24C01 为128字节 (0x00-0x7f)
 0122           ; AT24C02 为256字节 (0x00-0xff)
 0122           ; AT24C04 为512字节 (0x000-0x1ff)
 0122           ; AT24C08 为1024字节(0x000-0x3ff)
 0122           ; AT24C16 为2048字节(0x000-0x7ff)
 0122           ; 
 0122           ; AT24C32 为4096字节(0x000-0xfff)
 0122           ; AT24C64 为8192字节(0x0000-0x1fff)
 0122           ; AT24C128 为16384字节(0x00-0x7ff)
 0122           ; AT24C256 容量为32768字节(0x0000-0x7fff)
 0122           ; AT24C512 容量为65536字节(0x0000-0xffff)
 0122           ; */
 0122           ;  //写入数据,器件型号model,器件地址DevAddr,开始地址addr,数据*P_data,数据长度num
 0122           ; void AT24CxxWrite(unsigned int model,unsigned char DevAddr,unsigned int addr,unsigned char *P_data,unsigned char num)
 0122           ;  {
 0122                   .dbline 118
 0122           ;  unsigned char i,temp,*p,ICerror=0,page_size;
 0122 0024              clr R0
 0124 0D82              std y+5,R0
 0126                   .dbline 120
 0126           ;  unsigned long next_page_start_addr;
 0126           ;  if(model<2)page_size=8;
 0126 8889              ldd R24,y+16
 0128 9989              ldd R25,y+17
 012A 8230              cpi R24,2
 012C E0E0              ldi R30,0
 012E 9E07              cpc R25,R30
 0130 18F4              brsh L28
 0132                   .dbline 120
 0132 88E0              ldi R24,8
 0134 8C83              std y+4,R24
 0136 1DC0              xjmp L29
 0138           L28:
 0138                   .dbline 121
 0138           ;  else if(model<32)page_size=16;
 0138 8889              ldd R24,y+16
 013A 9989              ldd R25,y+17
 013C 8032              cpi R24,32
 013E E0E0              ldi R30,0
 0140 9E07              cpc R25,R30
 0142 18F4              brsh L30
 0144                   .dbline 121
 0144 80E1              ldi R24,16
 0146 8C83              std y+4,R24
 0148 14C0              xjmp L31
 014A           L30:
 014A                   .dbline 122
 014A           ;    else if(model<128)page_size=32;
 014A 8889              ldd R24,y+16
 014C 9989              ldd R25,y+17
 014E 8038              cpi R24,128
 0150 E0E0              ldi R30,0
 0152 9E07              cpc R25,R30
 0154 18F4              brsh L32
 0156                   .dbline 122
 0156 80E2              ldi R24,32
 0158 8C83              std y+4,R24
 015A 0BC0              xjmp L33
 015C           L32:
 015C                   .dbline 123
 015C           ;      else if(model<512)page_size=64;
 015C 8889              ldd R24,y+16
 015E 9989              ldd R25,y+17
 0160 8030              cpi R24,0
 0162 E2E0              ldi R30,2
 0164 9E07              cpc R25,R30
 0166 18F4              brsh L34
 0168                   .dbline 123
 0168 80E4              ldi R24,64
 016A 8C83              std y+4,R24
 016C 02C0              xjmp L35
 016E           L34:
 016E                   .dbline 124
 016E           ;        else page_size=128;
 016E 80E8              ldi R24,128
 0170 8C83              std y+4,R24
 0172           L35:
 0172           L33:
 0172           L31:
 0172           L29:
 0172                   .dbline 125
 0172           ;  next_page_start_addr=model;
 0172 2888              ldd R2,y+16
 0174 3988              ldd R3,y+17
 0176 4424              clr R4
 0178 5524              clr R5
 017A FE01              movw R30,R28
 017C 2082              std z+0,R2
 017E 3182              std z+1,R3
 0180 4282              std z+2,R4
 0182 5382              std z+3,R5
 0184                   .dbline 126
 0184           ;  next_page_start_addr<<=7;//总容量
 0184 87E0              ldi R24,7
 0186 90E0              ldi R25,0
 0188 FE01              movw R30,R28
 018A 2080              ldd R2,z+0
 018C 3180              ldd R3,z+1
 018E 4280              ldd R4,z+2
 0190 5380              ldd R5,z+3
 0192 8A93              st -y,R24
 0194 8101              movw R16,R2
 0196 9201              movw R18,R4
 0198 0E940000          xcall lsl32
 019C FE01              movw R30,R28
 019E 0083              std z+0,R16
 01A0 1183              std z+1,R17
 01A2 2283              std z+2,R18
 01A4 3383              std z+3,R19
 01A6 33C0              xjmp L37
 01A8           L36:
 01A8                   .dbline 128
 01A8           ;  while(next_page_start_addr)
 01A8           ;  {
 01A8                   .dbline 129
 01A8           ;   next_page_start_addr-=page_size;
 01A8 2C80              ldd R2,y+4
 01AA 3324              clr R3
 01AC 4424              clr R4
 01AE 5524              clr R5
 01B0 FE01              movw R30,R28
 01B2 6080              ldd R6,z+0
 01B4 7180              ldd R7,z+1
 01B6 8280              ldd R8,z+2
 01B8 9380              ldd R9,z+3
 01BA 6218              sub R6,R2
 01BC 7308              sbc R7,R3
 01BE 8408              sbc R8,R4
 01C0 9508              sbc R9,R5
 01C2 FE01              movw R30,R28
 01C4 6082              std z+0,R6
 01C6 7182              std z+1,R7
 01C8 8282              std z+2,R8
 01CA 9382              std z+3,R9
 01CC                   .dbline 130
 01CC           ;   if(next_page_start_addr<=addr){next_page_start_addr+=page_size;break;}
 01CC 2C88              ldd R2,y+20
 01CE 3D88              ldd R3,y+21
 01D0 4424              clr R4
 01D2 5524              clr R5
 01D4 FE01              movw R30,R28
 01D6 6080              ldd R6,z+0
 01D8 7180              ldd R7,z+1
 01DA 8280              ldd R8,z+2
 01DC 9380              ldd R9,z+3
 01DE 2614              cp R2,R6
 01E0 3704              cpc R3,R7
 01E2 4804              cpc R4,R8
 01E4 5904              cpc R5,R9
 01E6 98F0              brlo L39
 01E8                   .dbline 130
 01E8                   .dbline 130
 01E8 2C80              ldd R2,y+4
 01EA 3324              clr R3
 01EC 4424              clr R4
 01EE 5524              clr R5
 01F0 FE01              movw R30,R28
 01F2 6080              ldd R6,z+0
 01F4 7180              ldd R7,z+1
 01F6 8280              ldd R8,z+2
 01F8 9380              ldd R9,z+3
 01FA 620C              add R6,R2
 01FC 731C              adc R7,R3
 01FE 841C              adc R8,R4
 0200 951C              adc R9,R5
 0202 FE01              movw R30,R28
 0204 6082              std z+0,R6
 0206 7182              std z+1,R7
 0208 8282              std z+2,R8
 020A 9382              std z+3,R9
 020C                   .dbline 130
 020C 0FC0              xjmp L38
 020E           L39:
 020E                   .dbline 131
 020E           L37:
 020E                   .dbline 127
 020E 40E0              ldi R20,0
 0210 50E0              ldi R21,0
 0212 60E0              ldi R22,0
 0214 70E0              ldi R23,0
 0216 FE01              movw R30,R28
 0218 2080              ldd R2,z+0
 021A 3180              ldd R3,z+1
 021C 4280              ldd R4,z+2
 021E 5380              ldd R5,z+3
 0220 2416              cp R2,R20
 0222 3506              cpc R3,R21
 0224 4606              cpc R4,R22
 0226 5706              cpc R5,R23
 0228 09F0              breq X0
 022A BECF              xjmp L36
 022C           X0:
 022C           L38:
 022C           L41:
 022C                   .dbline 134
 022C           ;  }
 022C           ;  
 022C           ; Wagain:
 022C           ;  p=P_data;
 022C EE88              ldd R14,y+22
 022E FF88              ldd R15,y+23
 0230                   .dbline 135
 0230           ;  i=num;//数据个数
 0230 A88C              ldd R10,y+24
 0232                   .dbline 136
 0232           ;  if(ICerror<10)
 0232 8D81              ldd R24,y+5
 0234 8A30              cpi R24,10
 0236 08F0              brlo X1
 0238 55C0              xjmp L44
 023A           X1:
 023A                   .dbline 137
 023A           ;  {
 023A                   .dbline 138
 023A           ;   ICerror++;
 023A 082E              mov R0,R24
 023C 0394              inc R0
 023E 0D82              std y+5,R0
 0240                   .dbline 139
 0240           ;  }
 0240                   .dbline 141
 0240           ;  else 
 0240           ;  {
 0240                   .dbline 142
 0240           ;  goto Wstop;
 0240           L43:
 0240                   .dbline 144
 0240           ;  }
 0240           ;  SDAout();
 0240 A19A              sbi 0x14,1
 0242                   .dbline 145
 0242           ;  WriteStart();      //启动
 0242 DEDE              xcall _WriteStart
 0244                   .dbline 146
 0244           ;  temp=0xa0+(DevAddr<<1);
 0244 8A89              ldd R24,y+18
 0246 880F              lsl R24
 0248 8056              subi R24,96    ; addi 160
 024A C82E              mov R12,R24
 024C                   .dbline 147
 024C           ;  if(model<16) temp+=((addr>>7)&0x0e);//器件24c32以下地址高位
 024C 8889              ldd R24,y+16
 024E 9989              ldd R25,y+17
 0250 8031              cpi R24,16
 0252 E0E0              ldi R30,0
 0254 9E07              cpc R25,R30
 0256 70F4              brsh L45
 0258                   .dbline 147
 0258 27E0              ldi R18,7
 025A 30E0              ldi R19,0
 025C 0C89              ldd R16,y+20
 025E 1D89              ldd R17,y+21
 0260 0E940000          xcall lsr16
 0264 C801              movw R24,R16
 0266 8E70              andi R24,14
 0268 9070              andi R25,0
 026A 2C2C              mov R2,R12
 026C 3324              clr R3
 026E 280E              add R2,R24
 0270 391E              adc R3,R25
 0272 C22C              mov R12,R2
 0274           L45:
 0274                   .dbline 148
 0274           ;  if(WriteByte(temp))   //头字节
 0274 0C2D              mov R16,R12
 0276 03DF              xcall _WriteByte
 0278 0023              tst R16
 027A 09F0              breq L47
 027C                   .dbline 149
 027C           ;  goto Wagain;
 027C D7CF              xjmp L41
 027E           L47:
 027E                   .dbline 150
 027E           ;  if(model>16)//写器件24c32以上地址高位
 027E 80E1              ldi R24,16
 0280 90E0              ldi R25,0
 0282 0888              ldd R0,y+16
 0284 1988              ldd R1,y+17
 0286 8015              cp R24,R0
 0288 9105              cpc R25,R1
 028A 40F4              brsh L49
 028C                   .dbline 151
 028C           ;  {
 028C                   .dbline 152
 028C           ;   if(WriteByte(addr>>8))//
 028C 0C89              ldd R16,y+20
 028E 1D89              ldd R17,y+21
 0290 012F              mov R16,R17
 0292 1127              clr R17
 0294 F4DE              xcall _WriteByte
 0296 0023              tst R16
 0298 09F0              breq L51
 029A                   .dbline 153
 029A           ;   goto Wagain;
 029A C8CF              xjmp L41
 029C           L51:
 029C                   .dbline 154
 029C           ;  }
 029C           L49:
 029C                   .dbline 155
 029C           ;  if(WriteByte(addr&0xff)) //写地址低位
 029C 0C89              ldd R16,y+20
 029E 1D89              ldd R17,y+21
 02A0 1070              andi R17,0
 02A2 EDDE              xcall _WriteByte
 02A4 0023              tst R16
 02A6 E1F0              breq L56
 02A8                   .dbline 156
 02A8           ;  goto Wagain;
 02A8 C1CF              xjmp L41
 02AA           L55:
 02AA                   .dbline 158
 02AA           ;  while(i)//写入数据i个
 02AA           ;  {
 02AA                   .dbline 159
 02AA           ;   i--;                                          
 02AA AA94              dec R10
 02AC                   .dbline 160
 02AC           ;   if(WriteByte(*(p++)))goto Wagain;
 02AC F701              movw R30,R14
 02AE 0191              ld R16,Z+
 02B0 7F01              movw R14,R30
 02B2 E5DE              xcall _WriteByte
 02B4 0023              tst R16
 02B6 09F0              breq L58
 02B8                   .dbline 160
 02B8 B9CF              xjmp L41
 02BA           L58:
 02BA                   .dbline 161
 02BA           ;   addr++;
 02BA 8C89              ldd R24,y+20
 02BC 9D89              ldd R25,y+21
 02BE 0196              adiw R24,1
 02C0 9D8B              std y+21,R25
 02C2 8C8B              std y+20,R24
 02C4                   .dbline 162
 02C4           ;   if(addr==next_page_start_addr)break;
 02C4 FE01              movw R30,R28
 02C6 2080              ldd R2,z+0
 02C8 3180              ldd R3,z+1
 02CA 4280              ldd R4,z+2
 02CC 5380              ldd R5,z+3
 02CE 3C01              movw R6,R24
 02D0 8824              clr R8
 02D2 9924              clr R9
 02D4 6214              cp R6,R2
 02D6 7304              cpc R7,R3
 02D8 8404              cpc R8,R4
 02DA 9504              cpc R9,R5
 02DC 09F4              brne L60
 02DE                   .dbline 162
 02DE 02C0              xjmp L57
 02E0           L60:
 02E0                   .dbline 163
 02E0           L56:
 02E0                   .dbline 157
 02E0 AA20              tst R10
 02E2 19F7              brne L55
 02E4           L57:
 02E4           L44:
 02E4                   .dbline 165
 02E4 EDDE              xcall _Stop
 02E6                   .dbline 166
 02E6 AA20              tst R10
 02E8 09F4              brne X2
 02EA 32C0              xjmp L62
 02EC           X2:
 02EC                   .dbline 167
 02EC                   .dbline 168
 02EC 04E6              ldi R16,100
 02EE 10E0              ldi R17,0
 02F0 93D0              xcall _Delay
 02F2                   .dbline 169
 02F2 A88E              std y+24,R10
 02F4                   .dbline 170
 02F4 FF8A              std y+23,R15
 02F6 EE8A              std y+22,R14
 02F8                   .dbline 171
 02F8 2C80              ldd R2,y+4
 02FA 3324              clr R3
 02FC 4424              clr R4
 02FE 5524              clr R5
 0300 FE01              movw R30,R28
 0302 6080              ldd R6,z+0
 0304 7180              ldd R7,z+1
 0306 8280              ldd R8,z+2
 0308 9380              ldd R9,z+3
 030A 620C              add R6,R2
 030C 731C              adc R7,R3
 030E 841C              adc R8,R4
 0310 951C              adc R9,R5
 0312 FE01              movw R30,R28
 0314 6082              std z+0,R6
 0316 7182              std z+1,R7
 0318 8282              std z+2,R8
 031A 9382              std z+3,R9
 031C                   .dbline 172
 031C 00E8              ldi R16,128
 031E 10E0              ldi R17,0
 0320 2889              ldd R18,y+16
 0322 3989              ldd R19,y+17
 0324 0E940000          xcall empy16s
 0328 0C88              ldd R0,y+20
 032A 1D88              ldd R1,y+21
 032C 0016              cp R0,R16
 032E 1106              cpc R1,R17
 0330 09F0              breq X3

⌨️ 快捷键说明

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