1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318
|
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
|