Verga no recuerdo el enunciado a 100% pero era un ascensor Hijo de P…, que tenia varias forma de funcionamiento, hice como 5 versiones pero esta fue la mas explicita.
Hay versiones de menos lineas pero no estan comentadas pero basicamente cumplian el mismo proposito.
Este programa corre en el simulador AVSIMZ80
1: ; PROGRAMA # 4. INTERRUPCIONES
2: ; PREPARATIVOS DEL PROCESADOR PARA OPERAR BAJA INTERRUPCIONES
3: ; SE USA EL PUERTO B PARA MANEJAR LOS MOTORES DEL ASCENSOR
4: ; Y EL PUERTO A PARA LAS ENTRADAS DE LOS SENSORES DEL MODO Y EL
5: ; SENSOR DE PESO Y LA ALARMA ASOCIADO A ESTE ULTIMO
6: ; PUERTO A BIT 0 MODO 1
7: ; BIT 1 MODO 2
8: ; BIT 2 MODO 3
9: ; BIT 3 SENSOR DE PESO
10: ; BIT 7 ALARMA
11: ; LOS NIVELES DE ACTIVACION "1"
12: ORG 1000H
13: LD SP,3DFFH
14: LD A,35H ; VECTOR DE INTERRUPCIONES I
15: LD I,A
16: IM 2 ; MODO 2
17: LD A,0FH ; PUERTO B EN MODO 0
18: OUT (07H),A
19: LD A,11001111B ; PUERTO A EN MODO 3
20: OUT (06H),A
21: LD A,00001111B ;
22: OUT (06H),A
23: LD A,0 ; VECTOR DE INTERRUPCION DEL PUERTO
24: OUT (06H),A
25: LD A,10110111B ; PALABRA DE CONTROL
26: OUT (06H),A
27: LD A,11111000B ; PALABRA DE LA MASCARA
28: OUT (06H),A
29: WAIT: EI
30: HALT
31: JP WAIT
32:
33: ; LOS MODOS DE FUNCIONAMIENTO SE ANALIZARON DE LA SIGUIENTE
34: ;FORMA, PRIMERO SE VEIA CUANTAS PARADAS SE HACIAN POR COLUMNAS
35: ; Y DESPUES SE ANALIZARON LA DISTANCIA ENTRE CADA PARADA
36: ; DECLARANDOSE ESA INFORMACION EN LAS TABLAS
37:
38: MODO1: LD HL,EDIFICIO
39: LD IX,PARADA1
40: CALL INICIO
41: LD C,0
42: AQUI8: LD B,4
43: LD D,0
44: AQUI3: LD A,(IX)
45: CP D
46: CALL Z,DETENER1
47: AQUI: CALL ARRIBA
48: INC D
49: LD A,(IX)
50: CP D
51: CALL Z,DETENER1
52: DJNZ AQUI
53: LD A,C
54: CP 6
55: JP Z,DEVOLVER
56: INC C
57: CALL DERECHA
58: LD D,0
59: LD IX,PARADA1
60: LD B,4
61: AQUI2: CALL ABAJO
62: DJNZ AQUI2
63: CALL DERECHA
64: INC C
65: LD D,0
66: JP AQUI8
67: DEVOLVER: LD IX,PARADA1
68: INC IX
69: LD D,0
70: LD B,4
71: AQUI5: CALL ABAJO
72: INC D
73: LD A,(IX)
74: CP D
75: CALL Z,DETENER1
76: DJNZ AQUI5
77: LD A,C
78: CP 0
79: JP Z,FINAL
80: CALL IZQUIERDA
81: DEC C
82: LD D,0
83: LD IX,PARADA1
84: LD B,4
85: AQUI6: CALL ARRIBA
86: DJNZ AQUI6
87: CALL IZQUIERDA
88: DEC C
89: LD A,(IX)
90: CP D
91: CALL Z,DETENER1
92: LD B,4
93: JP AQUI5
94: DETENER1: INC IX
95: LD (HL),24H
96: CALL RETRASO
97: LD (HL),0
98: CALL VERIFP
99: RET
100: VERIFP: IN A,(04H)
101: BIT 3,A
102: JP Z,NADA
103: LD A,80H
104: OUT (04H),A
105: LD A,0
106: OUT (05H),A
107: LAZO: IN A,(04H)
108: BIT 3,A
109: JP NZ,LAZO
110: NADA: LD A,0
111: OUT (04H),A
112: RET
113: RETRASO: PUSH BC
114: LD B,50
115: AQUI4: NOP
116: DJNZ AQUI4
117: POP BC
118: RET
119: INICIO: LD B,32
120: AQUI7: INC HL
121: DJNZ AQUI7
122: RET
123: APAGAR: LD A,0
124: OUT (05H),A
125: RET
126: ABAJO: INC HL
127: INC HL
128: INC HL
129: INC HL
130: INC HL
131: INC HL
132: INC HL
133: INC HL
134: LD A,1
135: OUT (05H),A
136: RET
137: ; ESTOS INCREMENTOS Y DECREMENTOS SON LA CANTIDAD DE LOCALIDADES QUE TENGO QUE
138: ;DESPLAZARME PARA VISUALIZAR EN EL DUMP DEL AVSIMZ80 LA POSICION
139: ;ACTUAL DE ASCENSOR. POR CADA PISO QUE SE SUBA O SE BAJE,
140: ; REPRESENTA OCHO DESPLAZAMIENTOS EN LA MEMORIA
141: ARRIBA: DEC HL
142: DEC HL
143: DEC HL
144: DEC HL
145: DEC HL
146: DEC HL
147: DEC HL
148: DEC HL
149: LD A,2
150: OUT (05H),A
151: RET
152: IZQUIERDA: DEC HL
153: LD A,40H
154: OUT (05H),A
155: RET
156: DERECHA: INC HL
157: LD A,80H
158: OUT (05H),A
159: RET
160: FINAL: CALL APAGAR
161: RETI
162:
163: ; RUTINA DE SERVICIO DEL PUERTO, SE TOMARAN ACCIONES DEPENDIENDO
164: ; DE QUE BIT INTERRUMPIO.
165: ORG 1500H
166: IN A,(04H)
167: BIT 0,A
168: JP NZ,MODO1
169: BIT 1,A
170: JP NZ,MODO2
171: JP MODO3
172:
173: MODO3: LD HL,EDIFICIO
174: LD IX,PARADA3
175: CALL INICIO
176: LD B,4
177: LD C,0
178: LD D,0
179: LD A,(IX)
180: CP D
181: CALL Z,DETENER1
182: BAQUI: CALL ARRIBA
183: INC D
184: LD A,(IX)
185: CP D
186: CALL Z,DETENER1
187: DJNZ BAQUI
188: CALL DERECHA
189: INC C
190: LD B,4
191: LD D,0
192: LD IX,PARADA3
193: LD A,(IX)
194: CP D
195: CALL Z,DETENER1
196: BAQUI2: CALL ABAJO
197: INC D
198: LD A,(IX)
199: CP D
200: CALL Z,DETENER1
201: DJNZ BAQUI2
202: CALL DERECHA
203: INC C
204: LD B,4
205: LD D,0
206: LD IX,PARADA4
207: LD A,(IX)
208: CP D
209: CALL Z,DETENER1
210: BAQUI3: CALL ARRIBA
211: INC D
212: LD A,(IX)
213: CP D
214: CALL Z,DETENER1
215: DJNZ BAQUI3
216: CALL DERECHA
217: INC C
218: LD B,4
219: LD D,0
220: LD IX,PARADA4
221: LD A,(IX)
222: CP D
223: CALL Z,DETENER1
224: BAQUI4: CALL ABAJO
225: INC D
226: LD A,(IX)
227: CP D
228: CALL Z,DETENER1
229: DJNZ BAQUI4
230: CALL DERECHA
231: INC C
232: LD B,4
233: LD D,0
234: LD IX,PARADA3
235: LD A,(IX)
236: CP D
237: CALL Z,DETENER1
238: BAQUI5: CALL ARRIBA
239: INC D
240: LD A,(IX)
241: CP D
242: CALL Z,DETENER1
243: DJNZ BAQUI5
244: CALL DERECHA
245: INC C
246: LD B,4
247: LD D,0
248: LD IX,PARADA3
249: LD A,(IX)
250: CP D
251: CALL Z,DETENER1
252: BAQUI6: CALL ABAJO
253: INC D
254: LD A,(IX)
255: CP D
256: CALL Z,DETENER1
257: DJNZ BAQUI6
258: CALL DERECHA
259: INC C
260: LD B,4
261: LD D,0
262: LD IX,PARADA4
263: LD A,(IX)
264: CP D
265: CALL Z,DETENER1
266: BAQUI7: CALL ARRIBA
267: INC D
268: LD A,(IX)
269: CP D
270: CALL Z,DETENER1
271: DJNZ BAQUI7
272: CALL DERECHA
273: INC C
274: LD B,4
275: LD D,0
276: LD IX,PARADA4
277: LD A,(IX)
278: CP D
279: CALL Z,DETENER1
280: BAQUI8: CALL ABAJO
281: INC D
282: LD A,(IX)
283: CP D
284: CALL Z,DETENER1
285: DJNZ BAQUI8
286: LD B,4
287: LD D,0
288: LD IX,PARADA3
289: INC IX
290: LD A,(IX)
291: CP D
292: CALL Z,DETENER1
293: BAQUI9: CALL ARRIBA
294: INC D
295: LD A,(IX)
296: CP D
297: CALL Z,DETENER1
298: DJNZ BAQUI9
299: CALL IZQUIERDA
300: DEC C
301: LD B,4
302: LD D,0
303: LD IX,PARADA3
304: LD A,(IX)
305: CP D
306: CALL Z,DETENER1
307: BAQUI10: CALL ABAJO
308: INC D
309: LD A,(IX)
310: CP D
311: CALL Z,DETENER1
312: DJNZ BAQUI10
313: CALL IZQUIERDA
314: DEC C
315: LD B,4
316: LD D,0
317: LD IX,PARADA4
318: LD A,(IX)
319: CP D
320: CALL Z,DETENER1
321: BAQUI11: CALL ARRIBA
322: INC D
323: LD A,(IX)
324: CP D
325: CALL Z,DETENER1
326: DJNZ BAQUI11
327: CALL IZQUIERDA
328: DEC C
329: LD B,4
330: LD D,0
331: LD IX,PARADA4
332: LD A,(IX)
333: CP D
334: CALL Z,DETENER1
335: BAQUI12: CALL ABAJO
336: INC D
337: LD A,(IX)
338: CP D
339: CALL Z,DETENER1
340: DJNZ BAQUI12
341: CALL IZQUIERDA
342: DEC C
343: LD B,4
344: LD D,0
345: LD IX,PARADA3
346: LD A,(IX)
347: CP D
348: CALL Z,DETENER1
349: BAQUI13: CALL ARRIBA
350: INC D
351: LD A,(IX)
352: CP D
353: CALL Z,DETENER1
354: DJNZ BAQUI13
355: CALL IZQUIERDA
356: DEC C
357: LD B,4
358: LD D,0
359: LD IX,PARADA3
360: LD A,(IX)
361: CP D
362: CALL Z,DETENER1
363: BAQUI14: CALL ABAJO
364: INC D
365: LD A,(IX)
366: CP D
367: CALL Z,DETENER1
368: DJNZ BAQUI14
369: CALL IZQUIERDA
370: DEC C
371: LD B,4
372: LD D,0
373: LD IX,PARADA4
374: LD A,(IX)
375: CP D
376: CALL Z,DETENER1
377: BAQUI15: CALL ARRIBA
378: INC D
379: LD A,(IX)
380: CP D
381: CALL Z,DETENER1
382: DJNZ BAQUI15
383: CALL IZQUIERDA
384: DEC C
385: LD B,4
386: LD D,0
387: LD IX,PARADA4
388: LD A,(IX)
389: CP D
390: CALL Z,DETENER1
391: BAQUI16: CALL ABAJO
392: INC D
393: LD A,(IX)
394: CP D
395: CALL Z,DETENER1
396: DJNZ BAQUI16
397: JP FINAL
398:
399: MODO2: LD HL,EDIFICIO
400: LD IX,PARADA2
401: CALL INICIO
402: LD B,4
403: LD C,0
404: AAQUI2: CALL ARRIBA
405: DJNZ AAQUI2
406: CALL DERECHA
407: INC C
408: AAQUI8: LD B,4
409: LD D,0
410: AAQUI3: LD A,(IX)
411: CP D
412: CALL Z,DETENER1
413: AAQUI: CALL ABAJO
414: INC D
415: LD A,(IX)
416: CP D
417: CALL Z,DETENER1
418: DJNZ AAQUI
419: LD A,C
420: CP 7
421: JP Z,ADEVOLVER
422: INC C
423: CALL DERECHA
424: LD D,0
425: LD IX,PARADA2
426: LD B,4
427: JP AAQUI2
428: ADEVOLVER: LD IX,PARADA2
429: INC IX
430: LD D,0
431: LD B,4
432: AAQUI5: CALL ARRIBA
433: INC D
434: LD A,(IX)
435: CP D
436: CALL Z,DETENER1
437: DJNZ AAQUI5
438: CALL IZQUIERDA
439: DEC C
440: LD D,0
441: LD IX,PARADA2
442: LD B,4
443: AAQUI6: CALL ABAJO
444: DJNZ AAQUI6
445: LD A,C
446: CP 0
447: JP Z,FINAL
448: CALL IZQUIERDA
449: DEC C
450: LD A,(IX)
451: CP D
452: CALL Z,DETENER1
453: LD B,4
454: JP AAQUI5
455:
456: ORG 3500H
457: DW 1500H
458:
459: ORG 0000H
460: PARADA1 DB 0,4
461: ; AQUI DIGO QUE EN EL MODO1 HAY PARADAS
462: ; EN EL PISO 0 Y PISO 4. ES DECIR QUE HAY UNA DISTANCIA DE 4
463: ; PISOS POR PARADA Y QUE HAY DOS PARADAS EN LAS COLUMNAS PARES
464: PARADA2 DB 0,2,4
465: ; AQUI DE IGUAL FORMA SE DICE QUE HAY PARA EN PB, PISO 2 Y PISO
466: ; 4. HAY UNA DISTANCIA DE 2 PISOS POR PARADA. HAY TRES PARADAS EN
467: ;LAS COLUMNAS IMPARES
468: PARADA3 DB 0,2
469: PARADA4 DB 2,4
470:
471: ORG 0500H
472: EDIFICIO DS 40
473: ; PARA VISUALIZAR EL EDIFICIO EL DUMP 1 DEBE TENER COMO
474: ; DIRECCION INICIAL 0500H Y Y EL DUMP 2 DEBE TENER COMO DIRECCION
475: ; INICAL LA 0520H
476: END
No hay comentarios:
Publicar un comentario