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 Tue Nov 24 12:13:58 2015 5 ;-------------------------------------------------------- 6 .module driver_lcd 7 .optsdcc -mmcs51 --model-small 8 9 ;-------------------------------------------------------- 10 ; Public variables in this module 11 ;-------------------------------------------------------- 12 .globl _SPR0 13 .globl _SPR1 14 .globl _CPHA 15 .globl _CPOL 16 .globl _SPIM 17 .globl _SPE 18 .globl _WCOL 19 .globl _ISPI 20 .globl _I2CI 21 .globl _I2CTX 22 .globl _I2CRS 23 .globl _I2CM 24 .globl _MDI 25 .globl _MCO 26 .globl _MDE 27 .globl _MDO 28 .globl _CS0 29 .globl _CS1 30 .globl _CS2 31 .globl _CS3 32 .globl _SCONV 33 .globl _CCONV 34 .globl _DMA 35 .globl _ADCI 36 .globl _P 37 .globl _F1 38 .globl _OV 39 .globl _RS0 40 .globl _RS1 41 .globl _F0 42 .globl _AC 43 .globl _CY 44 .globl _CAP2 45 .globl _CNT2 46 .globl _TR2 47 .globl _XEN 48 .globl _TCLK 49 .globl _RCLK 50 .globl _EXF2 51 .globl _TF2 52 .globl _WDE 53 .globl _WDS 54 .globl _WDR2 55 .globl _WDR1 56 .globl _PRE0 57 .globl _PRE1 58 .globl _PRE2 59 .globl _PX0 60 .globl _PT0 61 .globl _PX1 62 .globl _PT1 63 .globl _PS 64 .globl _PT2 65 .globl _PADC 66 .globl _PSI 67 .globl _RXD 68 .globl _TXD 69 .globl _INT0 70 .globl _INT1 71 .globl _T0 72 .globl _T1 73 .globl _WR 74 .globl _RD 75 .globl _EX0 76 .globl _ET0 77 .globl _EX1 78 .globl _ET1 79 .globl _ES 80 .globl _ET2 81 .globl _EADC 82 .globl _EA 83 .globl _RI 84 .globl _TI 85 .globl _RB8 86 .globl _TB8 87 .globl _REN 88 .globl _SM2 89 .globl _SM1 90 .globl _SM0 91 .globl _T2 92 .globl _T2EX 93 .globl _IT0 94 .globl _IE0 95 .globl _IT1 96 .globl _IE1 97 .globl _TR0 98 .globl _TF0 99 .globl _TR1 100 .globl _TF1 101 .globl _DACCON 102 .globl _DAC1H 103 .globl _DAC1L 104 .globl _DAC0H 105 .globl _DAC0L 106 .globl _SPICON 107 .globl _SPIDAT 108 .globl _ADCCON3 109 .globl _ADCGAINH 110 .globl _ADCGAINL 111 .globl _ADCOFSH 112 .globl _ADCOFSL 113 .globl _B 114 .globl _ADCCON1 115 .globl _I2CCON 116 .globl _ACC 117 .globl _PSMCON 118 .globl _ADCDATAH 119 .globl _ADCDATAL 120 .globl _ADCCON2 121 .globl _DMAP 122 .globl _DMAH 123 .globl _DMAL 124 .globl _PSW 125 .globl _TH2 126 .globl _TL2 127 .globl _RCAP2H 128 .globl _RCAP2L 129 .globl _T2CON 130 .globl _EADRL 131 .globl _WDCON 132 .globl _EDATA4 133 .globl _EDATA3 134 .globl _EDATA2 135 .globl _EDATA1 136 .globl _ETIM3 137 .globl _ETIM2 138 .globl _ETIM1 139 .globl _ECON 140 .globl _IP 141 .globl _P3 142 .globl _IE2 143 .globl _IE 144 .globl _P2 145 .globl _I2CADD 146 .globl _I2CDAT 147 .globl _SBUF 148 .globl _SCON 149 .globl _P1 150 .globl _TH1 151 .globl _TH0 152 .globl _TL1 153 .globl _TL0 154 .globl _TMOD 155 .globl _TCON 156 .globl _PCON 157 .globl _DPP 158 .globl _DPH 159 .globl _DPL 160 .globl _SP 161 .globl _P0 162 .globl _bf_flag 163 .globl _c_ind 164 .globl _data_ind 165 .globl _read_bf_lcd 166 .globl _clear_lcd 167 .globl _to_home_lcd 168 .globl _set_address_ddram_lcd 169 .globl _goto_xy_lcd 170 .globl _print_char_lcd 171 .globl _print_string_lcd 172 ;-------------------------------------------------------- 173 ; special function registers 174 ;-------------------------------------------------------- 175 .area RSEG (DATA) 0080 176 _P0 = 0x0080 0081 177 _SP = 0x0081 0082 178 _DPL = 0x0082 0083 179 _DPH = 0x0083 0084 180 _DPP = 0x0084 0087 181 _PCON = 0x0087 0088 182 _TCON = 0x0088 0089 183 _TMOD = 0x0089 008A 184 _TL0 = 0x008a 008B 185 _TL1 = 0x008b 008C 186 _TH0 = 0x008c 008D 187 _TH1 = 0x008d 0090 188 _P1 = 0x0090 0098 189 _SCON = 0x0098 0099 190 _SBUF = 0x0099 009A 191 _I2CDAT = 0x009a 009B 192 _I2CADD = 0x009b 00A0 193 _P2 = 0x00a0 00A8 194 _IE = 0x00a8 00A9 195 _IE2 = 0x00a9 00B0 196 _P3 = 0x00b0 00B8 197 _IP = 0x00b8 00B9 198 _ECON = 0x00b9 00BA 199 _ETIM1 = 0x00ba 00BB 200 _ETIM2 = 0x00bb 00C4 201 _ETIM3 = 0x00c4 00BC 202 _EDATA1 = 0x00bc 00BD 203 _EDATA2 = 0x00bd 00BE 204 _EDATA3 = 0x00be 00BF 205 _EDATA4 = 0x00bf 00C0 206 _WDCON = 0x00c0 00C6 207 _EADRL = 0x00c6 00C8 208 _T2CON = 0x00c8 00CA 209 _RCAP2L = 0x00ca 00CB 210 _RCAP2H = 0x00cb 00CC 211 _TL2 = 0x00cc 00CD 212 _TH2 = 0x00cd 00D0 213 _PSW = 0x00d0 00D2 214 _DMAL = 0x00d2 00D3 215 _DMAH = 0x00d3 00D4 216 _DMAP = 0x00d4 00D8 217 _ADCCON2 = 0x00d8 00D9 218 _ADCDATAL = 0x00d9 00DA 219 _ADCDATAH = 0x00da 00DF 220 _PSMCON = 0x00df 00E0 221 _ACC = 0x00e0 00E8 222 _I2CCON = 0x00e8 00EF 223 _ADCCON1 = 0x00ef 00F0 224 _B = 0x00f0 00F1 225 _ADCOFSL = 0x00f1 00F2 226 _ADCOFSH = 0x00f2 00F3 227 _ADCGAINL = 0x00f3 00F4 228 _ADCGAINH = 0x00f4 00F5 229 _ADCCON3 = 0x00f5 00F7 230 _SPIDAT = 0x00f7 00F8 231 _SPICON = 0x00f8 00F9 232 _DAC0L = 0x00f9 00FA 233 _DAC0H = 0x00fa 00FB 234 _DAC1L = 0x00fb 00FC 235 _DAC1H = 0x00fc 00FD 236 _DACCON = 0x00fd 237 ;-------------------------------------------------------- 238 ; special function bits 239 ;-------------------------------------------------------- 240 .area RSEG (DATA) 008F 241 _TF1 = 0x008f 008E 242 _TR1 = 0x008e 008D 243 _TF0 = 0x008d 008C 244 _TR0 = 0x008c 008B 245 _IE1 = 0x008b 008A 246 _IT1 = 0x008a 0089 247 _IE0 = 0x0089 0088 248 _IT0 = 0x0088 0091 249 _T2EX = 0x0091 0090 250 _T2 = 0x0090 009F 251 _SM0 = 0x009f 009E 252 _SM1 = 0x009e 009D 253 _SM2 = 0x009d 009C 254 _REN = 0x009c 009B 255 _TB8 = 0x009b 009A 256 _RB8 = 0x009a 0099 257 _TI = 0x0099 0098 258 _RI = 0x0098 00AF 259 _EA = 0x00af 00AE 260 _EADC = 0x00ae 00AD 261 _ET2 = 0x00ad 00AC 262 _ES = 0x00ac 00AB 263 _ET1 = 0x00ab 00AA 264 _EX1 = 0x00aa 00A9 265 _ET0 = 0x00a9 00A8 266 _EX0 = 0x00a8 00B7 267 _RD = 0x00b7 00B6 268 _WR = 0x00b6 00B5 269 _T1 = 0x00b5 00B4 270 _T0 = 0x00b4 00B3 271 _INT1 = 0x00b3 00B2 272 _INT0 = 0x00b2 00B1 273 _TXD = 0x00b1 00B0 274 _RXD = 0x00b0 00BF 275 _PSI = 0x00bf 00BE 276 _PADC = 0x00be 00BD 277 _PT2 = 0x00bd 00BC 278 _PS = 0x00bc 00BB 279 _PT1 = 0x00bb 00BA 280 _PX1 = 0x00ba 00B9 281 _PT0 = 0x00b9 00B8 282 _PX0 = 0x00b8 00C7 283 _PRE2 = 0x00c7 00C6 284 _PRE1 = 0x00c6 00C5 285 _PRE0 = 0x00c5 00C3 286 _WDR1 = 0x00c3 00C2 287 _WDR2 = 0x00c2 00C1 288 _WDS = 0x00c1 00C0 289 _WDE = 0x00c0 00CF 290 _TF2 = 0x00cf 00CE 291 _EXF2 = 0x00ce 00CD 292 _RCLK = 0x00cd 00CC 293 _TCLK = 0x00cc 00CB 294 _XEN = 0x00cb 00CA 295 _TR2 = 0x00ca 00C9 296 _CNT2 = 0x00c9 00C8 297 _CAP2 = 0x00c8 00D7 298 _CY = 0x00d7 00D6 299 _AC = 0x00d6 00D5 300 _F0 = 0x00d5 00D4 301 _RS1 = 0x00d4 00D3 302 _RS0 = 0x00d3 00D2 303 _OV = 0x00d2 00D1 304 _F1 = 0x00d1 00D0 305 _P = 0x00d0 00DF 306 _ADCI = 0x00df 00DE 307 _DMA = 0x00de 00DD 308 _CCONV = 0x00dd 00DC 309 _SCONV = 0x00dc 00DB 310 _CS3 = 0x00db 00DA 311 _CS2 = 0x00da 00D9 312 _CS1 = 0x00d9 00D8 313 _CS0 = 0x00d8 00EF 314 _MDO = 0x00ef 00EE 315 _MDE = 0x00ee 00ED 316 _MCO = 0x00ed 00EC 317 _MDI = 0x00ec 00EB 318 _I2CM = 0x00eb 00EA 319 _I2CRS = 0x00ea 00E9 320 _I2CTX = 0x00e9 00E8 321 _I2CI = 0x00e8 00FF 322 _ISPI = 0x00ff 00FE 323 _WCOL = 0x00fe 00FD 324 _SPE = 0x00fd 00FC 325 _SPIM = 0x00fc 00FB 326 _CPOL = 0x00fb 00FA 327 _CPHA = 0x00fa 00F9 328 _SPR1 = 0x00f9 00F8 329 _SPR0 = 0x00f8 330 ;-------------------------------------------------------- 331 ; overlayable register banks 332 ;-------------------------------------------------------- 333 .area REG_BANK_0 (REL,OVR,DATA) 0000 334 .ds 8 335 ;-------------------------------------------------------- 336 ; internal ram data 337 ;-------------------------------------------------------- 338 .area DSEG (DATA) 0000 339 _data_ind:: 0000 340 .ds 1 0001 341 _c_ind:: 0001 342 .ds 1 0002 343 _bf_flag:: 0002 344 .ds 1 345 ;-------------------------------------------------------- 346 ; overlayable items in internal ram 347 ;-------------------------------------------------------- 348 .area OSEG (OVR,DATA) 349 ;-------------------------------------------------------- 350 ; indirectly addressable internal ram data 351 ;-------------------------------------------------------- 352 .area ISEG (DATA) 353 ;-------------------------------------------------------- 354 ; absolute internal ram data 355 ;-------------------------------------------------------- 356 .area IABS (ABS,DATA) 357 .area IABS (ABS,DATA) 358 ;-------------------------------------------------------- 359 ; bit data 360 ;-------------------------------------------------------- 361 .area BSEG (BIT) 362 ;-------------------------------------------------------- 363 ; paged external ram data 364 ;-------------------------------------------------------- 365 .area PSEG (PAG,XDATA) 366 ;-------------------------------------------------------- 367 ; external ram data 368 ;-------------------------------------------------------- 369 .area XSEG (XDATA) 370 ;-------------------------------------------------------- 371 ; absolute external ram data 372 ;-------------------------------------------------------- 373 .area XABS (ABS,XDATA) 374 ;-------------------------------------------------------- 375 ; external initialized ram data 376 ;-------------------------------------------------------- 377 .area XISEG (XDATA) 378 .area HOME (CODE) 379 .area GSINIT0 (CODE) 380 .area GSINIT1 (CODE) 381 .area GSINIT2 (CODE) 382 .area GSINIT3 (CODE) 383 .area GSINIT4 (CODE) 384 .area GSINIT5 (CODE) 385 .area GSINIT (CODE) 386 .area GSFINAL (CODE) 387 .area CSEG (CODE) 388 ;-------------------------------------------------------- 389 ; global & static initialisations 390 ;-------------------------------------------------------- 391 .area HOME (CODE) 392 .area GSINIT (CODE) 393 .area GSFINAL (CODE) 394 .area GSINIT (CODE) 395 ;-------------------------------------------------------- 396 ; Home 397 ;-------------------------------------------------------- 398 .area HOME (CODE) 399 .area HOME (CODE) 400 ;-------------------------------------------------------- 401 ; code 402 ;-------------------------------------------------------- 403 .area CSEG (CODE) 404 ;------------------------------------------------------------ 405 ;Allocation info for local variables in function 'read_bf_lcd' 406 ;------------------------------------------------------------ 407 ;------------------------------------------------------------ 408 ; SRC/driver_lcd.c:10: unsigned char read_bf_lcd() 409 ; ----------------------------------------- 410 ; function read_bf_lcd 411 ; ----------------------------------------- 0000 412 _read_bf_lcd: 0002 413 ar2 = 0x02 0003 414 ar3 = 0x03 0004 415 ar4 = 0x04 0005 416 ar5 = 0x05 0006 417 ar6 = 0x06 0007 418 ar7 = 0x07 0000 419 ar0 = 0x00 0001 420 ar1 = 0x01 421 ; SRC/driver_lcd.c:12: c_ind = 0x03; // RS = 0; R/W = 1 (read); E = 1 422 ; SRC/driver_lcd.c:13: write_max(6, c_ind); // 0000 74 03 423 mov a,#0x03 0002 F5*01 424 mov _c_ind,a 0004 C0 E0 425 push acc 0006 90 00 06 426 mov dptr,#0x0006 0009 12s00r00 427 lcall _write_max 000C 15 81 428 dec sp 429 ; SRC/driver_lcd.c:15: data_ind = read_max(1); // читаем содержимое DATA_IND; старший бит - BF 000E 90 00 01 430 mov dptr,#0x0001 0011 12s00r00 431 lcall _read_max 432 ; SRC/driver_lcd.c:16: bf_flag = data_ind >> 7; // получаем BF 0014 E5 82 433 mov a,dpl 0016 F5*00 434 mov _data_ind,a 0018 23 435 rl a 0019 54 01 436 anl a,#0x01 001B F5*02 437 mov _bf_flag,a 438 ; SRC/driver_lcd.c:18: c_ind = 0x02; // Сброс: E = 0 439 ; SRC/driver_lcd.c:19: write_max(6, c_ind); // 001D 74 02 440 mov a,#0x02 001F F5*01 441 mov _c_ind,a 0021 C0 E0 442 push acc 0023 90 00 06 443 mov dptr,#0x0006 0026 12s00r00 444 lcall _write_max 0029 15 81 445 dec sp 446 ; SRC/driver_lcd.c:21: return bf_flag; 002B 85*02 82 447 mov dpl,_bf_flag 002E 22 448 ret 449 ;------------------------------------------------------------ 450 ;Allocation info for local variables in function 'clear_lcd' 451 ;------------------------------------------------------------ 452 ;------------------------------------------------------------ 453 ; SRC/driver_lcd.c:24: unsigned char clear_lcd(void) 454 ; ----------------------------------------- 455 ; function clear_lcd 456 ; ----------------------------------------- 002F 457 _clear_lcd: 458 ; SRC/driver_lcd.c:27: while (read_bf_lcd() == 1); 002F 459 00101$: 002F 12s00r00 460 lcall _read_bf_lcd 0032 AA 82 461 mov r2,dpl 0034 BA 01 02 462 cjne r2,#0x01,00108$ 0037 80 F6 463 sjmp 00101$ 0039 464 00108$: 465 ; SRC/driver_lcd.c:29: data_ind = 0x01; //Записываем в DATA_IND код команды установки адреса DD RAM а 0x01 466 ; SRC/driver_lcd.c:30: write_max(1, data_ind); // 0039 74 01 467 mov a,#0x01 003B F5*00 468 mov _data_ind,a 003D C0 E0 469 push acc 003F 90 00 01 470 mov dptr,#0x0001 0042 12s00r00 471 lcall _write_max 0045 15 81 472 dec sp 473 ; SRC/driver_lcd.c:32: c_ind = 0x01; // Устанавливаем значение RS=0,R/W=0, и выставляем строб E, для 474 ; SRC/driver_lcd.c:33: write_max(6, c_ind); // этого в C_IND заносим значение 0x01. 0047 74 01 475 mov a,#0x01 0049 F5*01 476 mov _c_ind,a 004B C0 E0 477 push acc 004D 90 00 06 478 mov dptr,#0x0006 0050 12s00r00 479 lcall _write_max 0053 15 81 480 dec sp 481 ; SRC/driver_lcd.c:35: c_ind = 0x00; // сбрасываем строб E (запись в С_IND 0x00). 482 ; SRC/driver_lcd.c:36: write_max(6, c_ind); // 0055 E4 483 clr a 0056 F5*01 484 mov _c_ind,a 0058 C0 E0 485 push acc 005A 90 00 06 486 mov dptr,#0x0006 005D 12s00r00 487 lcall _write_max 0060 15 81 488 dec sp 489 ; SRC/driver_lcd.c:38: return 0; 0062 75 82 00 490 mov dpl,#0x00 0065 22 491 ret 492 ;------------------------------------------------------------ 493 ;Allocation info for local variables in function 'to_home_lcd' 494 ;------------------------------------------------------------ 495 ;------------------------------------------------------------ 496 ; SRC/driver_lcd.c:41: void to_home_lcd(void) 497 ; ----------------------------------------- 498 ; function to_home_lcd 499 ; ----------------------------------------- 0066 500 _to_home_lcd: 501 ; SRC/driver_lcd.c:44: while (read_bf_lcd() == 1); 0066 502 00101$: 0066 12s00r00 503 lcall _read_bf_lcd 0069 AA 82 504 mov r2,dpl 006B BA 01 02 505 cjne r2,#0x01,00108$ 006E 80 F6 506 sjmp 00101$ 0070 507 00108$: 508 ; SRC/driver_lcd.c:46: data_ind = 0x02; // Записываем в DATA_IND код команды перевод курсора 509 ; SRC/driver_lcd.c:47: write_max(1, data_ind); // на первую позицию 0x02. 0070 74 02 510 mov a,#0x02 0072 F5*00 511 mov _data_ind,a 0074 C0 E0 512 push acc 0076 90 00 01 513 mov dptr,#0x0001 0079 12s00r00 514 lcall _write_max 007C 15 81 515 dec sp 516 ; SRC/driver_lcd.c:49: c_ind = 0x01; // Устанавливаем значение RS=0,R/W=0 и выставляем строб E, 517 ; SRC/driver_lcd.c:50: write_max(6, c_ind); // для этого в C_IND заносим значение 0x01. 007E 74 01 518 mov a,#0x01 0080 F5*01 519 mov _c_ind,a 0082 C0 E0 520 push acc 0084 90 00 06 521 mov dptr,#0x0006 0087 12s00r00 522 lcall _write_max 008A 15 81 523 dec sp 524 ; SRC/driver_lcd.c:52: c_ind = 0x00; // сбрасываем строб E (запись в С_IND 0x00). 525 ; SRC/driver_lcd.c:53: write_max(6, c_ind); // 008C E4 526 clr a 008D F5*01 527 mov _c_ind,a 008F C0 E0 528 push acc 0091 90 00 06 529 mov dptr,#0x0006 0094 12s00r00 530 lcall _write_max 0097 15 81 531 dec sp 0099 22 532 ret 533 ;------------------------------------------------------------ 534 ;Allocation info for local variables in function 'set_address_ddram_lcd' 535 ;------------------------------------------------------------ 536 ;address Allocated to registers r2 537 ;------------------------------------------------------------ 538 ; SRC/driver_lcd.c:56: void set_address_ddram_lcd(unsigned char address) 539 ; ----------------------------------------- 540 ; function set_address_ddram_lcd 541 ; ----------------------------------------- 009A 542 _set_address_ddram_lcd: 009A AA 82 543 mov r2,dpl 544 ; SRC/driver_lcd.c:59: while (read_bf_lcd() == 1); 009C 545 00101$: 009C C0 02 546 push ar2 009E 12s00r00 547 lcall _read_bf_lcd 00A1 AB 82 548 mov r3,dpl 00A3 D0 02 549 pop ar2 00A5 BB 01 02 550 cjne r3,#0x01,00108$ 00A8 80 F2 551 sjmp 00101$ 00AA 552 00108$: 553 ; SRC/driver_lcd.c:61: data_ind = address; // Записываем в DATA_IND код команды уcтановки 00AA 8A*00 554 mov _data_ind,r2 555 ; SRC/driver_lcd.c:62: write_max(1, data_ind); // адреса DD RAM, т.е. в старший разряд DATA_IND 1, а в младшие семь адрес в DD RAM. 00AC C0*00 556 push _data_ind 00AE 90 00 01 557 mov dptr,#0x0001 00B1 12s00r00 558 lcall _write_max 00B4 15 81 559 dec sp 560 ; SRC/driver_lcd.c:64: c_ind = 0x01; // Устанавливаем значение RS=0,R/W=0, и выставляем строб E, для 561 ; SRC/driver_lcd.c:65: write_max(6, c_ind); // этого в C_IND заносим значение 0x01. 00B6 74 01 562 mov a,#0x01 00B8 F5*01 563 mov _c_ind,a 00BA C0 E0 564 push acc 00BC 90 00 06 565 mov dptr,#0x0006 00BF 12s00r00 566 lcall _write_max 00C2 15 81 567 dec sp 568 ; SRC/driver_lcd.c:67: c_ind = 0x00; // сбрасываем строб E (запись в С_IND 0x00). 569 ; SRC/driver_lcd.c:68: write_max(6, c_ind); // 00C4 E4 570 clr a 00C5 F5*01 571 mov _c_ind,a 00C7 C0 E0 572 push acc 00C9 90 00 06 573 mov dptr,#0x0006 00CC 12s00r00 574 lcall _write_max 00CF 15 81 575 dec sp 00D1 22 576 ret 577 ;------------------------------------------------------------ 578 ;Allocation info for local variables in function 'goto_xy_lcd' 579 ;------------------------------------------------------------ 580 ;y Allocated to stack - offset -3 581 ;x Allocated to registers r2 582 ;address Allocated to registers 583 ;------------------------------------------------------------ 584 ; SRC/driver_lcd.c:71: void goto_xy_lcd(unsigned char x, unsigned char y) 585 ; ----------------------------------------- 586 ; function goto_xy_lcd 587 ; ----------------------------------------- 00D2 588 _goto_xy_lcd: 00D2 C0*00 589 push _bp 00D4 85 81*00 590 mov _bp,sp 00D7 AA 82 591 mov r2,dpl 592 ; SRC/driver_lcd.c:75: y >>= 1; 00D9 A8*00 593 mov r0,_bp 00DB 18 594 dec r0 00DC 18 595 dec r0 00DD 18 596 dec r0 00DE E6 597 mov a,@r0 00DF C3 598 clr c 00E0 13 599 rrc a 00E1 F6 600 mov @r0,a 601 ; SRC/driver_lcd.c:76: address = ((y << 6) | 0x80) | (--x); 00E2 A8*00 602 mov r0,_bp 00E4 18 603 dec r0 00E5 18 604 dec r0 00E6 18 605 dec r0 00E7 E6 606 mov a,@r0 00E8 03 607 rr a 00E9 03 608 rr a 00EA 54 C0 609 anl a,#0xc0 00EC FB 610 mov r3,a 00ED 43 03 80 611 orl ar3,#0x80 00F0 1A 612 dec r2 00F1 EB 613 mov a,r3 00F2 42 02 614 orl ar2,a 00F4 8A 82 615 mov dpl,r2 616 ; SRC/driver_lcd.c:77: set_address_ddram_lcd(address); 00F6 12s00r9A 617 lcall _set_address_ddram_lcd 00F9 D0*00 618 pop _bp 00FB 22 619 ret 620 ;------------------------------------------------------------ 621 ;Allocation info for local variables in function 'print_char_lcd' 622 ;------------------------------------------------------------ 623 ;symbol Allocated to registers r2 624 ;------------------------------------------------------------ 625 ; SRC/driver_lcd.c:80: unsigned char print_char_lcd(char symbol) 626 ; ----------------------------------------- 627 ; function print_char_lcd 628 ; ----------------------------------------- 00FC 629 _print_char_lcd: 00FC AA 82 630 mov r2,dpl 631 ; SRC/driver_lcd.c:83: while (read_bf_lcd() == 1); 00FE 632 00101$: 00FE C0 02 633 push ar2 0100 12s00r00 634 lcall _read_bf_lcd 0103 AB 82 635 mov r3,dpl 0105 D0 02 636 pop ar2 0107 BB 01 02 637 cjne r3,#0x01,00108$ 010A 80 F2 638 sjmp 00101$ 010C 639 00108$: 640 ; SRC/driver_lcd.c:85: data_ind = symbol; // Записываем в DATA_IND код двоичный код 010C 8A*00 641 mov _data_ind,r2 642 ; SRC/driver_lcd.c:86: write_max(1, data_ind); // выводимого символа 010E C0*00 643 push _data_ind 0110 90 00 01 644 mov dptr,#0x0001 0113 12s00r00 645 lcall _write_max 0116 15 81 646 dec sp 647 ; SRC/driver_lcd.c:88: c_ind = 0x05; // Устанавливаем значение RS=1,R/W=0, и выставляем строб E, для 648 ; SRC/driver_lcd.c:89: write_max(6, c_ind); // этого в C_IND заносим значение 0x05 0118 74 05 649 mov a,#0x05 011A F5*01 650 mov _c_ind,a 011C C0 E0 651 push acc 011E 90 00 06 652 mov dptr,#0x0006 0121 12s00r00 653 lcall _write_max 0124 15 81 654 dec sp 655 ; SRC/driver_lcd.c:91: c_ind = 0x04; // сбрасываем строб E (запись в С_IND 0x04). 656 ; SRC/driver_lcd.c:92: write_max(6, c_ind); // 0126 74 04 657 mov a,#0x04 0128 F5*01 658 mov _c_ind,a 012A C0 E0 659 push acc 012C 90 00 06 660 mov dptr,#0x0006 012F 12s00r00 661 lcall _write_max 0132 15 81 662 dec sp 663 ; SRC/driver_lcd.c:94: return 0; 0134 75 82 00 664 mov dpl,#0x00 0137 22 665 ret 666 ;------------------------------------------------------------ 667 ;Allocation info for local variables in function 'print_string_lcd' 668 ;------------------------------------------------------------ 669 ;str Allocated to registers r2 r3 r4 670 ;------------------------------------------------------------ 671 ; SRC/driver_lcd.c:97: void print_string_lcd(char * str) 672 ; ----------------------------------------- 673 ; function print_string_lcd 674 ; ----------------------------------------- 0138 675 _print_string_lcd: 0138 AA 82 676 mov r2,dpl 013A AB 83 677 mov r3,dph 013C AC F0 678 mov r4,b 679 ; SRC/driver_lcd.c:99: while (*str ) { 013E 680 00101$: 013E 8A 82 681 mov dpl,r2 0140 8B 83 682 mov dph,r3 0142 8C F0 683 mov b,r4 0144 12s00r00 684 lcall __gptrget 0147 FD 685 mov r5,a 0148 60 18 686 jz 00104$ 687 ; SRC/driver_lcd.c:100: print_char_lcd(*str++); 014A 0A 688 inc r2 014B BA 00 01 689 cjne r2,#0x00,00110$ 014E 0B 690 inc r3 014F 691 00110$: 014F 8D 82 692 mov dpl,r5 0151 C0 02 693 push ar2 0153 C0 03 694 push ar3 0155 C0 04 695 push ar4 0157 12s00rFC 696 lcall _print_char_lcd 015A D0 04 697 pop ar4 015C D0 03 698 pop ar3 015E D0 02 699 pop ar2 0160 80 DC 700 sjmp 00101$ 0162 701 00104$: 0162 22 702 ret 703 .area CSEG (CODE) 704 .area CONST (CODE) 705 .area XINIT (CODE) 706 .area CABS (ABS,CODE)