?? main.lis
字號:
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 + -