mleddisplay PAGE 1 1 ; Demonstration code for MCU 8051 IDE 2 ; 3 ; Load virtual HW from "mleddisplay.vhc" 4 ; and press F2 and F6 5 ; 6 ; It should increment 4 digit number displayed 7 ; on multiplexed LED display 8 9 10 ; ----------------------------------------------- 11 ; CONSTANTS 12 ; ----------------------------------------------- 13 0020 14 data_ptr data 20h ; Number to display 0004 15 data_len equ 4h ; Number of digits 16 17 ;; Codes for 8-segment LED display 18 ; They can be easily determinated with 19 ; 8-segment editor ( [Main menu] - > 20 ; [Utilities] -> [8-segment editor] ) 0041 C0 21 numbers:db 11000000b ; 0 0042 F9 22 db 11111001b ; 1 0043 A4 23 db 10100100b ; 2 0044 B0 24 db 10110000b ; 3 0045 99 25 db 10011001b ; 4 0046 92 26 db 10010010b ; 5 0047 82 27 db 10000010b ; 6 0048 F8 28 db 11111000b ; 7 0049 80 29 db 10000000b ; 8 004A 90 30 db 10010000b ; 9 31 32 ; ----------------------------------------------- 33 ; VECTORS 34 ; ----------------------------------------------- 35 ; Reset vector 36 org 0 0000 020025 37 jmp start 38 39 ; ----------------------------------------------- 40 ; SUBPROGRAMS 41 ; ----------------------------------------------- 42 43 ;; Increment the number 44 ; 45 ; R0 must be set to data_ptr before call 46 ; 47 ; Affected registers: R0 48 ; Interrupts: None 49 ; Notes: Recursive sub-program 50 inrement_number: 0003 06 51 inc @R0 0004 B60A09 52 cjne @R0, #0Ah, inc_num_end 53 0007 7600 54 mov @R0, #0 0009 08 55 inc R0 000A B82401 56 cjne R0, #data_ptr+data_len, $+4 000D 22 57 ret 000E 1103 58 call inrement_number 59 inc_num_end: 0010 22 60 ret 61 62 ;; Display the number on the LED display 63 ; 64 ; DPTR must point to table numbers 65 ; R0 must contain (data_ptr+data_len) 66 ; 67 ; Affected registers: A, B, R0, P1, P3 68 ; Interrupts: None 69 ; Notes: Uses DPTR 70 display_number: 71 ; Select digit to display 0011 18 72 dec R0 ; In uC 0012 E5F0 73 mov A, B 0014 03 74 rr A 0015 F5F0 75 mov B, A 76 77 ; Translate the digit to binary 78 ; representation for the LED display 0017 E6 79 mov A, @R0 0018 93 80 movc A, @A+DPTR 81 82 ; Display the digit on the display 0019 75B0FF 83 mov P3, #0ffh 001C F590 84 mov P1, A 001E 85F0B0 85 mov P3, B 86 87 ; Display next digit 0021 B820ED 88 cjne R0, #data_ptr, display_number 0024 22 89 ret 90 91 ; ----------------------------------------------- 92 ; PROGRAM START 93 ; ----------------------------------------------- 94 start: 95 ; Data to zeroes 0025 752000 96 mov data_ptr+0, #0h ; left-most 0028 752100 97 mov data_ptr+1, #0h 002B 752200 98 mov data_ptr+2, #0h 002E 752300 99 mov data_ptr+3, #0h ; right-most 100 101 ; Address 1st number on the display 0031 75F0EE 102 mov B, #0EEh 103 ; Initialize DPTR (Data PoinTeR) 0034 900041 104 mov DPTR, #numbers 105 106 ; ----------------------------------------------- 107 ; MAIN LOOP 108 ; ----------------------------------------------- 109 110 main: 111 ; Show the number on the LED display 0037 7824 112 mov R0, #data_ptr+data_len 0039 1111 113 call display_number 114 115 ; Increment the number 003B 7820 116 mov R0, #data_ptr 003D 1103 117 call inrement_number 118 119 ; Close main loop 003F 80F6 120 jmp main 121 122 ; ----------------------------------------------- 123 ; PROGRAM END 124 ; ----------------------------------------------- 125 end ASSEMBLY COMPLETE, NO ERRORS FOUND, NO WARNINGS SYMBOL TABLE: ??MCU_8051_IDE . . . . . . . . . . . N NUMB 8051H NOT USED ??VERSION. . . . . . . . . . . . . . N NUMB 0149H NOT USED AC . . . . . . . . . . . . . . . . . B ADDR 00D6H NOT USED ACC. . . . . . . . . . . . . . . . . D ADDR 00E0H NOT USED ACSR . . . . . . . . . . . . . . . . D ADDR 0097H NOT USED ADCF . . . . . . . . . . . . . . . . D ADDR 00F6H NOT USED ADCLK. . . . . . . . . . . . . . . . D ADDR 00F2H NOT USED ADCON. . . . . . . . . . . . . . . . D ADDR 00F3H NOT USED ADDH . . . . . . . . . . . . . . . . D ADDR 00F5H NOT USED ADDL . . . . . . . . . . . . . . . . D ADDR 00F4H NOT USED AUXR . . . . . . . . . . . . . . . . D ADDR 008EH NOT USED AUXR1. . . . . . . . . . . . . . . . D ADDR 00A2H NOT USED B. . . . . . . . . . . . . . . . . . D ADDR 00F0H BDRCON . . . . . . . . . . . . . . . D ADDR 009BH NOT USED BDRCON_1 . . . . . . . . . . . . . . D ADDR 009CH NOT USED BRL. . . . . . . . . . . . . . . . . D ADDR 009AH NOT USED CCAP0H . . . . . . . . . . . . . . . D ADDR 00FAH NOT USED CCAP0L . . . . . . . . . . . . . . . D ADDR 00EAH NOT USED CCAP1H . . . . . . . . . . . . . . . D ADDR 00FBH NOT USED CCAP1L . . . . . . . . . . . . . . . D ADDR 00EBH NOT USED CCAP2H . . . . . . . . . . . . . . . D ADDR 00FCH NOT USED CCAP3H . . . . . . . . . . . . . . . D ADDR 00FDH NOT USED CCAP4H . . . . . . . . . . . . . . . D ADDR 00FEH NOT USED CCAPL2H. . . . . . . . . . . . . . . D ADDR 00FCH NOT USED CCAPL2L. . . . . . . . . . . . . . . D ADDR 00ECH NOT USED CCAPL3H. . . . . . . . . . . . . . . D ADDR 00FDH NOT USED CCAPL3L. . . . . . . . . . . . . . . D ADDR 00EDH NOT USED CCAPL4H. . . . . . . . . . . . . . . D ADDR 00FEH NOT USED CCAPL4L. . . . . . . . . . . . . . . D ADDR 00EEH NOT USED CCAPM0 . . . . . . . . . . . . . . . D ADDR 00DAH NOT USED CCAPM1 . . . . . . . . . . . . . . . D ADDR 00DBH NOT USED CCAPM2 . . . . . . . . . . . . . . . D ADDR 00DCH NOT USED CCAPM3 . . . . . . . . . . . . . . . D ADDR 00DDH NOT USED CCAPM4 . . . . . . . . . . . . . . . D ADDR 00DEH NOT USED CCF0 . . . . . . . . . . . . . . . . B ADDR 00D8H NOT USED CCF1 . . . . . . . . . . . . . . . . B ADDR 00D9H NOT USED CCF2 . . . . . . . . . . . . . . . . B ADDR 00DAH NOT USED CCF3 . . . . . . . . . . . . . . . . B ADDR 00DBH NOT USED CCF4 . . . . . . . . . . . . . . . . B ADDR 00DCH NOT USED CCON . . . . . . . . . . . . . . . . D ADDR 00D8H NOT USED CFINT. . . . . . . . . . . . . . . . C ADDR 0033H NOT USED CH . . . . . . . . . . . . . . . . . D ADDR 00F9H NOT USED CKCON. . . . . . . . . . . . . . . . D ADDR 008FH NOT USED CKCON0 . . . . . . . . . . . . . . . D ADDR 008FH NOT USED CKRL . . . . . . . . . . . . . . . . D ADDR 0097H NOT USED CKSEL. . . . . . . . . . . . . . . . D ADDR 0085H NOT USED CL . . . . . . . . . . . . . . . . . D ADDR 00E9H NOT USED CLKREG . . . . . . . . . . . . . . . D ADDR 008FH NOT USED CMOD . . . . . . . . . . . . . . . . D ADDR 00D9H NOT USED CPRL2. . . . . . . . . . . . . . . . B ADDR 00C8H NOT USED CR . . . . . . . . . . . . . . . . . B ADDR 00DEH NOT USED CT2. . . . . . . . . . . . . . . . . B ADDR 00C9H NOT USED CY . . . . . . . . . . . . . . . . . B ADDR 00D7H NOT USED DATA_LEN . . . . . . . . . . . . . . N NUMB 0004H DATA_PTR . . . . . . . . . . . . . . D ADDR 0020H DISPLAY_NUMBER . . . . . . . . . . . C ADDR 0011H DP0H . . . . . . . . . . . . . . . . D ADDR 0083H NOT USED DP0L . . . . . . . . . . . . . . . . D ADDR 0082H NOT USED DP1H . . . . . . . . . . . . . . . . D ADDR 0085H NOT USED DP1L . . . . . . . . . . . . . . . . D ADDR 0084H NOT USED DPH. . . . . . . . . . . . . . . . . D ADDR 0083H NOT USED DPL. . . . . . . . . . . . . . . . . D ADDR 0082H NOT USED EA . . . . . . . . . . . . . . . . . B ADDR 00AFH NOT USED EC . . . . . . . . . . . . . . . . . B ADDR 00AEH NOT USED EECON. . . . . . . . . . . . . . . . D ADDR 0096H NOT USED ES . . . . . . . . . . . . . . . . . B ADDR 00ACH NOT USED ET0. . . . . . . . . . . . . . . . . B ADDR 00A9H NOT USED ET1. . . . . . . . . . . . . . . . . B ADDR 00ABH NOT USED ET2. . . . . . . . . . . . . . . . . B ADDR 00ADH NOT USED EX0. . . . . . . . . . . . . . . . . B ADDR 00A8H NOT USED EX1. . . . . . . . . . . . . . . . . B ADDR 00AAH NOT USED EXEN2. . . . . . . . . . . . . . . . B ADDR 00CBH NOT USED EXF2 . . . . . . . . . . . . . . . . B ADDR 00CEH NOT USED EXTI0. . . . . . . . . . . . . . . . C ADDR 0003H NOT USED EXTI1. . . . . . . . . . . . . . . . C ADDR 0013H NOT USED F0 . . . . . . . . . . . . . . . . . B ADDR 00D5H NOT USED FE . . . . . . . . . . . . . . . . . B ADDR 009FH NOT USED IE . . . . . . . . . . . . . . . . . D ADDR 00A8H NOT USED IE0. . . . . . . . . . . . . . . . . B ADDR 0089H NOT USED IE1. . . . . . . . . . . . . . . . . B ADDR 008BH NOT USED INC_NUM_END. . . . . . . . . . . . . C ADDR 0010H INREMENT_NUMBER. . . . . . . . . . . C ADDR 0003H INT0 . . . . . . . . . . . . . . . . B ADDR 00B2H NOT USED INT1 . . . . . . . . . . . . . . . . B ADDR 00B3H NOT USED IP . . . . . . . . . . . . . . . . . D ADDR 00B8H NOT USED IPH. . . . . . . . . . . . . . . . . D ADDR 00B7H NOT USED IPH0 . . . . . . . . . . . . . . . . D ADDR 00B7H NOT USED IPH1 . . . . . . . . . . . . . . . . D ADDR 00B3H NOT USED IPL0 . . . . . . . . . . . . . . . . D ADDR 00B8H NOT USED IPL1 . . . . . . . . . . . . . . . . D ADDR 00B2H NOT USED IT0. . . . . . . . . . . . . . . . . B ADDR 0088H NOT USED IT1. . . . . . . . . . . . . . . . . B ADDR 008AH NOT USED KBE. . . . . . . . . . . . . . . . . D ADDR 009DH NOT USED KBF. . . . . . . . . . . . . . . . . D ADDR 009EH NOT USED KBLS . . . . . . . . . . . . . . . . D ADDR 009CH NOT USED MAIN . . . . . . . . . . . . . . . . C ADDR 0037H NUMBERS. . . . . . . . . . . . . . . C ADDR 0041H OSCCON . . . . . . . . . . . . . . . D ADDR 0086H NOT USED OV . . . . . . . . . . . . . . . . . B ADDR 00D2H NOT USED P. . . . . . . . . . . . . . . . . . B ADDR 00D0H NOT USED P0 . . . . . . . . . . . . . . . . . D ADDR 0080H NOT USED P1 . . . . . . . . . . . . . . . . . D ADDR 0090H P1M1 . . . . . . . . . . . . . . . . D ADDR 00D4H NOT USED P1M2 . . . . . . . . . . . . . . . . D ADDR 00E2H NOT USED P2 . . . . . . . . . . . . . . . . . D ADDR 00A0H NOT USED P3 . . . . . . . . . . . . . . . . . D ADDR 00B0H P3M1 . . . . . . . . . . . . . . . . D ADDR 00D5H NOT USED P3M2 . . . . . . . . . . . . . . . . D ADDR 00E3H NOT USED P4 . . . . . . . . . . . . . . . . . D ADDR 00C0H NOT USED P4M1 . . . . . . . . . . . . . . . . D ADDR 00D6H NOT USED P4M2 . . . . . . . . . . . . . . . . D ADDR 00E4H NOT USED P5 . . . . . . . . . . . . . . . . . D ADDR 00E8H NOT USED PC . . . . . . . . . . . . . . . . . B ADDR 00BEH NOT USED PCON . . . . . . . . . . . . . . . . D ADDR 0087H NOT USED PPCL . . . . . . . . . . . . . . . . B ADDR 00BEH NOT USED PS . . . . . . . . . . . . . . . . . B ADDR 00BCH NOT USED PSL. . . . . . . . . . . . . . . . . B ADDR 00BCH NOT USED PSW. . . . . . . . . . . . . . . . . D ADDR 00D0H NOT USED PT0. . . . . . . . . . . . . . . . . B ADDR 00B9H NOT USED PT0L . . . . . . . . . . . . . . . . B ADDR 00B9H NOT USED PT1. . . . . . . . . . . . . . . . . B ADDR 00BBH NOT USED PT1L . . . . . . . . . . . . . . . . B ADDR 00BBH NOT USED PT2. . . . . . . . . . . . . . . . . B ADDR 00BDH NOT USED PT2L . . . . . . . . . . . . . . . . B ADDR 00BDH NOT USED PX0. . . . . . . . . . . . . . . . . B ADDR 00B8H NOT USED PX0L . . . . . . . . . . . . . . . . B ADDR 00B8H NOT USED PX1. . . . . . . . . . . . . . . . . B ADDR 00BAH NOT USED PX1L . . . . . . . . . . . . . . . . B ADDR 00BAH NOT USED RB8. . . . . . . . . . . . . . . . . B ADDR 009AH NOT USED RCAP2H . . . . . . . . . . . . . . . D ADDR 00CBH NOT USED RCAP2L . . . . . . . . . . . . . . . D ADDR 00CAH NOT USED RCLK . . . . . . . . . . . . . . . . B ADDR 00CDH NOT USED RD . . . . . . . . . . . . . . . . . B ADDR 00B7H NOT USED REN. . . . . . . . . . . . . . . . . B ADDR 009CH NOT USED RESET. . . . . . . . . . . . . . . . C ADDR 0000H NOT USED RI . . . . . . . . . . . . . . . . . B ADDR 0098H NOT USED RS0. . . . . . . . . . . . . . . . . B ADDR 00D3H NOT USED RS1. . . . . . . . . . . . . . . . . B ADDR 00D4H NOT USED RXD. . . . . . . . . . . . . . . . . B ADDR 00B0H NOT USED SADDR. . . . . . . . . . . . . . . . D ADDR 00A9H NOT USED SADDR_0. . . . . . . . . . . . . . . D ADDR 00A9H NOT USED SADDR_1. . . . . . . . . . . . . . . D ADDR 00AAH NOT USED SADEN. . . . . . . . . . . . . . . . D ADDR 00B9H NOT USED SADEN_0. . . . . . . . . . . . . . . D ADDR 00B9H NOT USED SADEN_1. . . . . . . . . . . . . . . D ADDR 00BAH NOT USED SBUF . . . . . . . . . . . . . . . . D ADDR 0099H NOT USED SCON . . . . . . . . . . . . . . . . D ADDR 0098H NOT USED SINT . . . . . . . . . . . . . . . . C ADDR 0023H NOT USED SM0. . . . . . . . . . . . . . . . . B ADDR 009FH NOT USED SM1. . . . . . . . . . . . . . . . . B ADDR 009EH NOT USED SM2. . . . . . . . . . . . . . . . . B ADDR 009DH NOT USED SP . . . . . . . . . . . . . . . . . D ADDR 0081H NOT USED SPCON. . . . . . . . . . . . . . . . D ADDR 00C3H NOT USED SPCR . . . . . . . . . . . . . . . . D ADDR 00D5H NOT USED SPDAT. . . . . . . . . . . . . . . . D ADDR 00C5H NOT USED SPDR . . . . . . . . . . . . . . . . D ADDR 0086H NOT USED SPSR . . . . . . . . . . . . . . . . D ADDR 00AAH NOT USED SPSTA. . . . . . . . . . . . . . . . D ADDR 00C4H NOT USED START. . . . . . . . . . . . . . . . C ADDR 0025H T0 . . . . . . . . . . . . . . . . . B ADDR 00B4H NOT USED T1 . . . . . . . . . . . . . . . . . B ADDR 00B5H NOT USED T2CON. . . . . . . . . . . . . . . . D ADDR 00C8H NOT USED T2MOD. . . . . . . . . . . . . . . . D ADDR 00C9H NOT USED TB8. . . . . . . . . . . . . . . . . B ADDR 009BH NOT USED TCLK . . . . . . . . . . . . . . . . B ADDR 00CCH NOT USED TCON . . . . . . . . . . . . . . . . D ADDR 0088H NOT USED TF0. . . . . . . . . . . . . . . . . B ADDR 008DH NOT USED TF1. . . . . . . . . . . . . . . . . B ADDR 008FH NOT USED TF2. . . . . . . . . . . . . . . . . B ADDR 00CFH NOT USED TH0. . . . . . . . . . . . . . . . . D ADDR 008CH NOT USED TH1. . . . . . . . . . . . . . . . . D ADDR 008DH NOT USED TH2. . . . . . . . . . . . . . . . . D ADDR 00CDH NOT USED TI . . . . . . . . . . . . . . . . . B ADDR 0099H NOT USED TIMER0 . . . . . . . . . . . . . . . C ADDR 000BH NOT USED TIMER1 . . . . . . . . . . . . . . . C ADDR 001BH NOT USED TIMER2 . . . . . . . . . . . . . . . C ADDR 002BH NOT USED TL0. . . . . . . . . . . . . . . . . D ADDR 008AH NOT USED TL1. . . . . . . . . . . . . . . . . D ADDR 008BH NOT USED TL2. . . . . . . . . . . . . . . . . D ADDR 00CCH NOT USED TMOD . . . . . . . . . . . . . . . . D ADDR 0089H NOT USED TR0. . . . . . . . . . . . . . . . . B ADDR 008CH NOT USED TR1. . . . . . . . . . . . . . . . . B ADDR 008EH NOT USED TR2. . . . . . . . . . . . . . . . . B ADDR 00CAH NOT USED TXD. . . . . . . . . . . . . . . . . B ADDR 00B1H NOT USED WDTCON . . . . . . . . . . . . . . . D ADDR 00A7H NOT USED WDTPRG . . . . . . . . . . . . . . . D ADDR 00A7H NOT USED WDTRST . . . . . . . . . . . . . . . D ADDR 00A6H NOT USED WR . . . . . . . . . . . . . . . . . B ADDR 00B6H NOT USED