-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.lst
516 lines (479 loc) · 28.5 KB
/
main.lst
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
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
MPASM 5.31 MAIN.ASM 10-30-2022 17:45:23 PAGE 1
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00001
00002 ;***************************************************************************
00003 ; Programa main.asm (PIC16F628A) Fecha de inicio de proyecto: 04-10-2022
00004 ; Autor: Leandro N. Blandi
00005 ; Este programa simula las temperaturas de agua de un termotanque, desde
00006 ; 35°C hasta 70°C, generando 5 segundos de retardo después de cada limite
00007 ; implementando un registro CANILLA_ABIERTA que varia la velocidad de
00008 ; enfriamiento.
00009 ; - Velocidad del Reloj: 4MHz - Tipo de Reloj: Interno
00010 ; - Perro guardián: OFF - Protección de código: OFF
00011 ;***************************************************************************
00012
00013
00014 ;***************************************************************************
00015 ; Zona de datos
00016 ;***************************************************************************
00017
2007 3F10 00018 __CONFIG 3F10
00019 LIST P=16F628A
00020 INCLUDE <P16F628A.INC>
00001 LIST
00002 ; P16F628A.INC Standard Header File, Version 1.10 Microchip Technology, Inc.
00265 LIST
00266
00021 ERRORLEVEL -302
00022
00023
00024 ;***************************************************************************
00025 ; Zona de codigos
00026 ;***************************************************************************
00027
00028 CBLOCK 0X20 ; Reservamos una serie de direcciones de memoria para los alias
00029
00000020 00030 TEMP_ACT ; 0x20 Esta temperatura sera dinamica
00000021 00031 TEMP_MIN ; 0x21 Este servira como limite inferior
00000022 00032 TEMP_MAX ; 0x22 ''' ''' ''' ''' superior
00033
00000023 00034 CANILLA_ABIERTA ; 0x23 Este registro se ira complementando
00035
00000024 00036 CONTADOR1 ; 0x24 Registros para los retardos
00000025 00037 CONTADOR2 ; 0x25 '''
00000026 00038 CONTADOR3 ; 0x26 '''
00000027 00039 CONTADOR4 ; 0x27 '''
00040
00041 ENDC
00042
00043 ORG 0X00
00044
0000 2??? 00045 CALL CONFIGURAR_PUERTOS ; Configuramos los puertos de salida
MPASM 5.31 MAIN.ASM 10-30-2022 17:45:23 PAGE 2
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0001 2??? 00046 CALL CONFIGURAR_SENSORES ; Seteamos los valores iniciales de los 'sensore
s'
0002 2??? 00047 GOTO INICIO
00048
00049
00050 ;**************************************************************************
00051 ; Subrutina principal
00052 ;**************************************************************************
00053
0003 00054 INICIO
0003 09A3 00055 COMF CANILLA_ABIERTA,F ; Complementa el registro canilla
00056
0004 2??? 00057 CALL CALENTAR_AGUA ; Que el agua comience a calentarse hasta el maximo
0005 2??? 00058 CALL DELAY_5S ; Una vez que calienta el agua espera 5s
00059
0006 2??? 00060 CALL ENFRIAR_AGUA ; Que el agua empiece a enfriarse
0007 2??? 00061 CALL DELAY_5S ; Una vez que se enfria el agua espera 5s
00062
0008 2??? 00063 GOTO INICIO ; Volvemos a inicio, logrando un bucle infinito
00064
00065
00066 ;***************************************************************************
00067 ; Subrutina de configuracion de sensores
00068 ;***************************************************************************
00069
0009 00070 CONFIGURAR_SENSORES
0009 3019 00071 MOVLW D'25' ; Cargamos en W el valor inicial de la temperatura actua
l
000A 00A0 00072 MOVWF TEMP_ACT ; Cargamos el valor de W en la temperatura actual
00073
000B 3023 00074 MOVLW D'35' ; Cargamos en W el valor de la temperatura minima
000C 00A1 00075 MOVWF TEMP_MIN ; Cargamos el valor de W en la temperatura minima
00076
000D 3046 00077 MOVLW D'70' ; Cargamos en W el valor de la temperatura maxima
000E 00A2 00078 MOVWF TEMP_MAX ; Cargamos el valor de W en la temperatura maxima
00079
000F 01A3 00080 CLRF CANILLA_ABIERTA ; Que por defecto la canilla este 'cerrada'
00081
0010 0008 00082 RETURN
00083
00084
00085 ;***************************************************************************
00086 ; Subrutina que incrementa registro TEMP_ACT
*
00087 ;***************************************************************************
00088
0011 00089 CALENTAR_AGUA
0011 0820 00090 MOVFW TEMP_ACT ; Restamos TEMP_MAX - TEMP_ACT
0012 0222 00091 SUBWF TEMP_MAX,W ; Para cerciorarnos de que TEMP_ACT > TEMP_ACT
00092
0013 1803 00093 BTFSC STATUS,C ; Si TEMP_ACT > TEMP_MAX salta
0014 2??? 00094 CALL CALENTAR_AGUA_0 ; Si TEMP_ACT < TEM_MAX ejecuta CALENTAR_AGUA_0
MPASM 5.31 MAIN.ASM 10-30-2022 17:45:23 PAGE 3
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00095
0015 2??? 00096 CALL ENCENDER_LED_MAXIMO ; Que se encienda el LED para avisar que ya esta calient
e
00097
0016 0008 00098 RETURN
00099
00100
0017 00101 CALENTAR_AGUA_0
00102
0017 0AA0 00103 INCF TEMP_ACT,F ; Es como TEMP_ACT = TEMP_ACT + 1
0018 2??? 00104 CALL LED_RESISTENCIA_PRENDIDA
00105
0019 0820 00106 MOVFW TEMP_ACT ; Restamos TEMP_MAX - TEMP_ACT
001A 0222 00107 SUBWF TEMP_MAX,W ; Si son iguales, el Z del status tiene que ser
1
00108
001B 1D03 00109 BTFSS STATUS,Z ; Salta si STATUS,Z es 1
001C 2??? 00110 GOTO CALENTAR_AGUA_0 ; Si no llego que siga incrementando
00111
001D 0008 00112 RETURN
00113
00114
00115 ;***************************************************************************
00116 ; Subrutina que decrementa registro TEMP_ACT
00117 ;***************************************************************************
00118
001E 00119 ENFRIAR_AGUA
001E 0821 00120 MOVFW TEMP_MIN ; Verificamos que la temperatura actual sea mayor que
001F 0220 00121 SUBWF TEMP_ACT,W ; la minima mediante la resta W = TEMP_ACT - TEM
P_MIN
00122
0020 1803 00123 BTFSC STATUS,C ; Si la temperatura es menor que la minima, que salte
00124
0021 2??? 00125 CALL ENFRIAR_AGUA_0 ; Sino que decremente
0022 2??? 00126 CALL ENCENDER_LED_MINIMO ; Que se encienda el LED para avisar que se enfrio
00127
0023 0008 00128 RETURN
00129
0024 00130 ENFRIAR_AGUA_0
0024 03A0 00131 DECF TEMP_ACT,F ; Decrementamos la temperatura en 1
0025 2??? 00132 CALL LED_RESISTENCIA_APAGADA
00133
0026 1823 00134 BTFSC CANILLA_ABIERTA,0 ; Si la canilla esta abierta
0027 2??? 00135 CALL ENFRIAR_AGUA_MAS_RAPIDO ; Entonces que decremente de a 5
00136
0028 0821 00137 MOVFW TEMP_MIN ; Cargamos el regisro W con el valor de TEMP_ACT
0029 0220 00138 SUBWF TEMP_ACT,W ; Realizamos la resta entre la temperatura minim
a y la actual
00139
002A 1D03 00140 BTFSS STATUS,Z ; Si la temperatura es la minima que deje de decrementar
002B 2??? 00141 GOTO ENFRIAR_AGUA_0 ; Sino, que continue
00142
MPASM 5.31 MAIN.ASM 10-30-2022 17:45:23 PAGE 4
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
002C 0008 00143 RETURN
00144
00145
00146
00147
002D 00148 ENFRIAR_AGUA_MAS_RAPIDO
002D 3004 00149 MOVLW D'4' ; Cargamos el valor a decrementar
002E 02A0 00150 SUBWF TEMP_ACT,F ; Es como TEMP_ACT = TEMP_ACT - 4
002F 0008 00151 RETURN
00152
00153
00154 ;**************************************************************************
00155 ; Subrutinas de retardo
00156 ;**************************************************************************
00157
0030 00158 DELAY_1MS
0030 30FA 00159 MOVLW D'250' ; Cargamos el valor 250 en W
0031 00A4 00160 MOVWF CONTADOR1 ; Cargamos el valor de W en el primer contador
00161
0032 00162 RETARDO_1
0032 0000 00163 NOP
0033 0BA4 00164 DECFSZ CONTADOR1,F ; Decrementamos en 1 el primer contador
0034 2??? 00165 GOTO RETARDO_1 ; Repetimos la accion hasta que sea 0
0035 0008 00166 RETURN
00167
00168
0036 00169 DELAY_250MS
0036 30FA 00170 MOVLW D'250' ; Cargamos el valor 250 en W
0037 00A5 00171 MOVWF CONTADOR2 ; Cargamos el valor de W en el segundo contador
00172
0038 00173 RETARDO_2
0038 2??? 00174 CALL DELAY_1MS ; Esperamos 1 milisegundo por cada
0039 0BA5 00175 DECFSZ CONTADOR2,F ; decremento del segundo contador
003A 2??? 00176 GOTO RETARDO_2 ; Repetimos la accion hasta que sea 0
003B 0008 00177 RETURN
00178
00179
003C 00180 DELAY_1S
003C 3004 00181 MOVLW D'4' ; Cargamos el valor 4 en W
003D 00A6 00182 MOVWF CONTADOR3 ; Cargamos el valor de W en el tercer contador
00183
003E 00184 RETARDO_3
003E 2??? 00185 CALL DELAY_250MS ; Esperamos 250 milisegundos por cada
003F 0BA6 00186 DECFSZ CONTADOR3,F ; decremento del tercer contador (250ms x 4 = 1000ms)
0040 2??? 00187 GOTO RETARDO_3 ; Repetimos la accion hasta que sea 0
0041 0008 00188 RETURN
00189
0042 00190 DELAY_5S
0042 3005 00191 MOVLW D'5' ; Cargamos el valor 4 en W
0043 00A7 00192 MOVWF CONTADOR4 ; Cargamos el valor de W en el cuarto contador
00193
0044 00194 RETARDO_4
0044 2??? 00195 CALL DELAY_1S ; Esperamos 1 segundo por cada decremento
MPASM 5.31 MAIN.ASM 10-30-2022 17:45:23 PAGE 5
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0045 0BA7 00196 DECFSZ CONTADOR4,F ; del cuarto contador (1s x 5 = 5s)
0046 2??? 00197 GOTO RETARDO_4 ; Repetimos la accion hasta que sea 0
0047 0008 00198 RETURN
00199
00200
00201 ;**************************************************************************
00202 ; Subrutinas de configuracion de puertos
00203 ;**************************************************************************
00204
0048 00205 CONFIGURAR_PUERTOS
0048 1683 00206 BSF STATUS,RP0
0049 30F0 00207 MOVLW B'11110000' ; Seteamos RB0, RB1, RB2 como salida
004A 0086 00208 MOVWF TRISB ; En TRISB
004B 1283 00209 BCF STATUS,RP0
004C 0008 00210 RETURN
00211
00212
00213 ;**************************************************************************
00214 ; Subrutinas para encender LEDS
00215 ;**************************************************************************
00216
004D 00217 LED_RESISTENCIA_APAGADA
004D 1283 00218 BCF STATUS,RP0 ; Volvemos al banco 0 para gestionar PORTB
004E 1406 00219 BSF PORTB,0 ; Habilitamos RB0, es decir, prendemos el LED
004F 2??? 00220 CALL DELAY_250MS ; Retardo de 250ms
0050 1006 00221 BCF PORTB,0 ; Deshabilitamos RB0
0051 0008 00222 RETURN
00223
00224
0052 00225 ENCENDER_LED_MAXIMO
0052 1283 00226 BCF STATUS,RP0 ; Volvemos al banco 0 para gestionar PORTB
0053 1486 00227 BSF PORTB,1 ; Habilitamos el pin RB1, es decir, prendemos el LED
0054 2??? 00228 CALL DELAY_250MS ; Retardo de 250ms
0055 1086 00229 BCF PORTB,1 ; Deshabilitamos el pin RB1
0056 0008 00230 RETURN
00231
00232
0057 00233 LED_RESISTENCIA_PRENDIDA
0057 1283 00234 BCF STATUS,RP0 ; Volvemos al banco 0 para gestionar PORTB
0058 1506 00235 BSF PORTB,2 ; Habilitamos RB2, es decir prendemos el LED
0059 2??? 00236 CALL DELAY_250MS ; Retardo de 250ms
005A 1106 00237 BCF PORTB,2 ; Deshabilitamos RB2
005B 0008 00238 RETURN
00239
00240
005C 00241 ENCENDER_LED_MINIMO
005C 1283 00242 BCF STATUS,RP0 ; Volvemos al banco 0 para gestionar PORTB
005D 1586 00243 BSF PORTB,3 ; Habilitamos el pin RB2, es decir, prendemos el LED
005E 2??? 00244 CALL DELAY_250MS ; Retardo de 1 segundo
005F 1186 00245 BCF PORTB,3 ; Deshabilitamos el pin RB2
0060 0008 00246 RETURN
3F10 00247 END
MPASM 5.31 MAIN.ASM 10-30-2022 17:45:23 PAGE 6
SYMBOL TABLE
LABEL VALUE
ADEN 00000003
BRGH 00000002
C 00000000
C1INV 00000004
C1OUT 00000006
C2INV 00000005
C2OUT 00000007
CALENTAR_AGUA 00000011
CALENTAR_AGUA_0 00000017
CANILLA_ABIERTA 00000023
CCP1CON 00000017
CCP1IE 00000002
CCP1IF 00000002
CCP1M0 00000000
CCP1M1 00000001
CCP1M2 00000002
CCP1M3 00000003
CCP1X 00000005
CCP1Y 00000004
CCPR1H 00000016
CCPR1L 00000015
CIS 00000003
CM0 00000000
CM1 00000001
CM2 00000002
CMCON 0000001F
CMIE 00000006
CMIF 00000006
CONFIGURAR_PUERTOS 00000048
CONFIGURAR_SENSORES 00000009
CONTADOR1 00000024
CONTADOR2 00000025
CONTADOR3 00000026
CONTADOR4 00000027
CREN 00000004
CSRC 00000007
DC 00000001
DELAY_1MS 00000030
DELAY_1S 0000003C
DELAY_250MS 00000036
DELAY_5S 00000042
EEADR 0000009B
EECON1 0000009C
EECON2 0000009D
EEDATA 0000009A
EEIE 00000007
EEIF 00000007
ENCENDER_LED_MAXIMO 00000052
ENCENDER_LED_MINIMO 0000005C
ENFRIAR_AGUA 0000001E
ENFRIAR_AGUA_0 00000024
ENFRIAR_AGUA_MAS_RAPIDO 0000002D
F 00000001
MPASM 5.31 MAIN.ASM 10-30-2022 17:45:23 PAGE 7
SYMBOL TABLE
LABEL VALUE
FERR 00000002
FSR 00000004
GIE 00000007
INDF 00000000
INICIO 00000003
INTCON 0000000B
INTE 00000004
INTEDG 00000006
INTF 00000001
IRP 00000007
LED_RESISTENCIA_APAGADA 0000004D
LED_RESISTENCIA_PRENDIDA 00000057
NOT_BO 00000000
NOT_BOD 00000000
NOT_BOR 00000000
NOT_PD 00000003
NOT_POR 00000001
NOT_RBPU 00000007
NOT_T1SYNC 00000002
NOT_TO 00000004
OERR 00000001
OPTION_REG 00000081
OSCF 00000003
PCL 00000002
PCLATH 0000000A
PCON 0000008E
PEIE 00000006
PIE1 0000008C
PIR1 0000000C
PORTA 00000005
PORTB 00000006
PR2 00000092
PS0 00000000
PS1 00000001
PS2 00000002
PSA 00000003
RBIE 00000003
RBIF 00000000
RCIE 00000005
RCIF 00000005
RCREG 0000001A
RCSTA 00000018
RD 00000000
RETARDO_1 00000032
RETARDO_2 00000038
RETARDO_3 0000003E
RETARDO_4 00000044
RP0 00000005
RP1 00000006
RX9 00000006
RX9D 00000000
SPBRG 00000099
SPEN 00000007
MPASM 5.31 MAIN.ASM 10-30-2022 17:45:23 PAGE 8
SYMBOL TABLE
LABEL VALUE
SREN 00000005
STATUS 00000003
SYNC 00000004
T0CS 00000005
T0IE 00000005
T0IF 00000002
T0SE 00000004
T1CKPS0 00000004
T1CKPS1 00000005
T1CON 00000010
T1OSCEN 00000003
T2CKPS0 00000000
T2CKPS1 00000001
T2CON 00000012
TEMP_ACT 00000020
TEMP_MAX 00000022
TEMP_MIN 00000021
TMR0 00000001
TMR1CS 00000001
TMR1H 0000000F
TMR1IE 00000000
TMR1IF 00000000
TMR1L 0000000E
TMR1ON 00000000
TMR2 00000011
TMR2IE 00000001
TMR2IF 00000001
TMR2ON 00000002
TOUTPS0 00000003
TOUTPS1 00000004
TOUTPS2 00000005
TOUTPS3 00000006
TRISA 00000085
TRISB 00000086
TRMT 00000001
TX9 00000006
TX9D 00000000
TXEN 00000005
TXIE 00000004
TXIF 00000004
TXREG 00000019
TXSTA 00000098
VR0 00000000
VR1 00000001
VR2 00000002
VR3 00000003
VRCON 0000009F
VREN 00000007
VROE 00000006
VRR 00000005
W 00000000
WR 00000001
WREN 00000002
MPASM 5.31 MAIN.ASM 10-30-2022 17:45:23 PAGE 9
SYMBOL TABLE
LABEL VALUE
WRERR 00000003
Z 00000002
_BODEN_OFF 00003FBF
_BODEN_ON 00003FFF
_BOREN_OFF 00003FBF
_BOREN_ON 00003FFF
_CP_OFF 00003FFF
_CP_ON 00001FFF
_DATA_CP_OFF 00003FFF
_DATA_CP_ON 00003EFF
_ER_OSC_CLKOUT 00003FFF
_ER_OSC_NOCLKOUT 00003FFE
_EXTCLK_OSC 00003FEF
_HS_OSC 00003FEE
_INTOSC_OSC_CLKOUT 00003FFD
_INTOSC_OSC_NOCLKOUT 00003FFC
_INTRC_OSC_CLKOUT 00003FFD
_INTRC_OSC_NOCLKOUT 00003FFC
_LP_OSC 00003FEC
_LVP_OFF 00003F7F
_LVP_ON 00003FFF
_MCLRE_OFF 00003FDF
_MCLRE_ON 00003FFF
_PWRTE_OFF 00003FFF
_PWRTE_ON 00003FF7
_RC_OSC_CLKOUT 00003FFF
_RC_OSC_NOCLKOUT 00003FFE
_WDT_OFF 00003FFB
_WDT_ON 00003FFF
_XT_OSC 00003FED
__16F628A 00000001
__DEBUG 1
Errors : 0
Warnings : 0 reported, 0 suppressed
Messages : 0 reported, 1 suppressed