Está en la página 1de 9

...Micros\Laboratorio 2\Laboratorio2\Laboratorio2\main.

asm 1
1 ;
2 ; Laboratorio2.asm
3 ;CREADO POR:
4 ;Byron Londoño Quintana
5 ;Yeltsin Franco
6 ;Sebastian Paul Cordoba
7
8 ;PRACTICA DE LABORATORIO NUMERO 2
9
10 ;===========================================================================
============
11 ;DECLARACION DE VARIABLES
12 ;===========================================================================
============
13 .DEF Buz = R16 ;Variable para el ancho del pulso del buzzer
14 .DEF Entrada = R18 ;Variable para definir mascaras interrupciones
15 .DEF Salida = R19 ;Variable para definir ancho del pulso motor
16 .DEF Lectura = R20 ;Variable para definir ancho del pulso del
servomotor
17 .DEF IngredienteA = R21 ;Variable para la lectura del ingrediente A
18 .DEF IngredienteB= R22 ;Variable para la lectura del ingrediente B
19 ;===========================================================================
============
20 ; VECTORES DE INTERRUPCION
21 ;===========================================================================
============
22 .ORG 0x0000 ;Reset
23 RJMP Config
24
25 .ORG 0x0002 ;INT0 (Emergency Stop)
26 RJMP Stop
27
28 .ORG 0x0004 ;INT1 (Sensor 1)
29 RJMP Sensor1
30
31 .ORG 0x0006 ;PCINT4 (Power)
32 RJMP Inicio
33
34 .ORG 0x000A ;PCINT23 (Sensor 2)
35 RJMP Sensor2
36
37 .ORG 0x0012;Overflow para el timer2
38 RJMP Cambio
39 ;===========================================================================
==========================
40 ;CONFIGURACION DE PERIFERICOS , INTERRUPCIONES Y TIMERS
41 ;===========================================================================
==========================
42 Config:
43
44 LDI Entrada,0b01000000
45 OUT DDRD,Entrada ; Define el Puerto D como
entrada Y PD6 (MOTOR AGITADOR) como salida
...Micros\Laboratorio 2\Laboratorio2\Laboratorio2\main.asm 2
46 LDI Entrada,0b11101111
47 OUT DDRB,Entrada ; Define el Puerto PB1
(SERVOMOTOR) PB3(BUZZER) COMO SALIDAS, las demas salidas las
inicializo por que las voy a necesitar en 0 para utilizar una and
48 LDI Entrada,0b10111111
49 OUT DDRC,Entrada ;Define puerto PC4(OUTPUT
DIGITAL 1) Y PC5(OUTPUT DIGITAL 2) , las demas salidas las
inicializo por que las voy a necesitar en 0 para utilizar una and
50 ;Configuracion INT0 Y INT1
51 LDI Entrada, 0b00000011 ; Habilitación de INT0 y
INT1
52 OUT EIMSK,Entrada ; EIMSK
53 LDI Entrada, 0b0001111 ; Selecciona activación por
borde ascendente
54 STS EICRA,Entrada
55 LDI Entrada,0b00000010
56 STS EIFR,Entrada
57
58 ;Configuracion PCINT4 Y PCINT23
59 LDI Entrada, 0b00010000 ; Habilitación de PCINT4
(Puerto PB4)
60 STS PCMSK0,Entrada
61 LDI Entrada, 0b00000101 ;Habilitacion de PCEI0 Y
PCEI2
62 STS PCICR,Entrada
63 LDI Entrada, 0b00000000
64 STS PCIFR,Entrada
65
66 LDI Entrada, 0b10000000 ; Habilitación de PCINT23
(Puerto PD7)
67 STS PCMSK2,Entrada
68
69 ;CONDICIONES INICIALES
70
71 CBI PORTB,3 ;Buzzer apagado
72
73
74
75 ;Timer 1 Para Servomotor
76 LDI Entrada,0b10000010 ;Escojo el modo fast pwm
con un ICR1 como top
77 STS TCCR1A,Entrada ;Utilizo OC1A como
salida en modo no invertido
78
79 LDI Entrada,0b00011100 ;Escojo un prescaler de
256
80 STS TCCR1B,Entrada
81
82 LDI Entrada,77 ;Escojo un top de 77
83 STS ICR1L,Entrada
84
85 LDI Lectura,3 ;Servomotor estar en 0
grados
...Micros\Laboratorio 2\Laboratorio2\Laboratorio2\main.asm 3
86 STS OCR1AL,Lectura
87
88 ;Timer 0 Para motor agitador
89 LDI Entrada,0b10000011 ; Timer0 en modo fast
pwm
90 OUT TCCR0A,Entrada ; salida OC0A del Timer
0 en modo no invertido
91
92 LDI Entrada,0b00000111 ; Utilizo External
Oclock de 1.3 MHz
93 OUT TCCR0B,Entrada
94
95 OUT OCR0A,Salida ; Como condicion inicial
el motor tiene 0 ciclo util
96
97 SEI
98 ;===========================================================================
========================
99 ;BUCLE
100 ;===========================================================================
=======================
101 Loop:
102 NOP
103 RJMP Loop
104 ;===========================================================================
===========================
105 ;BOTON DE INICIO INTERRUPCION PRODUCIDA POR PCINT4
106 ;===========================================================================
===========================
107 Inicio:
108 ;Motor en 40% de ciclo util
109 LDI Entrada,0b10000011 ; Timer0 en modo fast
pwm
110 OUT TCCR0A,Entrada ; salida OC0A del Timer
0 en modo no invertido
111 LDI Entrada,0b00000111 ; Utilizo External
Oclock
112 OUT TCCR0B,Entrada
113 LDI Salida,102
114 OUT OCR0A,Salida ; Ciclo util pasa a ser
de 40%
115
116
117 ;Activo las salidas digitales
118 SBI PORTC,4 ;Activo la Output
Digital 1 (Entrada del Ingrediente A)
119 SBI PORTC,5 ;Activo la Output
Digital 2 (Entrada del Ingrediente B)
120
121 RETI
122
123
124 ;===========================================================================
...Micros\Laboratorio 2\Laboratorio2\Laboratorio2\main.asm 4
=================================
125 ;PARADA DE EMERGENCIA
126 ;===========================================================================
=================================
127 Stop:
128 ;Condicion para realizar el stop
129 INC R29
130 CPI R29,2
131 BREQ Parada
132
133 RETI
134 Parada:
135 ;Buzzer encendido Timer 2
136 LDI Entrada,0b10000001 ; Timer2 en modo PWM
137 STS TCCR2A,Entrada
138
139 LDI Entrada,0b0000111 ; Preescaler Timer2 en 1024
140 STS TCCR2B,Entrada
141
142 LDI Buz,129
143 STS OCR2A,Buz
144
145 ;Salidas digitales en cero
146 CBI PORTC,4 ;Desactivo la
salida OUTPUT DIGITAL 1
147 CBI PORTC,5 ;Desactivo la
salida OUTPUT DIGITAL 2
148
149 ;Motor en 0% Timer 0
150 LDI Entrada,0b10000011 ; Timer0 en modo
fast pwm
151 OUT TCCR0A,Entrada ; salida OC0A del
Timer 0 en modo no invertido
152
153 LDI Entrada,0b00000111 ; Utilizo External
Oclock de 1.3 MHz
154 OUT TCCR0B,Entrada
155 LDI Salida,0
156 OUT OCR0A,Salida ; Como condicion
inicial el motor tiene 0 ciclo util
157
158 ;Servomotor en la ultima posisicon Timer 1
159 LDI Entrada,0b10000010 ;Escojo el modo fast
pwm con un ICR1 como top
160 STS TCCR1A,Entrada ;Utilizo OC1A como
salida en modo no invertido
161
162 LDI Entrada,0b00011100 ;Escojo un prescaler
de 256
163 STS TCCR1B,Entrada
164
165 LDI Entrada,77 ;Escojo un top de 77
166 STS ICR1L,Entrada
...Micros\Laboratorio 2\Laboratorio2\Laboratorio2\main.asm 5
167 STS OCR1AL,Lectura
168
169 RETI
170 ;===========================================================================
===================================
171 ;LECTURA SENSOR DE PROXIMIDAD 1 RELACIONADO CON EL INGREDIENTE A
172 ;===========================================================================
===================================
173 Sensor1:
174
175 INC IngredienteA ;Incremento la
entrada del ingrediente A
176 CPI IngredienteA,2
177 BRBS 1,DesactivarA ;Si la condicion es
cierta el programa se dirige a una subrutina para desactivar la
salida
178
179
180 RETI
181
182 ;===========================================================================
====================================
183 ;LECTURA SENSOR DE PROXIMIDAD 2 RELACIONADO CON EL INGREDIENTE B
184 ;===========================================================================
====================================
185 Sensor2:
186
187 INC IngredienteB ; Incremento la
entrada del ingrediente B
188 CPI IngredienteB,1
189 BRBS 1,DesactivarB ;Si la condicion es
cierta el programa se dirige a una subrutina para desactivar la
salida
190
191 RETI
192
193 ;===========================================================================
========================================
194 ;SUBRUTINA PARA DESACTIVAR LA SALIDA OUTPUT DIGITAL 1 Y SE DECIDE SI EL
MOTOR PASA A 80 %
195 ;===========================================================================
========================================
196 DesactivarA:
197
198 CBI PORTC,4 ;Desactivo la salida
OUTPUT DIGITAL 1
199 IN Entrada,PORTC
200 ANDI Entrada,0b01110000 ;Con esta and
grantizo que el motor solo cambie su ciclo util cuando ambas
salidas digitales esten desactivadas osea sean 0
201 BRBS 1,CicloUtil
202 RETI
203 ;===========================================================================
...Micros\Laboratorio 2\Laboratorio2\Laboratorio2\main.asm 6
==========================================
204 ;SUBRUTINA PARA DESACTIVAR LA SALIDA OUTPUT DIGITAL 2 Y SE DECIDE SI EL
MOTOR PASA A 80 %
205 ;===========================================================================
===========================================
206 DesactivarB:
207
208 CBI PORTC,5 ;Desactivo la salida
OUTPUT DIGITAL 2
209 IN Entrada,PORTC
210 ANDI Entrada,0b01110000 ;Con esta and
grantizo que el motor solo cambie su ciclo util cuando ambas
salidas digitales esten desactivadas osea sean 0
211 BRBS 1,CicloUtil
212 RETI
213 ;===========================================================================
============================================
214 ;SUBRUTINA PARA CAMBIAR EL CICLO UTIL DEL MOTOR AGITADOR A 80% DE CICLO UTIL
215 ;===========================================================================
============================================
216 CicloUtil:
217 ;Motor en 80%
218 LDI Entrada,0b10000011 ; Timer0 en modo
fast pwm
219 OUT TCCR0A,Entrada ; salida OC0A del
Timer 0 en modo no invertido
220 LDI Entrada,0b00000111 ; Utilizo External
Oclock
221 OUT TCCR0B,Entrada
222 LDI Salida,205
223 OUT OCR0A,Salida ; Ciclo util pasa a
ser de 80%
224 LDI R26,120
225 LDI R27,90
226 RJMP Buzzer
227 RETI
228
229 ;===========================================================================
===========================================
230 ;ACTIVACION DEL BUZZER
231 ;===========================================================================
===========================================
232 Buzzer:
233
234 LDI Entrada,0b10000001 ; Timer2 en modo PWM
235 STS TCCR2A,Entrada
236
237 LDI Entrada,0b0000111 ; Preescaler Timer2 en 1024
238 STS TCCR2B,Entrada
239
240 LDI Entrada,0b00000001 ; Habilita la interrupción TOIE0
del Timer0
241 STS TIMSK2,Entrada
...Micros\Laboratorio 2\Laboratorio2\Laboratorio2\main.asm 7
242
243 LDI Buz,1
244 STS OCR2A,Buz
245
246 RETI
247
248 ;===========================================================================
===============================================
249 ;OVERFLOW EN TIMER 2 PARA PODER CONTAR 1 MINUTO
250 ;===========================================================================
===============================================
251 ;EL PERIODO DEL BUZZER ES DE 500 ms ESTO QUIERE DECIR QUE EL BUZZZER DEBE
DESBORDARSE 120 VECES PARA ALCANZAR EL MINUTO
252 Cambio:
253 INC R25
254 CP R25,R26
255 BRNE Buzzer
256 INC R26
257
258 LDI Entrada,0b10000001 ; Timer2 en modo PWM
259 STS TCCR2A,Entrada
260
261 LDI Entrada,0b0000111 ; Preescaler Timer2 en 1024
262 STS TCCR2B,Entrada
263
264 LDI Buz,129
265 STS OCR2A,Buz
266
267 LDI Entrada,0b10000011 ; Timer0 en modo fast
pwm
268 OUT TCCR0A,Entrada ; salida OC0A del Timer
0 en modo no invertido
269
270 LDI Entrada,0b00000111 ; Utilizo External
Oclock de 1.3 MHz
271 OUT TCCR0B,Entrada
272 LDI Salida,0
273 OUT OCR0A,Salida ; Como condicion inicial
el motor tiene 0 ciclo util
274
275 LDI Entrada,0b10000010 ;Escojo el modo fast pwm
con un ICR1 como top
276 STS TCCR1A,Entrada ;Utilizo OC1A como
salida en modo no invertido
277
278 LDI Entrada,0b00011100 ;Escojo un prescaler de
256
279
280 STS TCCR1B,Entrada
281
282 LDI Entrada,77 ;Escojo un top de 77
283 STS ICR1L,Entrada
284 LDI Lectura,7 ;Para 135 grados
...Micros\Laboratorio 2\Laboratorio2\Laboratorio2\main.asm 8

285 STS OCR1AL,Lectura ;Servomotor guarda la


posicion
286
287
288 RETI
289 ;===========================================================================
===========================================
290 ;SISTEMA REGRESA A CONDICIONES INCICIALES TRANSCURRIDO 45 SEGUNDOS
291 ;===========================================================================
===========================================
292 ;FALTA UNIR ESTA PARTE CON EL OVERFLOW PARA HACER EL CONTEO DE 45 SEGUNDOS
293 /* Fin:
294 INC R28
295 CP R28,R27
296 BRNE Cambio
297 INC R27
298 LDI Entrada,0b10000011 ; Timer0 en modo fast
pwm
299 OUT TCCR0A,Entrada ; salida OC0A del Timer
0 en modo no invertido
300
301 LDI Entrada,0b00000111 ; Utilizo External
Oclock de 1.3 MHz
302 OUT TCCR0B,Entrada
303 LDI Salida,0
304 OUT OCR0A,Salida ; Como condicion inicial
el motor tiene 0 ciclo util
305
306 LDI Entrada,0b10000010 ;Escojo el modo fast pwm
con un ICR1 como top
307 STS TCCR1A,Entrada ;Utilizo OC1A como
salida en modo no invertido
308
309 LDI Entrada,0b00011100 ;Escojo un prescaler de
256
310 STS TCCR1B,Entrada
311
312 LDI Entrada,77 ;Escojo un top de 77
313 STS ICR1L,Entrada
314
315 LDI Lectura,3 ;Servomotor estar en 0
grados
316 STS OCR1AL,Lectura
317
318 CBI PORTB,3 ;Buzzer apagado
319
320 RJMP Loop
321
322 RETI */
323 ;FIN DEL PROGRAMA
324 ;===========================================================================
====================================
...Micros\Laboratorio 2\Laboratorio2\Laboratorio2\main.asm 9
325
326
327
328

También podría gustarte