Este programa emula el comportamiento de un ascensor, no tengo el enunciado pero el movimiento del mismo depende del modo seleccionado. Si mal no recuerdo era estacionamiento macanico pero no estoy 100% seguro de eso.
1: ORG 2000H
2: LD SP,3DFFH
3: LD A,00001111B
4: OUT (CA),A
5: LD A,11001111B
6: OUT (CB),A
7: LD A,00000111B
8: OUT (CB),A
9: LD IX,CONT
10: PUERTO: IN A,(PB)
11: BIT 2,A
12: JP NZ,ENTRAR
13: BIT 1,A
14: JP NZ,SALIR
15: JP PUERTO
16: ENTRAR: LD HL,PUESTOS
17: LD A,01000000B
18: OUT (PA),A
19: AQUI: IN A,(PB)
20: BIT 2,A
21: JP NZ,AQUI
22: LD A,0
23: OUT (PA),A
24: LD D,38H
25: AQUI1: LD A,0
26: CP (HL)
27: JP Z,VACIO
28: INC HL
29: DEC D
30: LD A,D
31: CP 0
32: JP Z,LLENO
33: AND 0FH
34: CP 0
35: JP NZ,AQUI1
36: LD A,D
37: SUB 08
38: LD D,A
39: JP AQUI1
40: LLENO: LD A,(PB)
41: SET 3,A
42: OUT (PB),A
43: JP AQUI8
44: VACIO: LD A,D
45: AND 0FH
46: LD C,A
47: LD A,D
48: AND 0F0H
49: RRCA
50: RRCA
51: RRCA
52: RRCA
53: LD B,A
54: LD (HL),24H
55: DEC (IX)
56: PUSH BC
57: DEC C
58: LD A,C
59: OUT (PA),A
60: POP BC
61: PUSH BC
62: AQUI2: CALL IZQUIERDA
63: DEC C
64: JP NZ,AQUI2
65: CALL APAGAR
66: AQUI3: IN A,(PB)
67: BIT 0,A
68: JP Z,AQUI3
69: AQUI4: CALL SUBIR
70: DJNZ AQUI4
71: CALL AVANZAR
72: CALL APAGAR
73: AQUI5: IN A,(PB)
74: BIT 0,A
75: JP NZ,AQUI5
76: CALL RETROCEDER
77: POP BC
78: AQUI6: CALL DERECHA
79: DEC C
80: JP NZ,AQUI6
81: AQUI7: CALL ABAJO
82: DJNZ AQUI7
83: CALL APAGAR
84: LD A,(IX)
85: CP 0
86: JP NZ,PUERTO
87: IN A,(PB)
88: SET 3,A
89: OUT (PB),A
90: AQUI8: IN A,(PB)
91: BIT 1,A
92: JP Z,AQUI8
93: SALIR: LD HL,PUESTOS
94: LD IY,DESPLAZA
95: LD B,32
96: LD A,0
97: AQUI10: NOP
98: NOP
99: NOP
100: CP 0
101: JP Z,AQUI10
102: AQUI12: CP (IY)
103: JP Z,AQUI11
104: INC IY
105: INC IY
106: DJNZ AQUI12
107: JP SALIR
108: AQUI11: LD B,(IY+1)
109: LD A,B
110: CP 0
111: JP Z,AQUI22
112: AQUI13: INC HL
113: DJNZ AQUI13
114: AQUI22: LD A,(IY)
115: LD D,A
116: LD A,(HL)
117: CP 24H
118: JP NZ,PUERTO
119: LD A,D
120: AND 0FH
121: LD C,A
122: LD A,D
123: AND 0F0H
124: RLCA
125: RLCA
126: RLCA
127: RLCA
128: LD B,A
129: PUSH BC
130: AQUI14: CALL SUBIR
131: DJNZ AQUI14
132: LD B,C
133: AQUI15: CALL IZQUIERDA
134: DJNZ AQUI15
135: CALL AVANZAR
136: CALL APAGAR
137: AQUI16: IN A,(PB)
138: BIT 0,A
139: JP Z,AQUI16
140: LD (HL),0
141: INC (IX)
142: CALL RETROCEDER
143: POP BC
144: AQUI17: CALL ABAJO
145: DJNZ AQUI17
146: CALL APAGAR
147: AQUI18: IN A,(PB)
148: BIT 0,A
149: JP NZ,AQUI18
150: LD B,C
151: AQUI19: CALL DERECHA
152: DJNZ AQUI19
153: CALL APAGAR
154: AQUI20: IN A,(PB)
155: BIT 1,A
156: JP Z,AQUI20
157: IN A,(PA)
158: SET 7,A
159: OUT (PA),A
160: AQUI21: IN A,(PB)
161: BIT 1,A
162: JP NZ,AQUI21
163: LD A,0
164: OUT (PA),A
165: RES 3,A
166: OUT (PB),A
167: JP PUERTO
168: APAGAR: LD A,0
169: OUT (PA),A
170: RET
171: AVANZAR: LD A,00001000B
172: OUT (PA),A
173: RET
174: RETROCEDER: LD A,00010000B
175: OUT (PA),A
176: RET
177: IZQUIERDA: LD A,00011000B
178: OUT (PA),A
179: RET
180: DERECHA: LD A,00100000B
181: OUT (PA),A
182: RET
183: SUBIR: LD A,00101000B
184: OUT (PA),A
185: RET
186: ABAJO: LD A,00110000B
187: OUT (PA),A
188: RET
189:
190: ORG 1000H
191: PUESTOS DS 32
192: DESPLAZA DB 01H,31,02H,30,03H,29,04H,28,05H,27,06H,26,07H,25,08H,24
193: DB 11H,23,12H,22,13H,21,14H,20,15H,19,16H,18,17H,17,18H,16
194: DB 21H,15,22H,14,23H,13,24H,12,25H,11,26H,10,27H,09,28H,08
195: DB 31H,07,32H,06,33H,05,34H,04,35H,03,36H,02,37H,01,38H,00
196: CONT DB 32
197: PA EQU 04H
198: PB EQU 05H
199: CA EQU 06H
200: CB EQU 07H
201: END
No hay comentarios:
Publicar un comentario