1 ;-------------------------------------------------------- 2 ; File Created by SDCC : free open source ANSI-C Compiler 3 ; Version 2.9.0 #5416 (Mar 22 2009) (MINGW32) 4 ; This file was generated Thu Dec 18 23:33:15 2014 5 ;-------------------------------------------------------- 6 .module main 7 .optsdcc -mmcs51 --model-small 8 9 ;-------------------------------------------------------- 10 ; Public variables in this module 11 ;-------------------------------------------------------- 12 .globl _main 13 .globl _visualise 14 .globl _data_controller 15 .globl _lcd_controller 16 .globl _format_postfix 17 .globl _format_row2 18 .globl _format_row1 19 .globl _init 20 .globl _make_sound 21 .globl _write_led 22 .globl _SPR0 23 .globl _SPR1 24 .globl _CPHA 25 .globl _CPOL 26 .globl _SPIM 27 .globl _SPE 28 .globl _WCOL 29 .globl _ISPI 30 .globl _I2CI 31 .globl _I2CTX 32 .globl _I2CRS 33 .globl _I2CM 34 .globl _MDI 35 .globl _MCO 36 .globl _MDE 37 .globl _MDO 38 .globl _CS0 39 .globl _CS1 40 .globl _CS2 41 .globl _CS3 42 .globl _SCONV 43 .globl _CCONV 44 .globl _DMA 45 .globl _ADCI 46 .globl _P 47 .globl _F1 48 .globl _OV 49 .globl _RS0 50 .globl _RS1 51 .globl _F0 52 .globl _AC 53 .globl _CY 54 .globl _CAP2 55 .globl _CNT2 56 .globl _TR2 57 .globl _XEN 58 .globl _TCLK 59 .globl _RCLK 60 .globl _EXF2 61 .globl _TF2 62 .globl _WDE 63 .globl _WDS 64 .globl _WDR2 65 .globl _WDR1 66 .globl _PRE0 67 .globl _PRE1 68 .globl _PRE2 69 .globl _PX0 70 .globl _PT0 71 .globl _PX1 72 .globl _PT1 73 .globl _PS 74 .globl _PT2 75 .globl _PADC 76 .globl _PSI 77 .globl _RXD 78 .globl _TXD 79 .globl _INT0 80 .globl _INT1 81 .globl _T0 82 .globl _T1 83 .globl _WR 84 .globl _RD 85 .globl _EX0 86 .globl _ET0 87 .globl _EX1 88 .globl _ET1 89 .globl _ES 90 .globl _ET2 91 .globl _EADC 92 .globl _EA 93 .globl _RI 94 .globl _TI 95 .globl _RB8 96 .globl _TB8 97 .globl _REN 98 .globl _SM2 99 .globl _SM1 100 .globl _SM0 101 .globl _T2 102 .globl _T2EX 103 .globl _IT0 104 .globl _IE0 105 .globl _IT1 106 .globl _IE1 107 .globl _TR0 108 .globl _TF0 109 .globl _TR1 110 .globl _TF1 111 .globl _DACCON 112 .globl _DAC1H 113 .globl _DAC1L 114 .globl _DAC0H 115 .globl _DAC0L 116 .globl _SPICON 117 .globl _SPIDAT 118 .globl _ADCCON3 119 .globl _ADCGAINH 120 .globl _ADCGAINL 121 .globl _ADCOFSH 122 .globl _ADCOFSL 123 .globl _B 124 .globl _ADCCON1 125 .globl _I2CCON 126 .globl _ACC 127 .globl _PSMCON 128 .globl _ADCDATAH 129 .globl _ADCDATAL 130 .globl _ADCCON2 131 .globl _DMAP 132 .globl _DMAH 133 .globl _DMAL 134 .globl _PSW 135 .globl _TH2 136 .globl _TL2 137 .globl _RCAP2H 138 .globl _RCAP2L 139 .globl _T2CON 140 .globl _EADRL 141 .globl _WDCON 142 .globl _EDATA4 143 .globl _EDATA3 144 .globl _EDATA2 145 .globl _EDATA1 146 .globl _ETIM3 147 .globl _ETIM2 148 .globl _ETIM1 149 .globl _ECON 150 .globl _IP 151 .globl _P3 152 .globl _IE2 153 .globl _IE 154 .globl _P2 155 .globl _I2CADD 156 .globl _I2CDAT 157 .globl _SBUF 158 .globl _SCON 159 .globl _P1 160 .globl _TH1 161 .globl _TH0 162 .globl _TL1 163 .globl _TL0 164 .globl _TMOD 165 .globl _TCON 166 .globl _PCON 167 .globl _DPP 168 .globl _DPH 169 .globl _DPL 170 .globl _SP 171 .globl _P0 172 .globl _i 173 .globl _postfix 174 .globl _old_value 175 .globl _next_char 176 .globl _old_dip 177 .globl _dip 178 .globl _consumption 179 .globl _sub_info 180 .globl _total_pos 181 .globl _consumption100miles 182 .globl _consumption100km 183 .globl _fuel_threshold 184 .globl _tank_max_volume 185 .globl _row2 186 .globl _row1 187 .globl _mode 188 .globl _metrica 189 .globl _tank_value 190 ;-------------------------------------------------------- 191 ; special function registers 192 ;-------------------------------------------------------- 193 .area RSEG (DATA) 0080 194 _P0 = 0x0080 0081 195 _SP = 0x0081 0082 196 _DPL = 0x0082 0083 197 _DPH = 0x0083 0084 198 _DPP = 0x0084 0087 199 _PCON = 0x0087 0088 200 _TCON = 0x0088 0089 201 _TMOD = 0x0089 008A 202 _TL0 = 0x008a 008B 203 _TL1 = 0x008b 008C 204 _TH0 = 0x008c 008D 205 _TH1 = 0x008d 0090 206 _P1 = 0x0090 0098 207 _SCON = 0x0098 0099 208 _SBUF = 0x0099 009A 209 _I2CDAT = 0x009a 009B 210 _I2CADD = 0x009b 00A0 211 _P2 = 0x00a0 00A8 212 _IE = 0x00a8 00A9 213 _IE2 = 0x00a9 00B0 214 _P3 = 0x00b0 00B8 215 _IP = 0x00b8 00B9 216 _ECON = 0x00b9 00BA 217 _ETIM1 = 0x00ba 00BB 218 _ETIM2 = 0x00bb 00C4 219 _ETIM3 = 0x00c4 00BC 220 _EDATA1 = 0x00bc 00BD 221 _EDATA2 = 0x00bd 00BE 222 _EDATA3 = 0x00be 00BF 223 _EDATA4 = 0x00bf 00C0 224 _WDCON = 0x00c0 00C6 225 _EADRL = 0x00c6 00C8 226 _T2CON = 0x00c8 00CA 227 _RCAP2L = 0x00ca 00CB 228 _RCAP2H = 0x00cb 00CC 229 _TL2 = 0x00cc 00CD 230 _TH2 = 0x00cd 00D0 231 _PSW = 0x00d0 00D2 232 _DMAL = 0x00d2 00D3 233 _DMAH = 0x00d3 00D4 234 _DMAP = 0x00d4 00D8 235 _ADCCON2 = 0x00d8 00D9 236 _ADCDATAL = 0x00d9 00DA 237 _ADCDATAH = 0x00da 00DF 238 _PSMCON = 0x00df 00E0 239 _ACC = 0x00e0 00E8 240 _I2CCON = 0x00e8 00EF 241 _ADCCON1 = 0x00ef 00F0 242 _B = 0x00f0 00F1 243 _ADCOFSL = 0x00f1 00F2 244 _ADCOFSH = 0x00f2 00F3 245 _ADCGAINL = 0x00f3 00F4 246 _ADCGAINH = 0x00f4 00F5 247 _ADCCON3 = 0x00f5 00F7 248 _SPIDAT = 0x00f7 00F8 249 _SPICON = 0x00f8 00F9 250 _DAC0L = 0x00f9 00FA 251 _DAC0H = 0x00fa 00FB 252 _DAC1L = 0x00fb 00FC 253 _DAC1H = 0x00fc 00FD 254 _DACCON = 0x00fd 255 ;-------------------------------------------------------- 256 ; special function bits 257 ;-------------------------------------------------------- 258 .area RSEG (DATA) 008F 259 _TF1 = 0x008f 008E 260 _TR1 = 0x008e 008D 261 _TF0 = 0x008d 008C 262 _TR0 = 0x008c 008B 263 _IE1 = 0x008b 008A 264 _IT1 = 0x008a 0089 265 _IE0 = 0x0089 0088 266 _IT0 = 0x0088 0091 267 _T2EX = 0x0091 0090 268 _T2 = 0x0090 009F 269 _SM0 = 0x009f 009E 270 _SM1 = 0x009e 009D 271 _SM2 = 0x009d 009C 272 _REN = 0x009c 009B 273 _TB8 = 0x009b 009A 274 _RB8 = 0x009a 0099 275 _TI = 0x0099 0098 276 _RI = 0x0098 00AF 277 _EA = 0x00af 00AE 278 _EADC = 0x00ae 00AD 279 _ET2 = 0x00ad 00AC 280 _ES = 0x00ac 00AB 281 _ET1 = 0x00ab 00AA 282 _EX1 = 0x00aa 00A9 283 _ET0 = 0x00a9 00A8 284 _EX0 = 0x00a8 00B7 285 _RD = 0x00b7 00B6 286 _WR = 0x00b6 00B5 287 _T1 = 0x00b5 00B4 288 _T0 = 0x00b4 00B3 289 _INT1 = 0x00b3 00B2 290 _INT0 = 0x00b2 00B1 291 _TXD = 0x00b1 00B0 292 _RXD = 0x00b0 00BF 293 _PSI = 0x00bf 00BE 294 _PADC = 0x00be 00BD 295 _PT2 = 0x00bd 00BC 296 _PS = 0x00bc 00BB 297 _PT1 = 0x00bb 00BA 298 _PX1 = 0x00ba 00B9 299 _PT0 = 0x00b9 00B8 300 _PX0 = 0x00b8 00C7 301 _PRE2 = 0x00c7 00C6 302 _PRE1 = 0x00c6 00C5 303 _PRE0 = 0x00c5 00C3 304 _WDR1 = 0x00c3 00C2 305 _WDR2 = 0x00c2 00C1 306 _WDS = 0x00c1 00C0 307 _WDE = 0x00c0 00CF 308 _TF2 = 0x00cf 00CE 309 _EXF2 = 0x00ce 00CD 310 _RCLK = 0x00cd 00CC 311 _TCLK = 0x00cc 00CB 312 _XEN = 0x00cb 00CA 313 _TR2 = 0x00ca 00C9 314 _CNT2 = 0x00c9 00C8 315 _CAP2 = 0x00c8 00D7 316 _CY = 0x00d7 00D6 317 _AC = 0x00d6 00D5 318 _F0 = 0x00d5 00D4 319 _RS1 = 0x00d4 00D3 320 _RS0 = 0x00d3 00D2 321 _OV = 0x00d2 00D1 322 _F1 = 0x00d1 00D0 323 _P = 0x00d0 00DF 324 _ADCI = 0x00df 00DE 325 _DMA = 0x00de 00DD 326 _CCONV = 0x00dd 00DC 327 _SCONV = 0x00dc 00DB 328 _CS3 = 0x00db 00DA 329 _CS2 = 0x00da 00D9 330 _CS1 = 0x00d9 00D8 331 _CS0 = 0x00d8 00EF 332 _MDO = 0x00ef 00EE 333 _MDE = 0x00ee 00ED 334 _MCO = 0x00ed 00EC 335 _MDI = 0x00ec 00EB 336 _I2CM = 0x00eb 00EA 337 _I2CRS = 0x00ea 00E9 338 _I2CTX = 0x00e9 00E8 339 _I2CI = 0x00e8 00FF 340 _ISPI = 0x00ff 00FE 341 _WCOL = 0x00fe 00FD 342 _SPE = 0x00fd 00FC 343 _SPIM = 0x00fc 00FB 344 _CPOL = 0x00fb 00FA 345 _CPHA = 0x00fa 00F9 346 _SPR1 = 0x00f9 00F8 347 _SPR0 = 0x00f8 348 ;-------------------------------------------------------- 349 ; overlayable register banks 350 ;-------------------------------------------------------- 351 .area REG_BANK_0 (REL,OVR,DATA) 0000 352 .ds 8 353 ;-------------------------------------------------------- 354 ; internal ram data 355 ;-------------------------------------------------------- 356 .area DSEG (DATA) 0000 357 _tank_value:: 0000 358 .ds 1 0001 359 _metrica:: 0001 360 .ds 1 0002 361 _mode:: 0002 362 .ds 1 0003 363 _row1:: 0003 364 .ds 16 0013 365 _row2:: 0013 366 .ds 16 0023 367 _tank_max_volume:: 0023 368 .ds 1 0024 369 _fuel_threshold:: 0024 370 .ds 1 0025 371 _consumption100km:: 0025 372 .ds 1 0026 373 _consumption100miles:: 0026 374 .ds 1 0027 375 _total_pos:: 0027 376 .ds 1 0028 377 _sub_info:: 0028 378 .ds 1 0029 379 _consumption:: 0029 380 .ds 1 002A 381 _dip:: 002A 382 .ds 1 002B 383 _old_dip:: 002B 384 .ds 1 002C 385 _next_char:: 002C 386 .ds 1 002D 387 _old_value:: 002D 388 .ds 1 002E 389 _postfix:: 002E 390 .ds 2 0030 391 _i:: 0030 392 .ds 2 393 ;-------------------------------------------------------- 394 ; overlayable items in internal ram 395 ;-------------------------------------------------------- 396 .area OSEG (OVR,DATA) 397 ;-------------------------------------------------------- 398 ; Stack segment in internal ram 399 ;-------------------------------------------------------- 400 .area SSEG (DATA) 0000 401 __start__stack: 0000 402 .ds 1 403 404 ;-------------------------------------------------------- 405 ; indirectly addressable internal ram data 406 ;-------------------------------------------------------- 407 .area ISEG (DATA) 408 ;-------------------------------------------------------- 409 ; absolute internal ram data 410 ;-------------------------------------------------------- 411 .area IABS (ABS,DATA) 412 .area IABS (ABS,DATA) 413 ;-------------------------------------------------------- 414 ; bit data 415 ;-------------------------------------------------------- 416 .area BSEG (BIT) 417 ;-------------------------------------------------------- 418 ; paged external ram data 419 ;-------------------------------------------------------- 420 .area PSEG (PAG,XDATA) 421 ;-------------------------------------------------------- 422 ; external ram data 423 ;-------------------------------------------------------- 424 .area XSEG (XDATA) 425 ;-------------------------------------------------------- 426 ; absolute external ram data 427 ;-------------------------------------------------------- 428 .area XABS (ABS,XDATA) 429 ;-------------------------------------------------------- 430 ; external initialized ram data 431 ;-------------------------------------------------------- 432 .area XISEG (XDATA) 433 .area HOME (CODE) 434 .area GSINIT0 (CODE) 435 .area GSINIT1 (CODE) 436 .area GSINIT2 (CODE) 437 .area GSINIT3 (CODE) 438 .area GSINIT4 (CODE) 439 .area GSINIT5 (CODE) 440 .area GSINIT (CODE) 441 .area GSFINAL (CODE) 442 .area CSEG (CODE) 443 ;-------------------------------------------------------- 444 ; interrupt vector 445 ;-------------------------------------------------------- 446 .area HOME (CODE) 0000 447 __interrupt_vect: 0000 02s00r00 448 ljmp __sdcc_gsinit_startup 0003 32 449 reti 0004 450 .ds 7 000B 32 451 reti 000C 452 .ds 7 0013 32 453 reti 0014 454 .ds 7 001B 32 455 reti 001C 456 .ds 7 0023 02s00r00 457 ljmp _handler_uart 458 ;-------------------------------------------------------- 459 ; global & static initialisations 460 ;-------------------------------------------------------- 461 .area HOME (CODE) 462 .area GSINIT (CODE) 463 .area GSFINAL (CODE) 464 .area GSINIT (CODE) 465 .globl __sdcc_gsinit_startup 466 .globl __sdcc_program_startup 467 .globl __start__stack 468 .globl __mcs51_genXINIT 469 .globl __mcs51_genXRAMCLEAR 470 .globl __mcs51_genRAMCLEAR 471 ; SRC/main.c:18: unsigned char metrica = KILOMETERS; 0000 75*01 01 472 mov _metrica,#0x01 473 ; SRC/main.c:19: unsigned char mode = TANK_VALUE; 0003 75*02 00 474 mov _mode,#0x00 475 ; SRC/main.c:22: unsigned char tank_max_volume = 50; 0006 75*23 32 476 mov _tank_max_volume,#0x32 477 ; SRC/main.c:23: unsigned char fuel_threshold = 5; 0009 75*24 05 478 mov _fuel_threshold,#0x05 479 ; SRC/main.c:24: unsigned char consumption100km = 10; 000C 75*25 0A 480 mov _consumption100km,#0x0A 481 ; SRC/main.c:25: unsigned char consumption100miles = 16; 000F 75*26 10 482 mov _consumption100miles,#0x10 483 ; SRC/main.c:26: unsigned char total_pos = 14; 0012 75*27 0E 484 mov _total_pos,#0x0E 485 ; SRC/main.c:28: unsigned char sub_info = 0; 0015 75*28 00 486 mov _sub_info,#0x00 487 ; SRC/main.c:29: unsigned char consumption = 0; 0018 75*29 00 488 mov _consumption,#0x00 489 ; SRC/main.c:30: unsigned char dip = 0; 001B 75*2A 00 490 mov _dip,#0x00 491 ; SRC/main.c:31: unsigned char old_dip = 0; 001E 75*2B 00 492 mov _old_dip,#0x00 493 ; SRC/main.c:32: unsigned char next_char = 0; 0021 75*2C 00 494 mov _next_char,#0x00 495 ; SRC/main.c:33: unsigned char old_value = 10; 0024 75*2D 0A 496 mov _old_value,#0x0A 497 ; SRC/main.c:35: int i = 0; 0027 E4 498 clr a 0028 F5*30 499 mov _i,a 002A F5*31 500 mov (_i + 1),a 501 .area GSFINAL (CODE) 0000 02s00r26 502 ljmp __sdcc_program_startup 503 ;-------------------------------------------------------- 504 ; Home 505 ;-------------------------------------------------------- 506 .area HOME (CODE) 507 .area HOME (CODE) 0026 508 __sdcc_program_startup: 0026 12s02r80 509 lcall _main 510 ; return from main will lock up 0029 80 FE 511 sjmp . 512 ;-------------------------------------------------------- 513 ; code 514 ;-------------------------------------------------------- 515 .area CSEG (CODE) 516 ;------------------------------------------------------------ 517 ;Allocation info for local variables in function 'write_led' 518 ;------------------------------------------------------------ 519 ;value Allocated to registers r2 520 ;------------------------------------------------------------ 521 ; SRC/main.c:38: void write_led(unsigned char value) 522 ; ----------------------------------------- 523 ; function write_led 524 ; ----------------------------------------- 0000 525 _write_led: 0002 526 ar2 = 0x02 0003 527 ar3 = 0x03 0004 528 ar4 = 0x04 0005 529 ar5 = 0x05 0006 530 ar6 = 0x06 0007 531 ar7 = 0x07 0000 532 ar0 = 0x00 0001 533 ar1 = 0x01 0000 AA 82 534 mov r2,dpl 535 ; SRC/main.c:40: write_max(7, value); 0002 C0 02 536 push ar2 0004 90 00 07 537 mov dptr,#0x0007 0007 12s00r00 538 lcall _write_max 000A 15 81 539 dec sp 000C 22 540 ret 541 ;------------------------------------------------------------ 542 ;Allocation info for local variables in function 'make_sound' 543 ;------------------------------------------------------------ 544 ;sound Allocated to registers r2 r3 545 ;i Allocated to registers r4 r5 546 ;------------------------------------------------------------ 547 ; SRC/main.c:42: void make_sound() 548 ; ----------------------------------------- 549 ; function make_sound 550 ; ----------------------------------------- 000D 551 _make_sound: 552 ; SRC/main.c:44: unsigned int sound = 0; 000D 7A 00 553 mov r2,#0x00 000F 7B 00 554 mov r3,#0x00 555 ; SRC/main.c:47: for (i = 0; i < 100; i++) { 0011 7C 64 556 mov r4,#0x64 0013 7D 00 557 mov r5,#0x00 0015 558 00103$: 559 ; SRC/main.c:48: sound = (sound == 0x00) ? 0x10 : 0x00; 0015 EA 560 mov a,r2 0016 4B 561 orl a,r3 0017 B4 01 00 562 cjne a,#0x01,00112$ 001A 563 00112$: 001A E4 564 clr a 001B 33 565 rlc a 001C FE 566 mov r6,a 001D 60 04 567 jz 00106$ 001F 7E 10 568 mov r6,#0x10 0021 80 02 569 sjmp 00107$ 0023 570 00106$: 0023 7E 00 571 mov r6,#0x00 0025 572 00107$: 0025 8E 02 573 mov ar2,r6 0027 7B 00 574 mov r3,#0x00 575 ; SRC/main.c:49: write_max(4, sound); 0029 8A 06 576 mov ar6,r2 002B C0 02 577 push ar2 002D C0 03 578 push ar3 002F C0 04 579 push ar4 0031 C0 05 580 push ar5 0033 C0 06 581 push ar6 0035 90 00 04 582 mov dptr,#0x0004 0038 12s00r00 583 lcall _write_max 003B 15 81 584 dec sp 003D D0 05 585 pop ar5 003F D0 04 586 pop ar4 0041 D0 03 587 pop ar3 0043 D0 02 588 pop ar2 0045 1C 589 dec r4 0046 BC FF 01 590 cjne r4,#0xff,00114$ 0049 1D 591 dec r5 004A 592 00114$: 593 ; SRC/main.c:47: for (i = 0; i < 100; i++) { 004A EC 594 mov a,r4 004B 4D 595 orl a,r5 004C 70 C7 596 jnz 00103$ 004E 22 597 ret 598 ;------------------------------------------------------------ 599 ;Allocation info for local variables in function 'init' 600 ;------------------------------------------------------------ 601 ;speed Allocated to registers 602 ;------------------------------------------------------------ 603 ; SRC/main.c:53: void init(unsigned char speed) 604 ; ----------------------------------------- 605 ; function init 606 ; ----------------------------------------- 004F 607 _init: 608 ; SRC/main.c:55: TH1 = 0xFD; //Скорость 9600 004F 75 8D FD 609 mov _TH1,#0xFD 610 ; SRC/main.c:56: TH0 = 0x00; 0052 75 8C 00 611 mov _TH0,#0x00 612 ; SRC/main.c:57: TMOD = 0x22; //Таймер 1 и 0 в режиме autoreload 0055 75 89 22 613 mov _TMOD,#0x22 614 ; SRC/main.c:58: TCON = 0x50; //Запуск таймеров 0 и 1 0058 75 88 50 615 mov _TCON,#0x50 616 ; SRC/main.c:59: SCON = 0x50; //8 bit UART, разрешение приема 005B 75 98 50 617 mov _SCON,#0x50 618 ; SRC/main.c:60: PCON &= 0x7F; //Отключение дублирования скорости, установленной в TH1 005E 53 87 7F 619 anl _PCON,#0x7F 620 ; SRC/main.c:63: init_timer(1000); 0061 90 03 E8 621 mov dptr,#0x03E8 0064 E4 622 clr a 0065 F5 F0 623 mov b,a 0067 12s00r00 624 lcall _init_timer 625 ; SRC/main.c:64: write_string("ready\n"); 006A 90s00r00 626 mov dptr,#__str_0 006D 75 F0 80 627 mov b,#0x80 0070 12s00r00 628 lcall _write_string 629 ; SRC/main.c:66: EA = 1; 0073 D2 AF 630 setb _EA 631 ; SRC/main.c:67: ET0 = 1; 0075 D2 A9 632 setb _ET0 0077 22 633 ret 634 ;------------------------------------------------------------ 635 ;Allocation info for local variables in function 'format_row1' 636 ;------------------------------------------------------------ 637 ;value Allocated to registers r2 638 ;i Allocated to registers r4 r5 639 ;pos Allocated to registers r2 r3 640 ;------------------------------------------------------------ 641 ; SRC/main.c:70: void format_row1(char value) 642 ; ----------------------------------------- 643 ; function format_row1 644 ; ----------------------------------------- 0078 645 _format_row1: 0078 AA 82 646 mov r2,dpl 647 ; SRC/main.c:74: row1[0] = '['; 007A 75*03 5B 648 mov _row1,#0x5B 649 ; SRC/main.c:75: row1[15] = ']'; 007D 75*12 5D 650 mov (_row1 + 0x000f),#0x5D 651 ; SRC/main.c:76: pos = value * total_pos / tank_max_volume; 0080 C2 D5 652 clr F0 0082 85*27 F0 653 mov b,_total_pos 0085 EA 654 mov a,r2 0086 30 E7 04 655 jnb acc.7,00117$ 0089 B2 D5 656 cpl F0 008B F4 657 cpl a 008C 04 658 inc a 008D 659 00117$: 008D A4 660 mul ab 008E 30 D5 0A 661 jnb F0,00118$ 0091 F4 662 cpl a 0092 24 01 663 add a,#0x01 0094 C5 F0 664 xch a,b 0096 F4 665 cpl a 0097 34 00 666 addc a,#0x00 0099 C5 F0 667 xch a,b 009B 668 00118$: 009B F5 82 669 mov dpl,a 009D 85 F0 83 670 mov dph,b 00A0 AA*23 671 mov r2,_tank_max_volume 00A2 7B 00 672 mov r3,#0x00 00A4 C0 02 673 push ar2 00A6 C0 03 674 push ar3 00A8 12s00r00 675 lcall __divsint 00AB AA 82 676 mov r2,dpl 00AD AB 83 677 mov r3,dph 00AF 15 81 678 dec sp 00B1 15 81 679 dec sp 680 ; SRC/main.c:77: for ( i = 1; i <= pos; i++) 00B3 7C 01 681 mov r4,#0x01 00B5 7D 00 682 mov r5,#0x00 00B7 683 00101$: 00B7 C3 684 clr c 00B8 EA 685 mov a,r2 00B9 9C 686 subb a,r4 00BA EB 687 mov a,r3 00BB 64 80 688 xrl a,#0x80 00BD 8D F0 689 mov b,r5 00BF 63 F0 80 690 xrl b,#0x80 00C2 95 F0 691 subb a,b 00C4 40 0D 692 jc 00114$ 693 ; SRC/main.c:79: row1[i] = 0xff; 00C6 EC 694 mov a,r4 00C7 24r03 695 add a,#_row1 00C9 F8 696 mov r0,a 00CA 76 FF 697 mov @r0,#0xFF 698 ; SRC/main.c:77: for ( i = 1; i <= pos; i++) 00CC 0C 699 inc r4 00CD BC 00 E7 700 cjne r4,#0x00,00101$ 00D0 0D 701 inc r5 00D1 80 E4 702 sjmp 00101$ 00D3 703 00114$: 00D3 8C 02 704 mov ar2,r4 00D5 8D 03 705 mov ar3,r5 00D7 706 00105$: 707 ; SRC/main.c:81: for (;i <= total_pos; i++) 00D7 AC*27 708 mov r4,_total_pos 00D9 7D 00 709 mov r5,#0x00 00DB C3 710 clr c 00DC EC 711 mov a,r4 00DD 9A 712 subb a,r2 00DE ED 713 mov a,r5 00DF 64 80 714 xrl a,#0x80 00E1 8B F0 715 mov b,r3 00E3 63 F0 80 716 xrl b,#0x80 00E6 95 F0 717 subb a,b 00E8 40 0D 718 jc 00109$ 719 ; SRC/main.c:83: row1[i] = ' '; 00EA EA 720 mov a,r2 00EB 24r03 721 add a,#_row1 00ED F8 722 mov r0,a 00EE 76 20 723 mov @r0,#0x20 724 ; SRC/main.c:81: for (;i <= total_pos; i++) 00F0 0A 725 inc r2 00F1 BA 00 E3 726 cjne r2,#0x00,00105$ 00F4 0B 727 inc r3 00F5 80 E0 728 sjmp 00105$ 00F7 729 00109$: 00F7 22 730 ret 731 ;------------------------------------------------------------ 732 ;Allocation info for local variables in function 'format_row2' 733 ;------------------------------------------------------------ 734 ;value Allocated to registers r2 735 ;i Allocated to registers r3 r4 736 ;------------------------------------------------------------ 737 ; SRC/main.c:87: void format_row2(unsigned char value) 738 ; ----------------------------------------- 739 ; function format_row2 740 ; ----------------------------------------- 00F8 741 _format_row2: 00F8 AA 82 742 mov r2,dpl 743 ; SRC/main.c:89: int i = 0; 00FA 7B 00 744 mov r3,#0x00 00FC 7C 00 745 mov r4,#0x00 746 ; SRC/main.c:90: if (value >= 100) { 00FE BA 64 00 747 cjne r2,#0x64,00109$ 0101 748 00109$: 0101 40 15 749 jc 00102$ 750 ; SRC/main.c:91: row2[i] = value % 100 + '0'; 0103 75 F0 64 751 mov b,#0x64 0106 EA 752 mov a,r2 0107 84 753 div ab 0108 E5 F0 754 mov a,b 010A 24 30 755 add a,#0x30 010C F5*13 756 mov _row2,a 757 ; SRC/main.c:92: i++; 010E 7B 01 758 mov r3,#0x01 0110 7C 00 759 mov r4,#0x00 760 ; SRC/main.c:93: value = value / 10; 0112 75 F0 0A 761 mov b,#0x0A 0115 EA 762 mov a,r2 0116 84 763 div ab 0117 FA 764 mov r2,a 0118 765 00102$: 766 ; SRC/main.c:95: if (value >= 10) { 0118 BA 0A 00 767 cjne r2,#0x0A,00111$ 011B 768 00111$: 011B 40 13 769 jc 00104$ 770 ; SRC/main.c:96: row2[i] = value % 10 + '0'; 011D EB 771 mov a,r3 011E 24r13 772 add a,#_row2 0120 F8 773 mov r0,a 0121 75 F0 0A 774 mov b,#0x0A 0124 EA 775 mov a,r2 0125 84 776 div ab 0126 E5 F0 777 mov a,b 0128 24 30 778 add a,#0x30 012A F6 779 mov @r0,a 780 ; SRC/main.c:97: i++; 012B 0B 781 inc r3 012C BB 00 01 782 cjne r3,#0x00,00113$ 012F 0C 783 inc r4 0130 784 00113$: 0130 785 00104$: 786 ; SRC/main.c:99: row2[i] = value / 10 + '0'; 0130 EB 787 mov a,r3 0131 24r13 788 add a,#_row2 0133 F8 789 mov r0,a 0134 75 F0 0A 790 mov b,#0x0A 0137 EA 791 mov a,r2 0138 84 792 div ab 0139 24 30 793 add a,#0x30 013B F6 794 mov @r0,a 795 ; SRC/main.c:100: i++; 013C 0B 796 inc r3 013D BB 00 01 797 cjne r3,#0x00,00114$ 0140 0C 798 inc r4 0141 799 00114$: 800 ; SRC/main.c:102: row2[i] = postfix[0]; 0141 EB 801 mov a,r3 0142 24r13 802 add a,#_row2 0144 F8 803 mov r0,a 0145 AA*2E 804 mov r2,_postfix 0147 A6 02 805 mov @r0,ar2 806 ; SRC/main.c:103: i++; 0149 0B 807 inc r3 014A BB 00 01 808 cjne r3,#0x00,00115$ 014D 0C 809 inc r4 014E 810 00115$: 811 ; SRC/main.c:104: row2[i] = postfix[1]; 014E EB 812 mov a,r3 014F 24r13 813 add a,#_row2 0151 F8 814 mov r0,a 0152 AA*2F 815 mov r2,(_postfix + 0x0001) 0154 A6 02 816 mov @r0,ar2 817 ; SRC/main.c:105: i++; 0156 22 818 ret 819 ;------------------------------------------------------------ 820 ;Allocation info for local variables in function 'format_postfix' 821 ;------------------------------------------------------------ 822 ;------------------------------------------------------------ 823 ; SRC/main.c:108: void format_postfix() 824 ; ----------------------------------------- 825 ; function format_postfix 826 ; ----------------------------------------- 0157 827 _format_postfix: 828 ; SRC/main.c:110: if (mode == TANK_VALUE) { postfix[0] = 'L'; postfix[1] = ' '; } 0157 E5*02 829 mov a,_mode 0159 70 07 830 jnz 00105$ 015B 75*2E 4C 831 mov _postfix,#0x4C 015E 75*2F 20 832 mov (_postfix + 0x0001),#0x20 0161 22 833 ret 0162 834 00105$: 835 ; SRC/main.c:111: else if (metrica == KILOMETERS) { postfix[0] = 'k'; postfix[1] = 'm'; } 0162 74 01 836 mov a,#0x01 0164 B5*01 07 837 cjne a,_metrica,00102$ 0167 75*2E 6B 838 mov _postfix,#0x6B 016A 75*2F 6D 839 mov (_postfix + 0x0001),#0x6D 016D 22 840 ret 016E 841 00102$: 842 ; SRC/main.c:112: else { postfix[0] = 'm'; postfix[1] = ' '; } 016E 75*2E 6D 843 mov _postfix,#0x6D 0171 75*2F 20 844 mov (_postfix + 0x0001),#0x20 0174 22 845 ret 846 ;------------------------------------------------------------ 847 ;Allocation info for local variables in function 'lcd_controller' 848 ;------------------------------------------------------------ 849 ;additional_info Allocated to stack - offset -3 850 ;volume Allocated to registers r2 851 ;------------------------------------------------------------ 852 ; SRC/main.c:115: void lcd_controller(unsigned char volume, unsigned char additional_info) 853 ; ----------------------------------------- 854 ; function lcd_controller 855 ; ----------------------------------------- 0175 856 _lcd_controller: 0175 C0*00 857 push _bp 0177 85 81*00 858 mov _bp,sp 017A AA 82 859 mov r2,dpl 860 ; SRC/main.c:117: format_postfix(); 017C C0 02 861 push ar2 017E 12s01r57 862 lcall _format_postfix 0181 D0 02 863 pop ar2 864 ; SRC/main.c:118: format_row1(volume); 0183 8A 82 865 mov dpl,r2 0185 12s00r78 866 lcall _format_row1 867 ; SRC/main.c:119: format_row2(additional_info); 0188 A8*00 868 mov r0,_bp 018A 18 869 dec r0 018B 18 870 dec r0 018C 18 871 dec r0 018D 86 82 872 mov dpl,@r0 018F 12s00rF8 873 lcall _format_row2 874 ; SRC/main.c:120: clear_lcd(); 0192 12s00r00 875 lcall _clear_lcd 876 ; SRC/main.c:121: for (i = 0; i < 16; i++) 0195 E4 877 clr a 0196 F5*30 878 mov _i,a 0198 F5*31 879 mov (_i + 1),a 019A 880 00101$: 019A C3 881 clr c 019B E5*30 882 mov a,_i 019D 94 10 883 subb a,#0x10 019F E5*31 884 mov a,(_i + 1) 01A1 64 80 885 xrl a,#0x80 01A3 94 80 886 subb a,#0x80 01A5 50 14 887 jnc 00104$ 888 ; SRC/main.c:123: print_char_lcd(row1[i]); 01A7 E5*30 889 mov a,_i 01A9 24r03 890 add a,#_row1 01AB F8 891 mov r0,a 01AC 86 82 892 mov dpl,@r0 01AE 12s00r00 893 lcall _print_char_lcd 894 ; SRC/main.c:121: for (i = 0; i < 16; i++) 01B1 05*30 895 inc _i 01B3 E4 896 clr a 01B4 B5*30 E3 897 cjne a,_i,00101$ 01B7 05*31 898 inc (_i + 1) 01B9 80 DF 899 sjmp 00101$ 01BB 900 00104$: 901 ; SRC/main.c:125: for (i = 0; i < 16; i++) 01BB E4 902 clr a 01BC F5*30 903 mov _i,a 01BE F5*31 904 mov (_i + 1),a 01C0 905 00105$: 01C0 C3 906 clr c 01C1 E5*30 907 mov a,_i 01C3 94 10 908 subb a,#0x10 01C5 E5*31 909 mov a,(_i + 1) 01C7 64 80 910 xrl a,#0x80 01C9 94 80 911 subb a,#0x80 01CB 50 14 912 jnc 00109$ 913 ; SRC/main.c:127: print_char_lcd(row2[i]); 01CD E5*30 914 mov a,_i 01CF 24r13 915 add a,#_row2 01D1 F8 916 mov r0,a 01D2 86 82 917 mov dpl,@r0 01D4 12s00r00 918 lcall _print_char_lcd 919 ; SRC/main.c:125: for (i = 0; i < 16; i++) 01D7 05*30 920 inc _i 01D9 E4 921 clr a 01DA B5*30 E3 922 cjne a,_i,00105$ 01DD 05*31 923 inc (_i + 1) 01DF 80 DF 924 sjmp 00105$ 01E1 925 00109$: 01E1 D0*00 926 pop _bp 01E3 22 927 ret 928 ;------------------------------------------------------------ 929 ;Allocation info for local variables in function 'data_controller' 930 ;------------------------------------------------------------ 931 ;------------------------------------------------------------ 932 ; SRC/main.c:131: unsigned char data_controller() 933 ; ----------------------------------------- 934 ; function data_controller 935 ; ----------------------------------------- 01E4 936 _data_controller: 937 ; SRC/main.c:133: return get_tank_value(); 01E4 02s00r00 938 ljmp _get_tank_value 939 ;------------------------------------------------------------ 940 ;Allocation info for local variables in function 'visualise' 941 ;------------------------------------------------------------ 942 ;value Allocated to registers r2 943 ;------------------------------------------------------------ 944 ; SRC/main.c:137: void visualise(unsigned char value) 945 ; ----------------------------------------- 946 ; function visualise 947 ; ----------------------------------------- 01E7 948 _visualise: 01E7 AA 82 949 mov r2,dpl 950 ; SRC/main.c:139: dip = read_max(2); 01E9 90 00 02 951 mov dptr,#0x0002 01EC C0 02 952 push ar2 01EE 12s00r00 953 lcall _read_max 01F1 85 82*2A 954 mov _dip,dpl 01F4 D0 02 955 pop ar2 956 ; SRC/main.c:140: if (value == old_value && dip == old_dip) return; 01F6 EA 957 mov a,r2 01F7 B5*2D 06 958 cjne a,_old_value,00102$ 01FA E5*2B 959 mov a,_old_dip 01FC B5*2A 01 960 cjne a,_dip,00102$ 01FF 22 961 ret 0200 962 00102$: 963 ; SRC/main.c:142: metrica = (dip & 0x1) ? MILES : KILOMETERS; 0200 E5*2A 964 mov a,_dip 0202 30 E0 04 965 jnb acc.0,00108$ 0205 7B 00 966 mov r3,#0x00 0207 80 02 967 sjmp 00109$ 0209 968 00108$: 0209 7B 01 969 mov r3,#0x01 020B 970 00109$: 020B 8B*01 971 mov _metrica,r3 972 ; SRC/main.c:143: mode = (dip & 0x2) ? TANK_VALUE : PREDICTION; 020D E5*2A 973 mov a,_dip 020F 30 E1 04 974 jnb acc.1,00110$ 0212 7B 00 975 mov r3,#0x00 0214 80 02 976 sjmp 00111$ 0216 977 00110$: 0216 7B 01 978 mov r3,#0x01 0218 979 00111$: 0218 8B*02 980 mov _mode,r3 981 ; SRC/main.c:144: consumption = (metrica == MILES) ? consumption100miles : consumption100km; 021A E5*01 982 mov a,_metrica 021C B4 01 00 983 cjne a,#0x01,00129$ 021F 984 00129$: 021F E4 985 clr a 0220 33 986 rlc a 0221 FB 987 mov r3,a 0222 60 04 988 jz 00112$ 0224 AB*26 989 mov r3,_consumption100miles 0226 80 02 990 sjmp 00113$ 0228 991 00112$: 0228 AB*25 992 mov r3,_consumption100km 022A 993 00113$: 022A 8B*29 994 mov _consumption,r3 995 ; SRC/main.c:145: sub_info = (mode == PREDICTION) ? value * 100 / consumption : value; 022C 74 01 996 mov a,#0x01 022E B5*02 23 997 cjne a,_mode,00114$ 0231 EA 998 mov a,r2 0232 75 F0 64 999 mov b,#0x64 0235 A4 1000 mul ab 0236 F5 82 1001 mov dpl,a 0238 85 F0 83 1002 mov dph,b 023B AB*29 1003 mov r3,_consumption 023D 7C 00 1004 mov r4,#0x00 023F C0 02 1005 push ar2 0241 C0 03 1006 push ar3 0243 C0 04 1007 push ar4 0245 12s00r00 1008 lcall __divsint 0248 AB 82 1009 mov r3,dpl 024A AC 83 1010 mov r4,dph 024C 15 81 1011 dec sp 024E 15 81 1012 dec sp 0250 D0 02 1013 pop ar2 0252 80 04 1014 sjmp 00115$ 0254 1015 00114$: 0254 8A 03 1016 mov ar3,r2 0256 7C 00 1017 mov r4,#0x00 0258 1018 00115$: 0258 8B*28 1019 mov _sub_info,r3 1020 ; SRC/main.c:147: lcd_controller(value, sub_info); 025A C0 02 1021 push ar2 025C C0*28 1022 push _sub_info 025E 8A 82 1023 mov dpl,r2 0260 12s01r75 1024 lcall _lcd_controller 0263 15 81 1025 dec sp 0265 D0 02 1026 pop ar2 1027 ; SRC/main.c:149: if (value < fuel_threshold) 0267 C3 1028 clr c 0268 EA 1029 mov a,r2 0269 95*24 1030 subb a,_fuel_threshold 026B 50 0D 1031 jnc 00105$ 1032 ; SRC/main.c:151: make_sound(); 026D C0 02 1033 push ar2 026F 12s00r0D 1034 lcall _make_sound 1035 ; SRC/main.c:152: write_led(0xff); 0272 75 82 FF 1036 mov dpl,#0xFF 0275 12s00r00 1037 lcall _write_led 0278 D0 02 1038 pop ar2 027A 1039 00105$: 1040 ; SRC/main.c:154: old_value = value; 027A 8A*2D 1041 mov _old_value,r2 1042 ; SRC/main.c:155: old_dip = dip; 027C 85*2A*2B 1043 mov _old_dip,_dip 027F 22 1044 ret 1045 ;------------------------------------------------------------ 1046 ;Allocation info for local variables in function 'main' 1047 ;------------------------------------------------------------ 1048 ;value Allocated to registers 1049 ;------------------------------------------------------------ 1050 ; SRC/main.c:158: void main() 1051 ; ----------------------------------------- 1052 ; function main 1053 ; ----------------------------------------- 0280 1054 _main: 1055 ; SRC/main.c:161: init(S9600); 0280 75 82 FD 1056 mov dpl,#0xFD 0283 12s00r4F 1057 lcall _init 1058 ; SRC/main.c:162: clear_lcd(); 0286 12s00r00 1059 lcall _clear_lcd 1060 ; SRC/main.c:165: while(1) { 0289 1061 00102$: 1062 ; SRC/main.c:166: value = data_controller(); 0289 12s01rE4 1063 lcall _data_controller 1064 ; SRC/main.c:167: visualise(value); 028C 12s01rE7 1065 lcall _visualise 028F 80 F8 1066 sjmp 00102$ 1067 .area CSEG (CODE) 1068 .area CONST (CODE) 0000 1069 __str_0: 0000 72 65 61 64 79 1070 .ascii "ready" 0005 0A 1071 .db 0x0A 0006 00 1072 .db 0x00 1073 .area XINIT (CODE) 1074 .area CABS (ABS,CODE)