-
Notifications
You must be signed in to change notification settings - Fork 0
/
Led_Dimmer.asm
207 lines (197 loc) · 4.42 KB
/
Led_Dimmer.asm
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
ORG 00H
LJMP MAIN
ORG 40H
MAIN:
;=================================================================;
;=================================================================;
MOV TCON,#05H
MOV IE,#85H
MOV P1,#0FFH
MOV P2,#0FFH
MOV P2,#01000000B
CLR CY
MOV B,#5
MOV A,#0H
MOV R0,#0
MOV DPTR,#90H
;=================================================================;
;=================================================================;
MAIN_LOOP:
JMP @A+DPTR
LJMP MAIN_LOOP
;=================================================================;
; DISPLAY IS USED TO POWER THE 7-SEGMENT
;ALSO USED TO CALL CONTROL FUNCTIONS
;=================================================================;
DISPLAY:
MOV A,R0
MOV DPTR,#80H
MOVC A,@A+DPTR
MOV P2,A
MOV DPTR,#90H
RET
;=================================================================;
;BASIC DELAY FUNCTION 125 INST AS CRYSTAL FREQ 12MHz AND
;THE INSTRUCTION NEEDS TWO MACHINE CYCLE EQUALS TO 12 CLOCK PULSES
;SO BASIC DELAY IS 0.25ms AND FOR 8 LEVEL *2 MACHINE CYCLES
; THE PMW CYCLE SHOULD TAKE 4ms
;=================================================================;
DELAY:
MOV R7,#125
LP1:
DJNZ R7,LP1
RET
;===============================================================;
; EX INTERRUPT 0 P3.2
;===============================================================;
ORG 03H
CJNE R0,#8,CONT
RETI
CONT:
INC R0
ACALL DISPLAY
MOV A,R0
MUL AB
MOV B,#5
RETI
;==============================================================;
; EX INTERRUPT 1 P3.3
;==============================================================;
ORG 0013H
CJNE R0,#0,CONT2
RETI
CONT2:
DEC R0
ACALL DISPLAY
MOV A,R0
MUL AB
MOV B,#5
RETI
;=================================================================;
;=================================================================;
ORG 80H
LABEL: DB 01000000B,11111001B,10100100B,10110000B,10011001B,10010010B,10000010B,11111000B,10000000B
;=================================================================;
;=================================================================;
ORG 90H
ACALL LEVEL0
LJMP MAIN_LOOP
ACALL LEVEL1
LJMP MAIN_LOOP
ACALL LEVEL2
LJMP MAIN_LOOP
ACALL LEVEL3
LJMP MAIN_LOOP
ACALL LEVEL4
LJMP MAIN_LOOP
ACALL LEVEL5
LJMP MAIN_LOOP
ACALL LEVEL6
LJMP MAIN_LOOP
ACALL LEVEL7
LJMP MAIN_LOOP
ACALL LEVEL8
LJMP MAIN_LOOP
;=================================================================;
;============================:(===================================;
;=================================================================;
LEVEL0:
SETB P1.0
MOV R4,#8
LEVEL0_LOOP:
ACALL DELAY
DJNZ R4,LEVEL0_LOOP
RET
LEVEL1:
SETB P1.0
MOV R4,#7
LEVEL1_LOOP1:
ACALL DELAY
DJNZ R4,LEVEL1_LOOP1
CLR P1.0
MOV R4,#1
LEVEL1_LOOP2:
ACALL DELAY
DJNZ R4,LEVEL1_LOOP2
RET
LEVEL2:
SETB P1.0
MOV R4,#6
LEVEL2_LOOP1:
ACALL DELAY
DJNZ R4,LEVEL2_LOOP1
CLR P1.0
MOV R4,#2
LEVEL2_LOOP2:
ACALL DELAY
DJNZ R4,LEVEL2_LOOP2
RET
LEVEL3:
SETB P1.0
MOV R4,#5
LEVEL3_LOOP1:
ACALL DELAY
DJNZ R4,LEVEL3_LOOP1
CLR P1.0
MOV R4,#3
LEVEL3_LOOP2:
ACALL DELAY
DJNZ R4,LEVEL3_LOOP2
RET
LEVEL4:
SETB P1.0
MOV R4,#4
LEVEL4_LOOP1:
ACALL DELAY
DJNZ R4,LEVEL4_LOOP1
CLR P1.0
MOV R4,#4
LEVEL4_LOOP2:
ACALL DELAY
DJNZ R4,LEVEL4_LOOP2
RET
LEVEL5:
SETB P1.0
MOV R4,#3
LEVEL5_LOOP1:
ACALL DELAY
DJNZ R4,LEVEL5_LOOP1
CLR P1.0
MOV R4,#5
LEVEL5_LOOP2:
ACALL DELAY
DJNZ R4,LEVEL5_LOOP2
RET
LEVEL6:
SETB P1.0
MOV R4,#2
LEVEL6_LOOP1:
ACALL DELAY
DJNZ R4,LEVEL6_LOOP1
CLR P1.0
MOV R4,#6
LEVEL6_LOOP2:
ACALL DELAY
DJNZ R4,LEVEL6_LOOP2
RET
LEVEL7:
SETB P1.0
MOV R4,#1
LEVEL7_LOOP1:
ACALL DELAY
DJNZ R4,LEVEL7_LOOP1
CLR P1.0
MOV R4,#7
LEVEL7_LOOP2:
ACALL DELAY
DJNZ R4,LEVEL7_LOOP2
RET
LEVEL8:
CLR P1.0
MOV R4,#8
LEVEL8_LOOP2:
ACALL DELAY
DJNZ R4,LEVEL8_LOOP2
RET
;=================================================================;
END