1 ;-------------------------------------------------------- 2 ; File Created by SDCC : FreeWare ANSI-C Compiler 3 ; Version 2.4.0 Tue Mar 16 21:08:56 2004 4 5 ;-------------------------------------------------------- 6 .module i2c 7 .optsdcc -mmcs51 --model-small 8 9 ;-------------------------------------------------------- 10 ; Public variables in this module 11 ;-------------------------------------------------------- 12 .globl _i2c_read_PARM_3 13 .globl _i2c_read_PARM_2 14 .globl _i2c_write_PARM_3 15 .globl _i2c_write_PARM_2 16 .globl _USBPAIR 17 .globl _ISOCTL 18 .globl _AUTODATA 19 .globl _AUTOPTRL 20 .globl _AUTOPTRH 21 .globl _OUT07VAL 22 .globl _IN07VAL 23 .globl _I2DAT 24 .globl _I2CS 25 .globl _SETUPDAT 26 .globl _SUDPTRL 27 .globl _SUDPTRH 28 .globl _TOGCTL 29 .globl _USBCS 30 .globl _USBBAV 31 .globl _USBIEN 32 .globl _USBIRQ 33 .globl _OUT07IEN 34 .globl _IN07IEN 35 .globl _OUT07IRQ 36 .globl _IN07IRQ 37 .globl _PORTCCFG 38 .globl _PORTBCFG 39 .globl _PORTACFG 40 .globl _PINSC 41 .globl _OUTC 42 .globl _OEC 43 .globl _OUTB 44 .globl _OEB 45 .globl _OUTA 46 .globl _OEA 47 .globl _OUT6CS 48 .globl _OUT6BC 49 .globl _OUT6BUF 50 .globl _IN6CS 51 .globl _IN6BC 52 .globl _IN6BUF 53 .globl _OUT5CS 54 .globl _OUT5BC 55 .globl _OUT5BUF 56 .globl _IN5CS 57 .globl _IN5BC 58 .globl _IN5BUF 59 .globl _OUT4CS 60 .globl _OUT4BC 61 .globl _OUT4BUF 62 .globl _IN4CS 63 .globl _IN4BC 64 .globl _IN4BUF 65 .globl _OUT3BUF 66 .globl _OUT3CS 67 .globl _OUT3BC 68 .globl _IN3CS 69 .globl _IN3BC 70 .globl _IN3BUF 71 .globl _OUT2BUF 72 .globl _OUT2CS 73 .globl _OUT2BC 74 .globl _IN2CS 75 .globl _IN2BC 76 .globl _IN2BUF 77 .globl _OUT1BC 78 .globl _OUT1CS 79 .globl _OUT1BUF 80 .globl _IN1BC 81 .globl _IN1BUF 82 .globl _IN1CS 83 .globl _OUT0BC 84 .globl _OUT0BUF 85 .globl _IN0BC 86 .globl _IN0BUF 87 .globl _EP0CS 88 .globl _i2c_write 89 .globl _i2c_read 90 ;-------------------------------------------------------- 91 ; special function registers 92 ;-------------------------------------------------------- 0080 93 _P0 = 0x0080 0081 94 _SP = 0x0081 0082 95 _DPL = 0x0082 0083 96 _DPH = 0x0083 0087 97 _PCON = 0x0087 0088 98 _TCON = 0x0088 0089 99 _TMOD = 0x0089 008A 100 _TL0 = 0x008a 008B 101 _TL1 = 0x008b 008C 102 _TH0 = 0x008c 008D 103 _TH1 = 0x008d 0090 104 _P1 = 0x0090 0098 105 _SCON = 0x0098 0099 106 _SBUF = 0x0099 00A0 107 _P2 = 0x00a0 00A8 108 _IE = 0x00a8 00B0 109 _P3 = 0x00b0 00B8 110 _IP = 0x00b8 00D0 111 _PSW = 0x00d0 00E0 112 _ACC = 0x00e0 00F0 113 _B = 0x00f0 0091 114 _EXIF = 0x0091 00E8 115 _EIE = 0x00e8 0098 116 _SCON0 = 0x0098 00C0 117 _SCON1 = 0x00c0 0099 118 _SBUF0 = 0x0099 00C1 119 _SBUF1 = 0x00c1 008E 120 _CKCON = 0x008e 00C8 121 _T2CON = 0x00c8 00CA 122 _RCAP2L = 0x00ca 00CB 123 _RCAP2H = 0x00cb 00CC 124 _TL2 = 0x00cc 00CD 125 _TH2 = 0x00cd 126 ;-------------------------------------------------------- 127 ; special function bits 128 ;-------------------------------------------------------- 0080 129 _P0_0 = 0x0080 0081 130 _P0_1 = 0x0081 0082 131 _P0_2 = 0x0082 0083 132 _P0_3 = 0x0083 0084 133 _P0_4 = 0x0084 0085 134 _P0_5 = 0x0085 0086 135 _P0_6 = 0x0086 0087 136 _P0_7 = 0x0087 0088 137 _IT0 = 0x0088 0089 138 _IE0 = 0x0089 008A 139 _IT1 = 0x008a 008B 140 _IE1 = 0x008b 008C 141 _TR0 = 0x008c 008D 142 _TF0 = 0x008d 008E 143 _TR1 = 0x008e 008F 144 _TF1 = 0x008f 0090 145 _P1_0 = 0x0090 0091 146 _P1_1 = 0x0091 0092 147 _P1_2 = 0x0092 0093 148 _P1_3 = 0x0093 0094 149 _P1_4 = 0x0094 0095 150 _P1_5 = 0x0095 0096 151 _P1_6 = 0x0096 0097 152 _P1_7 = 0x0097 0098 153 _RI = 0x0098 0099 154 _TI = 0x0099 009A 155 _RB8 = 0x009a 009B 156 _TB8 = 0x009b 009C 157 _REN = 0x009c 009D 158 _SM2 = 0x009d 009E 159 _SM1 = 0x009e 009F 160 _SM0 = 0x009f 00A0 161 _P2_0 = 0x00a0 00A1 162 _P2_1 = 0x00a1 00A2 163 _P2_2 = 0x00a2 00A3 164 _P2_3 = 0x00a3 00A4 165 _P2_4 = 0x00a4 00A5 166 _P2_5 = 0x00a5 00A6 167 _P2_6 = 0x00a6 00A7 168 _P2_7 = 0x00a7 00A8 169 _EX0 = 0x00a8 00A9 170 _ET0 = 0x00a9 00AA 171 _EX1 = 0x00aa 00AB 172 _ET1 = 0x00ab 00AC 173 _ES = 0x00ac 00AF 174 _EA = 0x00af 00B0 175 _P3_0 = 0x00b0 00B1 176 _P3_1 = 0x00b1 00B2 177 _P3_2 = 0x00b2 00B3 178 _P3_3 = 0x00b3 00B4 179 _P3_4 = 0x00b4 00B5 180 _P3_5 = 0x00b5 00B6 181 _P3_6 = 0x00b6 00B7 182 _P3_7 = 0x00b7 00B0 183 _RXD = 0x00b0 00B1 184 _TXD = 0x00b1 00B2 185 _INT0 = 0x00b2 00B3 186 _INT1 = 0x00b3 00B4 187 _T0 = 0x00b4 00B5 188 _T1 = 0x00b5 00B6 189 _WR = 0x00b6 00B7 190 _RD = 0x00b7 00B8 191 _PX0 = 0x00b8 00B9 192 _PT0 = 0x00b9 00BA 193 _PX1 = 0x00ba 00BB 194 _PT1 = 0x00bb 00BC 195 _PS = 0x00bc 00D0 196 _P = 0x00d0 00D1 197 _F1 = 0x00d1 00D2 198 _OV = 0x00d2 00D3 199 _RS0 = 0x00d3 00D4 200 _RS1 = 0x00d4 00D5 201 _F0 = 0x00d5 00D6 202 _AC = 0x00d6 00D7 203 _CY = 0x00d7 00E8 204 _EUSB = 0x00e8 00AC 205 _ES0 = 0x00ac 00AE 206 _ES1 = 0x00ae 0098 207 _RI_0 = 0x0098 0099 208 _TI_0 = 0x0099 00C0 209 _RI_1 = 0x00c0 00C1 210 _TI_1 = 0x00c1 00CA 211 _TR2 = 0x00ca 00CF 212 _TF2 = 0x00cf 00AD 213 _ET2 = 0x00ad 214 ;-------------------------------------------------------- 215 ; overlayable register banks 216 ;-------------------------------------------------------- 217 .area REG_BANK_0 (REL,OVR,DATA) 0000 218 .ds 8 219 ;-------------------------------------------------------- 220 ; internal ram data 221 ;-------------------------------------------------------- 222 .area DSEG (DATA) 223 ;-------------------------------------------------------- 224 ; overlayable items in internal ram 225 ;-------------------------------------------------------- 226 .area OSEG (OVR,DATA) 0000 227 _i2c_write_PARM_2:: 0000 228 .ds 2 0002 229 _i2c_write_PARM_3:: 0002 230 .ds 2 231 .area OSEG (OVR,DATA) 0000 232 _i2c_read_PARM_2:: 0000 233 .ds 2 0002 234 _i2c_read_PARM_3:: 0002 235 .ds 2 236 ;-------------------------------------------------------- 237 ; indirectly addressable internal ram data 238 ;-------------------------------------------------------- 239 .area ISEG (DATA) 240 ;-------------------------------------------------------- 241 ; bit data 242 ;-------------------------------------------------------- 243 .area BSEG (BIT) 244 ;-------------------------------------------------------- 245 ; external ram data 246 ;-------------------------------------------------------- 247 .area XSEG (XDATA) 7FB4 248 _EP0CS = 0x7fb4 7F00 249 _IN0BUF = 0x7f00 7FB5 250 _IN0BC = 0x7fb5 7EC0 251 _OUT0BUF = 0x7ec0 7FC5 252 _OUT0BC = 0x7fc5 7FB6 253 _IN1CS = 0x7fb6 7E80 254 _IN1BUF = 0x7e80 7FB7 255 _IN1BC = 0x7fb7 7E40 256 _OUT1BUF = 0x7e40 7FC6 257 _OUT1CS = 0x7fc6 7FC7 258 _OUT1BC = 0x7fc7 7E00 259 _IN2BUF = 0x7e00 7FB9 260 _IN2BC = 0x7fb9 7FB8 261 _IN2CS = 0x7fb8 7FC9 262 _OUT2BC = 0x7fc9 7FC8 263 _OUT2CS = 0x7fc8 7DC0 264 _OUT2BUF = 0x7dc0 7D80 265 _IN3BUF = 0x7d80 7FBB 266 _IN3BC = 0x7fbb 7FBA 267 _IN3CS = 0x7fba 7FCB 268 _OUT3BC = 0x7fcb 7FCA 269 _OUT3CS = 0x7fca 7D40 270 _OUT3BUF = 0x7d40 7D00 271 _IN4BUF = 0x7d00 7FBD 272 _IN4BC = 0x7fbd 7FBC 273 _IN4CS = 0x7fbc 7CC0 274 _OUT4BUF = 0x7cc0 7FCD 275 _OUT4BC = 0x7fcd 7FCC 276 _OUT4CS = 0x7fcc 7C80 277 _IN5BUF = 0x7c80 7FBF 278 _IN5BC = 0x7fbf 7FBE 279 _IN5CS = 0x7fbe 7C40 280 _OUT5BUF = 0x7c40 7FCF 281 _OUT5BC = 0x7fcf 7FCE 282 _OUT5CS = 0x7fce 7C00 283 _IN6BUF = 0x7c00 7FC1 284 _IN6BC = 0x7fc1 7FC0 285 _IN6CS = 0x7fc0 7BC0 286 _OUT6BUF = 0x7bc0 7FD1 287 _OUT6BC = 0x7fd1 7FD0 288 _OUT6CS = 0x7fd0 7F9C 289 _OEA = 0x7f9c 7F96 290 _OUTA = 0x7f96 7F9D 291 _OEB = 0x7f9d 7F97 292 _OUTB = 0x7f97 7F9E 293 _OEC = 0x7f9e 7F98 294 _OUTC = 0x7f98 7F9B 295 _PINSC = 0x7f9b 7F93 296 _PORTACFG = 0x7f93 7F94 297 _PORTBCFG = 0x7f94 7F95 298 _PORTCCFG = 0x7f95 7FA9 299 _IN07IRQ = 0x7fa9 7FAA 300 _OUT07IRQ = 0x7faa 7FAC 301 _IN07IEN = 0x7fac 7FAD 302 _OUT07IEN = 0x7fad 7FAB 303 _USBIRQ = 0x7fab 7FAE 304 _USBIEN = 0x7fae 7FAF 305 _USBBAV = 0x7faf 7FD6 306 _USBCS = 0x7fd6 7FD7 307 _TOGCTL = 0x7fd7 7FD4 308 _SUDPTRH = 0x7fd4 7FD5 309 _SUDPTRL = 0x7fd5 7FE8 310 _SETUPDAT = 0x7fe8 7FA5 311 _I2CS = 0x7fa5 7FA6 312 _I2DAT = 0x7fa6 7FDE 313 _IN07VAL = 0x7fde 7FDF 314 _OUT07VAL = 0x7fdf 7FE3 315 _AUTOPTRH = 0x7fe3 7FE4 316 _AUTOPTRL = 0x7fe4 7FE5 317 _AUTODATA = 0x7fe5 7FA1 318 _ISOCTL = 0x7fa1 7FDD 319 _USBPAIR = 0x7fdd 320 ;-------------------------------------------------------- 321 ; external initialized ram data 322 ;-------------------------------------------------------- 323 .area XISEG (XDATA) 324 ;-------------------------------------------------------- 325 ; global & static initialisations 326 ;-------------------------------------------------------- 327 .area GSINIT (CODE) 328 .area GSFINAL (CODE) 329 .area GSINIT (CODE) 330 ;-------------------------------------------------------- 331 ; Home 332 ;-------------------------------------------------------- 333 .area HOME (CODE) 334 .area CSEG (CODE) 335 ;-------------------------------------------------------- 336 ; code 337 ;-------------------------------------------------------- 338 .area CSEG (CODE) 339 ;------------------------------------------------------------ 340 ;Allocation info for local variables in function 'i2c_write' 341 ;------------------------------------------------------------ 342 ;dat Allocated with name '_i2c_write_PARM_2' 343 ;length Allocated with name '_i2c_write_PARM_3' 344 ;address Allocated to registers r2 345 ;i Allocated to registers r3 r4 346 ;------------------------------------------------------------ 347 ;i2c.c:97: int i2c_write (byte address, xdata byte *dat, int length) 348 ; ----------------------------------------- 349 ; function i2c_write 350 ; ----------------------------------------- 0000 351 _i2c_write: 0002 352 ar2 = 0x02 0003 353 ar3 = 0x03 0004 354 ar4 = 0x04 0005 355 ar5 = 0x05 0006 356 ar6 = 0x06 0007 357 ar7 = 0x07 0000 358 ar0 = 0x00 0001 359 ar1 = 0x01 360 ; genReceive 0000 AA 82 361 mov r2,dpl 362 ;i2c.c:99: register int i = 0; 363 ; genAssign 0002 7B 00 364 mov r3,#0x00 0004 7C 00 365 mov r4,#0x00 366 ;i2c.c:102: stop_check(); 0006 367 00101$: 368 ; genAssign 0006 90 7F A5 369 mov dptr,#_I2CS 0009 E0 370 movx a,@dptr 371 ; genAnd 372 ; Peephole 105 removed redundant mov 000A FD 373 mov r5,a 374 ; genIfxJump 375 ; Peephole 112.a removed ljmp by inverse jump logic 000B 20 E6 F8 376 jb acc.6,00101$ 000E 377 00125$: 378 ;i2c.c:105: I2CS = 0x80; 379 ; genAssign 000E 90 7F A5 380 mov dptr,#_I2CS 0011 74 80 381 mov a,#0x80 0013 F0 382 movx @dptr,a 383 ;i2c.c:107: I2DAT = address << 1; 384 ; genLeftShift 385 ; genLeftShiftLiteral 386 ; genlshOne 0014 EA 387 mov a,r2 0015 25 E0 388 add a,acc 389 ; genAssign 390 ; Peephole 100 removed redundant mov 0017 FA 391 mov r2,a 0018 90 7F A6 392 mov dptr,#_I2DAT 001B F0 393 movx @dptr,a 394 ;i2c.c:110: while (!(I2CS & 0x01)); 395 ; genAssign 001C 7A 00 396 mov r2,#0x00 001E 7D 00 397 mov r5,#0x00 0020 398 00104$: 399 ; genAssign 0020 90 7F A5 400 mov dptr,#_I2CS 0023 E0 401 movx a,@dptr 402 ; genAnd 403 ; Peephole 105 removed redundant mov 0024 FE 404 mov r6,a 405 ; genIfxJump 406 ; Peephole 111 removed ljmp by inverse jump logic 0025 30 E0 F8 407 jnb acc.0,00104$ 0028 408 00126$: 409 ;i2c.c:112: if (I2CS & 0x04) { 410 ; genAssign 0028 90 7F A5 411 mov dptr,#_I2CS 002B E0 412 movx a,@dptr 413 ; genAnd 414 ; Peephole 105 removed redundant mov 002C FE 415 mov r6,a 416 ; genIfxJump 417 ; Peephole 111 removed ljmp by inverse jump logic 002D 30 E2 0B 418 jnb acc.2,00108$ 0030 419 00127$: 420 ;i2c.c:114: I2CS = 0x40; /* send stop condition */ 421 ; genAssign 0030 90 7F A5 422 mov dptr,#_I2CS 0033 74 40 423 mov a,#0x40 0035 F0 424 movx @dptr,a 425 ;i2c.c:115: return -1; 426 ; genRet 427 ; Peephole 182.b used 16 bit load of dptr 0036 90 FF FF 428 mov dptr,#0xFFFF 429 ; Peephole 112.b changed ljmp to sjmp 0039 80 47 430 sjmp 00116$ 003B 431 00108$: 432 ;i2c.c:118: if (!(I2CS & 0x02)) /* NACK */ { 433 ; genAssign 003B 90 7F A5 434 mov dptr,#_I2CS 003E E0 435 movx a,@dptr 436 ; genAnd 437 ; Peephole 105 removed redundant mov 003F FE 438 mov r6,a 439 ; genIfxJump 440 ; Peephole 112.a removed ljmp by inverse jump logic 0040 20 E1 0C 441 jb acc.1,00110$ 0043 442 00128$: 443 ;i2c.c:119: I2CS = 0x40; 444 ; genAssign 0043 90 7F A5 445 mov dptr,#_I2CS 0046 74 40 446 mov a,#0x40 0048 F0 447 movx @dptr,a 448 ;i2c.c:120: return i; 449 ; genRet 0049 8B 82 450 mov dpl,r3 004B 8C 83 451 mov dph,r4 452 ; Peephole 112.b changed ljmp to sjmp 004D 80 33 453 sjmp 00116$ 004F 454 00110$: 455 ;i2c.c:124: if (i == length) { 456 ; genCmpEq 004F EA 457 mov a,r2 458 ; Peephole 112.b changed ljmp to sjmp 459 ; Peephole 197.b optimized misc jump sequence 0050 B5*02 0C 460 cjne a,_i2c_write_PARM_3,00112$ 0053 ED 461 mov a,r5 0054 B5*03 08 462 cjne a,(_i2c_write_PARM_3 + 1),00112$ 463 ;00129$: 464 ; Peephole 200 removed redundant sjmp 0057 465 00130$: 466 ;i2c.c:125: I2CS = 0x40; 467 ; genAssign 0057 90 7F A5 468 mov dptr,#_I2CS 005A 74 40 469 mov a,#0x40 005C F0 470 movx @dptr,a 471 ;i2c.c:126: break; 472 ; Peephole 112.b changed ljmp to sjmp 005D 80 1F 473 sjmp 00115$ 005F 474 00112$: 475 ;i2c.c:129: I2DAT = dat[i++]; 476 ; genAssign 005F 8A 06 477 mov ar6,r2 0061 8D 07 478 mov ar7,r5 479 ; genPlus 480 ; genPlusIncr 0063 0A 481 inc r2 0064 BA 00 01 482 cjne r2,#0x00,00131$ 0067 0D 483 inc r5 0068 484 00131$: 485 ; genAssign 0068 8A 03 486 mov ar3,r2 006A 8D 04 487 mov ar4,r5 488 ; genPlus 489 ; Peephole 236.g used r6 instead of ar6 006C EE 490 mov a,r6 006D 25*00 491 add a,_i2c_write_PARM_2 006F F5 82 492 mov dpl,a 493 ; Peephole 236.g used r7 instead of ar7 0071 EF 494 mov a,r7 0072 35*01 495 addc a,(_i2c_write_PARM_2 + 1) 0074 F5 83 496 mov dph,a 497 ; genPointerGet 498 ; genFarPointerGet 0076 E0 499 movx a,@dptr 500 ; genAssign 501 ; Peephole 100 removed redundant mov 0077 FE 502 mov r6,a 0078 90 7F A6 503 mov dptr,#_I2DAT 007B F0 504 movx @dptr,a 505 ;i2c.c:130: } while (1); 506 ; Peephole 112.b changed ljmp to sjmp 007C 80 A2 507 sjmp 00104$ 007E 508 00115$: 509 ;i2c.c:133: return i; 510 ; genRet 007E 8B 82 511 mov dpl,r3 0080 8C 83 512 mov dph,r4 0082 513 00116$: 0082 22 514 ret 515 ;------------------------------------------------------------ 516 ;Allocation info for local variables in function 'i2c_read' 517 ;------------------------------------------------------------ 518 ;dat Allocated with name '_i2c_read_PARM_2' 519 ;length Allocated with name '_i2c_read_PARM_3' 520 ;address Allocated to registers r2 521 ;i Allocated to registers r3 r4 522 ;rd Allocated to registers r2 523 ;------------------------------------------------------------ 524 ;i2c.c:137: int i2c_read (byte address, xdata byte *dat, int length) 525 ; ----------------------------------------- 526 ; function i2c_read 527 ; ----------------------------------------- 0083 528 _i2c_read: 529 ; genReceive 0083 AA 82 530 mov r2,dpl 531 ;i2c.c:139: register int i = 0; 532 ; genAssign 533 ;i2c.c:142: if (!length) 534 ; genIfx 535 ; Peephole 3.c changed mov to clr 0085 E4 536 clr a 0086 FB 537 mov r3,a 0087 FC 538 mov r4,a 0088 E5*02 539 mov a,_i2c_read_PARM_3 008A 45*03 540 orl a,(_i2c_read_PARM_3 + 1) 541 ; genIfxJump 542 ; Peephole 109 removed ljmp by inverse jump logic 008C 70 04 543 jnz 00103$ 008E 544 00150$: 545 ;i2c.c:143: return 0; 546 ; genRet 547 ; Peephole 182.b used 16 bit load of dptr 008E 90 00 00 548 mov dptr,#0x0000 549 ; Peephole 251 replaced ljmp to ret with ret 0091 22 550 ret 551 ;i2c.c:146: stop_check(); 0092 552 00103$: 553 ; genAssign 0092 90 7F A5 554 mov dptr,#_I2CS 0095 E0 555 movx a,@dptr 556 ; genAnd 557 ; Peephole 105 removed redundant mov 0096 FD 558 mov r5,a 559 ; genIfxJump 560 ; Peephole 112.a removed ljmp by inverse jump logic 0097 20 E6 F8 561 jb acc.6,00103$ 009A 562 00151$: 563 ;i2c.c:149: I2CS = 0x80; 564 ; genAssign 009A 90 7F A5 565 mov dptr,#_I2CS 009D 74 80 566 mov a,#0x80 009F F0 567 movx @dptr,a 568 ;i2c.c:152: I2DAT = (address << 1) | 0x01; 569 ; genLeftShift 570 ; genLeftShiftLiteral 571 ; genlshOne 00A0 EA 572 mov a,r2 00A1 25 E0 573 add a,acc 00A3 FA 574 mov r2,a 575 ; genOr 00A4 90 7F A6 576 mov dptr,#_I2DAT 00A7 74 01 577 mov a,#0x01 00A9 4A 578 orl a,r2 00AA F0 579 movx @dptr,a 580 ;i2c.c:153: while (!(I2CS & 0x01)); 00AB 581 00106$: 582 ; genAssign 00AB 90 7F A5 583 mov dptr,#_I2CS 00AE E0 584 movx a,@dptr 585 ; genAnd 586 ; Peephole 105 removed redundant mov 00AF FA 587 mov r2,a 588 ; genIfxJump 589 ; Peephole 111 removed ljmp by inverse jump logic 00B0 30 E0 F8 590 jnb acc.0,00106$ 00B3 591 00152$: 592 ;i2c.c:154: if (I2CS & 0x04) { 593 ; genAssign 00B3 90 7F A5 594 mov dptr,#_I2CS 00B6 E0 595 movx a,@dptr 596 ; genAnd 597 ; Peephole 105 removed redundant mov 00B7 FA 598 mov r2,a 599 ; genIfxJump 600 ; Peephole 111 removed ljmp by inverse jump logic 00B8 30 E2 0A 601 jnb acc.2,00110$ 00BB 602 00153$: 603 ;i2c.c:155: I2CS = 0x40; /* send stop condition */ 604 ; genAssign 00BB 90 7F A5 605 mov dptr,#_I2CS 00BE 74 40 606 mov a,#0x40 00C0 F0 607 movx @dptr,a 608 ;i2c.c:156: return 0; 609 ; genRet 610 ; Peephole 182.b used 16 bit load of dptr 00C1 90 00 00 611 mov dptr,#0x0000 612 ; Peephole 251 replaced ljmp to ret with ret 00C4 22 613 ret 00C5 614 00110$: 615 ;i2c.c:158: if (!(I2CS & 0x02)) /* NACK */ { 616 ; genAssign 00C5 90 7F A5 617 mov dptr,#_I2CS 00C8 E0 618 movx a,@dptr 619 ; genAnd 620 ; Peephole 105 removed redundant mov 00C9 FA 621 mov r2,a 622 ; genIfxJump 623 ; Peephole 112.a removed ljmp by inverse jump logic 00CA 20 E1 0A 624 jb acc.1,00112$ 00CD 625 00154$: 626 ;i2c.c:159: I2CS = 0x40; 627 ; genAssign 00CD 90 7F A5 628 mov dptr,#_I2CS 00D0 74 40 629 mov a,#0x40 00D2 F0 630 movx @dptr,a 631 ;i2c.c:160: return 0; 632 ; genRet 633 ; Peephole 182.b used 16 bit load of dptr 00D3 90 00 00 634 mov dptr,#0x0000 635 ; Peephole 251 replaced ljmp to ret with ret 00D6 22 636 ret 00D7 637 00112$: 638 ;i2c.c:164: dat[0] = I2DAT; 639 ; genAssign 00D7 AA*00 640 mov r2,_i2c_read_PARM_2 00D9 AD*01 641 mov r5,(_i2c_read_PARM_2 + 1) 642 ; genAssign 00DB 90 7F A6 643 mov dptr,#_I2DAT 00DE E0 644 movx a,@dptr 645 ; genPointerSet 646 ; genFarPointerSet 647 ; Peephole 136 removed redundant moves 00DF FE 648 mov r6,a 00E0 8A 82 649 mov dpl,r2 00E2 8D 83 650 mov dph,r5 00E4 F0 651 movx @dptr,a 652 ;i2c.c:166: while (i < length - 2) { 653 ; genMinus 654 ; genMinusDec 00E5 E5*02 655 mov a,_i2c_read_PARM_3 00E7 24 FE 656 add a,#0xfe 00E9 FA 657 mov r2,a 00EA E5*03 658 mov a,(_i2c_read_PARM_3 + 1) 00EC 34 FF 659 addc a,#0xff 00EE FD 660 mov r5,a 661 ; genAssign 00EF 8B 06 662 mov ar6,r3 00F1 8C 07 663 mov ar7,r4 00F3 664 00118$: 665 ; genCmpLt 666 ; genCmp 00F3 C3 667 clr c 00F4 EE 668 mov a,r6 00F5 9A 669 subb a,r2 00F6 EF 670 mov a,r7 00F7 64 80 671 xrl a,#0x80 00F9 8D F0 672 mov b,r5 00FB 63 F0 80 673 xrl b,#0x80 00FE 95 F0 674 subb a,b 675 ; genIfxJump 676 ; Peephole 108 removed ljmp by inverse jump logic 0100 50 3F 677 jnc 00121$ 0102 678 00155$: 679 ;i2c.c:167: while (!(I2CS & 0x01)); 0102 680 00113$: 681 ; genAssign 0102 90 7F A5 682 mov dptr,#_I2CS 0105 E0 683 movx a,@dptr 684 ; genAnd 685 ; Peephole 105 removed redundant mov 0106 F8 686 mov r0,a 687 ; genIfxJump 688 ; Peephole 111 removed ljmp by inverse jump logic 0107 30 E0 F8 689 jnb acc.0,00113$ 010A 690 00156$: 691 ;i2c.c:168: if (I2CS & 0x04) { 692 ; genAssign 010A 90 7F A5 693 mov dptr,#_I2CS 010D E0 694 movx a,@dptr 695 ; genAnd 696 ; Peephole 105 removed redundant mov 010E F8 697 mov r0,a 698 ; genIfxJump 699 ; Peephole 111 removed ljmp by inverse jump logic 010F 30 E2 0A 700 jnb acc.2,00117$ 0112 701 00157$: 702 ;i2c.c:169: I2CS = 0x40; /* send stop condition */ 703 ; genAssign 0112 90 7F A5 704 mov dptr,#_I2CS 0115 74 40 705 mov a,#0x40 0117 F0 706 movx @dptr,a 707 ;i2c.c:170: return 0; 708 ; genRet 709 ; Peephole 182.b used 16 bit load of dptr 0118 90 00 00 710 mov dptr,#0x0000 711 ; Peephole 251 replaced ljmp to ret with ret 011B 22 712 ret 011C 713 00117$: 714 ;i2c.c:172: dat[i] = I2DAT; 715 ; genIpush 011C C0 02 716 push ar2 011E C0 05 717 push ar5 718 ; genPlus 719 ; Peephole 236.g used r6 instead of ar6 0120 EE 720 mov a,r6 0121 25*00 721 add a,_i2c_read_PARM_2 0123 F8 722 mov r0,a 723 ; Peephole 236.g used r7 instead of ar7 0124 EF 724 mov a,r7 0125 35*01 725 addc a,(_i2c_read_PARM_2 + 1) 0127 F9 726 mov r1,a 727 ; genAssign 0128 90 7F A6 728 mov dptr,#_I2DAT 012B E0 729 movx a,@dptr 730 ; genPointerSet 731 ; genFarPointerSet 732 ; Peephole 136 removed redundant moves 012C FA 733 mov r2,a 012D 88 82 734 mov dpl,r0 012F 89 83 735 mov dph,r1 0131 F0 736 movx @dptr,a 737 ;i2c.c:173: i++; 738 ; genPlus 739 ; genPlusIncr 0132 0E 740 inc r6 0133 BE 00 01 741 cjne r6,#0x00,00158$ 0136 0F 742 inc r7 0137 743 00158$: 744 ; genAssign 0137 8E 03 745 mov ar3,r6 0139 8F 04 746 mov ar4,r7 747 ; genIpop 013B D0 05 748 pop ar5 013D D0 02 749 pop ar2 750 ;i2c.c:177: while (!(I2CS & 0x01)); 751 ; Peephole 112.b changed ljmp to sjmp 013F 80 B2 752 sjmp 00118$ 0141 753 00121$: 754 ; genAssign 0141 90 7F A5 755 mov dptr,#_I2CS 0144 E0 756 movx a,@dptr 757 ; genAnd 758 ; Peephole 105 removed redundant mov 0145 FA 759 mov r2,a 760 ; genIfxJump 761 ; Peephole 111 removed ljmp by inverse jump logic 0146 30 E0 F8 762 jnb acc.0,00121$ 0149 763 00159$: 764 ;i2c.c:178: if (I2CS & 0x04) { 765 ; genAssign 0149 90 7F A5 766 mov dptr,#_I2CS 014C E0 767 movx a,@dptr 768 ; genAnd 769 ; Peephole 105 removed redundant mov 014D FA 770 mov r2,a 771 ; genIfxJump 772 ; Peephole 111 removed ljmp by inverse jump logic 014E 30 E2 0B 773 jnb acc.2,00125$ 0151 774 00160$: 775 ;i2c.c:179: I2CS = 0x40; /* send stop condition */ 776 ; genAssign 0151 90 7F A5 777 mov dptr,#_I2CS 0154 74 40 778 mov a,#0x40 0156 F0 779 movx @dptr,a 780 ;i2c.c:180: return 0; 781 ; genRet 782 ; Peephole 182.b used 16 bit load of dptr 0157 90 00 00 783 mov dptr,#0x0000 784 ; Peephole 112.b changed ljmp to sjmp 015A 80 60 785 sjmp 00131$ 015C 786 00125$: 787 ;i2c.c:183: I2CS = 0x20; 788 ; genAssign 015C 90 7F A5 789 mov dptr,#_I2CS 015F 74 20 790 mov a,#0x20 0161 F0 791 movx @dptr,a 792 ;i2c.c:184: dat[i++] = I2DAT; 793 ; genAssign 0162 8B 02 794 mov ar2,r3 0164 8C 05 795 mov ar5,r4 796 ; genPlus 797 ; genPlusIncr 0166 0B 798 inc r3 0167 BB 00 01 799 cjne r3,#0x00,00161$ 016A 0C 800 inc r4 016B 801 00161$: 802 ; genPlus 803 ; Peephole 236.g used r2 instead of ar2 016B EA 804 mov a,r2 016C 25*00 805 add a,_i2c_read_PARM_2 016E FA 806 mov r2,a 807 ; Peephole 236.g used r5 instead of ar5 016F ED 808 mov a,r5 0170 35*01 809 addc a,(_i2c_read_PARM_2 + 1) 0172 FD 810 mov r5,a 811 ; genAssign 0173 90 7F A6 812 mov dptr,#_I2DAT 0176 E0 813 movx a,@dptr 814 ; genPointerSet 815 ; genFarPointerSet 816 ; Peephole 136 removed redundant moves 0177 FE 817 mov r6,a 0178 8A 82 818 mov dpl,r2 017A 8D 83 819 mov dph,r5 017C F0 820 movx @dptr,a 821 ;i2c.c:187: while (!(I2CS & 0x01)); 017D 822 00126$: 823 ; genAssign 017D 90 7F A5 824 mov dptr,#_I2CS 0180 E0 825 movx a,@dptr 826 ; genAnd 827 ; Peephole 105 removed redundant mov 0181 FA 828 mov r2,a 829 ; genIfxJump 830 ; Peephole 111 removed ljmp by inverse jump logic 0182 30 E0 F8 831 jnb acc.0,00126$ 0185 832 00162$: 833 ;i2c.c:188: if (I2CS & 0x04) { 834 ; genAssign 0185 90 7F A5 835 mov dptr,#_I2CS 0188 E0 836 movx a,@dptr 837 ; genAnd 838 ; Peephole 105 removed redundant mov 0189 FA 839 mov r2,a 840 ; genIfxJump 841 ; Peephole 111 removed ljmp by inverse jump logic 018A 30 E2 0B 842 jnb acc.2,00130$ 018D 843 00163$: 844 ;i2c.c:189: I2CS = 0x40; /* send stop condition */ 845 ; genAssign 018D 90 7F A5 846 mov dptr,#_I2CS 0190 74 40 847 mov a,#0x40 0192 F0 848 movx @dptr,a 849 ;i2c.c:190: return 0; 850 ; genRet 851 ; Peephole 182.b used 16 bit load of dptr 0193 90 00 00 852 mov dptr,#0x0000 853 ; Peephole 112.b changed ljmp to sjmp 0196 80 24 854 sjmp 00131$ 0198 855 00130$: 856 ;i2c.c:192: I2CS = 0x40; 857 ; genAssign 0198 90 7F A5 858 mov dptr,#_I2CS 019B 74 40 859 mov a,#0x40 019D F0 860 movx @dptr,a 861 ;i2c.c:193: rd = I2DAT; 862 ; genAssign 019E 90 7F A6 863 mov dptr,#_I2DAT 01A1 E0 864 movx a,@dptr 01A2 FA 865 mov r2,a 866 ;i2c.c:194: dat[i++] = rd; 867 ; genAssign 01A3 8B 05 868 mov ar5,r3 01A5 8C 06 869 mov ar6,r4 870 ; genPlus 871 ; genPlusIncr 01A7 0B 872 inc r3 01A8 BB 00 01 873 cjne r3,#0x00,00164$ 01AB 0C 874 inc r4 01AC 875 00164$: 876 ; genPlus 877 ; Peephole 236.g used r5 instead of ar5 01AC ED 878 mov a,r5 01AD 25*00 879 add a,_i2c_read_PARM_2 01AF F5 82 880 mov dpl,a 881 ; Peephole 236.g used r6 instead of ar6 01B1 EE 882 mov a,r6 01B2 35*01 883 addc a,(_i2c_read_PARM_2 + 1) 01B4 F5 83 884 mov dph,a 885 ; genPointerSet 886 ; genFarPointerSet 01B6 EA 887 mov a,r2 01B7 F0 888 movx @dptr,a 889 ;i2c.c:196: return i; 890 ; genRet 01B8 8B 82 891 mov dpl,r3 01BA 8C 83 892 mov dph,r4 01BC 893 00131$: 01BC 22 894 ret 895 .area CSEG (CODE) 896 .area XINIT (CODE)