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

📄 main.lis

📁 AT24C256 读写 atmega16单片机( ICC )
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 0332 7CCF              xjmp L41
 0334           X3:
 0334                   .dbline 172
 0334                   .dbline 172
 0334 0024              clr R0
 0336 1124              clr R1
 0338 1D8A              std y+21,R1
 033A 0C8A              std y+20,R0
 033C                   .dbline 172
 033C 2C80              ldd R2,y+4
 033E 3324              clr R3
 0340 4424              clr R4
 0342 5524              clr R5
 0344 FE01              movw R30,R28
 0346 2082              std z+0,R2
 0348 3182              std z+1,R3
 034A 4282              std z+2,R4
 034C 5382              std z+3,R5
 034E                   .dbline 172
 034E                   .dbline 173
 034E 6ECF              xjmp L41
 0350           L62:
 0350                   .dbline -2
 0350                   .dbline 175
 0350           ;  }
 0350           ; Wstop:
 0350           ;  Stop();
 0350           ; if(i)//写到了页末,重新开始写新一页
 0350           ;  { 
 0350           ;  Delay(100);
 0350           ;  num=i;
 0350           ;  P_data=p;
 0350           ;  next_page_start_addr+=page_size;
 0350           ;  if(addr==model*128){addr=0;next_page_start_addr=page_size;}
 0350           ;  goto Wagain;
 0350           ;  }
 0350           ; }
 0350           L27:
 0350 2696              adiw R28,6
 0352 0E940000          xcall pop_gset5
 0356 2496              adiw R28,4
 0358                   .dbline 0 ; func end
 0358 0895              ret
 035A                   .dbsym l ICerror 5 c
 035A                   .dbsym r temp 12 c
 035A                   .dbsym r p 14 pc
 035A                   .dbsym l page_size 4 c
 035A                   .dbsym r i 10 c
 035A                   .dbsym l next_page_start_addr 0 l
 035A                   .dbsym l num 24 c
 035A                   .dbsym l P_data 22 pc
 035A                   .dbsym l addr 20 i
 035A                   .dbsym l DevAddr 18 c
 035A                   .dbsym l model 16 i
 035A                   .dbend
 035A                   .dbfunc e AT24CxxRead _AT24CxxRead fc
 035A           ;        ICerror -> R20
 035A           ;           temp -> R12
 035A           ;              p -> R10,R11
 035A           ;            num -> R22
 035A           ;         P_data -> R14,R15
 035A           ;           addr -> y+14
 035A           ;        DevAddr -> y+12
 035A           ;          model -> y+10
                        .even
 035A           _AT24CxxRead::
 035A 0E940000          xcall push_arg4
 035E 0E940000          xcall push_gset5
 0362 E888              ldd R14,y+16
 0364 F988              ldd R15,y+17
 0366 6A89              ldd R22,y+18
 0368                   .dbline -1
 0368                   .dbline 178
 0368           ; //读数据,器件型号model,器件地址DevAddr,地址addr,存放到 *P_data,数据长度num
 0368           ; unsigned char AT24CxxRead(unsigned int model,unsigned char DevAddr,unsigned int addr,unsigned char *P_data,unsigned char num)
 0368           ; {
 0368                   .dbline 179
 0368           ;  unsigned char temp,*p,ICerror=0;
 0368 4427              clr R20
 036A           L67:
 036A                   .dbline 181
 036A           ; Ragain:
 036A           ;  if(ICerror<10)ICerror++;
 036A 4A30              cpi R20,10
 036C 08F0              brlo X4
 036E 4EC0              xjmp L70
 0370           X4:
 0370                   .dbline 181
 0370 4395              inc R20
 0372                   .dbline 182
 0372           ;  else goto Rstop;
 0372           L69:
 0372                   .dbline 183
 0372           ;  SDAout();
 0372 A19A              sbi 0x14,1
 0374                   .dbline 184
 0374           ;  p=P_data;
 0374 5701              movw R10,R14
 0376                   .dbline 185
 0376           ;  WriteStart();//
 0376 44DE              xcall _WriteStart
 0378                   .dbline 186
 0378           ;  temp=0xa0+(DevAddr<<1);
 0378 8C85              ldd R24,y+12
 037A 880F              lsl R24
 037C 8056              subi R24,96    ; addi 160
 037E C82E              mov R12,R24
 0380                   .dbline 187
 0380           ;  if(model<16) temp+=((addr>>7)&0x0e);//器件24c32以下地址高位
 0380 8A85              ldd R24,y+10
 0382 9B85              ldd R25,y+11
 0384 8031              cpi R24,16
 0386 E0E0              ldi R30,0
 0388 9E07              cpc R25,R30
 038A 70F4              brsh L71
 038C                   .dbline 187
 038C 27E0              ldi R18,7
 038E 30E0              ldi R19,0
 0390 0E85              ldd R16,y+14
 0392 1F85              ldd R17,y+15
 0394 0E940000          xcall lsr16
 0398 C801              movw R24,R16
 039A 8E70              andi R24,14
 039C 9070              andi R25,0
 039E 2C2C              mov R2,R12
 03A0 3324              clr R3
 03A2 280E              add R2,R24
 03A4 391E              adc R3,R25
 03A6 C22C              mov R12,R2
 03A8           L71:
 03A8                   .dbline 188
 03A8           ;  if(WriteByte(temp))//;//头字节
 03A8 0C2D              mov R16,R12
 03AA 69DE              xcall _WriteByte
 03AC 0023              tst R16
 03AE 09F0              breq L73
 03B0                   .dbline 189
 03B0           ;  goto Ragain;
 03B0 DCCF              xjmp L67
 03B2           L73:
 03B2                   .dbline 190
 03B2           ;  if(model>16)//器件24c32以上地址高位
 03B2 80E1              ldi R24,16
 03B4 90E0              ldi R25,0
 03B6 0A84              ldd R0,y+10
 03B8 1B84              ldd R1,y+11
 03BA 8015              cp R24,R0
 03BC 9105              cpc R25,R1
 03BE 40F4              brsh L75
 03C0                   .dbline 191
 03C0           ;  {
 03C0                   .dbline 192
 03C0           ;   if(WriteByte(addr>>8))//
 03C0 0E85              ldd R16,y+14
 03C2 1F85              ldd R17,y+15
 03C4 012F              mov R16,R17
 03C6 1127              clr R17
 03C8 5ADE              xcall _WriteByte
 03CA 0023              tst R16
 03CC 09F0              breq L77
 03CE                   .dbline 193
 03CE           ;   goto Ragain;
 03CE CDCF              xjmp L67
 03D0           L77:
 03D0                   .dbline 194
 03D0           ;  }
 03D0           L75:
 03D0                   .dbline 195
 03D0           ;  if(WriteByte(addr&0xff))//
 03D0 0E85              ldd R16,y+14
 03D2 1F85              ldd R17,y+15
 03D4 1070              andi R17,0
 03D6 53DE              xcall _WriteByte
 03D8 0023              tst R16
 03DA 09F0              breq L79
 03DC                   .dbline 196
 03DC           ;  goto Ragain;
 03DC C6CF              xjmp L67
 03DE           L79:
 03DE           L81:
 03DE                   .dbline 198
 03DE           ;  Ragain2:
 03DE           ;  WriteStart();//
 03DE 10DE              xcall _WriteStart
 03E0                   .dbline 199
 03E0           ;  if(WriteByte(temp|1))//
 03E0 0C2D              mov R16,R12
 03E2 0160              ori R16,1
 03E4 4CDE              xcall _WriteByte
 03E6 0023              tst R16
 03E8 61F0              breq L85
 03EA                   .dbline 200
 03EA           ;  goto Ragain2;
 03EA F9CF              xjmp L81
 03EC           L84:
 03EC                   .dbline 202
 03EC           ;  while(num--)
 03EC           ;  {
 03EC                   .dbline 203
 03EC           ;   *(p++)=ReadByte();//
 03EC 79DE              xcall _ReadByte
 03EE F501              movw R30,R10
 03F0 0193              st Z+,R16
 03F2 5F01              movw R10,R30
 03F4                   .dbline 204
 03F4           ;   if(num)WACK(0);
 03F4 6623              tst R22
 03F6 19F0              breq L87
 03F8                   .dbline 204
 03F8 0027              clr R16
 03FA 0EDE              xcall _WACK
 03FC 02C0              xjmp L88
 03FE           L87:
 03FE                   .dbline 205
 03FE           ;   else WACK(1);
 03FE 01E0              ldi R16,1
 0400 0BDE              xcall _WACK
 0402           L88:
 0402                   .dbline 206
 0402           L85:
 0402                   .dbline 201
 0402 262E              mov R2,R22
 0404 3324              clr R3
 0406 6150              subi R22,1
 0408 2220              tst R2
 040A 81F7              brne L84
 040C           L70:
 040C                   .dbline 208
 040C           ;  }
 040C           ;  Rstop:
 040C           ;  Stop();//
 040C 59DE              xcall _Stop
 040E                   .dbline 209
 040E           ;  return(ICerror);
 040E 042F              mov R16,R20
 0410                   .dbline -2
 0410           L66:
 0410 0E940000          xcall pop_gset5
 0414 2496              adiw R28,4
 0416                   .dbline 0 ; func end
 0416 0895              ret
 0418                   .dbsym r ICerror 20 c
 0418                   .dbsym r temp 12 c
 0418                   .dbsym r p 10 pc
 0418                   .dbsym r num 22 c
 0418                   .dbsym r P_data 14 pc
 0418                   .dbsym l addr 14 i
 0418                   .dbsym l DevAddr 12 c
 0418                   .dbsym l model 10 i
 0418                   .dbend
 0418                   .dbfunc e Delay _Delay fV
 0418           ;     DelayCount -> R16
                        .even
 0418           _Delay::
 0418                   .dbline -1
 0418                   .dbline 213
 0418           L90:
 0418                   .dbline 213
 0418           L91:
 0418                   .dbline 213
 0418           ; }  
 0418           ;  /* * * * * * * * 一个简单延时程序 * * * * * * * * * * * * */ 
 0418           ;  void Delay(unsigned char DelayCount) 
 0418           ;   { while(DelayCount--); 
 0418 202E              mov R2,R16
 041A 3324              clr R3
 041C 0150              subi R16,1
 041E 2220              tst R2
 0420 D9F7              brne L90
 0422                   .dbline -2
 0422                   .dbline 214
 0422           ;   } 
 0422           L89:
 0422                   .dbline 0 ; func end
 0422 0895              ret
 0424                   .dbsym r DelayCount 16 c
 0424                   .dbend
                        .area lit(rom, con, rel)
 0000           L94:
 0000 0102              .byte 1,2
 0002 0304              .byte 3,4
 0004 0506              .byte 5,6
 0006 0708              .byte 7,8
 0008 090A              .byte 9,10
 000A 0B0C              .byte 11,12
 000C 0D0E              .byte 13,14
 000E 0F10              .byte 15,16
 0010 1112              .byte 17,18
 0012 1314              .byte 19,20
                        .area text(rom, con, rel)
 0424                   .dbfile E:\atmega16子函数\AT24C256\main.c
 0424                   .dbfunc e main _main fV
 0424           ;             pp -> R20,R21
 0424           ;              p -> R22,R23
 0424           ;           card -> y+25
 0424           ;      card_read -> y+5
 0424           ;              i -> R20
                        .even
 0424           _main::
 0424 AD97              sbiw R28,45
 0426                   .dbline -1
 0426                   .dbline 217
 0426           ; 
 0426           ; void main(void)
 0426           ; { char i;
 0426                   .dbline 218
 0426           ;   unsigned char card[20] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20},
 0426 80E0              ldi R24,<L94
 0428 90E0              ldi R25,>L94
 042A FE01              movw R30,R28
 042C 7996              adiw R30,25
 042E 04E1              ldi R16,20
 0430 10E0              ldi R17,0
 0432 FA93              st -y,R31
 0434 EA93              st -y,R30
 0436 9A93              st -y,R25
 0438 8A93              st -y,R24
 043A 0E940000          xcall asgncblk
 043E                   .dbline 219
 043E           ;   *p=card,card_read[20],*pp=card_read;
 043E BE01              movw R22,R28
 0440 675E              subi R22,231  ; offset = 25
 0442 7F4F              sbci R23,255
 0444                   .dbline 219
 0444 AE01              movw R20,R28
 0446 4B5F              subi R20,251  ; offset = 5
 0448 5F4F              sbci R21,255
 044A                   .dbline 222
 044A           ;   //*p = card;
 044A           ;  // pp =  card_read;
 044A           ;   usart_init();
 044A 0E940000          xcall _usart_init
 044E                   .dbline 224
 044E           ;   //写入数据,器件型号model,器件地址DevAddr,开始地址addr,数据*P_data,数据长度num
 044E           ;  AT24CxxWrite(0x0100,0,20,p,12);
 044E 8CE0              ldi R24,12
 0450 8C83              std y+4,R24
 0452 7B83              std y+3,R23
 0454 6A83              std y+2,R22
 0456 84E1              ldi R24,20
 0458 90E0              ldi R25,0
 045A 9983              std y+1,R25
 045C 8883              std y+0,R24
 045E 2227              clr R18
 0460 00E0              ldi R16,256
 0462 11E0              ldi R17,1
 0464 59DE              xcall _AT24CxxWrite
 0466                   .dbline 225
 0466           ;    Delay(e2ptime);
 0466 04E1              ldi R16,20
 0468 D7DF              xcall _Delay
 046A                   .dbline 226
 046A           ;  AT24CxxRead(0x0100,0,20,pp,12); 
 046A 8CE0              ldi R24,12
 046C 8C83              std y+4,R24
 046E 5B83              std y+3,R21
 0470 4A83              std y+2,R20
 0472 84E1              ldi R24,20
 0474 90E0              ldi R25,0
 0476 9983              std y+1,R25
 0478 8883              std y+0,R24
 047A 2227              clr R18
 047C 00E0              ldi R16,256
 047E 11E0              ldi R17,1
 0480 6CDF              xcall _AT24CxxRead
 0482                   .dbline 227
 0482           ;  for(i=0;i<12;i++)
 0482 4427              clr R20
 0484 09C0              xjmp L98
 0486           L95:
 0486                   .dbline 228
 0486                   .dbline 229
 0486 CE01              movw R24,R28
 0488 0596              adiw R24,5
 048A E42F              mov R30,R20
 048C FF27              clr R31
 048E E80F              add R30,R24
 0490 F91F              adc R31,R25
 0492 2080              ldd R2,z+0
 0494 2CB8              out 0xc,R2
 0496                   .dbline 230
 0496           L96:
 0496                   .dbline 227
 0496 4395              inc R20
 0498           L98:
 0498                   .dbline 227
 0498 4C30              cpi R20,12
 049A A8F3              brlo L95
 049C                   .dbline -2
 049C                   .dbline 232
 049C           ;  {
 049C           ;   UDR = card_read[i];
 049C           ;  }
 049C           ;  
 049C           ; }
 049C           L93:
 049C AD96              adiw R28,45
 049E                   .dbline 0 ; func end
 049E 0895              ret
 04A0                   .dbsym r pp 20 pc
 04A0                   .dbsym r p 22 pc
 04A0                   .dbsym l card 25 A[20:20]c
 04A0                   .dbsym l card_read 5 A[20:20]c
 04A0                   .dbsym r i 20 c
 04A0                   .dbend

⌨️ 快捷键说明

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