control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris
Post on 15-Apr-2017
214 Views
Preview:
TRANSCRIPT
+ La comunicación por el puerto Serie permite ver los valores en el ORDENADOR si así lo deseamos al accionar el conmutador.
+ Se pueden modificar los valores de temperatura mínima y máxima de cada sensor desde el PC, para así mantener una histérisis de accionamiento de la salida correspondiente y poder adaptarlo a cualquier condición de trabajo que necesitemos.
+ Los sensores “DS1621” leen desde (‐55ºC a + 125ºC) con una apreciación de 0,5 ºC.
El programa está preparado también para aceptar los sensores “DS1624”, cuya apreciación es de 0,1ºC. (Estos no se usan por ser muy caros)
ESQUEMA ELECTRÓNICO : en PROTEUS y en EAGLE.
Diseño placa Control de 8 sensores de
temperatura “DS1621” por bus I2C (Joaquín Berrocal Piris)
PLACA DE LOS SENSORES DE TEMPERATURA “DS1621” SOBRE EL MACH3
REALIZACIÓN de la PLACA DE LOS SENSORES con la Máquina de Control Numérico (CNC)
CONSTRUCCIÓN DE LA PLACA DEL CONTROL DE TEMPERATURA CON 8 SENSORES “ DS 1621” Proyecto realizado por : JOAQUÍN BERROCAL PIRIS ( Nov 2010 a Marzo 2011)
RESULTADO FINAL DE FRESADO CON LA (CNC)
IMÁGENES VARIAS DE LA PLACA CONTROLADORA
MONTAJE DE COMPONENTES
PRIMERAS PRUEBAS
PLACA CON EL TRANSFORMADOR DE 220V/ 9V. y los 8 sensores
SCLSDA
SCLSDA
SCLSDA
GND
SCLSDA
GND
SCLSDA
SCLSDA
SCLSDA
GND
GND
GND
GND
SDASCL
GND
RB4RB5RB6RB7
RA0RA2
SCLSDA
SCLSDA
RA1_TX_PICRA5_RD_PIC
RB0 RB0
RB1
RB1
RA1_TX_PIC
RA5_RD_PIC
RA0
RA2
RB7
RB6
RB5
RB4
9.5
SCL 2
SDA 1
A0 7
TOUT3
A1 6
A2 5
U1
DS1621
20.0
SCL 2
SDA 1
A0 7
TOUT3
A1 6
A2 5
U2
DS1621
29.0
SCL 2
SDA 1
A0 7
TOUT3
A1 6
A2 5
U3
DS1621
40.0
SCL 2
SDA 1
A0 7
TOUT3
A1 6
A2 5
U4
DS1621
49.0
SCL 2
SDA 1
A0 7
TOUT3
A1 6
A2 5
U5
DS1621
60.0
SCL 2
SDA 1
A0 7
TOUT3
A1 6
A2 5
U6
DS1621
69.0
SCL 2
SDA 1
A0 7
TOUT3
A1 6
A2 5
U7
DS1621
80.0
SCL 2
SDA 1
A0 7
TOUT3
A1 6
A2 5
U8
DS1621
R34k7
R44k7
Diseñado por : Joaquín Berrocal Piris
Control de 8 Sensores de Temperatura DS1624 ó DS1621 por Bus I2CMarzo 2011 www.iesccp.comze.com/index.php
Empiezan a aparecer las Temperaturas a los 13 sgs.
RA0/AN02
RA1/AN13
RA2/AN2/VREF-/CVREF4
RA4/T0CKI/C1OUT6
RA5/AN4/SS/C2OUT7
OSC1/CLKIN9
OSC2/CLKOUT10
RC1/T1OSI/CCP2 12
RC2/CCP1 13
RC3/SCK/SCL 14
RB7/PGD 28RB6/PGC 27RB5 26RB4 25RB3/PGM 24RB2 23RB1 22RB0/INT 21
RC7/RX/DT 18RC6/TX/CK 17RC5/SDO 16RC4/SDI/SDA 15
RA3/AN3/VREF+5
RC0/T1OSO/T1CKI 11
MCLR/Vpp/THV1
U10
PIC16F876A
12345678
2019181716151413
910
1211
U11
LED-BARGRAPH-GRN
R2350350350350350350350350
R1110k
(+) valores al PC para configurar
(-) sólo al LCD no hay comunicación con el PC
100
10k
R1410k
Mantener pulsado para
desde el PC configurar
las TempMin , TempMax y el Tiempo de Muestreo
RXD
RTS
TXD
CTS
NOTA:El "DS1621" tienen una apreciación de SÓLO 0.5º
por ello, le pongo a su propiedad "granularity" 0.5
Los "DS1624" SÍ tienen una apreciación de 0.03125ºPERO el "PROTEUS" SÓLO tiene el "DS1621"
Ver NOTA en "Desing>Edit Desing Notes..."
SENSOR "DS1621" Apreciación -> 0.5º
PUERTO SERIE
( HIPERTERMINAL )
D7
14D
613
D5
12D
411
D3
10D
29
D1
8D
07
E6
RW
5R
S4
VS
S1
VDD
2
VE
E3
LCD1LM044L LCD 4X20 (4 LÍNEAS x 20 CARACTERES)
R1510k
PONGO RB3/PGM a PULL-UP. Para evitar se reinicieal acercar el dedo a RB3/PGM
Reset
11/01/2012 10:08:16 f=0.71 C:\MIS PROYECTOS\PROYECTOS TEMPERATURA OK\ARCHIVOS CNC Y EAGLE SENSORES DS1621 PARA LCD\CNC 3 PASADAS 100X108para 0,4 mm\Sensor_Temperatura_DS1621.sch (Sheet: 1/1)
RESET
RA
0R
A2
RB
4R
B5
RB
6R
B7 +
LED
VS
SV
DD
VE
ER
SR
WE D
0D
1D
2D
3D
4D
5D
6D
7
RB7RB6RB5RB4
RC7RC6RC5RC4
RC
3R
C2
RC
1R
C0
LCD 4X16 ó LCD 4X20
Comandos para situar el cursor en el Inicio de LíneaLCD 4X16
Línea1; 0x 80 b'1000 0000'Línea 2; 0x C0 b'1100 0000'Línea3; 0x 90 b'1001 0000'Línea4; 0x D0 b'1101 0000'
Línea 1 0x 80 b'1000 0000'Línea 2; 0x C0 b'1100 0000'Línea 3; 0x 94 b'1001 0100'Línea 4; 0x D4 b'1101 0100'
LCD 4X20
CONEXIÓN SENSORES TEMPERATURA "DS1621 ó DS1624"
SDA-RA4SCL-RA3
SDA-RA4
SDA-RA4
SDA-RA4
SCL-RA3
SCL-RA3
SC
L-R
A3
SD
A-R
A4
Mantener Pulsado paradesde el PC configurarlas TempMin,TempMax
RC
0
RC
7
SDA-RA4SCL-RA3
SDA-RA4
SDA-RA4
SDA-RA4
SCL-RA3
SCL-RA3
RB1 y el Tiempo de Muestreo
RB0
RB
1R
B0
RB
1
(+) Valores al PC para configurar(-) Solo al LCD NO Comunica con PC
RA5_RD_PIC
RA1_TX_PIC
RS
232
En
el E
AG
LE: C
on-s
ubd
F09H
P
Pat
illa
3: T
xD
Pat
illa
2: R
xD
RxDTxD
(+ 16) y (- 15)
SD
A-R
A4
SC
L-R
A3
RA
0R
A1_
TX_P
IC
RA
5_R
D_P
ICR
A2
BUS I2C
BU
S I2
C
RB0RB1
Realizado con "Invoque"
ON +
OFF (-)
Salidas; Activadas si los Sensores 1 al 8superan la temperatura establecidaLed1 se activa si Sensor 1 está entre su TempMin y TempMax establecida.
La histérisis de activación es de Abajo arriba, es decir,Led1 estará activo si la temperatura a ascendidodesde la TempMi a la TempMax
pero no se activará si estaba por encima de la TempMax hasta que baje de la TempMin y vuelva a ascender
Y así con todos los demás Sensores y Leds.
EAGLE;(EI42-1)-->TRANSF ENCAPSULADO :(TR9V6VA)
220 VOLT ALTERNA
9 V
OL
CC
6VA
Puentes para utilizar o noel transformador como alimentación
>=9 Vcc
Tx el Pic Transmite "Rojo"
Rx el Pic Recibe "Verde"
LEDS de 3 mm
(SDA)(SCL)
(-)(+)
Pull Up RB3.Evita se reiniciatocar patilla RB3
MC
LR-R
ES
ET
MCLR-RESET
PIC16876P
>= 9 VCC
400
220 uF 220 uF
GND
+5V
+12V
4 M
HZ
15 p
F15
pF
400
400
400
400
400
400
400
GND
100
10K
+5V
GND
GND
470 k
+5V
GND
GND
+5V
+5V
4K7
4K7
+5V
GND
GND
+5V
GND
10K
10K
+5V
GND
GND
MAX232
1 uF
1 uF
1 uF
1 uF
100n
GND
+5V
GN
D
+5V
GND
TL36PO
1K
220 VAC
470
470
+5V
10K
+5V
MCLR/THV1
RA0/AN02
RA1/AN13
RA2/AN24
RA3/AN35
RA4/T0CKI6
RA5/AN47
OSC1/CLKIN9
OSC2/CLKOUT10
RC0/T1OSO11
RC1/T1OSI12
RC2/CCP113
RC3/SCK14
SDI/RC4 15SDO/RC5 16RC6 17RC7 18
820
INT/RB0 21RB1 22RB2 23PGM/RB3 24RB4 25RB5 26PGC/RB6 27PGD/RB7 28
19
IC1VDD
VSS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16JP1
3 124
S1
3 124
S4
X1-1
X1-2
IC2GND
IN OUT
LED
1
R1
C1 C2
Q1
C3
C4
LED
2
LED
3
LED
4
LED
5
LED
6
LED
7
LED
8
R2
R3
R4
R5
R6
R7
R8
123456789
10111213141516
JP2
R9
R10
C5
12345678 JP3
R11
R12
123456789
10111213141516
JP4
R13
R14
16 27 38 49 5
X2
C1+1
C1-3
C2+4
C2-5
T1IN11
T2IN10
R1OUT12
R2OUT9
V+ 2
V- 6
T1OUT 14
T2OUT 7
R1IN 13
R2IN 8
IC4
1615
GN
DVC
C
IC4P
C7
C8
C9
C10
C11
23
1
S3
LED
9
1
57
9
TR1
1 2
JP5
12 JP6
X3-1
X3-2
LED10 R16
LED11 R17
R18
Autor: Joaquín Berrocal Piris
+ ++
+
++
PR
I
SE
C
In 0
I/O 0
I/O 0
I/O 0
I/O 0
I/O 0
I/O 0
In 0
Out 0
I/O 0
I/O 0
I/O 0
I/O 0
I/O 0
I/O 0
I/O 0
I/O 0
Pw
r 0
Pw
r 0
I/O 0
I/O 0
I/O 0
I/O 0
I/O 0
I/O 0
I/O 0
I/O 0
Pw
r 0
Pas
0
Pas
0
Pas
0
Pas
0
Pas
0
Pas
0
Pas
0
Pas
0
Pas
0
Pas
0
Pas
0
Pas
0
Pas
0
Pas
0
Pas
0
Pas
0
Pas 2 Pas 1
Pas 1Pas 2
Pas 2 Pas 1
Pas 1Pas 2
Pas 0
Pas 0
In 0
In 0
Pas 0
Pas
0P
as 0
Pas
1P
as 1
Pas
0P
as 0
Pas
0P
as 0
Sup
0
Sup
0
Sup
0
Pas
1P
as 1
12
Pas 1 Pas 1
Pas 1 Pas 1
Pas
0P
as 0
Pas
0P
as 0
Pas
0P
as 0
Pas
0P
as 0
Pas
0P
as 0
Pas
0P
as 0
Pas
0P
as 0
Pas
1P
as 1
Pas
1P
as 1
Pas
1P
as 1
Pas
1P
as 1
Pas
1P
as 1
Pas
1P
as 1
Pas
1P
as 1
Sup
0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas
1P
as 1
Pas
1P
as 1Sup
0
Sup
0
Sup
0
Pas
1P
as 1
Sup
0
Sup
0
Sup
0
Sup
0
Pas
0
Pas
0
Pas
0
Pas
0
Pas
0
Pas
0
Pas
0
Pas
0
Sup
0
Pas
1P
as 1
Pas
1P
as 1
Sup
0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Pas 0
Sup
0
Sup
0S
up 0
Sup
0
Pas
1P
as 1
Pas
1P
as 1
Sup
0
Sup
0
Pas 0
Pas 0 Pas 0
Pas 0 Pas 0
Pas 0 Pas 0
Pas 0 Pas 0
Sup
0
I/O 0
I/O 0
I/O 0
I/O 0
In 0
In 0
Out 0
Out 0
I/O 0
I/O 0
Out 0
Out 0
In 0
In 0P
wr 0
Pw
r 0
Pas 0 Pas 0
Pas 0 Pas 0
Pas 0Pas 0
Pas 0 Pas 0
Pas 1Pas 1
Sup
0
Sup
0
Sup 0
Sup
0S
up 0
Pas 0
Pas 0
Pas 0
Pas
0P
as 0
Pas
1P
as 1
Pas 1
Pas 1
Pas 2
Pas 2
Pas
0
Pas
0P
as 0
Pas
0
Pas 0
Pas 0
Pas 0Pas 0 Pas 1Pas 1
Pas 0Pas 0 Pas 1Pas 1
Sup
0
Pas
1P
as 1Sup
0
11/01/2012 9:21:50 C:\MIS PROYECTOS\PROYECTOS TEMPERATURA OK\ARCHIVOS CNC Y EAGLE SENSORES DS1621 PARA LCD\CNC 3 PASADAS 100X108para 0,4 mm\Sensor_Temperatura_DS1621_100X108_1vía 1LINEA.brd
SD
AS
CL
-+
Falta
pue
ntea
r con
SC
L
12
1 596
2,54
F09
P1
S1
EI4
2-1
1 2
12
34
12
34
-I O
- +
IC1
JP1
S1
S4
X1
IC2
LED1
R1
C1
C2
Q1C
3
C4
LED2
LED3
LED4
LED5
LED6
LED7
LED8
R2
R3
R4
R5
R6
R7
R8
JP2
R9
R10
C5
JP3
R11
R12
JP4
R13
R14
X2
IC4
C7
C8
C9
C10
C11
S3
LED
9
R15
TR1
JP5JP6
X3
LED10
R16
LED11
R17
R18
PIC16876P
>= 9 VCC
7805
400
220 uF
220 uF
4 M
HZ
15 p
F 15 p
F400
400
400
400
400
400
400
100
10K
470 k
4K7
4K7 10
K
10K
MAX232
1 uF
1 uF
1 uF
1 uF
100n
TL36
PO
1K
220 VAC
470
470
10K
11/01/2012 9:10:33 C:\MIS PROYECTOS\PROYECTOS TEMPERATURA OK\ARCHIVOS CNC Y EAGLE SENSORES DS1621 PARA LCD\Sensor_Temperatura_DS1621_100X108_1vía 1LINEA.brd
SD
AS
CL
-+
Falta
pue
ntea
r con
SC
L
12
1 596
2,54
F09
P1
S1
EI4
2-1
1 2
12
34
12
34
-I O
- +
IC1
JP1
S1
S4
X1
IC2
LED1
R1
C1
C2
Q1C
3
C4
LED2
LED3
LED4
LED5
LED6
LED7
LED8
R2
R3
R4
R5
R6
R7
R8
JP2
R9
R10
C5
JP3
R11
R12
JP4
R13
R14
X2
IC4
C7
C8
C9
C10
C11
S3
LED
9
R15
TR1
JP5JP6
X3
LED10
R16
LED11
R17
R18
PIC16876P
>= 9 VCC
7805
400
220 uF
220 uF
4 M
HZ
15 p
F 15 p
F400
400
400
400
400
400
400
100
10K
470 k
4K7
4K7 10
K
10K
MAX232
1 uF
1 uF
1 uF
1 uF
100n
TL36
PO
1K
220 VAC
470
470
10K
11/01/2012 9:20:24 C:\MIS PROYECTOS\PROYECTOS TEMPERATURA OK\ARCHIVOS CNC Y EAGLE SENSORES DS1621 PARA LCD\CNC 3 PASADAS 100X108para 0,4 mm\Sensor_Temperatura_DS1621_100X108_1vía 1LINEA.brd
SD
AS
CL
-+
Falta
pue
ntea
r con
SC
L
12
1 596
2,54
F09
P1
S1
EI4
2-1
1 2
12
34
12
34
-I O
- +
IC1
JP1
S1
S4
X1
IC2
LED1
R1
C1
C2
Q1C
3
C4
LED2
LED3
LED4
LED5
LED6
LED7
LED8
R2
R3
R4
R5
R6
R7
R8
JP2
R9
R10
C5
JP3
R11
R12
JP4
R13
R14
X2
IC4
C7
C8
C9
C10
C11
S3
LED
9
R15
TR1
JP5JP6
X3
LED10
R16
LED11
R17
R18
PIC16876P
>= 9 VCC
7805
400
220 uF
220 uF
4 M
HZ
15 p
F 15 p
F400
400
400
400
400
400
400
100
10K
470 k
4K7
4K7 10
K
10K
MAX232
1 uF
1 uF
1 uF
1 uF
100n
TL36
PO
1K
220 VAC
470
470
10K
11/01/2012 9:19:38 C:\MIS PROYECTOS\PROYECTOS TEMPERATURA OK\ARCHIVOS CNC Y EAGLE SENSORES DS1621 PARA LCD\CNC 3 PASADAS 100X108para 0,4 mm\Sensor_Temperatura_DS1621_100X108_1vía 1LINEA.brd
SD
AS
CL
-+
Falta
pue
ntea
r con
SC
L
12
1 596
2,54
F09
P1
S1
EI4
2-1
1 2
12
34
12
34
-I O
- +
IC1
JP1
S1
S4
X1
IC2
LED1
R1
C1
C2
Q1C
3
C4
LED2
LED3
LED4
LED5
LED6
LED7
LED8
R2
R3
R4
R5
R6
R7
R8
JP2
R9
R10
C5
JP3
R11
R12
JP4
R13
R14
X2
IC4
C7
C8
C9
C10
C11
S3
LED
9
R15
TR1
JP5JP6
X3
LED10
R16
LED11
R17
R18
PIC16876P
>= 9 VCC
7805
400
220 uF
220 uF
4 M
HZ
15 p
F 15 p
F400
400
400
400
400
400
400
100
10K
470 k
4K7
4K7 10
K
10K
MAX232
1 uF
1 uF
1 uF
1 uF
100n
TL36
PO
1K
220 VAC
470
470
10K
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
;******************************* Control_I2C_8_Sensores_Temperatura.asm ************************
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; Realizado por JOAQUÍN BERROCAL PIRIS en marzo de 2011
;+++++++++++++++++++++++ ¡¡ PARA EL LCD 20X4 !!+++++++++++++++++++++++++++;-------LE HE AÑADIDO LA LIBRERÍA LCD 4X20.INC-------
; ESTOY UTILIZANDO EL PIC16F876A
;+Programa de control DE 8 SENSORES DE TEMPERATURA DS1624 ó el DS1621;+VISUALIZACIÓN SOBRE LCD 4X16 LÍNEAS Y TAMBIÉN SI QUEREMOS SOBRE PC A TRAVÉS DE PUERTO SERIE RS232.;+DESDE EL PC (hiperterminal) se pueden configurar las TempMín y TempMax de cada sensor;+Si la temperatura del sensor es inferior a la TempMáx configurada para él, se activará la salida correspondiente.
;OBSERVACIÓN:
;LO TENGO PREPARADA CON UNA HISTÉRISIS PARA EVITAR CONSTANTE ACTIVACIONES Y DESACTIVACIONES.; PARA ELLO POR EJEMPLO SI CONFIGURO EL SENSOR 1 con una TempMi---> 10ºC y la TempMax a 12ºC.;su salida estará activa (RC0), SI ES INFERIOR A < 12ºC "PERO TIENE QUE EMPEZAR A ACTIVARSE POR DEBAJO DE LA TempMin establecida en este caso 10ºC;de lo contrario hasta que no descienda de la temperatura TempMin 10º no se volverá a activar;Conclusión; mantiene activa la salida si la temperatura del sensor es < TempMin y < TempMax y para poder estar activa debe encontrarse inicialmente;por debajo de la TempMin o bien descender por debajo de dicha temperatura. De esta manera se consigue una correcta HISTÉRISIS DE ACTIVACIÓN.;;;PARA SIMULARLO EN PROTEUS USAR EL DS1621 funciona igual,SOLO QUE ÉSTE LA APRECIACION ES DE 0.5ºC.;(CON EL "DS1624" SE CONSIGUIRÍA UNA APRECIACIÓN DE 0.1º SEGÚN LA TABLA DE CONVERSIÓN QUE TENGO EN el comienzo del programa **.asm);visualizarlo sobre LCD una LCD 4X16 .También se podría hacer sobre LCD 2x16 ligeros cambios
;++++++++++++++++++++++++++++++OBSERVACIÓN FINAL+++++++++++++++++++++++++++++++++++++
;TENGO MUCHAS INSTRUCCIONES ANULADAS CON ";" PERO LAS DEJO POR POSIBLES REFORMAS A FUTURO
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;; ZONA DE DATOS **********************************************************************
LIST P=16F876AINCLUDE <P16F876A.INC>__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
CBLOCK 0x20
;para guardar temporalmente la temperatura de los sensores y poder reflejarlas en la pantalla todas a la vez
TempSensor_0TempSensor_1TempSensor_2TempSensor_3TempSensor_4TempSensor_5TempSensor_6TempSensor_7
TempSigno_0TempSigno_1TempSigno_2TempSigno_3TempSigno_4TempSigno_5TempSigno_6TempSigno_7
; para guardar el valor decimal redondeado a un sólo dígito.DS1624_Decimal_0DS1624_Decimal_1DS1624_Decimal_2
1
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
DS1624_Decimal_3DS1624_Decimal_4DS1624_Decimal_5DS1624_Decimal_6DS1624_Decimal_7
; FlagSaltarElReturn ;Para poder hacer el parpadeo de "Leyendo Sensores": LO SUPRIMO POR NO UTILIZARLO
;para recoger las Temperaturas mínimas y máximas de cada Sensor entre las que estará ;activa la salida a relé indicadO.
TempMin_0TempMax_0
TempMin_1TempMax_1
TempMin_2TempMax_2
TempMin_3TempMax_3
TempMin_4TempMax_4
TempMin_5TempMax_5
TempMin_6TempMax_6
TempMin_7TempMax_7
ENDC
;------------------------------------------RetornoCarro EQU .13 ; Código de tecla "Enter" o "Retorno de Carro".CambioLinea EQU .10 ; Código para el cambio de línea.;;TabuladorH EQU .9 ;Código para un salto de tabulador horizontal;;TabuladorV EQU .11 ;Código para tabulador Vertical y poder así borrar lo escrito en el PC;;InicioCabecera EQU .1;;BorrarPC EQU .127 ;DEL borrar
;ESTOS SOBRAN PERO LOS DEJO DE MOMENTO;;#DEFINE Entrada0 PORTB,4 ; Define dónde se sitúan las entradas.;;#DEFINE Entrada1 PORTB,5;;#DEFINE Entrada2 PORTB,6;;#DEFINE Entrada3 PORTB,7;-----------------------------------------
; *******************************ZONA DE CÓDIGOS *************************************
ORG 0goto Inicio ;Pone la línea 1 y 2 con las iniciales de T1: T2: T3: t4:
Mensajes ; Los mensajes no deben sobrepasar las 256 addwf PCL,F ; primeras posiciones de memoria de programa.
MensajeEnBlancoDT " ", 0x00 ;Lo utilizo por si falla un Sensor aparezca en blanco su valor en lugar de
:-0º
MensajeGradoCentigradoDT "º", 0x00 ; En la pantalla: "ºC" "C" Se puede suprimir para que quepa un
2
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
decimal
;PARA REFLEJAR EN LCD T1: a T8:T1
DT "T1:",0x00T2
DT "T2:",0x00T3
DT "T3:",0x00T4
DT "T4:",0x00T5
DT "T5:",0x00T6
DT "T6:",0x00T7
DT "T7:",0x00T8
DT "T8:",0x00
EspereDT " ESPERE", 0x00 ;LE AÑADO DOS ESPACIOS PARA EL LCD 20X4.Para poner en la línea 1 DT "
ESPERE ", 0x00
Leyendo_Sensores ;Mensaje de Espera a leer los 8 sensores aprox 9 sgs
DT " Leyendo Sensores", 0x00 ;LE AÑADO DOS ESPACIOS PARA EL LCD 20X4
;UTILIZO ESTOS MENSAJES PARA VERLOS UNO DEBAJO DEL OTRO YA QUE EN EL HIPERTERMINAL DEL "PROTEUS" No actúa el Tabulador y;se ven todas las temperaturas una detrás de la otra sin tabulación
MensajesAlPC_PROGRAMAR ;Lo primero que sale si tengo comunicación con el PC interruptor RB0 = 1
DT CambioLinea,RetornoCarroDT "PROGRAMAR:",0x00
;------PARA REDUCIR POSICIONES DE LAS 256 POSIBLES---
MensajesAlPC_SENSOR ;VALOR "SENSOR " global para todos los sensores AÑADIRLE después el númeroDT CambioLinea,RetornoCarro,RetornoCarroDT "SENSOR ",0x00
MensajesAlPC_Sensor1DT "1: ",0x00
MensajesAlPC_Sensor2DT "2: ",0x00
MensajesAlPC_Sensor3DT "3: ",0x00
MensajesAlPC_Sensor4DT "4: ",0x00
MensajesAlPC_Sensor5DT "5: ",0x00
MensajesAlPC_Sensor6DT "6: ",0x00
MensajesAlPC_Sensor7DT "7: ",0x00
MensajesAlPC_Sensor8DT "8: ",0x00
;---------------------------------------------------------------------------------------------------
MensajeAlPC_TminDT CambioLinea,RetornoCarro,RetornoCarro ;DT RetornoCarroDT "Tmin: ",0x00
MensajeAlPC_TmaxDT CambioLinea,RetornoCarro,RetornoCarro ;DT RetornoCarroDT "Tmax: ",0x00
3
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
SELECCION_1 ;Para indicar en el PC "SELECCIONADO: 1 = 10 Sg"
DT " 10 Sg",0x00
SELECCION_2 ;Para indicar en el PC "SELECCIONADO: 1 = 10 Sg"; DT RetornoCarro
DT " 20 Sg",0x00; DT "SELECCIONADO: 2 = 20 Sg",0x00
SELECCION_3 ;Para indicar en el PC "SELECCIONADO: 1 = 10 Sg"; DT RetornoCarro
DT " 1 Min",0x00 ;DT "SELECCIONADO: 3 = 1 Min",0x00
MensajesAlPC_Tiempo_Muestreo ;SELECCIONAR TIEMPO DE MUESTREO: 1 = 10 Sg 2 = 20 Sg 3 = 30 Sg
DT CambioLinea, RetornoCarro,RetornoCarroDT "SELECCIONAR TIEMPO DE MUESTREO : "DT CambioLinea, RetornoCarro,RetornoCarroDT "1 = 10 Sg"DT CambioLinea, RetornoCarroDT "2 = 20 Sg"DT CambioLinea,RetornoCarroDT "3 = 1 Min"DT CambioLinea,RetornoCarro,0x00 ;para dejar una separación en el PC
ElegidoDT "ELEGIDO", 0x00 ;Para poner en la línea 1 DT " ESPERE ", 0x00
;Subrutina "DS1624_RedondeaDecimal" ----------------------------------------------------;Esta rutina NO LA PUEDO DEJAR en "DS1624_Modificado_0.INC" por tener problemas en su lectura probablemente por la ;distancia. Aquí no da problemas ; Esta subrutina redondea el valor del contenido del registro de trabajo W al valor más cercano; con un decimal indicado en una tabla.;;ESTA TABLA ESTÁ PENSADA PARA EL SENSOR "DS1624" Que tiene una apreciación de 0,03125º;NO PARA EL SENSOR "DS1621" el cual su apreciación es de 0,5º;no obstante la dejo integra por posible uso a futuro con un DS1624
DS1624_RedondeoDecimal
addwf PCL,F ;LO MISMO ES PONER "F" QUE "1"retlw d'0' ;0; (DS1624_Decimal)=b'0000'. Mide 0,0000ºC. Redondeado a 0,0ºC.retlw d'1' ;1; (DS1624_Decimal)=b'0001'. Mide 0,0625ºC. Redondeado a 0,1ºC.retlw d'1' ;2; (DS1624_Decimal)=b'0010'. Mide 0,1250ºC. Redondeado a 0,1ºC.retlw d'2' ;3; (DS1624_Decimal)=b'0011'. Mide 0,1875ºC. Redondeado a 0,2ºC.retlw d'3' ;4; (DS1624_Decimal)=b'0100'. Mide 0,2500ºC. Redondeado a 0,3ºC.retlw d'3' ;5; (DS1624_Decimal)=b'0101'. Mide 0,3125ºC. Redondeado a 0,3ºC.retlw d'4' ;6; (DS1624_Decimal)=b'0110'. Mide 0,3750ºC. Redondeado a 0,4ºC.retlw d'4' ;7; (DS1624_Decimal)=b'0111'. Mide 0,4375ºC. Redondeado a 0,4ºC.retlw d'5' ;8; (DS1624_Decimal)=b'1000'. Mide 0,5000ºC. Redondeado a 0,5ºC.;Este es el
único valor utilizado para el DS1621retlw d'6' ;9; (DS1624_Decimal)=b'1001'. Mide 0,5625ºC. Redondeado a 0,6ºC.retlw d'6' ;10 (DS1624_Decimal)=b'1010'. Mide 0,6250ºC. Redondeado a 0,6ºC.retlw d'7' ;11 (DS1624_Decimal)=b'1011'. Mide 0,6875ºC. Redondeado a 0,7ºC.retlw d'8' ;12 (DS1624_Decimal)=b'1100'. Mide 0,7500ºC. Redondeado a 0,8ºC.retlw d'8' ;13 (DS1624_Decimal)=b'1101'. Mide 0,8125ºC. Redondeado a 0,8ºC.retlw d'9' ;14 (DS1624_Decimal)=b'1110'. Mide 0,8750ºC. Redondeado a 0,9ºC.retlw d'9' ;15 (DS1624_Decimal)=b'1111'. Mide 0,9375ºC. Redondeado a 0,9ºC.
DS1624_FinTablaRedondeo
IF (DS1624_FinTablaRedondeo > 0xFF); ERROR "¡CUIDADO!" ;;;"¡CUIDADO!: La tabla ha superado el tamaño de la página de los"; MESSG "Error";;;"primeros 256 bytes de memoria ROM. NO funcionará correctamente."
4
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
bsf PORTC,6 ;ACTIVOLA SALIDA 7
ENDIF
; ---------Subrutina "Inicio" --------------------------
Inicio
;-----Para el pic16f876a puerta A E/S digitales--------bsf STATUS,RP0 ;Selección Banco 1
movlw b'00000011' ;PUERTA B como Salida PEROmovwf TRISB ;RBO Y RB1 COMO ENTRADA. Una para no tener comunicación con el PC y
la otra para obligar a PROGRAMAR
;;; clrf TRISB ;PUERTA B como Salida PERO;;; bsf TRISB,0 ;RB0 lo configuro como ENTRADA para tener o no comunicación con el PC a través del interruptor conectado al RB0
;comunicación con el PC y LCD ->RB0 = 1. SÓLO LCD -> RB0 = 0;; bsf TRISB,1
clrf TRISC ;PUERTA C como Salida
movlw b'00000110' ;PUERTAA E/S Digitalesmovwf ADCON1
; movlw b'00011111' ;La PUERTAA se configura como Entrada; movwf TRISA ;NO ES NECESARIO. configurarlo
bcf STATUS,RP0 ;Vuelta al BANCO 0
;INICIA LOS PUERTOS APAGANDO TODAS SUS SALIDASclrf PORTBclrf PORTCclrf Flag_No_Repetir_Programarclrf FlagValorNegativo ;reseteo el flag
;PARA PONER A CERO TODOS ESTOS REGISTROSclrf TempSensor_0clrf TempSensor_1clrf TempSensor_2clrf TempSensor_3clrf TempSensor_4clrf TempSensor_5clrf TempSensor_6clrf TempSensor_7
;---------------------------------clrf Flag_Es_Negativo ;reiniciar aquí el flag lo utilizo para suprimir el '.' y la 'º'
si la parte entera tiene;3 Caracteres incluido del signo (-) y la decimal es .0º
;----------------------------------------------------;-----------INICIA LA PANTALLA LCD-------------------;----------------------------------------------------
call LCD_Inicializa ;PARA INICIAR LA LCD
call RS232_Inicializa ;Inicializa la comunicación con el puerto Serie. RA1=TX y RA5 = RD (en lugar de RA3 y RA4
;----------------------------------------------------
;++++++POR SI SE VA LA LUZ LEER LAS POSICIONES DE 0 A 17 DE LA EEPROM++++++;++++++++++++para así trabajar con los valores PROGRAMADOS ++++++++++++
;LAS POSICIONES 0 a 17 están recogidas el flag de no reptir programar. Las TempMin y TempMax de cada SENSOR Y el valor del "TiempoMuestreo"
call EEPROM_Lectura_De_0_a_17 ;;;Rutina en EEPROM_16F87XX.INC;EEPROM_Lectura_De_0_a_17 EEPROM_Lectura_TempMin_a_TempMax ;EEPROM_Lectura_TempMin_a_TempMax Rutina en
5
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
EEPROM_16F87XX.INC
Parpadeo ;Fijo el mensaje "ESPERE" y Parpadeante el "Leyendo Sensores"
movlw .5call LCD_PosicionLinea1 ; primera línea más el valor del registro Wmovlw Espere ;Mensaje "ESPERE"call LCD_Mensaje ;Visualiza el Mensaje
; En la primera línea de la pantalla aparece un mensaje fijo.
call LCD_Linea2 ; Pasa a la segunda línea.movlw Leyendo_Sensores ; Apunta al mensaje parpadeante. "Leyendo Sensores"call LCD_Mensaje ; Lo visualiza.
;------ANULO EL PARPADEO-----;; call Retardo_500ms ; Durante este tiempo.;; call LCD_Linea2 ; Vuelve a situarse al principio de la línea 2.;; call LCD_LineaEnBlanco ; Visualiza línea en blanco.Para no ver nada en esa línea y así producir efecto intermitente; call Retardo_500ms ; Durante este tiempo, produciendo un efecto de Parpadeo LO SUPRIMO por
;tener en cada sensor un Call Retardo_1s que se va a mantener apagado
;++++++SI QUITO LAS DOS INSTRUCCIONES DE ABAJO SE QUEDA PARPADEANDO PERMANENTEMENTE+++++
; btfsc FlagSaltarElReturn,0 ;Si está cargado con valor (0) saltar el Return ya que es la primera vez ; return ;retorna de cada Sensor_1 al Sensor_7 Si está cargado con valor 1 hacer el return para poder seguir con el parpadeo;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;---------------------------------------------------------------------------;LECTURA DE LOS SENSORES DE TEMPERATURA;
Sensor_0
;; bsf FlagSaltarElReturn,0 ;para activar el flag
call DS1624_Inicializa_0 ; Configura el DS1624 e inicia la conversión.call Retardo_1s ;retardo de 1 segundoscall DS1624_LeeTemperatura ; Lee la temperatura.
; call DS1624_IniciaConversion ;Comienza conversión para la siguiente lectura SI LO PONGO NO FUNCIONAN NI LOS ENTEROS -8
movwf TempSensor_0 ;lo guardo temporalmente para reflejarlo en la LCD todas las temperaturas juntas
movf DS1624_Signo,Wmovwf TempSigno_0 ;Para guardar temporalmente el signo del sensor 1
;---Para guardar temporalmente el DECIMAL del Sensor_0---movf DS1624_Decimal,Wmovwf DS1624_Decimal_0
;--------------------------------------------------------
;++++INSTRUCCIONES PARA PODER PROGRAMAR LAS TempMin y TempMax y el TiempoMuestreo++++++btfsc PORTB,1 ;VERIFICA si está PULSADO .No pongo RB1 por no reconocerlogoto Sensor_1 ;NO ESTÁ PULSADO continuar en "Sensor_0"call Retardo_20ms ;Espera que se estabilicen los niveles de tensiónbtfsc PORTB,1 ;Comprueba si es un Rebotegoto Sensor_1 ;NO ESTÁ PULSADO "Sensor_0"goto VisualizaTermometro_LCD_0 ;Sí está pulsado
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Sensor_1
;; call Parpadeo
6
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
call DS1624_Inicializa_1 ; Configura el DS1624 e inicia la conversión.call Retardo_1s ;retardo de 1 segundoscall DS1624_LeeTemperatura_1 ; Lee la temperatura.
; call DS1624_IniciaConversion_1 ;Comienza conversión para la siguiente lectura
movwf TempSensor_1 ;lo guardo temporalmente para reflejarlo en la LCD todas las temperaturas juntas
movf DS1624_Signo,Wmovwf TempSigno_1 ;Para guardar temporalmente el signo del sensor 1
;---Para guardar temporalmente el DECIMAL del Sensor_1---movf DS1624_Decimal,Wmovwf DS1624_Decimal_1
;--------------------------------------------------------
Sensor_2
;; call Parpadeo
call DS1624_Inicializa_2 ; Configura el DS1624 e inicia la conversión.call Retardo_1s ;retardo de 1 segundoscall DS1624_LeeTemperatura_2 ; Lee la temperatura.
; call DS1624_IniciaConversion_2 ;Comienza conversión para la siguiente lectura
movwf TempSensor_2 ;lo guardo temporalmente para reflejarlo en la LCD todas las temperaturas juntas
movf DS1624_Signo,Wmovwf TempSigno_2 ;Para guardar temporalmente el signo del sensor 2
;---Para guardar temporalmente el DECIMAL del Sensor_2---movf DS1624_Decimal,Wmovwf DS1624_Decimal_2
;--------------------------------------------------------
Sensor_3
;; call Parpadeo
call DS1624_Inicializa_3 ; Configura el DS1624 e inicia la conversión.call Retardo_1s ;retardo de 1 segundoscall DS1624_LeeTemperatura_3 ; Lee la temperatura.
; call DS1624_IniciaConversion_1 ;Comienza conversión para la siguiente lectura
movwf TempSensor_3 ;lo guardo temporalmente para reflejarlo en la LCD todas las temperaturas juntas
movf DS1624_Signo,Wmovwf TempSigno_3 ;Para guardar temporalmente el signo del sensor 3
;---Para guardar temporalmente el DECIMAL del Sensor_0---movf DS1624_Decimal,Wmovwf DS1624_Decimal_3
;--------------------------------------------------------
Sensor_4
;; bsf FlagSaltarElReturn,0 ;para activar el flag
call DS1624_Inicializa_4 ; Configura el DS1624 e inicia la conversión.call Retardo_1s ;retardo de 1 segundoscall DS1624_LeeTemperatura_4 ; Lee la temperatura.
; call DS1624_IniciaConversion ;Comienza conversión para la siguiente lectura SI LO PONGO NO FUNCIONAN NI LOS ENTEROS -8
movwf TempSensor_4 ;lo guardo temporalmente para reflejarlo en la LCD todas las temperaturas juntas
movf DS1624_Signo,Wmovwf TempSigno_4 ;Para guardar temporalmente el signo del sensor 4
7
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
;---Para guardar temporalmente el DECIMAL del Sensor_0---movf DS1624_Decimal,Wmovwf DS1624_Decimal_4
;--------------------------------------------------------
Sensor_5
;; call Parpadeo
call DS1624_Inicializa_5 ; Configura el DS1624 e inicia la conversión.call Retardo_1s ;retardo de 1 segundoscall DS1624_LeeTemperatura_5 ; Lee la temperatura.
; call DS1624_IniciaConversion_1 ;Comienza conversión para la siguiente lectura
movwf TempSensor_5 ;lo guardo temporalmente para reflejarlo en la LCD todas las temperaturas juntas
movf DS1624_Signo,Wmovwf TempSigno_5 ;Para guardar temporalmente el signo del sensor 5
;---Para guardar temporalmente el DECIMAL del Sensor_5---movf DS1624_Decimal,Wmovwf DS1624_Decimal_5
;--------------------------------------------------------
;++++INSTRUCCIONES PARA PODER PROGRAMAR LAS TempMin y TempMax y el TiempoMuestreo++++++btfsc PORTB,1 ;VERIFICA si está PULSADO .No pongo RB1 por no reconocerlogoto Sensor_6 ;NO ESTÁ PULSADO continuar en "Sensor_0"call Retardo_20ms ;Espera que se estabilicen los niveles de tensiónbtfsc PORTB,1 ;Comprueba si es un Rebotegoto Sensor_6 ;NO ESTÁ PULSADO "Sensor_6"goto VisualizaTermometro_LCD_0 ;Sí está pulsado
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Sensor_6
;; call Parpadeo
call DS1624_Inicializa_6 ; Configura el DS1624 e inicia la conversión.call Retardo_1s ;retardo de 1 segundoscall DS1624_LeeTemperatura_6 ; Lee la temperatura.
; call DS1624_IniciaConversion_2 ;Comienza conversión para la siguiente lectura
movwf TempSensor_6 ;lo guardo temporalmente para reflejarlo en la LCD todas las temperaturas juntas
movf DS1624_Signo,Wmovwf TempSigno_6 ;Para guardar temporalmente el signo del sensor 6
;---Para guardar temporalmente el DECIMAL del Sensor_6---movf DS1624_Decimal,Wmovwf DS1624_Decimal_6
;--------------------------------------------------------
Sensor_7
;; call Parpadeo
call DS1624_Inicializa_7 ; Configura el DS1624 e inicia la conversión.call Retardo_1s ;retardo de 1 segundoscall DS1624_LeeTemperatura_7 ; Lee la temperatura.
; call DS1624_IniciaConversion_1 ;Comienza conversión para la siguiente lectura
movwf TempSensor_7 ;lo guardo temporalmente para reflejarlo en la LCD todas las temperaturas juntas
movf DS1624_Signo,Wmovwf TempSigno_7 ;Para guardar temporalmente el signo del sensor 7
;---Para guardar temporalmente el DECIMAL del Sensor_7---
8
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
movf DS1624_Decimal,Wmovwf DS1624_Decimal_7
;--------------------------------------------------------
;++++++Primero visualiza todos los sensores desde el 0 al 7 en la LCD+++++
goto VisualizaTermometro_LCD_0 ;EN PANTALLA LCD *ESTE SÍ ESTABA la de arriba y abajo NO
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;*****PARA EVITAR SI ALGÚN SENSOR DEJA DE FUNCIONAR QUE APAREZCA ;*****EN LA PANTALLA EL VALOR -0º. con estas rutinas de más abajo;*****se consigue que aparezca en blanco el valor.
EliminarMenosCero_0movlw MensajeEnBlanco ;;Lo utilizo por si falla un Sensor aparezca en blanco su valor en
lugar de :-0ºcall LCD_Caracter ;LCD_Mensajegoto Histerisis_0 ;para que active o desactive la salida en función del valor de
histerisis establecido;con la TempMini y TempMax
EliminarMenosCero_1movlw MensajeEnBlanco ;;Lo utilizo por si falla un Sensor aparezca en blanco su valor en
lugar de :-0ºcall LCD_Caracter ;LCD_Mensajegoto Histerisis_1 ;para que active o desactive la salida en función del valor de
histerisis establecido;con la TempMini y TempMax
EliminarMenosCero_2movlw MensajeEnBlanco ;;Lo utilizo por si falla un Sensor aparezca en blanco su valor en
lugar de :-0ºcall LCD_Caracter ;LCD_Mensajegoto Histerisis_2 ;para que active o desactive la salida en función del valor de
histerisis establecido;con la TempMini y TempMax
EliminarMenosCero_3movlw MensajeEnBlanco ;;Lo utilizo por si falla un Sensor aparezca en blanco su valor en
lugar de :-0ºcall LCD_Caracter ;LCD_Mensajegoto Histerisis_3 ;para que active o desactive la salida en función del valor de
histerisis establecido;con la TempMini y TempMax
EliminarMenosCero_4movlw MensajeEnBlanco ;;Lo utilizo por si falla un Sensor aparezca en blanco su valor en
lugar de :-0ºcall LCD_Caracter ;LCD_Mensajegoto Histerisis_4 ;para que active o desactive la salida en función del valor de
histerisis establecido;con la TempMini y TempMax
EliminarMenosCero_5movlw MensajeEnBlanco ;;Lo utilizo por si falla un Sensor aparezca en blanco su valor en
lugar de :-0ºcall LCD_Caracter ;LCD_Mensajegoto Histerisis_5 ;para que active o desactive la salida en función del valor de
histerisis establecido;con la TempMini y TempMax
EliminarMenosCero_6movlw MensajeEnBlanco ;;Lo utilizo por si falla un Sensor aparezca en blanco su valor en
lugar de :-0ºcall LCD_Caracter ;LCD_Mensajegoto Histerisis_6 ;para que active o desactive la salida en función del valor de
histerisis establecido;con la TempMini y TempMax
EliminarMenosCero_7movlw MensajeEnBlancocall LCD_Caracter ;LCD_Mensajegoto Histerisis_7 ;**Iniciar ciclo de visualización de los sensores sin repetir T1 a T8
;---------------------------------------------------------------------------;RUTINAS PARA VISUALIZAR EN PANTALLA LCD y/o HIPERTERMINAL LAS TEMPERATURAS;DEPENDERÁ DE LA POSICIÓN DEL INTERRUPTOR SE SELECCIÓN (RB0) : SÓLO LCD o bien PC Y LCD par poder configurar;---------------------------------------------------------------------------
9
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
;-----------------PARA VER EN LCD LA TEMPERATURA DEL Sensor_0---------------------;-------------------ESTE COMIENZA EN LA LÍNEA 1 posición .3 -------------------------
VisualizaTermometro_LCD_0 ;EN PANTALLA LCD
call LCD_Borra ;Borra toda la pantalla.EVITA que al pasar de 10º a 9º se vea 9ºº SE ENCUENTRA EN LA LIBRERIA "LCD_4BIT_4X16.INC"
call Visualizar_T1_a_T8 ;Para visualizar en la LCD T:1 a T:8 SE ENCUENTRA EN LA LIBRERIA "Temperatura_a_LCD.INC"
;EVITA que al pasar de XXº a Xº se vean dos grados Xºº
;-------------------------------------------------; PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC;-------------------------------------------------
;----Lo primero será ver si DESEO MODIFICAR LA PROGRAMACIÓN DE LOS VALORES-----;Para ver si modifico los valores de TempMin, TempMax y el Tiempo de Muestreo;"SI Mantengo Presionado el Pulsador "RB1" A MASA, SÍ DESEO PROGRAMAR."
goto Verificar_Deseo_PROGRAMAR ;esta rutina está en "CONFIGURACION_DESDE_PC.INC";según desee PROGRAMAR o No, se irá a "Continuar" o a
"Continuar_1";------------------------------------------------------------------------------Continuar ;NO QUIERO PROGRAMAR. Verificar ahora si deseo llevar también al PC
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto No_PC_0_1 ;primer salto para evitar el PC
;-------------------------------------------------------------------------------------
;************INICIALIZAR EL PUERTO SERIE comunicación con el PC*******************;;Continuar_1 ;si mantengo pulsado "RB1" Es porque quiero PROGRAMAR. se vuelve aquí desde "Borrar_EEPROM"
;PRIMERO COMPRUEBO SI ES LA PRIMERA VEZ QUE SE PROGRAMA SI ES ASÍ PERMITIRLO DE LO CONTRARIO NO
;PARA ELLO LEER EL FLAG GRABADO EN LE POSICIÓN "0" DE LA EEPROM DONDE GUARDO EL FLAG CON VALOR 1 DE
;Flag_No_Repetir_Programar
movlw .1movwf Flag_No_Repetir_Programar ;utilizo el mismo nombre por no utilizar otro registro
clrf EE_Dir ;Posición "0" donde está grabado el Flag en la EEPROM (lo hice dese la Rutina "PROGRAMAR"
call EEPROM_LeeDato ;lee lo escrito en la posición "0" de la EEprom si ya se hubiese PROGRAMADO tendrá valor "1"
;----COMPARA SI TIENE VALOR 1 EN CUYO CASO NO VOLVER A PROGRAMAR-----
subwf Flag_No_Repetir_Programar,W ;btfsc STATUS,Z ;Si Z=1 NO VOLVER A PROGRAMAR. Y SI Z=0 PROGRAMAR es decir
configurar las Tmin y Tmax de cada sensorgoto No_Volver_A_PROGRAMAR ;si quiero volver a programar pulsar el boton de RESET.
;--------------------------------------------------------------------
;+++++PARA BORRAR LO QUE HAYA EN LA PANTALLA DEL PC HIPERTERMINAL++++ ;Para ello simplemente salto de página--> decimal; .12
movlw .12 ; Nueva página call RS232_EnviaDato
call Retardo_200ms ;para que no salga raro la primera vez aunque en las siguientes ok
Continuar_1 ;LO PONGO AQUÍ PARA QUE SIEMPRE TENGA UN RENGLÓN DE SEPARACIÓN Respecto a lo anterior escrito
movlw .13call RS232_EnviaDato
10
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
call PROGRAMAR ; Rutina de la librería "CONFIGURACION_DESDE_PC.INC";escribe en PC ; "PROGRAMAR: SENSOR1: Tmin: Tmax: HASTA EL
SENSOR8: Tmin: Tmax:"nop
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;------------MENSAJE TIEMPO DE MUESTREO------------------
movlw MensajesAlPC_Tiempo_Muestreo ;carga el Mensaje para visualizar en el PCcall RS232_Mensaje ;Mensaje al PC
call Tiempo_De_Muestreo ;Rutina donde selecciono el valor 1-2-3 del tiempo de muestreo (1= 10sg)(2=20 Sg)(3 = 1 min)
;y lo guarda en el registro: "TiempoMuestreo" y en EEPROM posición .17
;--------------------------------------------------------------------------
No_Volver_A_PROGRAMAR ;Este primer corte es para una vez PROGRAMADAS LAS Tmin y Tmax;No vuelva a salir lo de volver a PROGRAMARLAS
;; call RS232_Inicializa ;Inicializa la comunicación con el puerto Serie. RA1=TX y RA5 = RD (en lugar de RA3 y RA4
;----No suprimirlo evito que salga "SENSOR 1" SI volviese a PROGRAMAR-----------
btfss PORTB,0 ;Si está a (1) Si llevar datos al PCgoto No_PC_0_1 ;Si está a (0) no llevar al PC
;-------------------------------------------------------------------------------
movlw .13call RS232_EnviaDato
movlw MensajesAlPC_SENSOR ;carga la primera posición del mensaje "SENSOR "call RS232_Mensaje ;lo visualiza en el PC
movlw MensajesAlPC_Sensor1 ;carga la primera posición del mensaje "1: "call RS232_Mensaje ;lo visualiza en el PC
;---------------------------------------
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PCNo_PC_0_1 ; éste es el primer salto para no reflejar en PC;--------------------------------------
; Se coloca para visualización en la T1:XXº T2:movlw .3 ; Se coloca para visualización en lacall LCD_PosicionLinea1 ; primera línea más el valor del registro Wbtfss TempSigno_0,7 ; ¿Temperatura negativa?.goto TemperaturaPositiva_0 ; No, la temperatura es positiva.
TemperaturaNegativa_0;Para comprobar que un registro vale (0) hay que cargar el registro sobre sí mismo;mediante la instrucción (movf)(que es la única que posiciona flags), con lo cual se logra;posicionar el flag (Z) sin variar su contenido.
;Si el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco:;Compara si el registro vale 0
movf TempSensor_0,F ;para posicionar el flag Zbtfsc STATUS,Z ;¿Es cero?, ¿Z=1? Si Z=1 "el Registro vale 0"goto EliminarMenosCero_0 ;Si el valor es cero eliminar el menos -0º
;si es Z=0 el registro NO vale 0 por tanto escribir -
;Si el registro No vale Cero ponerle el signo -
movlw '-' ; Visualiza el signo "-" de temperatura negativa.call LCD_Caracter
;---------------------------------------------------------------------------------------;activar El "Flag_Es_Negativo" Para ver o no ver el signo 'º' por falta de espacio en LCD
bsf Flag_Es_Negativo,0
11
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
;---------------------------------------------------------------------------------------
;_______________________________________________________________________;++++++++++++++++++++AÑADIDO PARA VER EN EL PC++++++++++++;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto TemperaturaPositiva_0 ;sólo EN PANTALLA LCD
;PARA LLEVARLO AL PC En negativomovlw '-' ; Visualiza el signo "-" de temperatura negativa. en el PC call RS232_EnviaDato
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;______________________________________________________________________________
TemperaturaPositiva_0
movf TempSensor_0,W ; Visualiza el valor absoluto de la temperatura siempre en (+)
call BIN_a_BCD ; pasándola previamente a BCD.
Call Temperatura_En_LCD ;para ver la temperatura suprimiendo el cero no significativo ej "089" saldrá "89"
;+++++++++++++AÑADIDO PARTE DECIMAL++++++++++++++++movf DS1624_Decimal_0,F ;para ver si tiene el valor .0º en cuyo caso no visualizarlo
en la LCD por falta de espaciobtfsc STATUS,Z ;Si Z=1 es CERO LA PARTE DECIMAL .0ºgoto Decimal_0_Es_Cero ;como es cero NO REPRESENTARLO y ponerle 'º'
;Si Z=0 NO ES CERO y por tanto visualizar el '.' y el 'º'
movlw '.' ; Visualiza el punto decimal.call LCD_Caracter
movf DS1624_Decimal_0,W ;Visualiza la parte decimal
call LCD_Nibble ;Visualiza en el lugar actual de la pantalla el valor HEXADECIMAL que almacena el nibble bajo del registro (W). El
;nibble alto en (W) no es tenido en cuenta ej: si (W) = 0101 0110 se visualiza "6"
; si (W) es 1010 1110, se visualiza "E"
;------------lo he suprimido de la libreria Temperatura_a_LCD.INC-------------btfsc Flag_TresCaracteres,0 ;Si tiene tres Caracteres la parte entera NO PONER 'º' por
razón de NO TENER espaciogoto Continua_0 ;
;Se representa el signo "º"Decimal_0_Es_Cero
movlw MensajeGradoCentigrado ; En pantalla aparece "º".call LCD_Mensaje
;++++++++++++++++++++++++++++++++++++++++++++++++++++
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC ;ACTIVAR LAS SALIDAS comparando con los valores de la EEPROM programados
Continua_0
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto Histerisis_0 ;para también activar las salidas aún eligiendo solo el LCD sin
PC;;;;; goto VisualizaTermometro_LCD_1 ;EN PANTALLA LCD;-------------------------------------
movf DS1624_Decimal_0,W ;para poder ver el valor en decimal de cada sensor librería "temperatura_a_PC.INC"
movwf DS1624_Decimal;--------------------------------------------------------------
movf TempSensor_0,W ; Visualiza el valor absoluto de la temperatura, en (+)
call Temperatura_En_PC ;Desde aquí se verán las Centanas-Decenas-Unidades en el PC
12
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
;---------------------------------------------------------------------------------------;+++++ACTIVA LA SALIDA CORRESPONDIENTE ENTRE LOS VALORES DE HISTERISIS ESTABLECIDOS++++++;++++++ENTRE LA TempMin_X y TempMax_X. Es decir sólo activa entre estos valores++++++++;---------------------------------------------------------------------------------------Histerisis_0 ;Activar_Desactivar_Salidas
call EEPROM_Lectura_De_0_a_17 ;Esta en "EEPROM_16F87X.INC" para la lectura de los valores de
;la TempMin y TempMax de cada sensor grabados en la EEPROM
btfss TempSigno_0,7 ;Si el último bit es un "1" Es una temperatura Negativa.goto EsPositivo_0goto EsNegativo_0
EsPositivo_0
movf TempSensor_0,W ;Carga el Valor (+) de la Temperatura en (W)goto Activar_Desactivar_Salidas_0 ;Se va a Activar o Desactivar la salida
EsNegativo_0
movf GlobalNegativa_0,W ;Carga el Valor (-) de la Temperatura en (W) se encuentra en libreria "DS1624_Modificado_0.INC"
movwf TempSensor_0 ;y ya en VALOR NEGATIVO lo llevo a TempSensor_0;goto Activar_Desactivar_Salidas ;Se va a Activar o
Desactivar la salida
;-----está modificado para hacer como en el programa de internet que active por encima de la tempMin hasta la TempMax pero siempre de abajo a arriba y no al revés Activar_Desactivar_Salidas_0
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;-----------------------------------------------------------------;Si la Temperatura del Sensor (TempSensor_x)está por debajo de la TempMin_X estará activa la Salida. Y se mantendrá activa hasta;alcanzar la TempMax_X . Nota si partimos de una temperatura del sensor comprendida entre dichos valores No estará activa la salida;hasta quedar por debajo de la TempMini_X. ;(La otras instrucciones que tenía la salida estaría activa siempre que la temperatura del sensor estuviese entre los valores ; de la TempMin y la TempMax);-----------------------------------------------------------------
movf TempMax_0,Wsubwf TempSensor_0,Wbtfsc STATUS,C ;¿C=0? TempSensor_0 < (TempMax_0)bcf PORTC,0 ;Desactiva la salida 0 de PORTC por ser Mayor o igual la
TempMax_0 que la del TempSensor_0
movf TempMin_0,Wsubwf TempSensor_0,Wbtfss STATUS,C ;¿C=1? (TempMin_0) >= TempSensor_0bsf PORTC,0 ;Activa la salida 0 de PORTC por ser Mayor la TempMin_0 que
la del Sensor_0
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;-----------------PARA VER EN LCD LA TEMPERATURA DEL Sensor_1---------------------;-------------------ESTE COMIENZA EN LA LÍNEA 1 posición .11 -------------------------
VisualizaTermometro_LCD_1 ;EN PANTALLA LCD
;---------------------------------------
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto No_PC_1_1 ;
;-------------------------------------
;+++++++++++++++++++++++++++++++++++++++++++++++++++++
13
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
;SOBRA EL goto no_pc_2 de arriba; 2º CORTE , NO HACE FALTA LLAMAR POR HABERLO YA HECHO DESDE EL PRIMER SENSOR
movlw MensajesAlPC_SENSOR ;carga la primera posición del mensaje "SENSOR "call RS232_Mensaje ;lo visualiza en el PC
movlw MensajesAlPC_Sensor2 ;carga la primera posición del mensaje "2: "call RS232_Mensaje ;lo visualiza en el PC
; movlw MensajesAlPC_Sensor2 ;carga la primera posición del mensaje "SENSOR 2: "; call RS232_Mensaje ;lo visualiza en el PC
;++++++++++++++++++++++++++++++++++++++++++++++++++++
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PCNo_PC_1_1 ; éste es el segundo salto para no reflejar en PC;-------------------------------------
movlw .11 ; Se coloca para visualización en la T1: T2:XXºcall LCD_PosicionLinea1 ; primera línea.btfss TempSigno_1,7 ; ¿Temperatura negativa?.goto TemperaturaPositiva_1 ; No, la temperatura es positiva.
TemperaturaNegativa_1
;Si el el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco:movf TempSensor_1,Fbtfsc STATUS,Z ;¿Es cero?, ¿Z=1? Si Z=1 "el Registro vale 0"goto EliminarMenosCero_1 ;Si el valor es cero eliminar el menos -0º
;si es Z=0 el registro NO vale 0 por tanto escribir -
;Si el registro No vale Cero ponerle el signo -
movlw '-' ; Visualiza el signo "-" de temperatura negativa.call LCD_Caracter
;---------------------------------------------------------------------------------------;activar El "Flag_Es_Negativo" Para ver o no ver el signo 'º' por falta de espacio en LCD
bsf Flag_Es_Negativo,0
;---------------------------------------------------------------------------------------
;_______________________________________________________________________
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto No_PC_1_2 ;
;-------------------------------------;PARA LLEVARLO AL PC En negativo
movlw '-' ; Visualiza el signo "-" de temperatura negativa. en el PC call RS232_EnviaDato
;---------------------------------------
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PCNo_PC_1_2 ; se puede quitar. Salto para no reflejar en PC
nop ;se puede quitar
TemperaturaPositiva_1
movf TempSensor_1,W ; Visualiza el valor absoluto de la temperatura,
call BIN_a_BCD ; pasándola previamente a BCD.call Temperatura_En_LCD ;para ver la temperatura suprimiendo el cero no significativo ej
"089" saldrá "89"
;+++++++++++++AÑADIDO PARTE DECIMAL++++++++++++++++
movf DS1624_Decimal_1,F ;para ver si tiene el valor .0º en cuyo caso no visualizarlo en la LCD por falta de espacio
btfsc STATUS,Z ;Si Z=1 es CERO LA PARTE DECIMAL .0ºgoto Decimal_1_Es_Cero ;como es cero NO REPRESENTARLO y ponerle 'º'
;Si Z=0 NO ES CERO y por tanto visualizar el '.' y el 'º'
14
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
movlw '.' ; Visualiza el punto decimal.call LCD_Caracter
movf DS1624_Decimal_1,W ;Visualiza la parte decimal
call LCD_Nibble ;Visualiza en el lugar actual de la pantalla el valor HEXADECIMAL que almacena el nibble bajo del registro (W). El
;nibble alto en (W) no es tenido en cuenta ej: si (W) = 0101 0110 se visualiza "6"
; si (W) es 1010 1110, se visualiza "E"
;------------lo he suprimido de la libreria Temperatura_a_LCD.INC-------------btfsc Flag_TresCaracteres,0 ;Si tiene tres Caracteres la parte entera NO PONER 'º' por
razón de NO TENER espaciogoto Continua_1 ;
;Se representa el signo "º"Decimal_1_Es_Cero
movlw MensajeGradoCentigrado ; En pantalla aparece "º".call LCD_Mensaje
;++++++++++++++++++++++++++++++++++++++++++++++++++++
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC ;ACTIVAR LAS SALIDAS comparando con los valores de la EEPROM programados
Continua_1
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto Histerisis_1 ;Se va a Activar o Desactivar la salida
;-------------------------------------;--------------------------------------------------------------
movf DS1624_Decimal_1,W ;para poder ver el valor en decimal de cada sensor librería "temperatura_a_PC.INC"
movwf DS1624_Decimal;--------------------------------------------------------------
movf TempSensor_1,W ; Visualiza el valor absoluto de la temperatura,
call Temperatura_En_PC ;Desde aquí se verán las centenas-decenas-unidades en el PC
; call RetornoCarro_Y_CambioLinea ; hace cambio de linea con retorno
;---------------------------------------------------------------------------------------;+++++ACTIVA LA SALIDA CORRESPONDIENTE ENTRE LOS VALORES DE HISTERISIS ESTABLECIDOS++++++;++++++ENTRE LA TempMin_1 y TempMax_1. Es decir sólo activa entre estos valores++++++++;---------------------------------------------------------------------------------------Histerisis_1
btfss TempSigno_1,7 ;Si el último bit es un "1" Es una temperatura Negativa.goto EsPositivo_1goto EsNegativo_1
EsPositivo_1
movf TempSensor_1,W ;Carga el Valor (+) de la Temperatura en (W)goto Activar_Desactivar_Salidas_1 ;Se va a Activar o Desactivar la salida
EsNegativo_1
movf GlobalNegativa_1,W ;Carga el Valor (-) de la Temperatura en (W) se encuentra en libreria "DS1624_Modificado_0.INC"
movwf TempSensor_1 ;y ya en VALOR NEGATIVO lo llevo a TempSensor_1;goto Activar_Desactivar_Salidas ;Se va a Activar o
Desactivar la salida
Activar_Desactivar_Salidas_1;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;-----------------------------------------------------------------;Si la Temperatura del Sensor (TempSensor_x)está por debajo de la TempMin_X estará activa la Salida. Y se mantendrá activa hasta;alcanzar la TempMax_X . Nota si partimos de una temperatura del sensor comprendida entre dichos
15
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
valores No estará activa la salida;hasta quedar por debajo de la TempMini_X. ;(La otras instrucciones que tenía la salida estaría activa siempre que la temperatura del sensor estuviese entre los valores ; de la TempMin y la TempMax);-----------------------------------------------------------------
movf TempMax_1,Wsubwf TempSensor_1,Wbtfsc STATUS,C ;¿C=0? TempSensor_1 < (TempMax_1)bcf PORTC,1 ;Desactiva la salida 0 de PORTC por ser Mayor o igual la
TempMax_0 que la del TempSensor_1
movf TempMin_1,Wsubwf TempSensor_1,Wbtfss STATUS,C ;¿C=1? (TempMin_1) >= TempSensor_1bsf PORTC,1 ;Activa la salida 1 de PORTC por ser Mayor la TempMin_1 que
la del Sensor_1
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;Activar_Desactivar_Salidas_1;;Para comprobar si un registro es mayor o menor que otro ver la pag 123 del
libro de Remiro.
; subwf TempMin_1,W ;(TempMin_1)- (TempSensor_1) subwf TempMin_1,W; btfss STATUS,C ;¿C=1? (TempMin_1) >= TempSensor_1; goto Menor_1
;goto MayorIgual_1 ;sobra
;MayorIgual_1;C=1 Entonces ha sido (TempMin_1 ó TempMax_1) >= TempSensor_1
; btfsc STATUS,Z ;SI (Z)=1 SON IGUALES Y EN ESE CASO ACTIVAR LA SALIDA para que se active desde el valor mínimo al máximo que establezcamos; goto Menor_1; bcf PORTC,1 ;Desactiva la salida 1 de PORTC
; goto VisualizaTermometro_LCD_2 ;***Para salir y continuar con las siguientes instrucciones Sería AL VisualizaTermometro_LCD_2
;Menor_1; bsf PORTC,1 ;Activa la salida 0 de PORTC
; movf TempSensor_1,W ;valor absoluto de Temperatura del "Sensor 2"; subwf TempMax_1,W ;(TempMax_1)- (TempSensor_1); btfss STATUS,C ;¿C=1? (TempMax_1) >= TempSensor_1; goto MayorIgual_1 ;"Desactiva la Salida Estará activa sólo entre la TempMin y la TempMax"
;------------------------------------------------------------------
;-----------------PARA VER EN LCD LA TEMPERATURA DEL Sensor_2---------------------;-------------------ESTE COMIENZA EN LA LÍNEA 2 posición .3 -------------------------
VisualizaTermometro_LCD_2 ;EN PANTALLA LCD
;---------------------------------------
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto No_PC_2_1 ;
;-------------------------------------
;+++++++++++++++++++++++++++++++++++++++++++++++++++++;SOBRA EL goto no_pc_2 de arriba; 2º CORTE , NO HACE FALTA LLAMAR POR HABERLO YA HECHO DESDE EL PRIMER SENSOR
movlw MensajesAlPC_SENSOR ;carga la primera posición del mensaje "SENSOR "
16
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
call RS232_Mensaje ;lo visualiza en el PC
movlw MensajesAlPC_Sensor3 ;carga la primera posición del mensaje "3: "call RS232_Mensaje ;lo visualiza en el PC
; movlw MensajesAlPC_Sensor3 ;carga la primera posición del mensaje "SENSOR 3: "; call RS232_Mensaje ;lo visualiza en el PC
;++++++++++++++++++++++++++++++++++++++++++++++++++++
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PCNo_PC_2_1 ; éste es el segundo salto para no reflejar en PC;-------------------------------------
movlw .3 ; Se coloca para visualización en la T3: T4:XXºcall LCD_PosicionLinea2 ; SEGUNDA línea.btfss TempSigno_2,7 ; ¿Temperatura negativa?.goto TemperaturaPositiva_2 ; No, la temperatura es positiva.
TemperaturaNegativa_2
;Si el el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco:movf TempSensor_2,Fbtfsc STATUS,Z ;¿Es cero?, ¿Z=1? Si Z=1 "el Registro vale 0"goto EliminarMenosCero_2 ;Si el valor es cero eliminar el menos -0º
;si es Z=0 el registro NO vale 0 por tanto escribir -
;Si el registro No vale Cero ponerle el signo -
movlw '-' ; Visualiza el signo "-" de temperatura negativa.call LCD_Caracter
;---------------------------------------------------------------------------------------;activar El "Flag_Es_Negativo" Para ver o no ver el signo 'º' por falta de espacio en LCD
bsf Flag_Es_Negativo,0
;---------------------------------------------------------------------------------------
;_______________________________________________________________________
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto No_PC_2_2 ;
;-------------------------------------;PARA LLEVARLO AL PC En negativo
movlw '-' ; Visualiza el signo "-" de temperatura negativa. en el PC call RS232_EnviaDato
;---------------------------------------
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PCNo_PC_2_2 ; éste es el tercer salto para no reflejar en PC
nop ;se puede quitar
TemperaturaPositiva_2
movf TempSensor_2,W ; Visualiza el valor absoluto de la temperatura,
call BIN_a_BCD ; pasándola previamente a BCD.call Temperatura_En_LCD ;para ver la temperatura suprimiendo el cero no significativo ej
"089" saldrá "89"
;+++++++++++++AÑADIDO PARTE DECIMAL++++++++++++++++movf DS1624_Decimal_2,F ;para ver si tiene el valor .0º en cuyo caso no visualizarlo
en la LCD por falta de espaciobtfsc STATUS,Z ;Si Z=1 es CERO LA PARTE DECIMAL .0ºgoto Decimal_2_Es_Cero ;como es cero NO REPRESENTARLO y ponerle 'º'
;Si Z=0 NO ES CERO y por tanto visualizar el '.' y el 'º'
movlw '.' ; Visualiza el punto decimal.
17
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
call LCD_Caracter
movf DS1624_Decimal_2,W ;Visualiza la parte decimal
call LCD_Nibble ;Visualiza en el lugar actual de la pantalla el valor HEXADECIMAL que almacena el nibble bajo del registro (W). El
;nibble alto en (W) no es tenido en cuenta ej: si (W) = 0101 0110 se visualiza "6"
; si (W) es 1010 1110, se visualiza "E"
;------------lo he suprimido de la libreria Temperatura_a_LCD.INC-------------btfsc Flag_TresCaracteres,0 ;Si tiene tres Caracteres la parte entera NO PONER 'º' por
razón de NO TENER espaciogoto Continua_2 ;
;Se representa el signo "º"Decimal_2_Es_Cero
movlw MensajeGradoCentigrado ; En pantalla aparece "º".call LCD_Mensaje
;++++++++++++++++++++++++++++++++++++++++++++++++++++
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC ;ACTIVAR LAS SALIDAS comparando con los valores de la EEPROM programados
Continua_2
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto Histerisis_2 ;Se va a Activar o Desactivar la salida
;-------------------------------------;--------------------------------------------------------------
movf DS1624_Decimal_2,W ;para poder ver el valor en decimal de cada sensor librería "temperatura_a_PC.INC"
movwf DS1624_Decimal;--------------------------------------------------------------
movf TempSensor_2,W ; Visualiza el valor absoluto de la temperatura,
call Temperatura_En_PC ;Desde aquí se verán las centenas-decenas-unidades en el PC
; call RetornoCarro_Y_CambioLinea ; hace cambio de linea con retorno
;---------------------------------------------------------------------------------------;+++++ACTIVA LA SALIDA CORRESPONDIENTE ENTRE LOS VALORES DE HISTERISIS ESTABLECIDOS++++++;++++++ENTRE LA TempMin_2 y TempMax_2. Es decir sólo activa entre estos valores++++++++;---------------------------------------------------------------------------------------Histerisis_2
btfss TempSigno_2,7 ;Si el último bit es un "1" Es una temperatura Negativa.goto EsPositivo_2goto EsNegativo_2
EsPositivo_2
movf TempSensor_2,W ;Carga el Valor (+) de la Temperatura en (W)goto Activar_Desactivar_Salidas_2 ;Se va a Activar o Desactivar la salida
EsNegativo_2
movf GlobalNegativa_2,W ;Carga el Valor (-) de la Temperatura en (W) se encuentra en libreria "DS1624_Modificado_0.INC"
movwf TempSensor_2 ;y ya en VALOR NEGATIVO lo llevo a TempSensor_1;goto Activar_Desactivar_Salidas ;Se va a Activar o
Desactivar la salida
Activar_Desactivar_Salidas_2;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;-----------------------------------------------------------------;Si la Temperatura del Sensor (TempSensor_x)está por debajo de la TempMin_X estará activa la Salida. Y se mantendrá activa hasta;alcanzar la TempMax_X . Nota si partimos de una temperatura del sensor comprendida entre dichos valores No estará activa la salida;hasta quedar por debajo de la TempMini_X. ;(La otras instrucciones que tenía la salida estaría activa siempre que la temperatura del sensor estuviese entre los valores
18
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
; de la TempMin y la TempMax);-----------------------------------------------------------------
movf TempMax_2,Wsubwf TempSensor_2,Wbtfsc STATUS,C ;¿C=0? TempSensor_2 < (TempMax_2)bcf PORTC,2 ;Desactiva la salida 2 de PORTC por ser Mayor o igual la
TempMax_2 que la del TempSensor_2
movf TempMin_2,Wsubwf TempSensor_2,Wbtfss STATUS,C ;¿C=1? (TempMin_2) >= TempSensor_2bsf PORTC,2 ;Activa la salida 2 de PORTC por ser Mayor la TempMin_2 que
la del Sensor_2
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;-----------------PARA VER EN LCD LA TEMPERATURA DEL Sensor_3---------------------;-------------------ESTE COMIENZA EN LA LÍNEA 2 posición .11 -------------------------
VisualizaTermometro_LCD_3 ;EN PANTALLA LCD
;---------------------------------------
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto No_PC_3_1 ;
;-------------------------------------
;+++++++++++++++++++++++++++++++++++++++++++++++++++++;SOBRA EL goto no_pc_2 de arriba; 2º CORTE , NO HACE FALTA LLAMAR POR HABERLO YA HECHO DESDE EL PRIMER SENSOR
movlw MensajesAlPC_SENSOR ;carga la primera posición del mensaje "SENSOR "call RS232_Mensaje ;lo visualiza en el PC
movlw MensajesAlPC_Sensor4 ;carga la primera posición del mensaje "4: "call RS232_Mensaje ;lo visualiza en el PC
;---------------------------------------
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PCNo_PC_3_1 ; éste es el segundo salto para no reflejar en PC;-------------------------------------
movlw .11 ; Se coloca para visualización en la T3: T4:XXºcall LCD_PosicionLinea2 ; SEGUNDA línea.btfss TempSigno_3,7 ; ¿Temperatura negativa?.goto TemperaturaPositiva_3 ; No, la temperatura es positiva.
TemperaturaNegativa_3
;Si el el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco:movf TempSensor_3,Fbtfsc STATUS,Z ;¿Es cero?, ¿Z=1? Si Z=1 "el Registro vale 0"goto EliminarMenosCero_3 ;Si el valor es cero eliminar el menos -0º
;si es Z=0 el registro NO vale 0 por tanto escribir -
;Si el registro No vale Cero ponerle el signo -
movlw '-' ; Visualiza el signo "-" de temperatura negativa.call LCD_Caracter
;---------------------------------------------------------------------------------------;activar El "Flag_Es_Negativo" Para ver o no ver el signo 'º' por falta de espacio en LCD
bsf Flag_Es_Negativo,0
;---------------------------------------------------------------------------------------
;_______________________________________________________________________
19
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto No_PC_3_2 ;
;-------------------------------------;PARA LLEVARLO AL PC En negativo
movlw '-' ; Visualiza el signo "-" de temperatura negativa. en el PC call RS232_EnviaDato
;---------------------------------------
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PCNo_PC_3_2 ; éste es el tercer salto para no reflejar en PC
nop ;se puede quitar
TemperaturaPositiva_3
movf TempSensor_3,W ; Visualiza el valor absoluto de la temperatura,
call BIN_a_BCD ; pasándola previamente a BCD.call Temperatura_En_LCD ;para ver la temperatura suprimiendo el cero no significativo ej
"089" saldrá "89"
;+++++++++++++AÑADIDO PARTE DECIMAL++++++++++++++++movf DS1624_Decimal_3,F ;para ver si tiene el valor .0º en cuyo caso no visualizarlo
en la LCD por falta de espaciobtfsc STATUS,Z ;Si Z=1 es CERO LA PARTE DECIMAL .0ºgoto Decimal_3_Es_Cero ;como es cero NO REPRESENTARLO y ponerle 'º'
;Si Z=0 NO ES CERO y por tanto visualizar el '.' y el 'º'
movlw '.' ; Visualiza el punto decimal.call LCD_Caracter
movf DS1624_Decimal_3,W ;Visualiza la parte decimal
call LCD_Nibble ;Visualiza en el lugar actual de la pantalla el valor HEXADECIMAL que almacena el nibble bajo del registro (W). El
;nibble alto en (W) no es tenido en cuenta ej: si (W) = 0101 0110 se visualiza "6"
; si (W) es 1010 1110, se visualiza "E"
;------------lo he suprimido de la libreria Temperatura_a_LCD.INC-------------btfsc Flag_TresCaracteres,0 ;Si tiene tres Caracteres la parte entera NO PONER 'º' por
razón de NO TENER espaciogoto Continua_3 ;
;Se representa el signo "º"Decimal_3_Es_Cero
movlw MensajeGradoCentigrado ; En pantalla aparece "º".call LCD_Mensaje
;++++++++++++++++++++++++++++++++++++++++++++++++++++
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC ;ACTIVAR LAS SALIDAS comparando con los valores de la EEPROM programados
Continua_3
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto Histerisis_3 ;Se va a Activar o Desactivar la salida
;-------------------------------------;--------------------------------------------------------------
movf DS1624_Decimal_3,W ;para poder ver el valor en decimal de cada sensor librería "temperatura_a_PC.INC"
movwf DS1624_Decimal;--------------------------------------------------------------
movf TempSensor_3,W ; Visualiza el valor absoluto de la temperatura,
call Temperatura_En_PC ;Desde aquí se verán las centenas-decenas-unidades en el PC
; call RetornoCarro_Y_CambioLinea ; hace cambio de linea con retorno
20
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
;---------------------------------------------------------------------------------------;+++++ACTIVA LA SALIDA CORRESPONDIENTE ENTRE LOS VALORES DE HISTERISIS ESTABLECIDOS++++++;++++++ENTRE LA TempMin_3 y TempMax_3. Es decir sólo activa entre estos valores++++++++;---------------------------------------------------------------------------------------Histerisis_3
btfss TempSigno_3,7 ;Si el último bit es un "1" Es una temperatura Negativa.goto EsPositivo_3goto EsNegativo_3
EsPositivo_3
movf TempSensor_3,W ;Carga el Valor (+) de la Temperatura en (W)goto Activar_Desactivar_Salidas_3 ;Se va a Activar o Desactivar la salida
EsNegativo_3
movf GlobalNegativa_3,W ;Carga el Valor (-) de la Temperatura en (W) se encuentra en libreria "DS1624_Modificado_0.INC"
movwf TempSensor_3 ;y ya en VALOR NEGATIVO lo llevo a TempSensor_1;goto Activar_Desactivar_Salidas ;Se va a Activar o
Desactivar la salida
Activar_Desactivar_Salidas_3;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;-----------------------------------------------------------------;Si la Temperatura del Sensor (TempSensor_x)está por debajo de la TempMin_X estará activa la Salida. Y se mantendrá activa hasta;alcanzar la TempMax_X . Nota si partimos de una temperatura del sensor comprendida entre dichos valores No estará activa la salida;hasta quedar por debajo de la TempMini_X. ;(La otras instrucciones que tenía la salida estaría activa siempre que la temperatura del sensor estuviese entre los valores ; de la TempMin y la TempMax);-----------------------------------------------------------------
movf TempMax_3,Wsubwf TempSensor_3,Wbtfsc STATUS,C ;¿C=0? TempSensor_3 < (TempMax_3)bcf PORTC,3 ;Desactiva la salida 3 de PORTC por ser Mayor o igual la
TempMax_3 que la del TempSensor_3
movf TempMin_3,Wsubwf TempSensor_3,Wbtfss STATUS,C ;¿C=1? (TempMin_3) >= TempSensor_3bsf PORTC,3 ;Activa la salida 3 de PORTC por ser Mayor la TempMin_3 que
la del Sensor_3
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;-----------------PARA VER EN LCD LA TEMPERATURA DEL Sensor_4---------------------;-------------------ESTE COMIENZA EN LA LÍNEA 3 posición .3 -------------------------
VisualizaTermometro_LCD_4 ;EN PANTALLA LCD
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto No_PC_4_1 ;
;-------------------------------------
;+++++++++++++++++++++++++++++++++++++++++++++++++++++;SOBRA EL goto no_pc_2 de arriba; 2º CORTE , NO HACE FALTA LLAMAR POR HABERLO YA HECHO DESDE EL PRIMER SENSOR
movlw MensajesAlPC_SENSOR ;carga la primera posición del mensaje "SENSOR "call RS232_Mensaje ;lo visualiza en el PC
21
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
movlw MensajesAlPC_Sensor5 ;carga la primera posición del mensaje "5: "call RS232_Mensaje ;lo visualiza en el PC
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PCNo_PC_4_1 ; éste es el segundo salto para no reflejar en PC;-------------------------------------
movlw .3 ; Se coloca para visualización en la T5:XXº T6:call LCD_PosicionLinea3 ; primera línea.btfss TempSigno_4,7 ; ¿Temperatura negativa?.goto TemperaturaPositiva_4 ; No, la temperatura es positiva.
TemperaturaNegativa_4
;Si el el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco:movf TempSensor_4,Fbtfsc STATUS,Z ;¿Es cero?, ¿Z=1? Si Z=1 "el Registro vale 0"goto EliminarMenosCero_4 ;Si el valor es cero eliminar el menos -0º
;si es Z=0 el registro NO vale 0 por tanto escribir -
;Si el registro No vale Cero ponerle el signo -
movlw '-' ; Visualiza el signo "-" de temperatura negativa.call LCD_Caracter
;---------------------------------------------------------------------------------------;activar El "Flag_Es_Negativo" Para ver o no ver el signo 'º' por falta de espacio en LCD
bsf Flag_Es_Negativo,0
;---------------------------------------------------------------------------------------
;_______________________________________________________________________
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto No_PC_4_2 ;
;-------------------------------------;PARA LLEVARLO AL PC En negativo
movlw '-' ; Visualiza el signo "-" de temperatura negativa. en el PC call RS232_EnviaDato
;---------------------------------------
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PCNo_PC_4_2 ; éste es el tercer salto para no reflejar en PC;-------------------------------------nop ;se puede quitar
TemperaturaPositiva_4
movf TempSensor_4,W ; Visualiza el valor absoluto de la temperatura,
call BIN_a_BCD ; pasándola previamente a BCD.call Temperatura_En_LCD ;para ver la temperatura suprimiendo el cero no significativo ej
"089" saldrá "89"
;+++++++++++++AÑADIDO PARTE DECIMAL++++++++++++++++movf DS1624_Decimal_4,F ;para ver si tiene el valor .0º en cuyo caso no visualizarlo
en la LCD por falta de espaciobtfsc STATUS,Z ;Si Z=1 es CERO LA PARTE DECIMAL .0ºgoto Decimal_4_Es_Cero ;como es cero NO REPRESENTARLO y ponerle 'º'
;Si Z=0 NO ES CERO y por tanto visualizar el '.' y el 'º'
movlw '.' ; Visualiza el punto decimal.call LCD_Caracter
movf DS1624_Decimal_4,W ;Visualiza la parte decimal
call LCD_Nibble ;Visualiza en el lugar actual de la pantalla el valor HEXADECIMAL que almacena el nibble bajo del registro (W). El
;nibble alto en (W) no es tenido en cuenta ej: si (W) = 0101 0110 se visualiza "6"
22
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
; si (W) es 1010 1110, se visualiza "E"
;------------lo he suprimido de la libreria Temperatura_a_LCD.INC-------------btfsc Flag_TresCaracteres,0 ;Si tiene tres Caracteres la parte entera NO PONER 'º' por
razón de NO TENER espaciogoto Continua_4 ;
;Se representa el signo "º"Decimal_4_Es_Cero
movlw MensajeGradoCentigrado ; En pantalla aparece "º".call LCD_Mensaje
;++++++++++++++++++++++++++++++++++++++++++++++++++++
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC ;ACTIVAR LAS SALIDAS comparando con los valores de la EEPROM programados
Continua_4
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto Histerisis_4 ;Se va a Activar o Desactivar la salida ;;;;;No_PC_4 ;
;-------------------------------------;--------------------------------------------------------------
movf DS1624_Decimal_4,W ;para poder ver el valor en decimal de cada sensor librería "temperatura_a_PC.INC"
movwf DS1624_Decimal;--------------------------------------------------------------
movf TempSensor_4,W ; Visualiza el valor absoluto de la temperatura,
call Temperatura_En_PC ;Desde aquí se verán las centenas-decenas-unidades en el PC
; call RetornoCarro_Y_CambioLinea ; hace cambio de linea con retorno
;---------------------------------------------------------------------------------------;+++++ACTIVA LA SALIDA CORRESPONDIENTE ENTRE LOS VALORES DE HISTERISIS ESTABLECIDOS++++++;++++++ENTRE LA TempMin_4 y TempMax_4. Es decir sólo activa entre estos valores++++++++;---------------------------------------------------------------------------------------Histerisis_4
btfss TempSigno_4,7 ;Si el último bit es un "1" Es una temperatura Negativa.goto EsPositivo_4goto EsNegativo_4
EsPositivo_4
movf TempSensor_4,W ;Carga el Valor (+) de la Temperatura en (W)goto Activar_Desactivar_Salidas_4 ;Se va a Activar o Desactivar la salida
EsNegativo_4
movf GlobalNegativa_4,W ;Carga el Valor (-) de la Temperatura en (W) se encuentra en libreria "DS1624_Modificado_0.INC"
movwf TempSensor_4 ;y ya en VALOR NEGATIVO lo llevo a TempSensor_1;goto Activar_Desactivar_Salidas ;Se va a Activar o
Desactivar la salida
Activar_Desactivar_Salidas_4;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;-----------------------------------------------------------------;Si la Temperatura del Sensor (TempSensor_x)está por debajo de la TempMin_X estará activa la Salida. Y se mantendrá activa hasta;alcanzar la TempMax_X . Nota si partimos de una temperatura del sensor comprendida entre dichos valores No estará activa la salida;hasta quedar por debajo de la TempMini_X. ;(La otras instrucciones que tenía la salida estaría activa siempre que la temperatura del sensor estuviese entre los valores ; de la TempMin y la TempMax);-----------------------------------------------------------------
movf TempMax_4,Wsubwf TempSensor_4,Wbtfsc STATUS,C ;¿C=0? TempSensor_4 < (TempMax_4)bcf PORTC,4 ;Desactiva la salida 4 de PORTC por ser Mayor o igual la
TempMax_4 que la del TempSensor_4
23
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
movf TempMin_4,Wsubwf TempSensor_4,Wbtfss STATUS,C ;¿C=1? (TempMin_4) >= TempSensor_4bsf PORTC,4 ;Activa la salida 4 de PORTC por ser Mayor la TempMin_4 que
la del Sensor_4
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;-----------------PARA VER EN LCD LA TEMPERATURA DEL Sensor_5---------------------;-------------------ESTE COMIENZA EN LA LÍNEA 3 posición .11 -------------------------
VisualizaTermometro_LCD_5 ;EN PANTALLA LCD
;---------------------------------------
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto No_PC_5_1 ;
;-------------------------------------
;+++++++++++++++++++++++++++++++++++++++++++++++++++++;SOBRA EL goto no_pc_2 de arriba; 2º CORTE , NO HACE FALTA LLAMAR POR HABERLO YA HECHO DESDE EL PRIMER SENSOR
movlw MensajesAlPC_SENSOR ;carga la primera posición del mensaje "SENSOR "call RS232_Mensaje ;lo visualiza en el PC
movlw MensajesAlPC_Sensor6 ;carga la primera posición del mensaje "6: "call RS232_Mensaje ;lo visualiza en el PC
; movlw MensajesAlPC_Sensor6 ;carga la primera posición del mensaje "SENSOR 6: "; call RS232_Mensaje ;lo visualiza en el PC
;++++++++++++++++++++++++++++++++++++++++++++++++++++
;EL TABULADOR NO ACTÚA EN EL PROTEUS PERO LUEGO EN LA PRÁCTICA SÍ ACTÚA. ver ejemplo "Termometro_4_LM35"; movlw TabuladorH ;Un tabulador horizontal; call RS232_EnviaDato
;------------------------------------------------
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PCNo_PC_5_1 ; éste es el segundo salto para no reflejar en PC;-------------------------------------
movlw .11 ; Se coloca para visualización en la T5: T6:XXºcall LCD_PosicionLinea3 ; TERCERA línea.btfss TempSigno_5,7 ; ¿Temperatura negativa?.goto TemperaturaPositiva_5 ; No, la temperatura es positiva.
TemperaturaNegativa_5
;Si el el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco:movf TempSensor_5,Fbtfsc STATUS,Z ;¿Es cero?, ¿Z=1? Si Z=1 "el Registro vale 0"goto EliminarMenosCero_5 ;Si el valor es cero eliminar el menos -0º
;si es Z=0 el registro NO vale 0 por tanto escribir -
;Si el registro No vale Cero ponerle el signo -
movlw '-' ; Visualiza el signo "-" de temperatura negativa.call LCD_Caracter
;---------------------------------------------------------------------------------------;activar El "Flag_Es_Negativo" Para ver o no ver el signo 'º' por falta de espacio en LCD
bsf Flag_Es_Negativo,0
24
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
;---------------------------------------------------------------------------------------
;_______________________________________________________________________
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto No_PC_5_2 ;
;-------------------------------------;PARA LLEVARLO AL PC En negativo
movlw '-' ; Visualiza el signo "-" de temperatura negativa. en el PC call RS232_EnviaDato
;---------------------------------------
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PCNo_PC_5_2 ; éste es el tercer salto para no reflejar en PC;-------------------------------------nop ;se puede quitar
TemperaturaPositiva_5
movf TempSensor_5,W ; Visualiza el valor absoluto de la temperatura,
call BIN_a_BCD ; pasándola previamente a BCD.call Temperatura_En_LCD ;para ver la temperatura suprimiendo el cero no significativo ej
"089" saldrá "89"
;+++++++++++++AÑADIDO PARTE DECIMAL++++++++++++++++movf DS1624_Decimal_5,F ;para ver si tiene el valor .0º en cuyo caso no visualizarlo
en la LCD por falta de espaciobtfsc STATUS,Z ;Si Z=1 es CERO LA PARTE DECIMAL .0ºgoto Decimal_5_Es_Cero ;como es cero NO REPRESENTARLO y ponerle 'º'
;Si Z=0 NO ES CERO y por tanto visualizar el '.' y el 'º'
movlw '.' ; Visualiza el punto decimal.call LCD_Caracter
movf DS1624_Decimal_5,W ;Visualiza la parte decimal
call LCD_Nibble ;Visualiza en el lugar actual de la pantalla el valor HEXADECIMAL que almacena el nibble bajo del registro (W). El
;nibble alto en (W) no es tenido en cuenta ej: si (W) = 0101 0110 se visualiza "6"
; si (W) es 1010 1110, se visualiza "E"
;------------lo he suprimido de la libreria Temperatura_a_LCD.INC-------------btfsc Flag_TresCaracteres,0 ;Si tiene tres Caracteres la parte entera NO PONER 'º' por
razón de NO TENER espaciogoto Continua_5 ;
;Se representa el signo "º"Decimal_5_Es_Cero
movlw MensajeGradoCentigrado ; En pantalla aparece "º".call LCD_Mensaje
;++++++++++++++++++++++++++++++++++++++++++++++++++++
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC ;ACTIVAR LAS SALIDAS comparando con los valores de la EEPROM programados
Continua_5
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto Histerisis_5 ;Se va a Activar o Desactivar la salida
;-------------------------------------;--------------------------------------------------------------
movf DS1624_Decimal_5,W ;para poder ver el valor en decimal de cada sensor librería "temperatura_a_PC.INC"
movwf DS1624_Decimal;--------------------------------------------------------------
movf TempSensor_5,W ; Visualiza el valor absoluto de la temperatura,
25
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
call Temperatura_En_PC ;Desde aquí se verán las centenas-decenas-unidades en el PC
; call RetornoCarro_Y_CambioLinea ; hace cambio de linea con retorno
;---------------------------------------------------------------------------------------;+++++ACTIVA LA SALIDA CORRESPONDIENTE ENTRE LOS VALORES DE HISTERISIS ESTABLECIDOS++++++;++++++ENTRE LA TempMin_5 y TempMax_5. Es decir sólo activa entre estos valores++++++++;---------------------------------------------------------------------------------------Histerisis_5
btfss TempSigno_5,7 ;Si el último bit es un "1" Es una temperatura Negativa.goto EsPositivo_5goto EsNegativo_5
EsPositivo_5
movf TempSensor_5,W ;Carga el Valor (+) de la Temperatura en (W)goto Activar_Desactivar_Salidas_5 ;Se va a Activar o Desactivar la salida
EsNegativo_5
movf GlobalNegativa_5,W ;Carga el Valor (-) de la Temperatura en (W) se encuentra en libreria "DS1624_Modificado_0.INC"
movwf TempSensor_5 ;y ya en VALOR NEGATIVO lo llevo a TempSensor_5;goto Activar_Desactivar_Salidas ;Se va a Activar o
Desactivar la salida
Activar_Desactivar_Salidas_5;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;-----------------------------------------------------------------;Si la Temperatura del Sensor (TempSensor_x)está por debajo de la TempMin_X estará activa la Salida. Y se mantendrá activa hasta;alcanzar la TempMax_X . Nota si partimos de una temperatura del sensor comprendida entre dichos valores No estará activa la salida;hasta quedar por debajo de la TempMini_X. ;(La otras instrucciones que tenía la salida estaría activa siempre que la temperatura del sensor estuviese entre los valores ; de la TempMin y la TempMax);-----------------------------------------------------------------
movf TempMax_5,Wsubwf TempSensor_5,Wbtfsc STATUS,C ;¿C=0? TempSensor_5 < (TempMax_5)bcf PORTC,5 ;Desactiva la salida 5 de PORTC por ser Mayor o igual la
TempMax_5 que la del TempSensor_5
movf TempMin_5,Wsubwf TempSensor_5,Wbtfss STATUS,C ;¿C=1? (TempMin_5) >= TempSensor_5bsf PORTC,5 ;Activa la salida 5 de PORTC por ser Mayor la TempMin_5 que
la del Sensor_5
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;-----------------PARA VER EN LCD LA TEMPERATURA DEL Sensor_6---------------------;-------------------ESTE COMIENZA EN LA LÍNEA 4 posición .3 -------------------------
VisualizaTermometro_LCD_6 ;EN PANTALLA LCD
;---------------------------------------
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto No_PC_6_1 ;
;-------------------------------------
;+++++++++++++++++++++++++++++++++++++++++++++++++++++;SOBRA EL goto no_pc_2 de arriba; 2º CORTE , NO HACE FALTA LLAMAR POR HABERLO YA HECHO DESDE EL PRIMER SENSOR
26
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
movlw MensajesAlPC_SENSOR ;carga la primera posición del mensaje "SENSOR "call RS232_Mensaje ;lo visualiza en el PC
movlw MensajesAlPC_Sensor7 ;carga la primera posición del mensaje "1: "call RS232_Mensaje ;lo visualiza en el PC
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PCNo_PC_6_1 ; éste es el segundo salto para no reflejar en PC;-------------------------------------
movlw .3 ; Se coloca para visualización en la T7:XXº T8:call LCD_PosicionLinea4 ; CUARTA línea.btfss TempSigno_6,7 ; ¿Temperatura negativa?.goto TemperaturaPositiva_6 ; No, la temperatura es positiva.
TemperaturaNegativa_6
;Si el el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco:movf TempSensor_6,Fbtfsc STATUS,Z ;¿Es cero?, ¿Z=1? Si Z=1 "el Registro vale 0"goto EliminarMenosCero_6 ;Si el valor es cero eliminar el menos -0º
;si es Z=0 el registro NO vale 0 por tanto escribir -
;Si el registro No vale Cero ponerle el signo -
movlw '-' ; Visualiza el signo "-" de temperatura negativa.call LCD_Caracter
;---------------------------------------------------------------------------------------;activar El "Flag_Es_Negativo" Para ver o no ver el signo 'º' por falta de espacio en LCD
bsf Flag_Es_Negativo,0
;---------------------------------------------------------------------------------------
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto No_PC_6_2 ;
;-------------------------------------;PARA LLEVARLO AL PC En negativo
movlw '-' ; Visualiza el signo "-" de temperatura negativa. en el PC call RS232_EnviaDato
;---------------------------------------
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PCNo_PC_6_2 ; éste es el tercer salto para no reflejar en PC
nop ;se puede quitar
TemperaturaPositiva_6
movf TempSensor_6,W ; Visualiza el valor absoluto de la temperatura,
call BIN_a_BCD ; pasándola previamente a BCD.call Temperatura_En_LCD ;para ver la temperatura suprimiendo el cero no significativo ej
"089" saldrá "89"
;+++++++++++++AÑADIDO PARTE DECIMAL++++++++++++++++movf DS1624_Decimal_6,F ;para ver si tiene el valor .0º en cuyo caso no visualizarlo
en la LCD por falta de espaciobtfsc STATUS,Z ;Si Z=1 es CERO LA PARTE DECIMAL .0ºgoto Decimal_6_Es_Cero ;como es cero NO REPRESENTARLO y ponerle 'º'
;Si Z=0 NO ES CERO y por tanto visualizar el '.' y el 'º'
movlw '.' ; Visualiza el punto decimal.call LCD_Caracter
movf DS1624_Decimal_6,W ;Visualiza la parte decimal
call LCD_Nibble ;Visualiza en el lugar actual de la pantalla el valor HEXADECIMAL
27
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
que almacena el nibble bajo del registro (W). El;nibble alto en (W) no es tenido en cuenta ej: si (W) = 0101 0110 se
visualiza "6"; si (W) es 1010 1110, se visualiza "E"
;------------lo he suprimido de la libreria Temperatura_a_LCD.INC-------------btfsc Flag_TresCaracteres,0 ;Si tiene tres Caracteres la parte entera NO PONER 'º' por
razón de NO TENER espaciogoto Continua_6 ;
;Se representa el signo "º"Decimal_6_Es_Cero
movlw MensajeGradoCentigrado ; En pantalla aparece "º".call LCD_Mensaje
;++++++++++++++++++++++++++++++++++++++++++++++++++++
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC ;ACTIVAR LAS SALIDAS comparando con los valores de la EEPROM programados
Continua_6
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto Histerisis_6 ;Se va a Activar o Desactivar la salida ;;;;;No_PC_4 ;
;-------------------------------------;--------------------------------------------------------------
movf DS1624_Decimal_6,W ;para poder ver el valor en decimal de cada sensor librería "temperatura_a_PC.INC"
movwf DS1624_Decimal;--------------------------------------------------------------
movf TempSensor_6,W ; Visualiza el valor absoluto de la temperatura,
call Temperatura_En_PC ;Desde aquí se verán las centenas-decenas-unidades en el PC
; call RetornoCarro_Y_CambioLinea ; hace cambio de linea con retorno
;---------------------------------------------------------------------------------------;+++++ACTIVA LA SALIDA CORRESPONDIENTE ENTRE LOS VALORES DE HISTERISIS ESTABLECIDOS++++++;++++++ENTRE LA TempMin_6 y TempMax_6. Es decir sólo activa entre estos valores++++++++;---------------------------------------------------------------------------------------Histerisis_6
btfss TempSigno_6,7 ;Si el último bit es un "1" Es una temperatura Negativa.goto EsPositivo_6goto EsNegativo_6
EsPositivo_6
movf TempSensor_6,W ;Carga el Valor (+) de la Temperatura en (W)goto Activar_Desactivar_Salidas_6 ;Se va a Activar o Desactivar la salida
EsNegativo_6
movf GlobalNegativa_6,W ;Carga el Valor (-) de la Temperatura en (W) se encuentra en libreria "DS1624_Modificado_0.INC"
movwf TempSensor_6 ;y ya en VALOR NEGATIVO lo llevo a TempSensor_1;goto Activar_Desactivar_Salidas ;Se va a Activar o
Desactivar la salida
Activar_Desactivar_Salidas_6;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;-----------------------------------------------------------------;Si la Temperatura del Sensor (TempSensor_x)está por debajo de la TempMin_X estará activa la Salida. Y se mantendrá activa hasta;alcanzar la TempMax_X . Nota si partimos de una temperatura del sensor comprendida entre dichos valores No estará activa la salida;hasta quedar por debajo de la TempMini_X. ;(La otras instrucciones que tenía la salida estaría activa siempre que la temperatura del sensor estuviese entre los valores ; de la TempMin y la TempMax);-----------------------------------------------------------------
movf TempMax_6,Wsubwf TempSensor_6,Wbtfsc STATUS,C ;¿C=0? TempSensor_6 < (TempMax_6)
28
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
bcf PORTC,6 ;Desactiva la salida 6 de PORTC por ser Mayor o igual la TempMax_6 que la del TempSensor_6
movf TempMin_6,Wsubwf TempSensor_6,Wbtfss STATUS,C ;¿C=1? (TempMin_6) >= TempSensor_6bsf PORTC,6 ;Activa la salida 6 de PORTC por ser Mayor la TempMin_6 que
la del Sensor_6
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;-----------------PARA VER EN LCD LA TEMPERATURA DEL Sensor_7---------------------;-------------------ESTE COMIENZA EN LA LÍNEA 4 posición .11 -------------------------
VisualizaTermometro_LCD_7 ;EN PANTALLA LCD
;---------------------------------------
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto No_PC_7_1 ;
;-------------------------------------
;+++++++++++++++++++++++++++++++++++++++++++++++++++++;SOBRA EL goto no_pc_2 de arriba; 2º CORTE , NO HACE FALTA LLAMAR POR HABERLO YA HECHO DESDE EL PRIMER SENSOR
movlw MensajesAlPC_SENSOR ;carga la primera posición del mensaje "SENSOR "call RS232_Mensaje ;lo visualiza en el PC
movlw MensajesAlPC_Sensor8 ;carga la primera posición del mensaje "8: "call RS232_Mensaje ;lo visualiza en el PC
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PCNo_PC_7_1 ; éste es el segundo salto para no reflejar en PC;-------------------------------------
movlw .11 ; Se coloca para visualización en la T7: T8:XXºcall LCD_PosicionLinea4 ; TERCERA línea.btfss TempSigno_7,7 ; ¿Temperatura negativa?.goto TemperaturaPositiva_7 ; No, la temperatura es positiva.
TemperaturaNegativa_7
;Si el el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco:movf TempSensor_7,Fbtfsc STATUS,Z ;¿Es cero?, ¿Z=1? Si Z=1 "el Registro vale 0"goto EliminarMenosCero_7 ;Si el valor es cero eliminar el menos -0º
;si es Z=0 el registro NO vale 0 por tanto escribir -
;Si el registro No vale Cero ponerle el signo -
movlw '-' ; Visualiza el signo "-" de temperatura negativa.call LCD_Caracter
;---------------------------------------------------------------------------------------;activar El "Flag_Es_Negativo" Para ver o no ver el signo 'º' por falta de espacio en LCD
bsf Flag_Es_Negativo,0
;---------------------------------------------------------------------------------------
;_______________________________________________________________________
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto No_PC_7_2 ;
;-------------------------------------
29
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
;PARA LLEVARLO AL PC En negativomovlw '-' ; Visualiza el signo "-" de temperatura negativa. en el PC call RS232_EnviaDato
;---------------------------------------
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC
No_PC_7_2 ; éste es el tercer salto para no reflejar en PC;-------------------------------------nop ;se puede quitar
TemperaturaPositiva_7
movf TempSensor_7,W ; Visualiza el valor absoluto de la temperatura,
call BIN_a_BCD ; pasándola previamente a BCD.call Temperatura_En_LCD ;para ver la temperatura suprimiendo el cero no significativo ej
"089" saldrá "89"
;+++++++++++++AÑADIDO PARTE DECIMAL++++++++++++++++movf DS1624_Decimal_7,F ;para ver si tiene el valor .0º en cuyo caso no visualizarlo
en la LCD por falta de espaciobtfsc STATUS,Z ;Si Z=1 es CERO LA PARTE DECIMAL .0ºgoto Decimal_7_Es_Cero ;como es cero NO REPRESENTARLO y ponerle 'º'
;Si Z=0 NO ES CERO y por tanto visualizar el '.' y el 'º'
movlw '.' ; Visualiza el punto decimal.call LCD_Caracter
movf DS1624_Decimal_7,W ;Visualiza la parte decimal
call LCD_Nibble ;Visualiza en el lugar actual de la pantalla el valor HEXADECIMAL que almacena el nibble bajo del registro (W). El
;nibble alto en (W) no es tenido en cuenta ej: si (W) = 0101 0110 se visualiza "6"
; si (W) es 1010 1110, se visualiza "E"
;------------lo he suprimido de la libreria Temperatura_a_LCD.INC-------------btfsc Flag_TresCaracteres,0 ;Si tiene tres Caracteres la parte entera NO PONER 'º' por
razón de NO TENER espaciogoto Continua_7 ;
;Se representa el signo "º"Decimal_7_Es_Cero
movlw MensajeGradoCentigrado ; En pantalla aparece "º".call LCD_Mensaje
;++++++++++++++++++++++++++++++++++++++++++++++++++++
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC ;ACTIVAR LAS SALIDAS comparando con los valores de la EEPROM programados
Continua_7
btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto Histerisis_7 ;Se va a Activar o Desactivar la salida
;--------SÍ QUIERO PC---------;--------------------------------------------------------------
movf DS1624_Decimal_7,W ;para poder ver el valor en decimal de cada sensor librería "temperatura_a_PC.INC"
movwf DS1624_Decimal;--------------------------------------------------------------
movf TempSensor_7,W ; Visualiza el valor absoluto de la temperatura,
call Temperatura_En_PC ;Desde aquí se verán las centenas-decenas-unidades en el PC
; call RetornoCarro_Y_CambioLinea ; hace cambio de linea con retorno
;---------------------------------------------------------------------------------------;+++++ACTIVA LA SALIDA CORRESPONDIENTE ENTRE LOS VALORES DE HISTERISIS ESTABLECIDOS++++++
30
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
;++++++ENTRE LA TempMin_7 y TempMax_7. Es decir sólo activa entre estos valores++++++++;---------------------------------------------------------------------------------------Histerisis_7
btfss TempSigno_7,7 ;Si el último bit es un "1" Es una temperatura Negativa.goto EsPositivo_7goto EsNegativo_7
EsPositivo_7
movf TempSensor_7,W ;Carga el Valor (+) de la Temperatura en (W)
goto Activar_Desactivar_Salidas_7 ;Se va a Activar o Desactivar la salida
EsNegativo_7
movf GlobalNegativa_7,W ;Carga el Valor (-) de la Temperatura en (W) se encuentra en libreria "DS1624_Modificado_0.INC"
movwf TempSensor_7 ;y ya en VALOR NEGATIVO lo llevo a TempSensor_1;goto Activar_Desactivar_Salidas ;Se va a Activar o Desactivar la
salida
Activar_Desactivar_Salidas_7;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;-----------------------------------------------------------------;Si la Temperatura del Sensor (TempSensor_x)está por debajo de la TempMin_X estará activa la Salida. Y se mantendrá activa hasta;alcanzar la TempMax_X . Nota si partimos de una temperatura del sensor comprendida entre dichos valores No estará activa la salida;hasta quedar por debajo de la TempMini_X. ;(La otras instrucciones que tenía la salida estaría activa siempre que la temperatura del sensor estuviese entre los valores ; de la TempMin y la TempMax);-----------------------------------------------------------------
movf TempMax_7,Wsubwf TempSensor_7,Wbtfsc STATUS,C ;¿C=0? TempSensor_7 < (TempMax_7)bcf PORTC,7 ;Desactiva la salida 7 de PORTC por ser Mayor o igual la
TempMax_7 que la del TempSensor_7
movf TempMin_7,Wsubwf TempSensor_7,Wbtfss STATUS,C ;¿C=1? (TempMin_7) >= TempSensor_7bsf PORTC,7 ;Activa la salida 7 de PORTC por ser Mayor la TempMin_7 que
la del Sensor_7
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;-----------------------------------------------------------------------------------------------call Tiempo_De_Muestreo_LCD_1; Esta en "TIEMPO_DE_MUESTREO.INC" por COMPARACION determina
;Si he elegido la opcion 1 ,2 ó 3 ; 10sg, 20 sg ó 1 Min;Es valido aunque se vaya la LUZ por estar en EEPROM
;-----------------------------------------------------------------------------------------------
goto Sensor_0; ;;;;***VisualizaTermometro_LCD_0 ;***Para salir y continuar con las siguientes instrucciones Sería AL VisualizaTermometro_LCD_2 Pero como no he puesto más vuelvo al inicial
;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PCNo_PC_4 ; éste es el tercer salto para no reflejar en PC;---------------------------------
;ESTE SERÁ EL VALOR POR DEFECTO EN CASO DE NO CONFIGURAR EN EL PC.
;si no se pone al reflejar el último sensor directamente se iria a Inicio y no se vería En la LCD;por ello poner un retraso Standar de por ej 10 sg
;;;; call Retardo_10s ;PARA REFLEJAR DURANTE 10sg los 4 últimos sensores;-----------------------------------------------------------------------------------------------
call Tiempo_De_Muestreo_LCD_1; Está en "TIEMPO_DE_MUESTREO.INC" por COMPARACION determina ;Si he elegido la opcion 1 ,2 ó 3 ; 10sg, 20 sg ó 1 Min;Es valido aunque se vaya la LUZ por estar en EEPROM
;-----------------------------------------------------------------------------------------------
31
OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera
goto Sensor_0 ;****Inicio;------------------------------------------------------------------
;NO NECESITA PONER UN RETORNO YA QUE todo está en "Repetir_Ciclo"
INCLUDE <BUS_I2C.INC>
INCLUDE <LCD_4BIT_4X20.INC> ;PARA PODER VER LA LECTURA EN EL LCD modifico la patilla RA1 PARA PODER UTILIZARLA En la Transimisón del Puerto Serie; INCLUDE <LCD_4BIT_Modificado.INC> ;PARA PODER VER LA LECTURA EN EL LCD modifico la patilla RA1 PARA PODER UTILIZARLA En la Transimisón del Puerto Serie
INCLUDE <LCD_MENS.INC>
;; INCLUDE <DS1624_RedondeoDecimal_Todos.INC> ;no lo utilizo porque el resultado es lo mismo a si lo empleo en la librería "DS1624_Modificado_0.INC"
INCLUDE <DS1624_Modificado_0.INC> ;modificado por mí para que pueda leer/escribir varios sensores.Tan solo debo modificar el programa principal
INCLUDE <DS1624_Modificado_1.INC> ;modificado por mí para que pueda leer/escribir varios sensores.Tan solo debo modificar el programa principal
INCLUDE <DS1624_Modificado_2.INC> ;modificado por mí para que pueda leer/escribir varios sensores.Tan solo debo modificar el programa principal
INCLUDE <DS1624_Modificado_3.INC> ;modificado por mí para que pueda leer/escribir varios sensores.Tan solo debo modificar el programa principal
INCLUDE <DS1624_Modificado_4.INC> ;modificado por mí para que pueda leer/escribir varios sensores.Tan solo debo modificar el programa principal
INCLUDE <DS1624_Modificado_5.INC> ;modificado por mí para que pueda leer/escribir varios sensores.Tan solo debo modificar el programa principal
INCLUDE <DS1624_Modificado_6.INC> ;modificado por mí para que pueda leer/escribir varios sensores.Tan solo debo modificar el programa principal
INCLUDE <DS1624_Modificado_7.INC> ;modificado por mí para que pueda leer/escribir varios sensores.Tan solo debo modificar el programa principal
INCLUDE <CONFIGURACION_DESDE_PC.INC>;AQUÍ ESTAN TODA LA CONFIGURACIÓN DEL COMIENZO; PROGRAMAR : SENSOR 1 AL 8 CON SUS Tmin y Tmax y la selección del tiempo de muestreo
INCLUDE <TIEMPO_DE_MUESTREO.INC> ;librería PARA SELECCIONAR EL TIEMPO DE MUESTREO Y GUARDAR SU VALOR EN "TiempoMuestreo"
INCLUDE <TEMPERATURAS_MIN_MAX.INC> ;Aqui están las rutinas para llevar SELECCIONAR DESDE EL PC las temperaturas MIN y MAX de cada sensor
INCLUDE <Temperatura_a_LCD.INC> ;rutina para ver en LCD la temperatura, suprimiendo los CEROS no significativos ej "012" saldrá "12"
INCLUDE <temperatura_a_PC.INC>INCLUDE <BIN_BCD.INC>INCLUDE <RETARDOS.INC>
INCLUDE <RS232_Modificado.INC> ;lo modifico para poner PORTA,5 ; Línea por la que se reciben los datos
; y PORTA,1 ; Línea por la que se envían los datos.
INCLUDE <RS232MEN.INC>INCLUDE <EEPROM_16F87X.INC> ;Para leer y escribir en la EEPROM y así poder tener datos
de las TempMin y TempMax para activar Cada una de las salidas
END
.
32
:020000040000FA:100000000629820720340034BA34003454343134A1:100010003A340034543432343A34003454343334BF:100020003A340034543434343A34003454343534AB:100030003A340034543436343A3400345434373497:100040003A340034543438343A34003420342034D0:10005000453453345034453452344534003420341C:1000600020344C346534793465346E3464346F3400:100070002034533465346E3473346F3472346534E1:10008000733400340A340D34503452344F3447340E:10009000523441344D34413452343A3400340A3409:1000A0000D340D34533445344E3453344F345234BC:1000B0002034003431343A342034003432343A3489:1000C0002034003433343A342034003434343A3475:1000D0002034003435343A342034003436343A3461:1000E0002034003437343A342034003438343A344D:1000F000203400340A340D340D3454346D346934F2:100100006E343A34203400340A340D340D3454340F:100110006D34613478343A3420340034203431344E:1001200030342034533467340034203432343034A3:1001300020345334673400342034313420344D3487:1001400069346E3400340A340D340D34533445347C:100150004C3445344334433449344F344E344134C1:10016000523420345434493445344D3450344F34AF:1001700020344434453420344D34553445345334DC:100180005434523445344F3420343A3420340A3411:100190000D340D34313420343D3420343134303496:1001A0002034533467340A340D34323420343D342F:1001B0002034323430342034533467340A340D342C:1001C000333420343D342034313420344D346934D8:1001D0006E340A340D34003445344C3445344734DD:1001E000493444344F34003482070034013401343C:1001F000023403340334043404340534063406343E:1002000007340834083409340934071783160330D7:100210008600870106309F00831286018701DE0178:10022000E401A001A101A201A301A401A501A6016D:10023000A701E701B0236127CA270530E62326304E:100240003C24E0232F303C24642451277424A00054:100250005508A8005408B000861832293727861898:100260003229892994245127A424A1005508A900E2:100270005408B100B1245127C124A2005508AA0096:100280005408B200CE245127DE24A3005508AB0049:100290005408B300EB245127FB24A4005508AC00FC:1002A0005408B400082551271825A5005508AD00AD:1002B0005408B500861860293727861860298929CF:1002C000252551273525A6005508AE005408B6004F:1002D000422551275225A7005508AF005408B70002:1002E00089290230F923C9290230F923022A023070:1002F000F9233A2A0230F923722A0230F923AA2A72:100300000230F923E22A0230F9231A2B0230F923B2:10031000522BF423AF265F2D061CA7290130DE00E7:10032000F701C0275E0203199F290C307727312778:100330000D30772766250000A3308827FE25061C90:10034000A7290D3077274F3088275A308827033068
1
:10035000E623A81FB529A008031971292D30F92318:100360006714061CB5292D30772720080727922609:10037000B0080319C1292E30F9233008312466183A:10038000C32904303C24061CC9293008D4002008A5:10039000CC26CA27A81FCD29CF292008D129560845:1003A000A000390820020318071038082002031C97:1003B0000714061CDF294F3088275E3088270B3052:1003C000E623A91FEE29A108031974292D30F9236A:1003D0006714061CED292D30772700002108072718:1003E0009226B1080319FA292E30F9233108312455:1003F0006618FC2904303C24061C022A3108D4006B:100400002108CC26A91F052A072A2108092A5708EE:10041000A1003B082102031887103A082102031C9F:100420008714061C172A4F3088276230882703302C:10043000E823AA1F262AA208031977292D30F923B9:100440006714061C252A2D3077270000220807276D:100450009226B2080319322A2E30F92332083124A9:100460006618342A04303C24061C3A2A3208D40088:100470002208CC26AA1F3D2A3F2A2208412A5808D2:10048000A2003D082202031807113C082202031CA7:100490000715061C4F2A4F308827663088270B30F7:1004A000E823AB1F5E2AA30803197A292D30F9230C:1004B0006714061C5D2A2D307727000023080727C4:1004C0009226B30803196A2A2E30F92333083124FF:1004D00066186C2A04303C24061C722A3308D400A7:1004E0002308CC26AB1F752A772A2308792A5908B6:1004F000A3003F082302031887113E082302031CB0:100500008715061C872A4F3088276A3088270330D2:10051000EA23AC1F962AA40803197D292D30F9235C:100520006714061C952A2D3077270000240807271A:100530009226B4080319A22A2E30F9233408312454:100540006618A42A04303C24061CAA2A3408D400C5:100550002408CC26AC1FAD2AAF2A2408B12A5A0899:10056000A400410824020318071240082402031CB7:100570000716061CBF2A4F3088276E3088270B309D:10058000EA23AD1FCE2AA508031980292D30F923AF:100590006714061CCD2A2D30772700002508072771:1005A0009226B5080319DA2A2E30F92335083124AA:1005B0006618DC2A04303C24061CE22A3508D400E4:1005C0002508CC26AD1FE52AE72A2508E92A5B087D:1005D000A500430825020318871242082502031CC0:1005E0008716061CF72A4F30882772308827033079:1005F000EC23AE1F062BA608031983292D30F923FF:100600006714061C052B2D307727000026080727C6:100610009226B6080319122B2E30F92336083124FE:100620006618142B04303C24061C1A2B3608D40000:100630002608CC26AE1F1D2B1F2B2608212B5C085D:10064000A600450826020318071344082602031CC7:100650000717061C2F2B4F308827763088270B3042:10066000EC23AF1F3E2BA708031986292D30F92351:100670006714061C3D2B2D3077270000270807271D:100680009226B70803194A2B2E30F9233708312454:1006900066184C2B04303C24061C522B3708D4001F:1006A0002708CC26AF1F552B572B2708592B5D0841
2
:1006B000A700470827020318871346082702031CD0:1006C00087174426242944262429831605128312D9:1006D000051208008316051683120800831685117B:1006E000831285110800831685158312851D762BCC:1006F00008006A2373232027652320276E232027E1:1007000008006523732320276A2320270800C900D7:100710000830C800C90D03188F2B6523902B6A235E:10072000732320276E232027C80B8A2B6A23732369:1007300020276E23202708000830C8006A2373236F:100740000310051A0314C90D6E232027C80B9F2B15:100750004A1C6523732320276E232027490808009D:100760008316051005118312051105103727303047:10077000C8233B273030C82324273030C8232C27F8:100780002030C8232C27F623F423F223DC2308008F:10079000F039CB0006080F39CB0483160608CD00CC:1007A0000F30860583124B08860005150511831648:1007B0004D088600831208000630F72B8030F72B97:1007C000C030F72B9430F72BD430F72B8038F72B31:1007D000C038F72B9438F72BD438F72B0830F72B89:1007E0000E30F72B0C30F72B0130F72B283005108B:1007F000FB2B05140324CC00C8234C0EC823051C76:100800003D2729270800CB00F13C031D0A2CEE30C0:10081000CB00172C4B08D13C031D112CEE30CB0024:10082000172C4B08BA3C031D172CDF30CB004B08AC:1008300008001430202C0130202C0230202C0330F2:10084000CE002030F923CE0B212C0800CF00F03948:10085000031D2E2C2030F923302CCF004F0E3124D5:100860004F080F39CE00093C031C392C4E08303E8E:100870003B2C4E08373EF92BD0000130D002D0037C:1008800050080120D100D1080319492CF923D00ABE:10089000402C0800D0000130D002D003D201F42354:1008A00014305202031D592C312731271330D00246:1008B0004E2C50080120D100D1080319632CF923D4:1008C000D20AD00A502C080090308723AC308723FE:1008D0004B30872381236D240800792390308723B0:1008E000EE308723812308004A1079239030872334:1008F000AA3087237923913087239C23D300D60005:100900004A149C23D4008123D501D31F8E2CD509F2:10091000D409D3090130D4070318D30A540E0F3970:10092000F420D4005308080092308723AC3087238A:100930004B30872381239D2408007923923087231D:10094000EE308723812308004A10792392308723D1:10095000AA3087237923933087239C23D300D700A1:10096000802C94308723AC3087234B30872381231E:10097000BA240800792394308723EE30872381231B:1009800008004A10792394308723AA3087237923DB:10099000953087239C23D300D800802C9630872362:1009A000AC3087234B3087238123D7240800792359:1009B00096308723EE308723812308004A1079235D:1009C00096308723AA3087237923973087239C2367:1009D000D300D900802C98308723AC3087234B304C:1009E00087238123F4240800792398308723EE306D:1009F0008723812308004A10792398308723AA305F:100A000087237923993087239C23D300DA00802C15
3
:100A10009A308723AC3087234B30872381231125DD:100A2000080079239A308723EE308723812308003A:100A30004A1079239A308723AA30872379239B3061:100A400087239C23D300DB00802C9C308723AC3091:100A500087234B30872381232E25080079239C3060:100A60008723EE308723812308004A1079239C30A6:100A70008723AA30872379239D3087239C23D300A3:100A8000DC00802C9E308723AC3087234B308723BB:100A900081234B25080079239E308723EE3087235E:100AA000812308004A1079239E308723AA308723A8:100AB00079239F3087239C23D300DD00802C861868:100AC0008C29372786188C299F2798295E145E0861:100AD000F600F701AB27423088274F3088275A307D:100AE00088277A3088275B26B800F600F70AAB27FC:100AF000843088275B26B900F600F70AAB274F3011:100B000088275E3088277A3088275B26BA00F6006F:100B1000F70AAB27843088275B26BB00F600F70A6C:100B2000AB274F308827623088277A3088275B26AA:100B3000BC00F600F70AAB27843088275B26BD008F:100B4000F600F70AAB274F308827663088277A30BF:100B500088275B26BE00F600F70AAB27843088277B:100B60005B26BF00F600F70AAB274F3088276A30B4:100B700088277A3088275B26C000F600F70AAB2763:100B8000843088275B26C100F600F70AAB274F3078:100B900088276E3088277A3088275B26C200F600C7:100BA000F70AAB27843088275B26C300F600F70AD4:100BB000AB274F308827723088277A3088275B260A:100BC000C400F600F70AAB27843088275B26C500EF:100BD000F600F70AAB274F308827763088277A301F:100BE00088275B26C600F600F70AAB2784308827E3:100BF0005B26C700F600F70AAB2708006627E0006F:100C000031306006031D162E0130DF00F600113072:100C1000F700AB270D307727EC3088278E308827F8:100C200000000A200D2000004B27432E32306006C2:100C3000031D2C2E0230DF00F6001130F700AB2729:100C40000D307727EC3088279530882700000A2060:100C50000D2000004927432E33306006031DFE2D72:100C60000330DF00F6001130F700AB270D30772797:100C7000EC3088279C30882700000A200D200000D7:100C8000492749274927080001305F06031D492EDF:100C9000080002305F06031D532E4D2751275327AE:100CA00031273327080003305F06031D482E4927EC:100CB0003127312708006627E1002D306102031D2E:100CC000652E2D30772764145B2E30306102031CB3:100CD0005B2E4030610203185B2E61087727662780:100CE000E20030306202031C6F2E403062020318B3:100CF0006F2E62087727DF3077270F30E105093044:100D0000E30061086107E303031D822EE1000F3059:100D100062056107E500641C0800E509013065070C:100D2000E4010800E6016B08FF39031D992E00005D:100D3000A12E66146B0831246C0831246D0831240F:100D400008006C08FF39031DA72E0000AB2E6718A2:100D500066146C0831246D083124E7010800DE2395:100D600006303C240830E6230A303C24E0230E30D1
4
:100D70003C240830E82312303C24E22316303C2483:100D80000830EA231A303C24E4231E303C24083087:100D9000EC2322303C240800E800E901EA01643039:100DA000E802031CD52EEA0AD02EE8070A30E80232:100DB000031CDC2EE90AD72EE8073030E807E907E4:100DC000EA076A080F39031DE72E0000F52E6A08AE:100DD000772769087727680877272E307727540800:100DE000303E7727DF307727080069080F39031D69:100DF000FB2E0000FD2E69087727680877272E3024:100E000077275408303E7727DF3077270800EB013B:100E1000EC01ED000A306D02031C172FED00EC0A07:100E20000A306C02031C0A2FEC01EB0A0A2F6C0E2D:100E30006D07080000000000000000000000000036:100E400008000000A4302D2F000040302D2F1F304F:100E50002D2F00000E302D2F0530EE00EE0B2E2F23:100E60000800C830402F6430402F3230402F1430FB:100E7000402F0A30402F0530402F0230402F0130E4:100E8000EF00F930EE000000EE0B432FEF0B412F87:100E90000800C830542F6430542F3230542F14308F:100EA000542F0A30542F0530F0006430EF00F93031:100EB000EE000000EE0B592FEF0B572FF00B552FC4:100EC0000800831685168510831208000830F1008B:100ED000851A682F272729270310851A0314F20C77:100EE0002727F10B6C2F242772080800303EF200F0:100EF0000830F10085102727F20C031C812F851480:100F0000822F85102727F10B7C2F851424270800BA:100F1000F3000130F302F30373080120F400F40836:100F20000319952F7727F30A8C2F08000A30F50054:100F30000A307727F50B982F0D307727080003012B:100F4000F7000030F600AB271130F800F70AAB27A6:100F5000F80BA62F08000D12760803178C00031358:100F6000770803178D0083168C130C1555308D00F0:100F7000AA308D008C14831203130D1EBD2F0800A0:100F8000770803178D0083168C130C1483120C083A:100F9000031308000030F700C027DE000130F7001F:100FA000C027B800F70AC027B900F70AC027BA005F:100FB000F70AC027BB00F70AC027BC00F70AC02702:100FC000BD00F70AC027BE00F70AC027BF00F70A16:100FD000C027C000F70AC027C100F70AC027C20017:100FE000F70AC027C300F70AC027C400F70AC027C2:100FF000C500F70AC027C600F70AC027C700F70ACE:06100000C027DF0008001C:02400E00F13F80:00000001FF
5
:020000040000FA:10000000FD28820720340034BA34003454343134AB:100010003A340034543432343A34003454343334BF:100020003A340034543434343A34003454343534AB:100030003A340034543436343A3400345434373497:100040003A340034543438343A3400344534533478:10005000503445345234453400344C3465347934AA:1000600065346E3464346F342034533465346E3404:1000700073346F3472346534733400340A340D349D:10008000503452344F344734523441344D34413477:1000900052343A3400340A340D340D345334453478:1000A0004E3453344F3452342034003431343A34E3:1000B0002034003432343A342034003433343A3487:1000C0002034003434343A342034003435343A3473:1000D0002034003436343A342034003437343A345F:1000E0002034003438343A34203400340D3454345D:1000F0006D3469346E343A34203400340D34543461:100100006D34613478343A3420340034203431345E:1001100030342034533467340034203432343034B3:1001200020345334673400342034313420344D3497:1001300069346E3400340A340D340D34533445348C:100140004C3445344334433449344F344E344134D1:10015000523420345434493445344D3450344F34BF:1001600020344434453420344D34553445345334EC:100170005434523445344F3420343A3420340A3421:100180000D340D34313420343D34203431343034A6:100190002034533467340A340D34323420343D343F:1001A0002034323430342034533467340A340D343C:1001B000333420343D342034313420344D346934E8:1001C0006E340A340D34003445344C3445344734ED:1001D000493444344F34003482070034013401344C:1001E000023403340334043404340534063406344E:1001F0000734083408340934093483160330860080:10020000870106309F00831286018701DE01E40129:10021000A001A101A201A301A401A501A601A701BA:10022000E701A7235827C1270530DD2326303324D3:10023000D7232D3033245B2448276B24A000550896:10024000A8005408B000861829292E2786182929C5:1002500080298B2448279B24A1005508A900540815:10026000B100A8244827B824A2005508AA005408C1:10027000B200C5244827D524A3005508AB00540874:10028000B300E2244827F224A4005508AC00540827:10029000B400FF2448270F25A5005508AD005408D9:1002A000B500861857292E278618572980291C251E:1002B00048272C25A6005508AE005408B60039255D:1002C00048274925A7005508AF005408B7008029E2:1002D0000230F023C0290230F023F9290230F02344:1002E000312A0230F023692A0230F023A12A023099:1002F000F023D92A0230F023112B0230F023492BAE:10030000EB23A626562D061C9E290130DE00F701A0:10031000B7275E02031996290C306E2728270D3067:100320006E275D2500009B307F27F525061C9E2942:100330000D306E274B307F2756307F270330DD236B:10034000A81FAC29A008031968292D30F0236714D1
1
:10035000061CAC292D306E272008FE268926B00801:100360000319B8292E30F023300828246618BA293A:1003700004303324061CC0293008D4002008C326CA:10038000C127A81FC429C6292008C8295608A000CB:10039000390820020318071038082002031C07142C:1003A000061CD6294B307F275A307F270B30DD23A0:1003B000A91FE529A10803196B292D30F023671423:1003C000061CE4292D306E2700002108FE26892610:1003D000B1080319F1292E30F023310828246618BA:1003E000F32904303324061CF9293108D4002108EC:1003F000C326A91FFC29FE292108002A5708A100AD:100400003B082102031887103A082102031C8714B5:10041000061C0E2A4B307F275E307F270330DF23F8:10042000AA1F1D2AA20803196E292D30F023671474:10043000061C1C2A2D306E2700002208FE26892665:10044000B2080319292A2E30F0233208282466180E:100450002B2A04303324061C312A3208D400220807:10046000C326AA1F342A362A2208382A5808A2008E:100470003D082202031807113C082202031C07153D:10048000061C462A4B307F2762307F270B30DF2344:10049000AB1F552AA308031971292D30F0236714C7:1004A000061C542A2D306E2700002308FE268926BC:1004B000B3080319612A2E30F02333082824661864:1004C000632A04303324061C692A3308D400230825:1004D000C326AB1F6C2A6E2A2308702A5908A30072:1004E0003F082302031887113E082302031C8715C7:1004F000061C7E2A4B307F2766307F270330E1239E:10050000AC1F8D2AA408031974292D30F023671419:10051000061C8C2A2D306E2700002408FE26892612:10052000B4080319992A2E30F023340828246618B9:100530009B2A04303324061CA12A3408D400240842:10054000C326AC1FA42AA62A2408A82A5A08A40055:10055000410824020318071240082402031C07164E:10056000061CB62A4B307F276A307F270B30E123E9:10057000AD1FC52AA508031977292D30F02367146C:10058000061CC42A2D306E2700002508FE26892669:10059000B5080319D12A2E30F0233508282466180F:1005A000D32A04303324061CD92A3508D400250860:1005B000C326AD1FDC2ADE2A2508E02A5B08A50039:1005C000430825020318871242082502031C8716D8:1005D000061CEE2A4B307F276E307F270330E32343:1005E000AE1FFD2AA60803197A292D30F0236714BF:1005F000061CFC2A2D306E2700002608FE268926C0:10060000B6080319092B2E30F02336082824661863:100610000B2B04303324061C112B3608D40026087B:10062000C326AE1F142B162B2608182B5C08A60019:10063000450826020318071344082602031C07175F:10064000061C262B4B307F2772307F270B30E3238D:10065000AF1F352BA70803197D292D30F023671410:10066000061C342B2D306E2700002708FE26892615:10067000B7080319412B2E30F023370828246618B9:10068000432B04303324061C492B3708D400270899:10069000C326AF1F4C2B4E2B2708502B5D08A700FD:1006A000470827020318871346082702031C8717E9
2
:1006B0003B261B293B261B29831605128312051294:1006C000080083160516831208008316851183120D:1006D00085110800831685158312851D6D2B080072:1006E00061236A2317275C23172765231727080030:1006F0005C236A231727612317270800C9000830E5:10070000C800C90D0318862B5C23872B61236A233D:10071000172765231727C80B812B61236A23172707:100720006523172708000830C80061236A230310D7:10073000051A0314C90D65231727C80B962B4A1CED:100740005C236A23172765231727490808008316A7:10075000051005118312051105102E273030BF2317:1007600032273030BF231B273030BF2323272030D0:10077000BF232327ED23EB23E923D3230800F039FC:10078000CB0006080F39CB0483160608CD000F30C6:10079000860583124B0886000515051183164D0842:1007A0008600831208000630EE2B8030EE2BC0301E:1007B000EE2B9030EE2BD030EE2B8038EE2BC03865:1007C000EE2B9038EE2BD038EE2B0830EE2B0E307F:1007D000EE2B0C30EE2B0130EE2B28300510F22BD7:1007E0000514FA23CC00BF234C0EBF23051C34276D:1007F00020270800CB00F13C031D012CEE30CB007C:100800000E2C4B08D13C031D082CEE30CB000E2CD7:100810004B08BA3C031D0E2CDF30CB004B08080000:100820001030172C0130172C0230172C0330CE005B:100830002030F023CE0B182C0800CF00F039031D18:10084000252C2030F023272CCF004F0E28244F08D2:100850000F39CE00093C031C302C4E08303E322CA0:100860004E08373EF02BD0000130D002D0035008A4:100870000120D100D1080319402CF023D00A372CD5:100880000800D0000130D002D003D201EB23103099:100890005202031D502C282728270F30D002452C48:1008A00050080120D100D10803195A2CF023D20A94:1008B000D00A472C080090307E23AC307E234B308A:1008C0007E23782364240800702390307E23EE304A:1008D0007E23782308004A10702390307E23AA30AC:1008E0007E23702391307E239323D300D6004A14B5:1008F0009323D4007823D501D31F852CD509D4099F:10090000D3090130D4070318D30A540E0F39EC2051:10091000D4005308080092307E23AC307E234B3045:100920007E23782394240800702392307E23EE30B7:100930007E23782308004A10702392307E23AA3049:100940007E23702393307E239323D300D700772C0C:1009500094307E23AC307E234B307E237823B12429:100960000800702394307E23EE307E237823080025:100970004A10702394307E23AA307E237023953052:100980007E239323D300D800772C96307E23AC307F:100990007E234B307E237823CE24080070239630AC:1009A0007E23EE307E23782308004A107023963091:1009B0007E23AA307E23702397307E239323D30097:1009C000D900772C98307E23AC307E234B307E23A9:1009D0007823EB240800702398307E23EE307E23AA:1009E000782308004A10702398307E23AA307E2393:1009F000702399307E239323D300DA00772C9A302A:100A00007E23AC307E234B307E23782308250800DC
3
:100A100070239A307E23EE307E23782308004A101C:100A200070239A307E23AA307E2370239B307E234E:100A30009323D300DB00772C9C307E23AC307E23C5:100A40004B307E2378232525080070239C307E239D:100A5000EE307E23782308004A1070239C307E23DA:100A6000AA307E2370239D307E239323D300DC00A5:100A7000772C9E307E23AC307E234B307E23782330:100A80004225080070239E307E23EE307E2378239B:100A900008004A1070239E307E23AA307E237023E4:100AA0009F307E239323D300DD00772C8618832983:100AB0002E278618832996278F295E145E08F60054:100AC000F701A2273E307F274B307F2756307F2704:100AD00076307F275226B800F600F70AA2277E302C:100AE0007F275226B900F600F70AA2274B307F274E:100AF0005A307F2776307F275226BA00F600F70A51:100B0000A2277E307F275226BB00F600F70AA227D5:100B10004B307F275E307F2776307F275226BC0000:100B2000F600F70AA2277E307F275226BD00F60086:100B3000F70AA2274B307F2762307F2776307F2746:100B40005226BE00F600F70AA2277E307F275226E3:100B5000BF00F600F70AA2274B307F2766307F27B9:100B600076307F275226C000F600F70AA2277E3093:100B70007F275226C100F600F70AA2274B307F27B5:100B80006A307F2776307F275226C200F600F70AA8:100B9000A2277E307F275226C300F600F70AA2273D:100BA0004B307F276E307F2776307F275226C40058:100BB000F600F70AA2277E307F275226C500F600EE:100BC000F70AA2274B307F2772307F2776307F27A6:100BD0005226C600F600F70AA2277E307F2752264B:100BE000C700F600F70AA22708005D27E0003130B1:100BF0006006031D0D2E0130DF00F6001130F700F6:100C0000A2270D306E27E4307F2786307F27000033:100C10000A200D20000042273A2E32306006031DC4:100C2000232E0230DF00F6001130F700A2270D302E:100C30006E27E4307F278D307F2700000A200D20AB:100C4000000040273A2E33306006031DF52D033097:100C5000DF00F6001130F700A2270D306E27E430D8:100C60007F2794307F2700000A200D2000004027B6:100C700040274027080001305F06031D402E080072:100C800002305F06031D4A2E442748274A2728279B:100C90002A27080003305F06031D3F2E4027282720:100CA000282708005D27E1002D306102031D5C2E1E:100CB0002D306E276414522E30306102031C522EE8:100CC000403061020318522E61086E275D27E20052:100CD00030306202031C662E403062020318662E1A:100CE00062086E27DF306E270F30E1050930E30020:100CF00061086107E303031D792EE1000F306205EF:100D00006107E500641C0800E50901306507E4019E:100D10000800E6016B08FF39031D902E0000982E95:100D200066146B0828246C0828246D082824080001:100D30006C08FF39031D9E2E0000A22E6718661452:100D40006C0828246D082824E7010800D523063004:100D500033240830DD230A303324D7230E303324E4:100D60000830DF2312303324D923163033240830DF
4
:100D7000E1231A303324DB231E3033240830E323ED:100D8000223033240800E800E901EA016430E80277:100D9000031CCC2EEA0AC72EE8070A30E802031C1F:100DA000D32EE90ACE2EE8073030E807E907EA0734:100DB0006A080F39031DDE2E0000EC2E6A086E272C:100DC00069086E2768086E272E306E275408303E5B:100DD0006E27DF306E27080069080F39031DF22ED9:100DE0000000F42E69086E2768086E272E306E27E3:100DF0005408303E6E27DF306E270800EB01EC010F:100E0000ED000A306D02031C0E2FED00EC0A0A30D3:100E10006C02031C012FEC01EB0A012F6C0E6D0715:100E200008000000000000000000000000000800B2:100E30000000A430242F00004030242F1F30242F26:100E400000000E30242F0530EE00EE0B252F080099:100E5000C830372F6430372F3230372F1430372FC8:100E60000A30372F0530372F0230372F0130EF008F:100E7000F930EE000000EE0B3A2FEF0B382F080090:100E8000C8304B2F64304B2F32304B2F14304B2F48:100E90000A304B2F0530F0006430EF00F930EE00DF:100EA0000000EE0B502FEF0B4E2FF00B4C2F0800D5:100EB000831685168510831208000830F100851A04:100EC0005F2F1E2720270310851A0314F20C1E27FC:100ED000F10B632F1B2772080800303EF200083028:100EE000F10085101E27F20C031C782F8514792F32:100EF00085101E27F10B732F85141B270800F300A4:100F00000130F302F30373080120F400F40803191D:100F10008C2F6E27F30A832F08000A30F5000A3061:100F20006E27F50B8F2F0D306E2708000301F70099:100F30000030F600A2271130F800F70AA227F80BBC:100F40009D2F08000D12760803178C0003137708F5:100F500003178D0083168C130C1555308D00AA30A5:100F60008D008C14831203130D1EB42F0800770814:100F700003178D0083168C130C1483120C080313B3:100F800008000030F700B727DE000130F700B72770:100F9000B800F70AB727B900F70AB727BA00F70A67:100FA000B727BB00F70AB727BC00F70AB727BD0071:100FB000F70AB727BE00F70AB727BF00F70AB72717:100FC000C000F70AB727C100F70AB727C200F70A1F:100FD000B727C300F70AB727C400F70AB727C50029:100FE000F70AB727C600F70AB727C700F70AB727D7:040FF000DF00080016:02400E00F13F80:00000001FF
5
top related