Control de 8 sensores de temperatura ds1621 en proteus eagle asm hex por joaquin berrocal piris

Page 1

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)

+ 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)


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) 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)


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



U1 3

TOUT

9.5

SCL SDA A0 A1 A2

2 1 7 6 5

SCL SDA

LM044L

U2

TOUT

20.0

SCL SDA A0 A1 A2

LCD1

Diseñado por : Joaquín Berrocal Piris

DS1621 3

Empiezan a aparecer las Temperaturas a los 13 sgs.

SENSOR "DS1621" Apreciación -> 0.5º

GND

2 1 7 6 5

SCL SDA

2 1 7 6 5

SCL SDA

LCD 4X20 (4 LÍNEAS x 20 CARACTERES)

Control de 8 Sensores de Temperatura DS1624 ó DS1621 por Bus I2C

Marzo 2011

www.iesccp.comze.com/index.php

GND

40.0

SCL SDA

Mantener pulsado para

U5

49.0

SCL SDA A0 A1 A2

2 1 7 6 5

SCL SDA GND

TOUT

60.0

SCL SDA A0 A1 A2

2 1 7 6 5

69.0

SCL SDA A0 A1 A2

2 3 4 5 6 7

GND SCL SDA

U7

TOUT

9 10

SCL SDA

DS1621 2 1 7 6 5

SCL SDA GND

1 10k

100

DS1621

U8 3

R15R11 10k 10k

(+) valores al PC para configurar

U10

U6

3

PONGO RB3/PGM a PULL-UP. Para evitar se reinicie al acercar el dedo a RB3/PGM

RA5_RD_PIC RA1_TX_PIC RA2 RA0

DS1621 3

7 8 9 10 11 12 13 14

10k

las TempMin , TempMax y el Tiempo de Muestreo RB1

TOUT

RS RW E

R14

desde el PC configurar GND

RB4 RB5 RB6 RB7

2 1 7 6 5

DS1621 3

4 5 6

SCL SDA RA2

SCL SDA A0 A1 A2

4k7

GND

U4

TOUT

R3

4k7

DS1621 3

R4

RA0

29.0

SCL SDA A0 A1 A2

1 2 3

TOUT

VSS VDD VEE

U3 3

D0 D1 D2 D3 D4 D5 D6 D7

DS1621

TOUT

80.0

SCL SDA A0 A1 A2

2 1 7 6 5

SCL SDA

OSC1/CLKIN OSC2/CLKOUT

RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD

RA0/AN0 RA1/AN1 RA2/AN2/VREF-/CVREF RA3/AN3/VREF+ RA4/T0CKI/C1OUT RA5/AN4/SS/C2OUT RC0/T1OSO/T1CKI MCLR/Vpp/THV RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT

21 22 23 24 25 26 27 28

RB0 RB1

RB0

RB4 RB5 RB6 RB7

(-) sólo al LCD no hay comunicación con el PC

R2

11 12 13 14 15 16 17 18

350 350 350 350 350 350 350 350

U11 1 2 3 4 5 6 7 8 9 10

20 19 18 17 16 15 14 13 12 11

PIC16F876A

NOTA: Ver NOTA en "Desing>Edit Desing Notes..." Reset

El "DS1621" tienen una apreciación de SÓLO 0.5º por ello, le pongo a su propiedad "granularity" 0.5

DS1621

Los "DS1624" SÍ tienen una apreciación de 0.03125º PERO el "PROTEUS" SÓLO tiene el "DS1621"

RA1_TX_PIC RA5_RD_PIC

RXD TXD

PUERTO SERIE

RTS

( HIPERTERMINAL )

CTS

LED-BARGRAPH-GRN


Pas Pas 0 1

470

Pas 1

Tx el Pic Transmite "Rojo"

LEDS de 3 mm

16 Pwr 0

VCC

BUS I2C

R11

+5V

Pas 1 SDA-RA4

Pas 1

4K7 Pas 1 SCL-RA3

RB7 RB6 RB5 RB4

RC7 RC6 RC5 RC4

SDA-RA4 SCL-RA3 SDA-RA4 SCL-RA3 SDA-RA4

19 8

(SDA) (SCL) (-) (+)

JP4 SDA-RA4 SCL-RA3

PIC16876P

1 2 3 Pas 04 Pas 05 Pas 06 Pas 07 Pas 08 Pas 09 Pas 10 0 Pas 11 0 Pas 12 0 Pas 13 0 Pas 14 0 Pas 15 0 Pas 16 0 Pas 0 Pas 0 Pas 0

SDA-RA4 SCL-RA3

GND

Y así con todos los demás Sensores y Leds.

Pas 0 Pas 0

RC0

RA5_RD_PIC SDA-RA4 SCL-RA3 JP3

Salidas; Activadas si los Sensores 1 al 8 superan la temperatura establecida Led1 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 ascendido desde 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

1 2 3 Pas 04 Pas 05 Pas 06 Pas 07 Pas 08 Pas 09 Pas 10 0 Pas 11 0 Pas 12 0 Pas 13 0 Pas 14 0 Pas 15 0 Pas 16 0 Pas 0

+5V

SDA-RA4 SCL-RA3

Sup 0

+5V

10K Pas 1

R18

Pas Sup 1 0

RB4 RB5 RB6 RB7 20 PwrSup0 0

+5V

RA0 RA2

R12 4K7

+5V

Sup 0

Sup 0

+ LED

Sup 0 1 Pas 1

Pas 1 Sup 0

VSS VDD VEE RS RW E D0 D1 D2 D3 D4 D5 D6 D7 Pas 0

Pas 0

Pas 0

1 2 3 Pas 04 Pas 05 Pas 06 Pas 07 Pas 08 Pas 09 Pas 10 0 Pas 11 0 Pas 12 0 Pas 13 0 Pas 14 0 Pas 15 0 Pas 16 0

JP1

+5V

Sup 0

RA5_RD_PIC RA2 RA1_TX_PIC RA0 MCLR-RESET

Pas 1

15 pF 15 pF

Sup 0

JP2

BUS I2C

SDA-RA4

Sup 0

Pas 0

470 R17

18 I/O 0 17 I/O 0 16 I/O 0 15 I/O 0

CONEXIÓN SENSORES TEMPERATURA "DS1621 ó DS1624"

RB1 RB0

Pas 1

LED11

R16 RxPasel1 Pic Recibe "Verde"

RC7 RC6 SDO/RC5 SDI/RC4

Pas 1

Pas Pas 0 1

Sup 0

+5V

LED10

RC0/T1OSO RC1/T1OSI RC2/CCP1 RC3/SCK VSS

28 I/O 0 27 I/O 0 26 I/O 0 25 I/O 0 24 I/O 0 23 I/O 0 22 I/O 0 21 I/O 0

Pas 1

14 Out 0 7 Out 0 13 In 0 8 In 0

RA1_TX_PIC

OSC1/CLKIN OSC2/CLKOUT

Pwr 0

T1OUT T1IN T2OUT T2IN R1OUT R1IN R2OUT R2IN

GND

Pas 1

11 I/O 0 12 I/O 0 13 I/O 0 14 I/O 0

Pwr Sup 0 0

GND

Pas 1

9 10

Pas 1

C2-

Pas 0

4 MHZ Pas 1 2 Q1

C2+

C3

+

Pas 0

Sup 0

I/O 0

C10

6

MAX232

Pas 0

1 uF

C9 +

In 0 Out 0

RC7

11 10 12 9

Pas 0

I/O 0

PGD/RB7 PGC/RB6 RB5 RB4 PGM/RB3 RB2 RB1 INT/RB0

8Pas 0 7Pas 0 6Pas 0 5Pas 0 4Pas 0 3Pas 0 2Pas 0 1Pas 0

X2

Out 0

Pas 0

I/O 0

Pas 1

RA0/AN0 RA1/AN1 RA2/AN2 RA3/AN3 RA4/T0CKI RA5/AN4

Pas 1

In 0 Out 0

V-

I/O 0

I/O 0

2 3 4 5 6 7

Pas 1

In 0

Pas 0

C1-

2

1 uF

5

I/O 0

C4

GND

C11

100n 4

I/O 0

Pas 1

MCLR/THV

Pas 1

TxD RxD

I/O 0

V+

I/O 0

1

RC0 RC1 RC2 RC3

Pas 0

Pas 0

Pas 1

Pas 1

Pas 0

C7

1 uF

+

3

1 2

Pull Up RB3. Evita se reinicia tocar patilla RB3

VDD

I/O 0

3 4

Pas 1

C1+

IC1

In 0

SDA-RA4

Pas 0

I/O 0

1

Pas 2

MCLR-RESET

Pas 1

Pas 1

S1 Pas 2

Sup 0 Sup 0

+5V

GND Pas 0

I/O 0

C8

5 4 3 2 1

1 uF

9 8 7 6

Pas 0

Sup 0

+5V +5V

Pas 1

Pas 1

GND

GND

SCL-RA3

Pas 0

Pas 1

IC4 +

Pas 0

GND Sup 0

Pas 0

1 2

RESET

Pas 0

Pas 0

3 4

GND

RS232

Patilla 3: TxD Patilla 2: RxD En el EAGLE: Con-subd F09HP

Sup 0

Pas 2

RB1

100

Pas 2

Pas Sup 1 0

10K

Mantener Pulsado para desde el PC configurar S4 las TempMin,TempMax y el Tiempo de Muestreo

Pas 0

R14

RB1Pas 1

GND

Sup 0 Pas 1

GND

15 Sup Pwr 0 0

+5V

Pas 1

Pas 1

10K

Pas 0

S3 ON + TL36PO

R10

3

Sup 0

R13 10K

2

R9

Pas 0

EAGLE;(EI42-1)-->TRANSF ENCAPSULADO :(TR9V6VA)

RB0Pas 1

(+) Valores al PC para configurar OFF (-) 1 Pas 0 RB0 (-) Solo al LCD NO Comunica con PC

LCD 4X16 ó LCD 4X20

RB1

2Pas 0 1Pas 0

Sup 0

Pas 1

Pas 2

5

IC4P

1K Pas Pas 10

1 2 Pas 0

Pas 0

Pas 0

7 Pas 1

JP6

Pas 0 X3-2 220 VAC

Pas 2

SEC

PRI

9

JP5

1

Pas 1

Pas 0 Sup 0

+5V Pas 1

In 0

Pas 0

GND

TR1

220 VOLT ALTERNA Pas 0 X3-1

Comandos para situar el cursor en el Inicio de Línea LCD 4X16 LCD 4X20 Línea1; 0x 80 b'1000 0000' Línea 1 0x 80 b'1000 0000' Línea 2; 0x C0 b'1100 0000' Línea 2; 0x C0 b'1100 0000' Línea3; 0x 90 b'1001 0000' Línea 3; 0x 94 b'1001 0100' GND Línea4; 0x D0 b'1101 0000' Línea 4; 0x D4 b'1101 0100'

220 uF

470 k

LED9

Puentes para utilizar o no el transformador como alimentación

IC2

(+ 16) y (- 15) C2

Sup 0

9 VOL CC 6VA

X1-2 >= 9 VCC

C5

+

+

220 uF Pas 0

Pas 0

OUT GND

Pas 0

X1-1

>=9 Vcc

IN

C1

Pas 0

Pas 0

In 0

Pas 1

Sup 0

+12V

Realizado con "Invoque"

400 LED1

Pas 0

LED2

Pas Pas 0 1

400 R1

400 R2 Pas 0

LED3

Pas Pas 0 1

400 R3

GND

Pas 0

LED4

Pas Pas 0 1

400 R4 Pas Pas 0 1 Pas 0 Sup 0

Pas 0

LED5

Pas Pas 0 1

400 R5 LED6

Pas 0

LED7

Pas Pas 0 1

400 R6

400 R7 Pas Pas 0 1 Pas 0

Pas 0

LED8

Pas Pas 0 1

R8

GND

Autor: Joaquín Berrocal Piris

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


F09

2,54

2

S1

I - O IC2 7805

6 1

9 5

X2 1 uF C2

C7 1 uF

C8

220 uF MAX232

LED10 LED11

JP1

EI42-1

P1

X3 220 VAC

IC4

TR1 1

C1

S3

2

4 3

S1

470 R16 470 R17 2

IC1

R9 100 R10 10K R11 4K7 R12 4K7

>= 9 VCC X1 1

Falta puentear con SCL

R8 400

10K + R14R13 10K SCL SDA

LED8

1

R7 400

R15 1K

LED7

1 uF

1

C4

4 MHZ 15 pF

Q115 pF

C3

R6 400

S4 R18 10K

LED6

PIC16876P

R5 400

2

LED5

C9

C10

100n

R4 400

3

LED4

R3 400

1 uF

470 C11 k

JP5

4

LED3

JP6

R2 400

TL36PO

JP3

LED2

R1 400

LED9

LED1

220 uF C5

JP4 JP2

- +

11/01/2012 9:21:50 C:\MIS PROYECTOS\PROYECTOS TEMPERATURA OK\ARCHIVOS CNC Y EAGLE SENSORES DS1621


F09

2,54

2

S1

I - O IC2 7805

6 1

9 5

X2 1 uF C2

C7 1 uF

C8

220 uF MAX232

LED10 LED11

JP1

EI42-1

P1

X3 220 VAC

IC4

TR1 1

C1

S3

2

4 3

S1

470 R16 470 R17 2

IC1

R9 100 R10 10K R11 4K7 R12 4K7

>= 9 VCC X1 1

Falta puentear con SCL

R8 400

10K + R14R13 10K SCL SDA

LED8

1

R7 400

R15 1K

LED7

1 uF

1

C4

4 MHZ 15 pF

Q115 pF

C3

R6 400

S4 R18 10K

LED6

PIC16876P

R5 400

2

LED5

C9

C10

100n

R4 400

3

LED4

R3 400

1 uF

470 C11 k

JP5

4

LED3

JP6

R2 400

TL36PO

JP3

LED2

R1 400

LED9

LED1

220 uF C5

JP4 JP2

- +

11/01/2012 9:10:33 C:\MIS PROYECTOS\PROYECTOS TEMPERATURA OK\ARCHIVOS CNC Y EAGLE SENSORES DS1621


F09

2,54

2

S1

I - O IC2 7805

6 1

9 5

X2 1 uF C2

C7 1 uF

C8

220 uF MAX232

LED10 LED11

JP1

EI42-1

P1

X3 220 VAC

IC4

TR1 1

C1

S3

2

4 3

S1

470 R16 470 R17 2

IC1

R9 100 R10 10K R11 4K7 R12 4K7

>= 9 VCC X1 1

Falta puentear con SCL

R8 400

10K + R14R13 10K SCL SDA

LED8

1

R7 400

R15 1K

LED7

1 uF

1

C4

4 MHZ 15 pF

Q115 pF

C3

R6 400

S4 R18 10K

LED6

PIC16876P

R5 400

2

LED5

C9

C10

100n

R4 400

3

LED4

R3 400

1 uF

470 C11 k

JP5

4

LED3

JP6

R2 400

TL36PO

JP3

LED2

R1 400

LED9

LED1

220 uF C5

JP4 JP2

- +

11/01/2012 9:20:24 C:\MIS PROYECTOS\PROYECTOS TEMPERATURA OK\ARCHIVOS CNC Y EAGLE SENSORES DS1621


F09

2,54

2

S1

I - O IC2 7805

6 1

9 5

X2 1 uF C2

C7 1 uF

C8

220 uF MAX232

LED10 LED11

JP1

EI42-1

P1

X3 220 VAC

IC4

TR1 1

C1

S3

2

4 3

S1

470 R16 470 R17 2

IC1

R9 100 R10 10K R11 4K7 R12 4K7

>= 9 VCC X1 1

Falta puentear con SCL

R8 400

10K + R14R13 10K SCL SDA

LED8

1

R7 400

R15 1K

LED7

1 uF

1

C4

4 MHZ 15 pF

Q115 pF

C3

R6 400

S4 R18 10K

LED6

PIC16876P

R5 400

2

LED5

C9

C10

100n

R4 400

3

LED4

R3 400

1 uF

470 C11 k

JP5

4

LED3

JP6

R2 400

TL36PO

JP3

LED2

R1 400

LED9

LED1

220 uF C5

JP4 JP2

- +

11/01/2012 9:19:38 C:\MIS PROYECTOS\PROYECTOS TEMPERATURA OK\ARCHIVOS CNC Y EAGLE SENSORES DS1621


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=16F876A INCLUDE <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_0 TempSensor_1 TempSensor_2 TempSensor_3 TempSensor_4 TempSensor_5 TempSensor_6 TempSensor_7

TempSigno_0 TempSigno_1 TempSigno_2 TempSigno_3 TempSigno_4 TempSigno_5 TempSigno_6 TempSigno_7

; para guardar el valor decimal redondeado a un sólo dígito. DS1624_Decimal_0 DS1624_Decimal_1 DS1624_Decimal_2 1


OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera DS1624_Decimal_3 DS1624_Decimal_4 DS1624_Decimal_5 DS1624_Decimal_6 DS1624_Decimal_7

; FlagSaltarElReturn POR NO UTILIZARLO

;Para poder hacer el parpadeo de

"Leyendo Sensores": LO SUPRIMO

;para recoger las Temperaturas mínimas y máximas de cada Sensor entre las que estará ;activa la salida a relé indicadO.

TempMin_0 TempMax_0 TempMin_1 TempMax_1 TempMin_2 TempMax_2 TempMin_3 TempMax_3 TempMin_4 TempMax_4 TempMin_5 TempMax_5 TempMin_6 TempMax_6 TempMin_7 TempMax_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 goto

Mensajes addwf

0 Inicio

;Pone la línea 1 y 2 con las iniciales de T1:

T3:

t4:

; Los mensajes no deben sobrepasar las 256 ; primeras posiciones de memoria de programa.

PCL,F

MensajeEnBlanco DT " ", 0x00 :-0º

T2:

;Lo utilizo por si falla un Sensor aparezca en blanco su valor en lugar de

MensajeGradoCentigrado DT "º", 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 DT "T1:",0x00 T2 DT "T2:",0x00 T3 DT "T3:",0x00 T4 DT "T4:",0x00 T5 DT "T5:",0x00 T6 DT "T6:",0x00 T7 DT "T7:",0x00 T8 DT "T8:",0x00

T1:

a

T8:

Espere DT " ESPERE", 0x00 ;LE AÑADO DOS ESPACIOS PARA EL LCD 20X4.Para poner en la línea 1 DT " ESPERE ", 0x00

Leyendo_Sensores DT "

;Mensaje de Espera a leer los 8 sensores aprox 9 sgs

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,RetornoCarro DT "PROGRAMAR:",0x00 ;------PARA REDUCIR POSICIONES DE LAS 256 POSIBLES--MensajesAlPC_SENSOR ;VALOR "SENSOR " global para todos los sensores AÑADIRLE después el número DT CambioLinea,RetornoCarro,RetornoCarro DT "SENSOR ",0x00 MensajesAlPC_Sensor1 DT "1: ",0x00 MensajesAlPC_Sensor2 DT "2: ",0x00 MensajesAlPC_Sensor3 DT "3: ",0x00 MensajesAlPC_Sensor4 DT "4: ",0x00 MensajesAlPC_Sensor5 DT "5: ",0x00 MensajesAlPC_Sensor6 DT "6: ",0x00 MensajesAlPC_Sensor7 DT "7: ",0x00 MensajesAlPC_Sensor8 DT "8: ",0x00

;-------------------------------------------------------------------------------------------------MensajeAlPC_Tmin DT CambioLinea,RetornoCarro,RetornoCarro DT "Tmin: ",0x00

;DT RetornoCarro

MensajeAlPC_Tmax DT CambioLinea,RetornoCarro,RetornoCarro DT "Tmax: ",0x00

;DT RetornoCarro

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 DT DT DT DT DT DT DT DT DT

;SELECCIONAR TIEMPO DE MUESTREO: 1 = 10 Sg

2 = 20 Sg

3 = 30 Sg

CambioLinea, RetornoCarro,RetornoCarro "SELECCIONAR TIEMPO DE MUESTREO : " CambioLinea, RetornoCarro,RetornoCarro "1 = 10 Sg" CambioLinea, RetornoCarro "2 = 20 Sg" CambioLinea,RetornoCarro "3 = 1 Min" CambioLinea,RetornoCarro,0x00 ;para dejar una separación en el PC

Elegido DT "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 retlw retlw retlw retlw retlw retlw retlw retlw retlw único valor retlw retlw retlw retlw retlw retlw retlw

PCL,F ;LO MISMO ES PONER "F" QUE "1" d'0' ;0; (DS1624_Decimal)=b'0000'. Mide d'1' ;1; (DS1624_Decimal)=b'0001'. Mide d'1' ;2; (DS1624_Decimal)=b'0010'. Mide d'2' ;3; (DS1624_Decimal)=b'0011'. Mide d'3' ;4; (DS1624_Decimal)=b'0100'. Mide d'3' ;5; (DS1624_Decimal)=b'0101'. Mide d'4' ;6; (DS1624_Decimal)=b'0110'. Mide d'4' ;7; (DS1624_Decimal)=b'0111'. Mide d'5' ;8; (DS1624_Decimal)=b'1000'. Mide utilizado para el DS1621 d'6' ;9; (DS1624_Decimal)=b'1001'. Mide d'6' ;10 (DS1624_Decimal)=b'1010'. Mide d'7' ;11 (DS1624_Decimal)=b'1011'. Mide d'8' ;12 (DS1624_Decimal)=b'1100'. Mide d'8' ;13 (DS1624_Decimal)=b'1101'. Mide d'9' ;14 (DS1624_Decimal)=b'1110'. Mide d'9' ;15 (DS1624_Decimal)=b'1111'. Mide

0,0000ºC. 0,0625ºC. 0,1250ºC. 0,1875ºC. 0,2500ºC. 0,3125ºC. 0,3750ºC. 0,4375ºC. 0,5000ºC.

Redondeado Redondeado Redondeado Redondeado Redondeado Redondeado Redondeado Redondeado Redondeado

a a a a a a a a a

0,0ºC. 0,1ºC. 0,1ºC. 0,2ºC. 0,3ºC. 0,3ºC. 0,4ºC. 0,4ºC. 0,5ºC.;Este es el

0,5625ºC. 0,6250ºC. 0,6875ºC. 0,7500ºC. 0,8125ºC. 0,8750ºC. 0,9375ºC.

Redondeado Redondeado Redondeado Redondeado Redondeado Redondeado Redondeado

a a a a a a a

0,6ºC. 0,6ºC. 0,7ºC. 0,8ºC. 0,8ºC. 0,9ºC. 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 PERO movwf 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 movwf

b'00000110' ADCON1

;PUERTAA E/S Digitales

movlw movwf

b'00011111' TRISA

;La PUERTAA se configura como Entrada ;NO ES NECESARIO. configurarlo

bcf STATUS,RP0

clrf clrf clrf clrf

;Vuelta al BANCO 0

;INICIA LOS PUERTOS APAGANDO TODAS SUS SALIDAS PORTB PORTC Flag_No_Repetir_Programar FlagValorNegativo ;reseteo el flag

;PARA PONER clrf clrf clrf clrf clrf clrf clrf clrf

A CERO TODOS ESTOS REGISTROS TempSensor_0 TempSensor_1 TempSensor_2 TempSensor_3 TempSensor_4 TempSensor_5 TempSensor_6 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 RA5 = RD (en lugar de RA3 y RA4

;Inicializa la comunicación con el puerto Serie. RA1=TX y

;----------------------------------------------------

;++++++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 movlw call movlw call

;Fijo el mensaje "ESPERE" y Parpadeante el "Leyendo Sensores" .5 LCD_PosicionLinea1 ; primera línea más el valor del registro W Espere ;Mensaje "ESPERE" LCD_Mensaje ;Visualiza el Mensaje

; En la primera línea de la pantalla aparece un mensaje fijo. call movlw call

LCD_Linea2 Leyendo_Sensores LCD_Mensaje

;------ANULO EL PARPADEO----;; call Retardo_500ms ;; call LCD_Linea2 ;; call LCD_LineaEnBlanco producir efecto intermitente ; call Retardo_500ms SUPRIMO por

; Pasa a la segunda línea. ; Apunta al mensaje parpadeante. "Leyendo Sensores" ; Lo visualiza.

; Durante este tiempo. ; Vuelve a situarse al principio de la línea 2. ; Visualiza línea en blanco.Para no ver nada en esa línea y así ; Durante este tiempo, produciendo un efecto de Parpadeo LO ;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 call call call

;para activar el flag

DS1624_Inicializa_0 Retardo_1s DS1624_LeeTemperatura

; call DS1624_IniciaConversion PONGO NO FUNCIONAN NI LOS ENTEROS -8 movwf TempSensor_0 temperaturas juntas movf movwf

DS1624_Signo,W TempSigno_0

; Configura el DS1624 e inicia la conversión. ;retardo de 1 segundos ; Lee la temperatura. ;Comienza conversión para la siguiente lectura SI LO

;lo guardo temporalmente para reflejarlo en la LCD todas las

;Para guardar temporalmente el signo del sensor 1

;---Para guardar temporalmente el DECIMAL del Sensor_0--movf DS1624_Decimal,W movwf 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 reconocerlo goto Sensor_1 ;NO ESTÁ PULSADO continuar en "Sensor_0" call Retardo_20ms ;Espera que se estabilicen los niveles de tensión btfsc PORTB,1 ;Comprueba si es un Rebote goto 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 call call

DS1624_Inicializa_1 ; Configura el DS1624 e inicia la conversión. Retardo_1s ;retardo de 1 segundos DS1624_LeeTemperatura_1 ; Lee la temperatura.

call

DS1624_IniciaConversion_1

movwf TempSensor_1 temperaturas juntas movf movwf

DS1624_Signo,W TempSigno_1

;Comienza conversión para la siguiente lectura

;lo guardo temporalmente para reflejarlo en la LCD todas las

;Para guardar temporalmente el signo del sensor 1

;---Para guardar temporalmente el DECIMAL del Sensor_1--movf DS1624_Decimal,W movwf DS1624_Decimal_1 ;--------------------------------------------------------

Sensor_2 ;;

;

call

Parpadeo

call call call

DS1624_Inicializa_2 ; Configura el DS1624 e inicia la conversión. Retardo_1s ;retardo de 1 segundos DS1624_LeeTemperatura_2 ; Lee la temperatura.

call

DS1624_IniciaConversion_2

movwf TempSensor_2 temperaturas juntas movf movwf

DS1624_Signo,W TempSigno_2

;Comienza conversión para la siguiente lectura

;lo guardo temporalmente para reflejarlo en la LCD todas las

;Para guardar temporalmente el signo del sensor 2

;---Para guardar temporalmente el DECIMAL del Sensor_2--movf DS1624_Decimal,W movwf DS1624_Decimal_2 ;-------------------------------------------------------Sensor_3 ;;

;

call

Parpadeo

call call call

DS1624_Inicializa_3 ; Configura el DS1624 e inicia la conversión. Retardo_1s ;retardo de 1 segundos DS1624_LeeTemperatura_3 ; Lee la temperatura.

call

DS1624_IniciaConversion_1

movwf TempSensor_3 temperaturas juntas movf movwf

DS1624_Signo,W TempSigno_3

;Comienza conversión para la siguiente lectura

;lo guardo temporalmente para reflejarlo en la LCD todas las

;Para guardar temporalmente el signo del sensor 3

;---Para guardar temporalmente el DECIMAL del Sensor_0--movf DS1624_Decimal,W movwf DS1624_Decimal_3 ;-------------------------------------------------------Sensor_4 ;;

bsf FlagSaltarElReturn,0 call call call

;para activar el flag

DS1624_Inicializa_4 ; Configura el DS1624 e inicia la conversión. Retardo_1s ;retardo de 1 segundos DS1624_LeeTemperatura_4 ; Lee la temperatura.

; call DS1624_IniciaConversion PONGO NO FUNCIONAN NI LOS ENTEROS -8 movwf TempSensor_4 temperaturas juntas movf movwf

DS1624_Signo,W TempSigno_4

;Comienza conversión para la siguiente lectura SI LO

;lo guardo temporalmente para reflejarlo en la LCD todas las

;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,W movwf DS1624_Decimal_4 ;-------------------------------------------------------Sensor_5 ;;

;

call

Parpadeo

call call call

DS1624_Inicializa_5 ; Configura el DS1624 e inicia la conversión. Retardo_1s ;retardo de 1 segundos DS1624_LeeTemperatura_5 ; Lee la temperatura.

call

DS1624_IniciaConversion_1

movwf TempSensor_5 temperaturas juntas movf movwf

DS1624_Signo,W TempSigno_5

;Comienza conversión para la siguiente lectura

;lo guardo temporalmente para reflejarlo en la LCD todas las

;Para guardar temporalmente el signo del sensor 5

;---Para guardar temporalmente el DECIMAL del Sensor_5--movf DS1624_Decimal,W movwf 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 reconocerlo goto Sensor_6 ;NO ESTÁ PULSADO continuar en "Sensor_0" call Retardo_20ms ;Espera que se estabilicen los niveles de tensión btfsc PORTB,1 ;Comprueba si es un Rebote goto Sensor_6 ;NO ESTÁ PULSADO "Sensor_6" goto VisualizaTermometro_LCD_0 ;Sí está pulsado ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Sensor_6 ;;

;

call

Parpadeo

call call call

DS1624_Inicializa_6 ; Configura el DS1624 e inicia la conversión. Retardo_1s ;retardo de 1 segundos DS1624_LeeTemperatura_6 ; Lee la temperatura.

call

DS1624_IniciaConversion_2

movwf TempSensor_6 temperaturas juntas movf movwf

DS1624_Signo,W TempSigno_6

;Comienza conversión para la siguiente lectura

;lo guardo temporalmente para reflejarlo en la LCD todas las

;Para guardar temporalmente el signo del sensor 6

;---Para guardar temporalmente el DECIMAL del Sensor_6--movf DS1624_Decimal,W movwf DS1624_Decimal_6 ;-------------------------------------------------------Sensor_7

;;

;

call

Parpadeo

call call call

DS1624_Inicializa_7 ; Configura el DS1624 e inicia la conversión. Retardo_1s ;retardo de 1 segundos DS1624_LeeTemperatura_7 ; Lee la temperatura.

call

DS1624_IniciaConversion_1

movwf TempSensor_7 temperaturas juntas movf movwf

DS1624_Signo,W TempSigno_7

;Comienza conversión para la siguiente lectura

;lo guardo temporalmente para reflejarlo en la LCD todas las

;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,W movwf 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_0 movlw MensajeEnBlanco ;;Lo utilizo por lugar de :-0º call LCD_Caracter ;LCD_Mensaje goto Histerisis_0 ;para que active histerisis establecido ;con la TempMini EliminarMenosCero_1 movlw MensajeEnBlanco ;;Lo utilizo por lugar de :-0º call LCD_Caracter ;LCD_Mensaje goto Histerisis_1 ;para que active histerisis establecido ;con la TempMini EliminarMenosCero_2 movlw MensajeEnBlanco ;;Lo utilizo por lugar de :-0º call LCD_Caracter ;LCD_Mensaje goto Histerisis_2 ;para que active histerisis establecido ;con la TempMini EliminarMenosCero_3 movlw MensajeEnBlanco ;;Lo utilizo por lugar de :-0º call LCD_Caracter ;LCD_Mensaje goto Histerisis_3 ;para que active histerisis establecido ;con la TempMini EliminarMenosCero_4 movlw MensajeEnBlanco ;;Lo utilizo por lugar de :-0º call LCD_Caracter ;LCD_Mensaje goto Histerisis_4 ;para que active histerisis establecido ;con la TempMini EliminarMenosCero_5 movlw MensajeEnBlanco ;;Lo utilizo por lugar de :-0º call LCD_Caracter ;LCD_Mensaje goto Histerisis_5 ;para que active histerisis establecido ;con la TempMini EliminarMenosCero_6 movlw MensajeEnBlanco ;;Lo utilizo por lugar de :-0º call LCD_Caracter ;LCD_Mensaje goto Histerisis_6 ;para que active histerisis establecido ;con la TempMini EliminarMenosCero_7 movlw MensajeEnBlanco call LCD_Caracter ;LCD_Mensaje goto Histerisis_7 ;**Iniciar ciclo

si falla un Sensor aparezca en blanco su valor en

o desactive la salida en función del valor de y TempMax si falla un Sensor aparezca en blanco su valor en

o desactive la salida en función del valor de y TempMax si falla un Sensor aparezca en blanco su valor en

o desactive la salida en función del valor de y TempMax si falla un Sensor aparezca en blanco su valor en

o desactive la salida en función del valor de y TempMax si falla un Sensor aparezca en blanco su valor en

o desactive la salida en función del valor de y TempMax si falla un Sensor aparezca en blanco su valor en

o desactive la salida en función del valor de y TempMax si falla un Sensor aparezca en blanco su valor en

o desactive la salida en función del valor de y TempMax

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 goto

PORTB,0 No_PC_0_1

;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC ;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 FLAG

;PARA ELLO LEER EL FLAG GRABADO EN LE POSICIÓN "0" DE LA EEPROM DONDE GUARDO EL CON VALOR 1 DE ;Flag_No_Repetir_Programar movlw movwf

.1 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 sensor goto 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 call

.12 ; Nueva página 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 call

.13 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 call

MensajesAlPC_Tiempo_Muestreo ;carga el Mensaje para visualizar en el PC 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 PC goto No_PC_0_1 ;Si está a (0) no llevar al PC ;------------------------------------------------------------------------------movlw call

.13 RS232_EnviaDato

movlw call

MensajesAlPC_SENSOR RS232_Mensaje

;carga la primera posición del mensaje "SENSOR " ;lo visualiza en el PC

movlw call

MensajesAlPC_Sensor1 RS232_Mensaje

;carga la primera posición del mensaje "1: " ;lo visualiza en el PC

;--------------------------------------;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC No_PC_0_1 ; éste es el primer salto para no reflejar en PC ;--------------------------------------

movlw call btfss goto

; Se coloca para visualización en la T1:XXº T2: .3 ; Se coloca para visualización en la LCD_PosicionLinea1 ; primera línea más el valor del registro W TempSigno_0,7 ; ¿Temperatura negativa?. 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 btfsc goto

TempSensor_0,F ;para posicionar el flag Z STATUS,Z ;¿Es cero?, ¿Z=1? Si Z=1 "el Registro vale 0" 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 call

'-' ; Visualiza el signo "-" de temperatura negativa. 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 goto

PORTB,0 TemperaturaPositiva_0

;PARA LLEVARLO AL PC En negativo movlw '-' call RS232_EnviaDato

;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC ;sólo EN PANTALLA LCD

; Visualiza el signo "-" de temperatura negativa. en el PC

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;______________________________________________________________________________ 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 significativo ej "089" saldrá "89"

;para ver la temperatura suprimiendo el cero no

;+++++++++++++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 espacio btfsc 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 call

'.' ; Visualiza el punto decimal. 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 espacio goto 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 PC goto 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 valores de

EEPROM_Lectura_De_0_a_17

;Esta en "EEPROM_16F87X.INC" para la lectura de los ;la TempMin y TempMax de cada sensor grabados en

la EEPROM btfss goto goto

TempSigno_0,7 EsPositivo_0 EsNegativo_0

;Si el último bit es un "1" Es una temperatura Negativa.

EsPositivo_0 movf goto

TempSensor_0,W Activar_Desactivar_Salidas_0

;Carga el Valor (+) de la Temperatura en (W) ;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,W subwf TempSensor_0,W btfsc 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,W subwf TempSensor_0,W btfss STATUS,C bsf PORTC,0 la del Sensor_0

;¿C=1? (TempMin_0) >= TempSensor_0 ;Activa la salida 0 de PORTC por ser Mayor la TempMin_0 que

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

;-----------------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 PC goto 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 call

MensajesAlPC_SENSOR RS232_Mensaje

;carga la primera posición del mensaje "SENSOR " ;lo visualiza en el PC

movlw call

MensajesAlPC_Sensor2 RS232_Mensaje

;carga la primera posición del mensaje "2: " ;lo visualiza en el PC

movlw call

MensajesAlPC_Sensor2 RS232_Mensaje

;carga la primera posición del mensaje "SENSOR 2: " ;lo visualiza en el PC

;++++++++++++++++++++++++++++++++++++++++++++++++++++

;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC No_PC_1_1 ; éste es el segundo salto para no reflejar en PC ;------------------------------------movlw call btfss goto

.11 LCD_PosicionLinea1 TempSigno_1,7 TemperaturaPositiva_1

; ; ; ;

Se coloca para visualización en la T1: primera línea. ¿Temperatura negativa?. No, la temperatura es positiva.

T2:XXº

TemperaturaNegativa_1 ;Si el el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco: movf TempSensor_1,F btfsc 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 PC goto 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 PC No_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 en la LCD por falta de espacio btfsc STATUS,Z goto Decimal_1_Es_Cero

;para ver si tiene el valor .0º en cuyo caso no visualizarlo ;Si Z=1 es CERO LA PARTE DECIMAL .0º ;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 call

'.' ; Visualiza el punto decimal. 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 espacio goto 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 goto

PORTB,0 Histerisis_1

;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC ;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 goto goto

TempSigno_1,7 EsPositivo_1 EsNegativo_1

;Si el último bit es un "1" Es una temperatura Negativa.

EsPositivo_1 movf goto

TempSensor_1,W Activar_Desactivar_Salidas_1

;Carga el Valor (+) de la Temperatura en (W) ;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,W subwf TempSensor_1,W btfsc 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,W subwf TempSensor_1,W btfss STATUS,C bsf PORTC,1 la del Sensor_1

;¿C=1? (TempMin_1) >= TempSensor_1 ;Activa la salida 1 de PORTC por ser Mayor la TempMin_1 que

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

;Activar_Desactivar_Salidas_1 ;;Para comprobar si un registro es mayor o menor que otro ver la pag 123 del libro de Remiro. ; ; ;

subwf btfss goto ;goto

TempMin_1,W STATUS,C Menor_1 MayorIgual_1

;(TempMin_1)- (TempSensor_1) subwf TempMin_1,W ;¿C=1? (TempMin_1) >= TempSensor_1 ;sobra

;MayorIgual_1 ;C=1 Entonces ; btfsc STATUS,Z ;SI (Z)=1 SON se active desde el valor mínimo al máximo que ; goto Menor_1 ; bcf PORTC,1 ;Desactiva la

ha sido (TempMin_1 ó TempMax_1) >= TempSensor_1 IGUALES Y EN ESE CASO ACTIVAR LA SALIDA para que establezcamos 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 ; movf ; subwf ; btfss ; goto TempMax"

PORTC,1

;Activa la salida 0 de PORTC

TempSensor_1,W TempMax_1,W STATUS,C MayorIgual_1

;valor absoluto de Temperatura del "Sensor 2" ;(TempMax_1)- (TempSensor_1) ;¿C=1? (TempMax_1) >= TempSensor_1 ;"Desactiva la Salida Estará activa sólo entre la TempMin y la

;------------------------------------------------------------------

;-----------------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 PC goto 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 call

MensajesAlPC_Sensor3 RS232_Mensaje

;carga la primera posición del mensaje "3: " ;lo visualiza en el PC

movlw call

MensajesAlPC_Sensor3 RS232_Mensaje

;carga la primera posición del mensaje "SENSOR 3: " ;lo visualiza en el PC

;++++++++++++++++++++++++++++++++++++++++++++++++++++

;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC No_PC_2_1 ; éste es el segundo salto para no reflejar en PC ;------------------------------------movlw call btfss goto

.3 LCD_PosicionLinea2 TempSigno_2,7 TemperaturaPositiva_2

; Se coloca para visualización en la T3: ; SEGUNDA línea. ; ¿Temperatura negativa?. ; No, la temperatura es positiva.

T4:XXº

TemperaturaNegativa_2 ;Si el el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco: movf TempSensor_2,F btfsc 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 call

'-' ; Visualiza el signo "-" de temperatura negativa. 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 PC goto 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 PC No_PC_2_2 ; éste es el tercer salto para no reflejar en PC nop ;se puede quitar TemperaturaPositiva_2 movf

TempSensor_2,W

call BIN_a_BCD call Temperatura_En_LCD "089" saldrá "89"

; Visualiza el valor absoluto de la temperatura, ; pasándola previamente a BCD. ;para ver la temperatura suprimiendo el cero no significativo ej

;+++++++++++++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 espacio btfsc 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 espacio goto 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 goto

PORTB,0 Histerisis_2

;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC ;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 goto goto

TempSigno_2,7 EsPositivo_2 EsNegativo_2

;Si el último bit es un "1" Es una temperatura Negativa.

EsPositivo_2 movf goto

TempSensor_2,W Activar_Desactivar_Salidas_2

;Carga el Valor (+) de la Temperatura en (W) ;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,W subwf TempSensor_2,W btfsc 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,W subwf TempSensor_2,W btfss STATUS,C bsf PORTC,2 la del Sensor_2

;¿C=1? (TempMin_2) >= TempSensor_2 ;Activa la salida 2 de PORTC por ser Mayor la TempMin_2 que

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

;-----------------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 PC goto 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 call

MensajesAlPC_SENSOR RS232_Mensaje

;carga la primera posición del mensaje "SENSOR " ;lo visualiza en el PC

movlw call

MensajesAlPC_Sensor4 RS232_Mensaje

;carga la primera posición del mensaje "4: " ;lo visualiza en el PC

;--------------------------------------;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC No_PC_3_1 ; éste es el segundo salto para no reflejar en PC ;------------------------------------movlw call btfss goto

.11 ; Se coloca para visualización en la T3: T4:XXº LCD_PosicionLinea2 ; SEGUNDA línea. TempSigno_3,7 ; ¿Temperatura negativa?. 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,F btfsc 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 call

'-' ; Visualiza el signo "-" de temperatura negativa. 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 PC goto 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 PC No_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 call Temperatura_En_LCD "089" saldrá "89"

; pasándola previamente a BCD. ;para ver la temperatura suprimiendo el cero no significativo ej

;+++++++++++++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 espacio btfsc 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 call

'.' ; Visualiza el punto decimal. 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 espacio goto 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 goto

PORTB,0 Histerisis_3

;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC ;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 goto goto

TempSigno_3,7 EsPositivo_3 EsNegativo_3

;Si el último bit es un "1" Es una temperatura Negativa.

EsPositivo_3 movf goto

TempSensor_3,W Activar_Desactivar_Salidas_3

;Carga el Valor (+) de la Temperatura en (W) ;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,W subwf TempSensor_3,W btfsc 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,W subwf TempSensor_3,W btfss STATUS,C bsf PORTC,3 la del Sensor_3

;¿C=1? (TempMin_3) >= TempSensor_3 ;Activa la salida 3 de PORTC por ser Mayor la TempMin_3 que

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

;-----------------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 PC goto 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 call

MensajesAlPC_SENSOR RS232_Mensaje

;carga la primera posición del mensaje "SENSOR " ;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 call

MensajesAlPC_Sensor5 RS232_Mensaje

;carga la primera posición del mensaje "5: " ;lo visualiza en el PC

;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC No_PC_4_1 ; éste es el segundo salto para no reflejar en PC ;------------------------------------movlw call btfss goto

.3 ; Se coloca para visualización en la T5:XXº T6: LCD_PosicionLinea3 ; primera línea. TempSigno_4,7 ; ¿Temperatura negativa?. 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,F btfsc 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 call

'-' ; Visualiza el signo "-" de temperatura negativa. 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 PC goto 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 PC No_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 espacio btfsc 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 call

'.' ; Visualiza el punto decimal. 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 espacio goto 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 goto

PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC 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

call

RetornoCarro_Y_CambioLinea

;Desde aquí se verán las centenas-decenas-unidades en el PC ; 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 goto goto

TempSigno_4,7 EsPositivo_4 EsNegativo_4

;Si el último bit es un "1" Es una temperatura Negativa.

EsPositivo_4 movf goto

TempSensor_4,W Activar_Desactivar_Salidas_4

;Carga el Valor (+) de la Temperatura en (W) ;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,W subwf TempSensor_4,W btfsc 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,W subwf TempSensor_4,W btfss STATUS,C bsf PORTC,4 la del Sensor_4

;¿C=1? (TempMin_4) >= TempSensor_4 ;Activa la salida 4 de PORTC por ser Mayor la TempMin_4 que

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

;-----------------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 PC goto 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 call

MensajesAlPC_SENSOR RS232_Mensaje

;carga la primera posición del mensaje "SENSOR " ;lo visualiza en el PC

movlw call

MensajesAlPC_Sensor6 RS232_Mensaje

;carga la primera posición del mensaje "6: " ;lo visualiza en el PC

movlw call

MensajesAlPC_Sensor6 RS232_Mensaje

;carga la primera posición del mensaje "SENSOR 6: " ;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 PC No_PC_5_1 ; éste es el segundo salto para no reflejar en PC ;------------------------------------movlw call btfss goto

.11 ; Se coloca para visualización en la T5: T6:XXº LCD_PosicionLinea3 ; TERCERA línea. TempSigno_5,7 ; ¿Temperatura negativa?. 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,F btfsc 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 call

'-' ; Visualiza el signo "-" de temperatura negativa. 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 PC goto 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 PC No_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 espacio btfsc 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 call

'.' ; Visualiza el punto decimal. 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 espacio goto 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 goto

PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC 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 goto goto

TempSigno_5,7 EsPositivo_5 EsNegativo_5

;Si el último bit es un "1" Es una temperatura Negativa.

EsPositivo_5 movf goto

TempSensor_5,W Activar_Desactivar_Salidas_5

;Carga el Valor (+) de la Temperatura en (W) ;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,W subwf TempSensor_5,W btfsc 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,W subwf TempSensor_5,W btfss STATUS,C bsf PORTC,5 la del Sensor_5

;¿C=1? (TempMin_5) >= TempSensor_5 ;Activa la salida 5 de PORTC por ser Mayor la TempMin_5 que

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

;-----------------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 PC goto 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 call

MensajesAlPC_SENSOR RS232_Mensaje

;carga la primera posición del mensaje "SENSOR " ;lo visualiza en el PC

movlw call

MensajesAlPC_Sensor7 RS232_Mensaje

;carga la primera posición del mensaje "1: " ;lo visualiza en el PC

;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC No_PC_6_1 ; éste es el segundo salto para no reflejar en PC ;------------------------------------movlw call btfss goto

.3 LCD_PosicionLinea4 TempSigno_6,7 TemperaturaPositiva_6

; ; ; ;

Se coloca para visualización en la T7:XXº CUARTA línea. ¿Temperatura negativa?. No, la temperatura es positiva.

T8:

TemperaturaNegativa_6 ;Si el el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco: movf TempSensor_6,F btfsc 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 call

'-' ; Visualiza el signo "-" de temperatura negativa. 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 PC goto 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 PC No_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 espacio btfsc 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 call

'.' ; Visualiza el punto decimal. LCD_Caracter

movf

DS1624_Decimal_6,W

call

LCD_Nibble

;Visualiza la parte decimal

;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) visualiza "6" ; si (W) es 1010 1110, se visualiza "E"

= 0101 0110 se

;------------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 espacio goto 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 goto

PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC 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

call

RetornoCarro_Y_CambioLinea

;Desde aquí se verán las centenas-decenas-unidades en el PC ; 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 goto goto

TempSigno_6,7 EsPositivo_6 EsNegativo_6

;Si el último bit es un "1" Es una temperatura Negativa.

EsPositivo_6 movf goto

TempSensor_6,W ;Carga el Valor (+) de la Temperatura en (W) 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,W subwf TempSensor_6,W btfsc 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,W subwf TempSensor_6,W btfss STATUS,C bsf PORTC,6 la del Sensor_6

;¿C=1? (TempMin_6) >= TempSensor_6 ;Activa la salida 6 de PORTC por ser Mayor la TempMin_6 que

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

;-----------------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 PC goto 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 call

MensajesAlPC_SENSOR RS232_Mensaje

;carga la primera posición del mensaje "SENSOR " ;lo visualiza en el PC

movlw call

MensajesAlPC_Sensor8 RS232_Mensaje

;carga la primera posición del mensaje "8: " ;lo visualiza en el PC

;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC No_PC_7_1 ; éste es el segundo salto para no reflejar en PC ;------------------------------------movlw call btfss goto

.11 LCD_PosicionLinea4 TempSigno_7,7 TemperaturaPositiva_7

; ; ; ;

Se coloca para visualización en la T7: TERCERA línea. ¿Temperatura negativa?. No, la temperatura es positiva.

T8:XXº

TemperaturaNegativa_7 ;Si el el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco: movf TempSensor_7,F btfsc 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 call

'-' ; Visualiza el signo "-" de temperatura negativa. 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 PC goto 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 negativo movlw '-' ; 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 espacio btfsc 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 call

'.' ; Visualiza el punto decimal. 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 espacio goto 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 goto

PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PC 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 goto goto

TempSigno_7,7 EsPositivo_7 EsNegativo_7

;Si el último bit es un "1" Es una temperatura Negativa.

movf

TempSensor_7,W

;Carga el Valor (+) de la Temperatura en (W)

goto

Activar_Desactivar_Salidas_7

EsPositivo_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,W subwf TempSensor_7,W btfsc 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,W subwf TempSensor_7,W btfss STATUS,C bsf PORTC,7 la del Sensor_7

;¿C=1? (TempMin_7) >= TempSensor_7 ;Activa la salida 7 de PORTC por ser Mayor la TempMin_7 que

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

;----------------------------------------------------------------------------------------------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 PC No_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


Hexadecimal usando LCD de 4x20 (4 lineas 20 caracteres) :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


Hexadecimal usando LCD de 4x16 (4 líneas 16 caracteres) :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


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.