?? main.lis
字號:
0122 ; /*
0122 ; AT24C01 為128字節(jié) (0x00-0x7f)
0122 ; AT24C02 為256字節(jié) (0x00-0xff)
0122 ; AT24C04 為512字節(jié) (0x000-0x1ff)
0122 ; AT24C08 為1024字節(jié)(0x000-0x3ff)
0122 ; AT24C16 為2048字節(jié)(0x000-0x7ff)
0122 ;
0122 ; AT24C32 為4096字節(jié)(0x000-0xfff)
0122 ; AT24C64 為8192字節(jié)(0x0000-0x1fff)
0122 ; AT24C128 為16384字節(jié)(0x00-0x7ff)
0122 ; AT24C256 容量為32768字節(jié)(0x0000-0x7fff)
0122 ; AT24C512 容量為65536字節(jié)(0x0000-0xffff)
0122 ; */
0122 ; //寫入數(shù)據(jù),器件型號model,器件地址DevAddr,開始地址addr,數(shù)據(jù)*P_data,數(shù)據(jù)長度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;//總?cè)萘? 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;//數(shù)據(jù)個數(shù)
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)) //頭字節(jié)
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)//寫入數(shù)據(jù)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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -