;-------------------------------------------------------- ; File Created by SDCC : free open source ANSI-C Compiler ; Version 2.9.0 #5416 (Mar 22 2009) (MINGW32) ; This file was generated Tue Nov 24 13:34:44 2015 ;-------------------------------------------------------- .module main .optsdcc -mmcs51 --model-small ;-------------------------------------------------------- ; Public variables in this module ;-------------------------------------------------------- .globl _main .globl _visualise .globl _data_controller .globl _lcd_controller .globl _format_postfix .globl _format_row2 .globl _format_row1 .globl _init .globl _make_sound .globl _write_led .globl _SPR0 .globl _SPR1 .globl _CPHA .globl _CPOL .globl _SPIM .globl _SPE .globl _WCOL .globl _ISPI .globl _I2CI .globl _I2CTX .globl _I2CRS .globl _I2CM .globl _MDI .globl _MCO .globl _MDE .globl _MDO .globl _CS0 .globl _CS1 .globl _CS2 .globl _CS3 .globl _SCONV .globl _CCONV .globl _DMA .globl _ADCI .globl _P .globl _F1 .globl _OV .globl _RS0 .globl _RS1 .globl _F0 .globl _AC .globl _CY .globl _CAP2 .globl _CNT2 .globl _TR2 .globl _XEN .globl _TCLK .globl _RCLK .globl _EXF2 .globl _TF2 .globl _WDE .globl _WDS .globl _WDR2 .globl _WDR1 .globl _PRE0 .globl _PRE1 .globl _PRE2 .globl _PX0 .globl _PT0 .globl _PX1 .globl _PT1 .globl _PS .globl _PT2 .globl _PADC .globl _PSI .globl _RXD .globl _TXD .globl _INT0 .globl _INT1 .globl _T0 .globl _T1 .globl _WR .globl _RD .globl _EX0 .globl _ET0 .globl _EX1 .globl _ET1 .globl _ES .globl _ET2 .globl _EADC .globl _EA .globl _RI .globl _TI .globl _RB8 .globl _TB8 .globl _REN .globl _SM2 .globl _SM1 .globl _SM0 .globl _T2 .globl _T2EX .globl _IT0 .globl _IE0 .globl _IT1 .globl _IE1 .globl _TR0 .globl _TF0 .globl _TR1 .globl _TF1 .globl _DACCON .globl _DAC1H .globl _DAC1L .globl _DAC0H .globl _DAC0L .globl _SPICON .globl _SPIDAT .globl _ADCCON3 .globl _ADCGAINH .globl _ADCGAINL .globl _ADCOFSH .globl _ADCOFSL .globl _B .globl _ADCCON1 .globl _I2CCON .globl _ACC .globl _PSMCON .globl _ADCDATAH .globl _ADCDATAL .globl _ADCCON2 .globl _DMAP .globl _DMAH .globl _DMAL .globl _PSW .globl _TH2 .globl _TL2 .globl _RCAP2H .globl _RCAP2L .globl _T2CON .globl _EADRL .globl _WDCON .globl _EDATA4 .globl _EDATA3 .globl _EDATA2 .globl _EDATA1 .globl _ETIM3 .globl _ETIM2 .globl _ETIM1 .globl _ECON .globl _IP .globl _P3 .globl _IE2 .globl _IE .globl _P2 .globl _I2CADD .globl _I2CDAT .globl _SBUF .globl _SCON .globl _P1 .globl _TH1 .globl _TH0 .globl _TL1 .globl _TL0 .globl _TMOD .globl _TCON .globl _PCON .globl _DPP .globl _DPH .globl _DPL .globl _SP .globl _P0 .globl _i .globl _postfix .globl _old_value .globl _next_char .globl _old_dip .globl _dip .globl _consumption .globl _sub_info .globl _total_pos .globl _consumption100miles .globl _consumption100km .globl _fuel_threshold .globl _tank_max_volume .globl _row2 .globl _row1 .globl _mode .globl _metrica .globl _tank_value ;-------------------------------------------------------- ; special function registers ;-------------------------------------------------------- .area RSEG (DATA) _P0 = 0x0080 _SP = 0x0081 _DPL = 0x0082 _DPH = 0x0083 _DPP = 0x0084 _PCON = 0x0087 _TCON = 0x0088 _TMOD = 0x0089 _TL0 = 0x008a _TL1 = 0x008b _TH0 = 0x008c _TH1 = 0x008d _P1 = 0x0090 _SCON = 0x0098 _SBUF = 0x0099 _I2CDAT = 0x009a _I2CADD = 0x009b _P2 = 0x00a0 _IE = 0x00a8 _IE2 = 0x00a9 _P3 = 0x00b0 _IP = 0x00b8 _ECON = 0x00b9 _ETIM1 = 0x00ba _ETIM2 = 0x00bb _ETIM3 = 0x00c4 _EDATA1 = 0x00bc _EDATA2 = 0x00bd _EDATA3 = 0x00be _EDATA4 = 0x00bf _WDCON = 0x00c0 _EADRL = 0x00c6 _T2CON = 0x00c8 _RCAP2L = 0x00ca _RCAP2H = 0x00cb _TL2 = 0x00cc _TH2 = 0x00cd _PSW = 0x00d0 _DMAL = 0x00d2 _DMAH = 0x00d3 _DMAP = 0x00d4 _ADCCON2 = 0x00d8 _ADCDATAL = 0x00d9 _ADCDATAH = 0x00da _PSMCON = 0x00df _ACC = 0x00e0 _I2CCON = 0x00e8 _ADCCON1 = 0x00ef _B = 0x00f0 _ADCOFSL = 0x00f1 _ADCOFSH = 0x00f2 _ADCGAINL = 0x00f3 _ADCGAINH = 0x00f4 _ADCCON3 = 0x00f5 _SPIDAT = 0x00f7 _SPICON = 0x00f8 _DAC0L = 0x00f9 _DAC0H = 0x00fa _DAC1L = 0x00fb _DAC1H = 0x00fc _DACCON = 0x00fd ;-------------------------------------------------------- ; special function bits ;-------------------------------------------------------- .area RSEG (DATA) _TF1 = 0x008f _TR1 = 0x008e _TF0 = 0x008d _TR0 = 0x008c _IE1 = 0x008b _IT1 = 0x008a _IE0 = 0x0089 _IT0 = 0x0088 _T2EX = 0x0091 _T2 = 0x0090 _SM0 = 0x009f _SM1 = 0x009e _SM2 = 0x009d _REN = 0x009c _TB8 = 0x009b _RB8 = 0x009a _TI = 0x0099 _RI = 0x0098 _EA = 0x00af _EADC = 0x00ae _ET2 = 0x00ad _ES = 0x00ac _ET1 = 0x00ab _EX1 = 0x00aa _ET0 = 0x00a9 _EX0 = 0x00a8 _RD = 0x00b7 _WR = 0x00b6 _T1 = 0x00b5 _T0 = 0x00b4 _INT1 = 0x00b3 _INT0 = 0x00b2 _TXD = 0x00b1 _RXD = 0x00b0 _PSI = 0x00bf _PADC = 0x00be _PT2 = 0x00bd _PS = 0x00bc _PT1 = 0x00bb _PX1 = 0x00ba _PT0 = 0x00b9 _PX0 = 0x00b8 _PRE2 = 0x00c7 _PRE1 = 0x00c6 _PRE0 = 0x00c5 _WDR1 = 0x00c3 _WDR2 = 0x00c2 _WDS = 0x00c1 _WDE = 0x00c0 _TF2 = 0x00cf _EXF2 = 0x00ce _RCLK = 0x00cd _TCLK = 0x00cc _XEN = 0x00cb _TR2 = 0x00ca _CNT2 = 0x00c9 _CAP2 = 0x00c8 _CY = 0x00d7 _AC = 0x00d6 _F0 = 0x00d5 _RS1 = 0x00d4 _RS0 = 0x00d3 _OV = 0x00d2 _F1 = 0x00d1 _P = 0x00d0 _ADCI = 0x00df _DMA = 0x00de _CCONV = 0x00dd _SCONV = 0x00dc _CS3 = 0x00db _CS2 = 0x00da _CS1 = 0x00d9 _CS0 = 0x00d8 _MDO = 0x00ef _MDE = 0x00ee _MCO = 0x00ed _MDI = 0x00ec _I2CM = 0x00eb _I2CRS = 0x00ea _I2CTX = 0x00e9 _I2CI = 0x00e8 _ISPI = 0x00ff _WCOL = 0x00fe _SPE = 0x00fd _SPIM = 0x00fc _CPOL = 0x00fb _CPHA = 0x00fa _SPR1 = 0x00f9 _SPR0 = 0x00f8 ;-------------------------------------------------------- ; overlayable register banks ;-------------------------------------------------------- .area REG_BANK_0 (REL,OVR,DATA) .ds 8 ;-------------------------------------------------------- ; internal ram data ;-------------------------------------------------------- .area DSEG (DATA) _tank_value:: .ds 1 _metrica:: .ds 1 _mode:: .ds 1 _row1:: .ds 16 _row2:: .ds 16 _tank_max_volume:: .ds 1 _fuel_threshold:: .ds 1 _consumption100km:: .ds 1 _consumption100miles:: .ds 1 _total_pos:: .ds 1 _sub_info:: .ds 1 _consumption:: .ds 1 _dip:: .ds 1 _old_dip:: .ds 1 _next_char:: .ds 1 _old_value:: .ds 1 _postfix:: .ds 2 _i:: .ds 2 ;-------------------------------------------------------- ; overlayable items in internal ram ;-------------------------------------------------------- .area OSEG (OVR,DATA) ;-------------------------------------------------------- ; Stack segment in internal ram ;-------------------------------------------------------- .area SSEG (DATA) __start__stack: .ds 1 ;-------------------------------------------------------- ; indirectly addressable internal ram data ;-------------------------------------------------------- .area ISEG (DATA) ;-------------------------------------------------------- ; absolute internal ram data ;-------------------------------------------------------- .area IABS (ABS,DATA) .area IABS (ABS,DATA) ;-------------------------------------------------------- ; bit data ;-------------------------------------------------------- .area BSEG (BIT) ;-------------------------------------------------------- ; paged external ram data ;-------------------------------------------------------- .area PSEG (PAG,XDATA) ;-------------------------------------------------------- ; external ram data ;-------------------------------------------------------- .area XSEG (XDATA) ;-------------------------------------------------------- ; absolute external ram data ;-------------------------------------------------------- .area XABS (ABS,XDATA) ;-------------------------------------------------------- ; external initialized ram data ;-------------------------------------------------------- .area XISEG (XDATA) .area HOME (CODE) .area GSINIT0 (CODE) .area GSINIT1 (CODE) .area GSINIT2 (CODE) .area GSINIT3 (CODE) .area GSINIT4 (CODE) .area GSINIT5 (CODE) .area GSINIT (CODE) .area GSFINAL (CODE) .area CSEG (CODE) ;-------------------------------------------------------- ; interrupt vector ;-------------------------------------------------------- .area HOME (CODE) __interrupt_vect: ljmp __sdcc_gsinit_startup reti .ds 7 reti .ds 7 reti .ds 7 reti .ds 7 ljmp _handler_uart ;-------------------------------------------------------- ; global & static initialisations ;-------------------------------------------------------- .area HOME (CODE) .area GSINIT (CODE) .area GSFINAL (CODE) .area GSINIT (CODE) .globl __sdcc_gsinit_startup .globl __sdcc_program_startup .globl __start__stack .globl __mcs51_genXINIT .globl __mcs51_genXRAMCLEAR .globl __mcs51_genRAMCLEAR ; SRC/main.c:18: unsigned char metrica = KILOMETERS; mov _metrica,#0x01 ; SRC/main.c:19: unsigned char mode = TANK_VALUE; mov _mode,#0x00 ; SRC/main.c:22: unsigned char tank_max_volume = 50; mov _tank_max_volume,#0x32 ; SRC/main.c:23: unsigned char fuel_threshold = 5; mov _fuel_threshold,#0x05 ; SRC/main.c:24: unsigned char consumption100km = 2; mov _consumption100km,#0x02 ; SRC/main.c:25: unsigned char consumption100miles = 1; mov _consumption100miles,#0x01 ; SRC/main.c:26: unsigned char total_pos = 14; mov _total_pos,#0x0E ; SRC/main.c:28: unsigned char sub_info = 0; mov _sub_info,#0x00 ; SRC/main.c:29: unsigned char consumption = 0; mov _consumption,#0x00 ; SRC/main.c:30: unsigned char dip = 0; mov _dip,#0x00 ; SRC/main.c:31: unsigned char old_dip = 0; mov _old_dip,#0x00 ; SRC/main.c:32: unsigned char next_char = 0; mov _next_char,#0x00 ; SRC/main.c:33: unsigned char old_value = 10; mov _old_value,#0x0A ; SRC/main.c:35: int i = 0; clr a mov _i,a mov (_i + 1),a .area GSFINAL (CODE) ljmp __sdcc_program_startup ;-------------------------------------------------------- ; Home ;-------------------------------------------------------- .area HOME (CODE) .area HOME (CODE) __sdcc_program_startup: lcall _main ; return from main will lock up sjmp . ;-------------------------------------------------------- ; code ;-------------------------------------------------------- .area CSEG (CODE) ;------------------------------------------------------------ ;Allocation info for local variables in function 'write_led' ;------------------------------------------------------------ ;value Allocated to registers r2 ;------------------------------------------------------------ ; SRC/main.c:38: void write_led(unsigned char value) ; ----------------------------------------- ; function write_led ; ----------------------------------------- _write_led: ar2 = 0x02 ar3 = 0x03 ar4 = 0x04 ar5 = 0x05 ar6 = 0x06 ar7 = 0x07 ar0 = 0x00 ar1 = 0x01 mov r2,dpl ; SRC/main.c:40: write_max(7, value); push ar2 mov dptr,#0x0007 lcall _write_max dec sp ret ;------------------------------------------------------------ ;Allocation info for local variables in function 'make_sound' ;------------------------------------------------------------ ;sound Allocated to registers r2 r3 ;i Allocated to registers r4 r5 ;------------------------------------------------------------ ; SRC/main.c:42: void make_sound() ; ----------------------------------------- ; function make_sound ; ----------------------------------------- _make_sound: ; SRC/main.c:44: unsigned int sound = 0; mov r2,#0x00 mov r3,#0x00 ; SRC/main.c:47: for (i = 0; i < 1000; i++) { mov r4,#0x00 mov r5,#0x00 00105$: clr c mov a,r4 subb a,#0xE8 mov a,r5 xrl a,#0x80 subb a,#0x83 jc 00119$ ret 00119$: ; SRC/main.c:48: sound = (sound == 0x00) ? 0x10 : 0x00; mov a,r2 orl a,r3 cjne a,#0x01,00120$ 00120$: clr a rlc a mov r6,a jz 00111$ mov a,#0x10 00111$: mov r2,a mov r3,#0x00 ; SRC/main.c:49: write_max(4, sound); mov ar6,r2 push ar2 push ar3 push ar4 push ar5 push ar6 mov dptr,#0x0004 lcall _write_max dec sp pop ar5 pop ar4 ; SRC/main.c:50: if(i%100==0) push ar4 push ar5 mov a,#0x64 push acc clr a push acc mov dpl,r4 mov dph,r5 lcall __modsint mov r6,dpl mov r7,dph dec sp dec sp pop ar5 pop ar4 pop ar3 pop ar2 mov a,r6 orl a,r7 jnz 00102$ ; SRC/main.c:51: write_led(0xff); mov dpl,#0xFF push ar2 push ar3 push ar4 push ar5 lcall _write_led pop ar5 pop ar4 pop ar3 pop ar2 00102$: ; SRC/main.c:52: if(i%200==0) push ar2 push ar3 push ar4 push ar5 mov a,#0xC8 push acc clr a push acc mov dpl,r4 mov dph,r5 lcall __modsint mov r6,dpl mov r7,dph dec sp dec sp pop ar5 pop ar4 pop ar3 pop ar2 mov a,r6 orl a,r7 ; SRC/main.c:53: write_led(0x00); jnz 00107$ mov dpl,a push ar2 push ar3 push ar4 push ar5 lcall _write_led pop ar5 pop ar4 pop ar3 pop ar2 00107$: ; SRC/main.c:47: for (i = 0; i < 1000; i++) { inc r4 cjne r4,#0x00,00124$ inc r5 00124$: ljmp 00105$ ;------------------------------------------------------------ ;Allocation info for local variables in function 'init' ;------------------------------------------------------------ ;speed Allocated to registers ;------------------------------------------------------------ ; SRC/main.c:57: void init(unsigned char speed) ; ----------------------------------------- ; function init ; ----------------------------------------- _init: ; SRC/main.c:59: TH1 = 0xFD; //Скорость 9600 mov _TH1,#0xFD ; SRC/main.c:60: TH0 = 0x00; mov _TH0,#0x00 ; SRC/main.c:61: TMOD = 0x22; //Таймер 1 и 0 в режиме autoreload mov _TMOD,#0x22 ; SRC/main.c:62: TCON = 0x50; //Запуск таймеров 0 и 1 mov _TCON,#0x50 ; SRC/main.c:63: SCON = 0x50; //8 bit UART, разрешение приема mov _SCON,#0x50 ; SRC/main.c:64: PCON &= 0x7F; //Отключение дублирования скорости, установленной в TH1 anl _PCON,#0x7F ; SRC/main.c:67: init_timer(1000); mov dptr,#0x03E8 clr a mov b,a lcall _init_timer ; SRC/main.c:68: write_string("ready\n"); mov dptr,#__str_0 mov b,#0x80 lcall _write_string ; SRC/main.c:70: EA = 1; setb _EA ; SRC/main.c:71: ET0 = 1; setb _ET0 ret ;------------------------------------------------------------ ;Allocation info for local variables in function 'format_row1' ;------------------------------------------------------------ ;value Allocated to registers r2 ;i Allocated to registers r4 r5 ;pos Allocated to registers r2 r3 ;------------------------------------------------------------ ; SRC/main.c:74: void format_row1(char value) ; ----------------------------------------- ; function format_row1 ; ----------------------------------------- _format_row1: mov r2,dpl ; SRC/main.c:78: row1[0] = '['; mov _row1,#0x5B ; SRC/main.c:79: row1[15] = ']'; mov (_row1 + 0x000f),#0x5D ; SRC/main.c:80: pos = value * total_pos / tank_max_volume; clr F0 mov b,_total_pos mov a,r2 jnb acc.7,00117$ cpl F0 cpl a inc a 00117$: mul ab jnb F0,00118$ cpl a add a,#0x01 xch a,b cpl a addc a,#0x00 xch a,b 00118$: mov dpl,a mov dph,b mov r2,_tank_max_volume mov r3,#0x00 push ar2 push ar3 lcall __divsint mov r2,dpl mov r3,dph dec sp dec sp ; SRC/main.c:81: for ( i = 1; i <= pos; i++) mov r4,#0x01 mov r5,#0x00 00101$: clr c mov a,r2 subb a,r4 mov a,r3 xrl a,#0x80 mov b,r5 xrl b,#0x80 subb a,b jc 00114$ ; SRC/main.c:83: row1[i] = 0xff; mov a,r4 add a,#_row1 mov r0,a mov @r0,#0xFF ; SRC/main.c:81: for ( i = 1; i <= pos; i++) inc r4 cjne r4,#0x00,00101$ inc r5 sjmp 00101$ 00114$: mov ar2,r4 mov ar3,r5 00105$: ; SRC/main.c:85: for (;i <= total_pos; i++) mov r4,_total_pos mov r5,#0x00 clr c mov a,r4 subb a,r2 mov a,r5 xrl a,#0x80 mov b,r3 xrl b,#0x80 subb a,b jc 00109$ ; SRC/main.c:87: row1[i] = ' '; mov a,r2 add a,#_row1 mov r0,a mov @r0,#0x20 ; SRC/main.c:85: for (;i <= total_pos; i++) inc r2 cjne r2,#0x00,00105$ inc r3 sjmp 00105$ 00109$: ret ;------------------------------------------------------------ ;Allocation info for local variables in function 'format_row2' ;------------------------------------------------------------ ;value Allocated to registers r2 ;i Allocated to registers r3 r4 ;------------------------------------------------------------ ; SRC/main.c:91: void format_row2(unsigned char value) ; ----------------------------------------- ; function format_row2 ; ----------------------------------------- _format_row2: mov r2,dpl ; SRC/main.c:94: for(i=0; i<16; i++) mov r3,#0x00 mov r4,#0x00 00105$: clr c mov a,r3 subb a,#0x10 mov a,r4 xrl a,#0x80 subb a,#0x80 jnc 00108$ ; SRC/main.c:96: row2[i]=0x20; mov a,r3 add a,#_row2 mov r0,a mov @r0,#0x20 ; SRC/main.c:94: for(i=0; i<16; i++) inc r3 cjne r3,#0x00,00105$ inc r4 sjmp 00105$ 00108$: ; SRC/main.c:101: row2[0] = 0 + '0'; mov _row2,#0x30 ; SRC/main.c:102: row2[1] = 0 + '0'; mov (_row2 + 0x0001),#0x30 ; SRC/main.c:103: row2[2] = 0 + '0'; mov (_row2 + 0x0002),#0x30 ; SRC/main.c:105: row2[2] = value % 10 + 0x30; mov b,#0x0A mov a,r2 div ab mov a,b add a,#0x30 mov (_row2 + 0x0002),a ; SRC/main.c:106: if(value >= 10) cjne r2,#0x0A,00117$ 00117$: jc 00102$ ; SRC/main.c:108: value = value / 10; mov b,#0x0A mov a,r2 div ab ; SRC/main.c:109: row2[1] = value % 10 + 0x30; mov r2,a mov b,#0x0A div ab mov a,b add a,#0x30 mov (_row2 + 0x0001),a 00102$: ; SRC/main.c:112: if(value >= 100) cjne r2,#0x64,00119$ 00119$: jc 00104$ ; SRC/main.c:114: value = value / 10; mov b,#0x0A mov a,r2 div ab ; SRC/main.c:115: row2[0] = value % 10 + 0x30; mov r2,a mov b,#0x0A div ab mov a,b add a,#0x30 mov _row2,a 00104$: ; SRC/main.c:119: row2[i] = postfix[0]; mov (_row2 + 0x0003),_postfix ; SRC/main.c:121: row2[i] = postfix[1]; mov (_row2 + 0x0004),(_postfix + 0x0001) ; SRC/main.c:122: i++; ret ;------------------------------------------------------------ ;Allocation info for local variables in function 'format_postfix' ;------------------------------------------------------------ ;------------------------------------------------------------ ; SRC/main.c:125: void format_postfix() ; ----------------------------------------- ; function format_postfix ; ----------------------------------------- _format_postfix: ; SRC/main.c:127: if (mode == TANK_VALUE) { postfix[0] = 'L'; postfix[1] = ' '; } mov a,_mode jnz 00105$ mov _postfix,#0x4C mov (_postfix + 0x0001),#0x20 ret 00105$: ; SRC/main.c:128: else if (metrica == KILOMETERS) { postfix[0] = 'k'; postfix[1] = 'm'; } mov a,#0x01 cjne a,_metrica,00102$ mov _postfix,#0x6B mov (_postfix + 0x0001),#0x6D ret 00102$: ; SRC/main.c:129: else { postfix[0] = 'm'; postfix[1] = ' '; } mov _postfix,#0x6D mov (_postfix + 0x0001),#0x20 ret ;------------------------------------------------------------ ;Allocation info for local variables in function 'lcd_controller' ;------------------------------------------------------------ ;additional_info Allocated to stack - offset -3 ;volume Allocated to registers r2 ;------------------------------------------------------------ ; SRC/main.c:132: void lcd_controller(unsigned char volume, unsigned char additional_info) ; ----------------------------------------- ; function lcd_controller ; ----------------------------------------- _lcd_controller: push _bp mov _bp,sp mov r2,dpl ; SRC/main.c:134: format_postfix(); push ar2 lcall _format_postfix pop ar2 ; SRC/main.c:135: format_row1(volume); mov dpl,r2 lcall _format_row1 ; SRC/main.c:136: format_row2(additional_info); mov r0,_bp dec r0 dec r0 dec r0 mov dpl,@r0 lcall _format_row2 ; SRC/main.c:137: clear_lcd(); lcall _clear_lcd ; SRC/main.c:138: for (i = 0; i < 16; i++) clr a mov _i,a mov (_i + 1),a 00101$: clr c mov a,_i subb a,#0x10 mov a,(_i + 1) xrl a,#0x80 subb a,#0x80 jnc 00104$ ; SRC/main.c:140: print_char_lcd(row1[i]); mov a,_i add a,#_row1 mov r0,a mov dpl,@r0 lcall _print_char_lcd ; SRC/main.c:138: for (i = 0; i < 16; i++) inc _i clr a cjne a,_i,00101$ inc (_i + 1) sjmp 00101$ 00104$: ; SRC/main.c:142: goto_xy_lcd(1,2); mov a,#0x02 push acc mov dpl,#0x01 lcall _goto_xy_lcd dec sp ; SRC/main.c:143: for (i = 0; i < 16; i++) clr a mov _i,a mov (_i + 1),a 00105$: clr c mov a,_i subb a,#0x10 mov a,(_i + 1) xrl a,#0x80 subb a,#0x80 jnc 00109$ ; SRC/main.c:145: print_char_lcd(row2[i]); mov a,_i add a,#_row2 mov r0,a mov dpl,@r0 lcall _print_char_lcd ; SRC/main.c:143: for (i = 0; i < 16; i++) inc _i clr a cjne a,_i,00105$ inc (_i + 1) sjmp 00105$ 00109$: pop _bp ret ;------------------------------------------------------------ ;Allocation info for local variables in function 'data_controller' ;------------------------------------------------------------ ;------------------------------------------------------------ ; SRC/main.c:149: unsigned char data_controller() ; ----------------------------------------- ; function data_controller ; ----------------------------------------- _data_controller: ; SRC/main.c:151: return get_tank_value(); ljmp _get_tank_value ;------------------------------------------------------------ ;Allocation info for local variables in function 'visualise' ;------------------------------------------------------------ ;value Allocated to registers r2 ;------------------------------------------------------------ ; SRC/main.c:155: void visualise(unsigned char value) ; ----------------------------------------- ; function visualise ; ----------------------------------------- _visualise: mov r2,dpl ; SRC/main.c:157: dip = read_max(2); mov dptr,#0x0002 push ar2 lcall _read_max mov _dip,dpl pop ar2 ; SRC/main.c:158: if (value == old_value && dip == old_dip) return; mov a,r2 cjne a,_old_value,00102$ mov a,_old_dip cjne a,_dip,00102$ ret 00102$: ; SRC/main.c:160: metrica = (dip & 0x1) ? MILES : KILOMETERS; mov a,_dip jnb acc.0,00109$ mov r3,#0x00 sjmp 00110$ 00109$: mov r3,#0x01 00110$: mov _metrica,r3 ; SRC/main.c:161: mode = (dip & 0x2) ? TANK_VALUE : PREDICTION; mov a,_dip jnb acc.1,00111$ mov r3,#0x00 sjmp 00112$ 00111$: mov r3,#0x01 00112$: mov _mode,r3 ; SRC/main.c:162: consumption = (metrica == MILES) ? consumption100miles : consumption100km; mov a,_metrica cjne a,#0x01,00130$ 00130$: clr a rlc a mov r3,a jz 00113$ mov r3,_consumption100miles sjmp 00114$ 00113$: mov r3,_consumption100km 00114$: mov _consumption,r3 ; SRC/main.c:163: sub_info = (mode == PREDICTION) ? value * consumption : value; mov a,#0x01 cjne a,_mode,00115$ mov b,r2 mov a,_consumption mul ab mov r3,a sjmp 00116$ 00115$: mov ar3,r2 00116$: mov _sub_info,r3 ; SRC/main.c:165: lcd_controller(value, sub_info); push ar2 push _sub_info mov dpl,r2 lcall _lcd_controller dec sp pop ar2 ; SRC/main.c:167: if (value < fuel_threshold) clr c mov a,r2 subb a,_fuel_threshold jnc 00105$ ; SRC/main.c:169: make_sound(); push ar2 lcall _make_sound ; SRC/main.c:170: write_led(0xff); mov dpl,#0xFF lcall _write_led pop ar2 sjmp 00106$ 00105$: ; SRC/main.c:174: write_led(0x00); mov dpl,#0x00 push ar2 lcall _write_led pop ar2 00106$: ; SRC/main.c:176: old_value = value; mov _old_value,r2 ; SRC/main.c:177: old_dip = dip; mov _old_dip,_dip ret ;------------------------------------------------------------ ;Allocation info for local variables in function 'main' ;------------------------------------------------------------ ;value Allocated to registers ;------------------------------------------------------------ ; SRC/main.c:180: void main() ; ----------------------------------------- ; function main ; ----------------------------------------- _main: ; SRC/main.c:183: init(S9600); mov dpl,#0xFD lcall _init ; SRC/main.c:184: clear_lcd(); lcall _clear_lcd ; SRC/main.c:186: while(1) { 00102$: ; SRC/main.c:187: value = data_controller(); lcall _data_controller ; SRC/main.c:188: visualise(value); lcall _visualise sjmp 00102$ .area CSEG (CODE) .area CONST (CODE) __str_0: .ascii "ready" .db 0x0A .db 0x00 .area XINIT (CODE) .area CABS (ABS,CODE)