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

56
+ La comunicación por el puerto Serie permite ver los valores en el ORDENADOR si así lo deseamos al accionar el conmutador. + Se pueden modificar los valores de temperatura mínima y máxima de cada sensor desde el PC, para así mantener una histérisis de accionamiento de la salida correspondiente y poder adaptarlo a cualquier condición de trabajo que necesitemos. + Los sensores “DS1621” leen desde (55ºC a + 125ºC) con una apreciación de 0,5 ºC. El programa está preparado también para aceptar los sensores “DS1624”, cuya apreciación es de 0,1ºC. (Estos no se usan por ser muy caros) ESQUEMA ELECTRÓNICO : en PROTEUS y en EAGLE. Diseño placa Control de 8 sensores de temperatura “DS1621” por bus I2C (Joaquín Berrocal Piris)

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

Page 1: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin 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) 

 

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) 

Page 2: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

 

 

PLACA DE LOS SENSORES DE TEMPERATURA “DS1621” SOBRE EL MACH3 

 

REALIZACIÓN de la  PLACA DE LOS SENSORES con la Máquina de Control Numérico (CNC) 

 

CONSTRUCCIÓN DE LA PLACA DEL CONTROL DE TEMPERATURA CON 8 SENSORES “ DS 1621” Proyecto realizado por : JOAQUÍN BERROCAL PIRIS ( Nov 2010 a Marzo 2011) 

Page 3: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

RESULTADO FINAL DE FRESADO CON LA (CNC) 

 

IMÁGENES VARIAS DE LA PLACA CONTROLADORA  

 

Page 4: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

 

 

 

Page 5: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

 

MONTAJE DE COMPONENTES 

 

Page 6: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

PRIMERAS PRUEBAS 

 

 

Page 7: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

PLACA CON EL TRANSFORMADOR DE 220V/ 9V. y los 8 sensores 

 

 

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

 

 

 

Page 9: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

SCLSDA

SCLSDA

SCLSDA

GND

SCLSDA

GND

SCLSDA

SCLSDA

SCLSDA

GND

GND

GND

GND

SDASCL

GND

RB4RB5RB6RB7

RA0RA2

SCLSDA

SCLSDA

RA1_TX_PICRA5_RD_PIC

RB0 RB0

RB1

RB1

RA1_TX_PIC

RA5_RD_PIC

RA0

RA2

RB7

RB6

RB5

RB4

9.5

SCL 2

SDA 1

A0 7

TOUT3

A1 6

A2 5

U1

DS1621

20.0

SCL 2

SDA 1

A0 7

TOUT3

A1 6

A2 5

U2

DS1621

29.0

SCL 2

SDA 1

A0 7

TOUT3

A1 6

A2 5

U3

DS1621

40.0

SCL 2

SDA 1

A0 7

TOUT3

A1 6

A2 5

U4

DS1621

49.0

SCL 2

SDA 1

A0 7

TOUT3

A1 6

A2 5

U5

DS1621

60.0

SCL 2

SDA 1

A0 7

TOUT3

A1 6

A2 5

U6

DS1621

69.0

SCL 2

SDA 1

A0 7

TOUT3

A1 6

A2 5

U7

DS1621

80.0

SCL 2

SDA 1

A0 7

TOUT3

A1 6

A2 5

U8

DS1621

R34k7

R44k7

Diseñado por : Joaquín Berrocal Piris

Control de 8 Sensores de Temperatura DS1624 ó DS1621 por Bus I2CMarzo 2011 www.iesccp.comze.com/index.php

Empiezan a aparecer las Temperaturas a los 13 sgs.

RA0/AN02

RA1/AN13

RA2/AN2/VREF-/CVREF4

RA4/T0CKI/C1OUT6

RA5/AN4/SS/C2OUT7

OSC1/CLKIN9

OSC2/CLKOUT10

RC1/T1OSI/CCP2 12

RC2/CCP1 13

RC3/SCK/SCL 14

RB7/PGD 28RB6/PGC 27RB5 26RB4 25RB3/PGM 24RB2 23RB1 22RB0/INT 21

RC7/RX/DT 18RC6/TX/CK 17RC5/SDO 16RC4/SDI/SDA 15

RA3/AN3/VREF+5

RC0/T1OSO/T1CKI 11

MCLR/Vpp/THV1

U10

PIC16F876A

12345678

2019181716151413

910

1211

U11

LED-BARGRAPH-GRN

R2350350350350350350350350

R1110k

(+) valores al PC para configurar

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

100

10k

R1410k

Mantener pulsado para

desde el PC configurar

las TempMin , TempMax y el Tiempo de Muestreo

RXD

RTS

TXD

CTS

NOTA:El "DS1621" tienen una apreciación de SÓLO 0.5º

por ello, le pongo a su propiedad "granularity" 0.5

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

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

SENSOR "DS1621" Apreciación -> 0.5º

PUERTO SERIE

( HIPERTERMINAL )

D7

14D

613

D5

12D

411

D3

10D

29

D1

8D

07

E6

RW

5R

S4

VS

S1

VDD

2

VE

E3

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

R1510k

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

Reset

Page 10: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin 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 mm\Sensor_Temperatura_DS1621.sch (Sheet: 1/1)

RESET

RA

0R

A2

RB

4R

B5

RB

6R

B7 +

LED

VS

SV

DD

VE

ER

SR

WE D

0D

1D

2D

3D

4D

5D

6D

7

RB7RB6RB5RB4

RC7RC6RC5RC4

RC

3R

C2

RC

1R

C0

LCD 4X16 ó LCD 4X20

Comandos para situar el cursor en el Inicio de LíneaLCD 4X16

Línea1; 0x 80 b'1000 0000'Línea 2; 0x C0 b'1100 0000'Línea3; 0x 90 b'1001 0000'Línea4; 0x D0 b'1101 0000'

Línea 1 0x 80 b'1000 0000'Línea 2; 0x C0 b'1100 0000'Línea 3; 0x 94 b'1001 0100'Línea 4; 0x D4 b'1101 0100'

LCD 4X20

CONEXIÓN SENSORES TEMPERATURA "DS1621 ó DS1624"

SDA-RA4SCL-RA3

SDA-RA4

SDA-RA4

SDA-RA4

SCL-RA3

SCL-RA3

SC

L-R

A3

SD

A-R

A4

Mantener Pulsado paradesde el PC configurarlas TempMin,TempMax

RC

0

RC

7

SDA-RA4SCL-RA3

SDA-RA4

SDA-RA4

SDA-RA4

SCL-RA3

SCL-RA3

RB1 y el Tiempo de Muestreo

RB0

RB

1R

B0

RB

1

(+) Valores al PC para configurar(-) Solo al LCD NO Comunica con PC

RA5_RD_PIC

RA1_TX_PIC

RS

232

En

el E

AG

LE: C

on-s

ubd

F09H

P

Pat

illa

3: T

xD

Pat

illa

2: R

xD

RxDTxD

(+ 16) y (- 15)

SD

A-R

A4

SC

L-R

A3

RA

0R

A1_

TX_P

IC

RA

5_R

D_P

ICR

A2

BUS I2C

BU

S I2

C

RB0RB1

Realizado con "Invoque"

ON +

OFF (-)

Salidas; Activadas si los Sensores 1 al 8superan la temperatura establecidaLed1 se activa si Sensor 1 está entre su TempMin y TempMax establecida.

La histérisis de activación es de Abajo arriba, es decir,Led1 estará activo si la temperatura a ascendidodesde la TempMi a la TempMax

pero no se activará si estaba por encima de la TempMax hasta que baje de la TempMin y vuelva a ascender

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

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

220 VOLT ALTERNA

9 V

OL

CC

6VA

Puentes para utilizar o noel transformador como alimentación

>=9 Vcc

Tx el Pic Transmite "Rojo"

Rx el Pic Recibe "Verde"

LEDS de 3 mm

(SDA)(SCL)

(-)(+)

Pull Up RB3.Evita se reiniciatocar patilla RB3

MC

LR-R

ES

ET

MCLR-RESET

PIC16876P

>= 9 VCC

400

220 uF 220 uF

GND

+5V

+12V

4 M

HZ

15 p

F15

pF

400

400

400

400

400

400

400

GND

100

10K

+5V

GND

GND

470 k

+5V

GND

GND

+5V

+5V

4K7

4K7

+5V

GND

GND

+5V

GND

10K

10K

+5V

GND

GND

MAX232

1 uF

1 uF

1 uF

1 uF

100n

GND

+5V

GN

D

+5V

GND

TL36PO

1K

220 VAC

470

470

+5V

10K

+5V

MCLR/THV1

RA0/AN02

RA1/AN13

RA2/AN24

RA3/AN35

RA4/T0CKI6

RA5/AN47

OSC1/CLKIN9

OSC2/CLKOUT10

RC0/T1OSO11

RC1/T1OSI12

RC2/CCP113

RC3/SCK14

SDI/RC4 15SDO/RC5 16RC6 17RC7 18

820

INT/RB0 21RB1 22RB2 23PGM/RB3 24RB4 25RB5 26PGC/RB6 27PGD/RB7 28

19

IC1VDD

VSS

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16JP1

3 124

S1

3 124

S4

X1-1

X1-2

IC2GND

IN OUT

LED

1

R1

C1 C2

Q1

C3

C4

LED

2

LED

3

LED

4

LED

5

LED

6

LED

7

LED

8

R2

R3

R4

R5

R6

R7

R8

123456789

10111213141516

JP2

R9

R10

C5

12345678 JP3

R11

R12

123456789

10111213141516

JP4

R13

R14

16 27 38 49 5

X2

C1+1

C1-3

C2+4

C2-5

T1IN11

T2IN10

R1OUT12

R2OUT9

V+ 2

V- 6

T1OUT 14

T2OUT 7

R1IN 13

R2IN 8

IC4

1615

GN

DVC

C

IC4P

C7

C8

C9

C10

C11

23

1

S3

LED

9

1

57

9

TR1

1 2

JP5

12 JP6

X3-1

X3-2

LED10 R16

LED11 R17

R18

Autor: Joaquín Berrocal Piris

+ ++

+

++

PR

I

SE

C

In 0

I/O 0

I/O 0

I/O 0

I/O 0

I/O 0

I/O 0

In 0

Out 0

I/O 0

I/O 0

I/O 0

I/O 0

I/O 0

I/O 0

I/O 0

I/O 0

Pw

r 0

Pw

r 0

I/O 0

I/O 0

I/O 0

I/O 0

I/O 0

I/O 0

I/O 0

I/O 0

Pw

r 0

Pas

0

Pas

0

Pas

0

Pas

0

Pas

0

Pas

0

Pas

0

Pas

0

Pas

0

Pas

0

Pas

0

Pas

0

Pas

0

Pas

0

Pas

0

Pas

0

Pas 2 Pas 1

Pas 1Pas 2

Pas 2 Pas 1

Pas 1Pas 2

Pas 0

Pas 0

In 0

In 0

Pas 0

Pas

0P

as 0

Pas

1P

as 1

Pas

0P

as 0

Pas

0P

as 0

Sup

0

Sup

0

Sup

0

Pas

1P

as 1

12

Pas 1 Pas 1

Pas 1 Pas 1

Pas

0P

as 0

Pas

0P

as 0

Pas

0P

as 0

Pas

0P

as 0

Pas

0P

as 0

Pas

0P

as 0

Pas

0P

as 0

Pas

1P

as 1

Pas

1P

as 1

Pas

1P

as 1

Pas

1P

as 1

Pas

1P

as 1

Pas

1P

as 1

Pas

1P

as 1

Sup

0

Pas 0

Pas 0

Pas 0

Pas 0

Pas 0

Pas 0

Pas 0

Pas 0

Pas 0

Pas 0

Pas 0

Pas 0

Pas 0

Pas 0

Pas 0

Pas 0

Pas

1P

as 1

Pas

1P

as 1Sup

0

Sup

0

Sup

0

Pas

1P

as 1

Sup

0

Sup

0

Sup

0

Sup

0

Pas

0

Pas

0

Pas

0

Pas

0

Pas

0

Pas

0

Pas

0

Pas

0

Sup

0

Pas

1P

as 1

Pas

1P

as 1

Sup

0

Pas 0

Pas 0

Pas 0

Pas 0

Pas 0

Pas 0

Pas 0

Pas 0

Pas 0

Pas 0

Pas 0

Pas 0

Pas 0

Pas 0

Pas 0

Pas 0

Sup

0

Sup

0S

up 0

Sup

0

Pas

1P

as 1

Pas

1P

as 1

Sup

0

Sup

0

Pas 0

Pas 0 Pas 0

Pas 0 Pas 0

Pas 0 Pas 0

Pas 0 Pas 0

Sup

0

I/O 0

I/O 0

I/O 0

I/O 0

In 0

In 0

Out 0

Out 0

I/O 0

I/O 0

Out 0

Out 0

In 0

In 0P

wr 0

Pw

r 0

Pas 0 Pas 0

Pas 0 Pas 0

Pas 0Pas 0

Pas 0 Pas 0

Pas 1Pas 1

Sup

0

Sup

0

Sup 0

Sup

0S

up 0

Pas 0

Pas 0

Pas 0

Pas

0P

as 0

Pas

1P

as 1

Pas 1

Pas 1

Pas 2

Pas 2

Pas

0

Pas

0P

as 0

Pas

0

Pas 0

Pas 0

Pas 0Pas 0 Pas 1Pas 1

Pas 0Pas 0 Pas 1Pas 1

Sup

0

Pas

1P

as 1Sup

0

Page 11: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

11/01/2012 9:21:50 C:\MIS PROYECTOS\PROYECTOS TEMPERATURA OK\ARCHIVOS CNC Y EAGLE SENSORES DS1621 PARA LCD\CNC 3 PASADAS 100X108para 0,4 mm\Sensor_Temperatura_DS1621_100X108_1vía 1LINEA.brd

SD

AS

CL

-+

Falta

pue

ntea

r con

SC

L

12

1 596

2,54

F09

P1

S1

EI4

2-1

1 2

12

34

12

34

-I O

- +

IC1

JP1

S1

S4

X1

IC2

LED1

R1

C1

C2

Q1C

3

C4

LED2

LED3

LED4

LED5

LED6

LED7

LED8

R2

R3

R4

R5

R6

R7

R8

JP2

R9

R10

C5

JP3

R11

R12

JP4

R13

R14

X2

IC4

C7

C8

C9

C10

C11

S3

LED

9

R15

TR1

JP5JP6

X3

LED10

R16

LED11

R17

R18

PIC16876P

>= 9 VCC

7805

400

220 uF

220 uF

4 M

HZ

15 p

F 15 p

F400

400

400

400

400

400

400

100

10K

470 k

4K7

4K7 10

K

10K

MAX232

1 uF

1 uF

1 uF

1 uF

100n

TL36

PO

1K

220 VAC

470

470

10K

Page 12: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

11/01/2012 9:10:33 C:\MIS PROYECTOS\PROYECTOS TEMPERATURA OK\ARCHIVOS CNC Y EAGLE SENSORES DS1621 PARA LCD\Sensor_Temperatura_DS1621_100X108_1vía 1LINEA.brd

SD

AS

CL

-+

Falta

pue

ntea

r con

SC

L

12

1 596

2,54

F09

P1

S1

EI4

2-1

1 2

12

34

12

34

-I O

- +

IC1

JP1

S1

S4

X1

IC2

LED1

R1

C1

C2

Q1C

3

C4

LED2

LED3

LED4

LED5

LED6

LED7

LED8

R2

R3

R4

R5

R6

R7

R8

JP2

R9

R10

C5

JP3

R11

R12

JP4

R13

R14

X2

IC4

C7

C8

C9

C10

C11

S3

LED

9

R15

TR1

JP5JP6

X3

LED10

R16

LED11

R17

R18

PIC16876P

>= 9 VCC

7805

400

220 uF

220 uF

4 M

HZ

15 p

F 15 p

F400

400

400

400

400

400

400

100

10K

470 k

4K7

4K7 10

K

10K

MAX232

1 uF

1 uF

1 uF

1 uF

100n

TL36

PO

1K

220 VAC

470

470

10K

Page 13: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

11/01/2012 9:20:24 C:\MIS PROYECTOS\PROYECTOS TEMPERATURA OK\ARCHIVOS CNC Y EAGLE SENSORES DS1621 PARA LCD\CNC 3 PASADAS 100X108para 0,4 mm\Sensor_Temperatura_DS1621_100X108_1vía 1LINEA.brd

SD

AS

CL

-+

Falta

pue

ntea

r con

SC

L

12

1 596

2,54

F09

P1

S1

EI4

2-1

1 2

12

34

12

34

-I O

- +

IC1

JP1

S1

S4

X1

IC2

LED1

R1

C1

C2

Q1C

3

C4

LED2

LED3

LED4

LED5

LED6

LED7

LED8

R2

R3

R4

R5

R6

R7

R8

JP2

R9

R10

C5

JP3

R11

R12

JP4

R13

R14

X2

IC4

C7

C8

C9

C10

C11

S3

LED

9

R15

TR1

JP5JP6

X3

LED10

R16

LED11

R17

R18

PIC16876P

>= 9 VCC

7805

400

220 uF

220 uF

4 M

HZ

15 p

F 15 p

F400

400

400

400

400

400

400

100

10K

470 k

4K7

4K7 10

K

10K

MAX232

1 uF

1 uF

1 uF

1 uF

100n

TL36

PO

1K

220 VAC

470

470

10K

Page 14: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

11/01/2012 9:19:38 C:\MIS PROYECTOS\PROYECTOS TEMPERATURA OK\ARCHIVOS CNC Y EAGLE SENSORES DS1621 PARA LCD\CNC 3 PASADAS 100X108para 0,4 mm\Sensor_Temperatura_DS1621_100X108_1vía 1LINEA.brd

SD

AS

CL

-+

Falta

pue

ntea

r con

SC

L

12

1 596

2,54

F09

P1

S1

EI4

2-1

1 2

12

34

12

34

-I O

- +

IC1

JP1

S1

S4

X1

IC2

LED1

R1

C1

C2

Q1C

3

C4

LED2

LED3

LED4

LED5

LED6

LED7

LED8

R2

R3

R4

R5

R6

R7

R8

JP2

R9

R10

C5

JP3

R11

R12

JP4

R13

R14

X2

IC4

C7

C8

C9

C10

C11

S3

LED

9

R15

TR1

JP5JP6

X3

LED10

R16

LED11

R17

R18

PIC16876P

>= 9 VCC

7805

400

220 uF

220 uF

4 M

HZ

15 p

F 15 p

F400

400

400

400

400

400

400

100

10K

470 k

4K7

4K7 10

K

10K

MAX232

1 uF

1 uF

1 uF

1 uF

100n

TL36

PO

1K

220 VAC

470

470

10K

Page 15: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera

;******************************* Control_I2C_8_Sensores_Temperatura.asm ************************

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; Realizado por JOAQUÍN BERROCAL PIRIS en marzo de 2011

;+++++++++++++++++++++++ ¡¡ PARA EL LCD 20X4 !!+++++++++++++++++++++++++++;-------LE HE AÑADIDO LA LIBRERÍA LCD 4X20.INC-------

; ESTOY UTILIZANDO EL PIC16F876A

;+Programa de control DE 8 SENSORES DE TEMPERATURA DS1624 ó el DS1621;+VISUALIZACIÓN SOBRE LCD 4X16 LÍNEAS Y TAMBIÉN SI QUEREMOS SOBRE PC A TRAVÉS DE PUERTO SERIE RS232.;+DESDE EL PC (hiperterminal) se pueden configurar las TempMín y TempMax de cada sensor;+Si la temperatura del sensor es inferior a la TempMáx configurada para él, se activará la salida correspondiente.

;OBSERVACIÓN:

;LO TENGO PREPARADA CON UNA HISTÉRISIS PARA EVITAR CONSTANTE ACTIVACIONES Y DESACTIVACIONES.; PARA ELLO POR EJEMPLO SI CONFIGURO EL SENSOR 1 con una TempMi---> 10ºC y la TempMax a 12ºC.;su salida estará activa (RC0), SI ES INFERIOR A < 12ºC "PERO TIENE QUE EMPEZAR A ACTIVARSE POR DEBAJO DE LA TempMin establecida en este caso 10ºC;de lo contrario hasta que no descienda de la temperatura TempMin 10º no se volverá a activar;Conclusión; mantiene activa la salida si la temperatura del sensor es < TempMin y < TempMax y para poder estar activa debe encontrarse inicialmente;por debajo de la TempMin o bien descender por debajo de dicha temperatura. De esta manera se consigue una correcta HISTÉRISIS DE ACTIVACIÓN.;;;PARA SIMULARLO EN PROTEUS USAR EL DS1621 funciona igual,SOLO QUE ÉSTE LA APRECIACION ES DE 0.5ºC.;(CON EL "DS1624" SE CONSIGUIRÍA UNA APRECIACIÓN DE 0.1º SEGÚN LA TABLA DE CONVERSIÓN QUE TENGO EN el comienzo del programa **.asm);visualizarlo sobre LCD una LCD 4X16 .También se podría hacer sobre LCD 2x16 ligeros cambios

;++++++++++++++++++++++++++++++OBSERVACIÓN FINAL+++++++++++++++++++++++++++++++++++++

;TENGO MUCHAS INSTRUCCIONES ANULADAS CON ";" PERO LAS DEJO POR POSIBLES REFORMAS A FUTURO

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;; ZONA DE DATOS **********************************************************************

LIST P=16F876AINCLUDE <P16F876A.INC>__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

CBLOCK 0x20

;para guardar temporalmente la temperatura de los sensores y poder reflejarlas en la pantalla todas a la vez

TempSensor_0TempSensor_1TempSensor_2TempSensor_3TempSensor_4TempSensor_5TempSensor_6TempSensor_7

TempSigno_0TempSigno_1TempSigno_2TempSigno_3TempSigno_4TempSigno_5TempSigno_6TempSigno_7

; para guardar el valor decimal redondeado a un sólo dígito.DS1624_Decimal_0DS1624_Decimal_1DS1624_Decimal_2

1

Page 16: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera

DS1624_Decimal_3DS1624_Decimal_4DS1624_Decimal_5DS1624_Decimal_6DS1624_Decimal_7

; FlagSaltarElReturn ;Para poder hacer el parpadeo de "Leyendo Sensores": LO SUPRIMO POR NO UTILIZARLO

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

TempMin_0TempMax_0

TempMin_1TempMax_1

TempMin_2TempMax_2

TempMin_3TempMax_3

TempMin_4TempMax_4

TempMin_5TempMax_5

TempMin_6TempMax_6

TempMin_7TempMax_7

ENDC

;------------------------------------------RetornoCarro EQU .13 ; Código de tecla "Enter" o "Retorno de Carro".CambioLinea EQU .10 ; Código para el cambio de línea.;;TabuladorH EQU .9 ;Código para un salto de tabulador horizontal;;TabuladorV EQU .11 ;Código para tabulador Vertical y poder así borrar lo escrito en el PC;;InicioCabecera EQU .1;;BorrarPC EQU .127 ;DEL borrar

;ESTOS SOBRAN PERO LOS DEJO DE MOMENTO;;#DEFINE Entrada0 PORTB,4 ; Define dónde se sitúan las entradas.;;#DEFINE Entrada1 PORTB,5;;#DEFINE Entrada2 PORTB,6;;#DEFINE Entrada3 PORTB,7;-----------------------------------------

; *******************************ZONA DE CÓDIGOS *************************************

ORG 0goto Inicio ;Pone la línea 1 y 2 con las iniciales de T1: T2: T3: t4:

Mensajes ; Los mensajes no deben sobrepasar las 256 addwf PCL,F ; primeras posiciones de memoria de programa.

MensajeEnBlancoDT " ", 0x00 ;Lo utilizo por si falla un Sensor aparezca en blanco su valor en lugar de

:-0º

MensajeGradoCentigradoDT "º", 0x00 ; En la pantalla: "ºC" "C" Se puede suprimir para que quepa un

2

Page 17: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera

decimal

;PARA REFLEJAR EN LCD T1: a T8:T1

DT "T1:",0x00T2

DT "T2:",0x00T3

DT "T3:",0x00T4

DT "T4:",0x00T5

DT "T5:",0x00T6

DT "T6:",0x00T7

DT "T7:",0x00T8

DT "T8:",0x00

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

ESPERE ", 0x00

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

DT " Leyendo Sensores", 0x00 ;LE AÑADO DOS ESPACIOS PARA EL LCD 20X4

;UTILIZO ESTOS MENSAJES PARA VERLOS UNO DEBAJO DEL OTRO YA QUE EN EL HIPERTERMINAL DEL "PROTEUS" No actúa el Tabulador y;se ven todas las temperaturas una detrás de la otra sin tabulación

MensajesAlPC_PROGRAMAR ;Lo primero que sale si tengo comunicación con el PC interruptor RB0 = 1

DT CambioLinea,RetornoCarroDT "PROGRAMAR:",0x00

;------PARA REDUCIR POSICIONES DE LAS 256 POSIBLES---

MensajesAlPC_SENSOR ;VALOR "SENSOR " global para todos los sensores AÑADIRLE después el númeroDT CambioLinea,RetornoCarro,RetornoCarroDT "SENSOR ",0x00

MensajesAlPC_Sensor1DT "1: ",0x00

MensajesAlPC_Sensor2DT "2: ",0x00

MensajesAlPC_Sensor3DT "3: ",0x00

MensajesAlPC_Sensor4DT "4: ",0x00

MensajesAlPC_Sensor5DT "5: ",0x00

MensajesAlPC_Sensor6DT "6: ",0x00

MensajesAlPC_Sensor7DT "7: ",0x00

MensajesAlPC_Sensor8DT "8: ",0x00

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

MensajeAlPC_TminDT CambioLinea,RetornoCarro,RetornoCarro ;DT RetornoCarroDT "Tmin: ",0x00

MensajeAlPC_TmaxDT CambioLinea,RetornoCarro,RetornoCarro ;DT RetornoCarroDT "Tmax: ",0x00

3

Page 18: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera

SELECCION_1 ;Para indicar en el PC "SELECCIONADO: 1 = 10 Sg"

DT " 10 Sg",0x00

SELECCION_2 ;Para indicar en el PC "SELECCIONADO: 1 = 10 Sg"; DT RetornoCarro

DT " 20 Sg",0x00; DT "SELECCIONADO: 2 = 20 Sg",0x00

SELECCION_3 ;Para indicar en el PC "SELECCIONADO: 1 = 10 Sg"; DT RetornoCarro

DT " 1 Min",0x00 ;DT "SELECCIONADO: 3 = 1 Min",0x00

MensajesAlPC_Tiempo_Muestreo ;SELECCIONAR TIEMPO DE MUESTREO: 1 = 10 Sg 2 = 20 Sg 3 = 30 Sg

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

ElegidoDT "ELEGIDO", 0x00 ;Para poner en la línea 1 DT " ESPERE ", 0x00

;Subrutina "DS1624_RedondeaDecimal" ----------------------------------------------------;Esta rutina NO LA PUEDO DEJAR en "DS1624_Modificado_0.INC" por tener problemas en su lectura probablemente por la ;distancia. Aquí no da problemas ; Esta subrutina redondea el valor del contenido del registro de trabajo W al valor más cercano; con un decimal indicado en una tabla.;;ESTA TABLA ESTÁ PENSADA PARA EL SENSOR "DS1624" Que tiene una apreciación de 0,03125º;NO PARA EL SENSOR "DS1621" el cual su apreciación es de 0,5º;no obstante la dejo integra por posible uso a futuro con un DS1624

DS1624_RedondeoDecimal

addwf PCL,F ;LO MISMO ES PONER "F" QUE "1"retlw d'0' ;0; (DS1624_Decimal)=b'0000'. Mide 0,0000ºC. Redondeado a 0,0ºC.retlw d'1' ;1; (DS1624_Decimal)=b'0001'. Mide 0,0625ºC. Redondeado a 0,1ºC.retlw d'1' ;2; (DS1624_Decimal)=b'0010'. Mide 0,1250ºC. Redondeado a 0,1ºC.retlw d'2' ;3; (DS1624_Decimal)=b'0011'. Mide 0,1875ºC. Redondeado a 0,2ºC.retlw d'3' ;4; (DS1624_Decimal)=b'0100'. Mide 0,2500ºC. Redondeado a 0,3ºC.retlw d'3' ;5; (DS1624_Decimal)=b'0101'. Mide 0,3125ºC. Redondeado a 0,3ºC.retlw d'4' ;6; (DS1624_Decimal)=b'0110'. Mide 0,3750ºC. Redondeado a 0,4ºC.retlw d'4' ;7; (DS1624_Decimal)=b'0111'. Mide 0,4375ºC. Redondeado a 0,4ºC.retlw d'5' ;8; (DS1624_Decimal)=b'1000'. Mide 0,5000ºC. Redondeado a 0,5ºC.;Este es el

único valor utilizado para el DS1621retlw d'6' ;9; (DS1624_Decimal)=b'1001'. Mide 0,5625ºC. Redondeado a 0,6ºC.retlw d'6' ;10 (DS1624_Decimal)=b'1010'. Mide 0,6250ºC. Redondeado a 0,6ºC.retlw d'7' ;11 (DS1624_Decimal)=b'1011'. Mide 0,6875ºC. Redondeado a 0,7ºC.retlw d'8' ;12 (DS1624_Decimal)=b'1100'. Mide 0,7500ºC. Redondeado a 0,8ºC.retlw d'8' ;13 (DS1624_Decimal)=b'1101'. Mide 0,8125ºC. Redondeado a 0,8ºC.retlw d'9' ;14 (DS1624_Decimal)=b'1110'. Mide 0,8750ºC. Redondeado a 0,9ºC.retlw d'9' ;15 (DS1624_Decimal)=b'1111'. Mide 0,9375ºC. Redondeado a 0,9ºC.

DS1624_FinTablaRedondeo

IF (DS1624_FinTablaRedondeo > 0xFF); ERROR "¡CUIDADO!" ;;;"¡CUIDADO!: La tabla ha superado el tamaño de la página de los"; MESSG "Error";;;"primeros 256 bytes de memoria ROM. NO funcionará correctamente."

4

Page 19: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera

bsf PORTC,6 ;ACTIVOLA SALIDA 7

ENDIF

; ---------Subrutina "Inicio" --------------------------

Inicio

;-----Para el pic16f876a puerta A E/S digitales--------bsf STATUS,RP0 ;Selección Banco 1

movlw b'00000011' ;PUERTA B como Salida PEROmovwf TRISB ;RBO Y RB1 COMO ENTRADA. Una para no tener comunicación con el PC y

la otra para obligar a PROGRAMAR

;;; clrf TRISB ;PUERTA B como Salida PERO;;; bsf TRISB,0 ;RB0 lo configuro como ENTRADA para tener o no comunicación con el PC a través del interruptor conectado al RB0

;comunicación con el PC y LCD ->RB0 = 1. SÓLO LCD -> RB0 = 0;; bsf TRISB,1

clrf TRISC ;PUERTA C como Salida

movlw b'00000110' ;PUERTAA E/S Digitalesmovwf ADCON1

; movlw b'00011111' ;La PUERTAA se configura como Entrada; movwf TRISA ;NO ES NECESARIO. configurarlo

bcf STATUS,RP0 ;Vuelta al BANCO 0

;INICIA LOS PUERTOS APAGANDO TODAS SUS SALIDASclrf PORTBclrf PORTCclrf Flag_No_Repetir_Programarclrf FlagValorNegativo ;reseteo el flag

;PARA PONER A CERO TODOS ESTOS REGISTROSclrf TempSensor_0clrf TempSensor_1clrf TempSensor_2clrf TempSensor_3clrf TempSensor_4clrf TempSensor_5clrf TempSensor_6clrf TempSensor_7

;---------------------------------clrf Flag_Es_Negativo ;reiniciar aquí el flag lo utilizo para suprimir el '.' y la 'º'

si la parte entera tiene;3 Caracteres incluido del signo (-) y la decimal es .0º

;----------------------------------------------------;-----------INICIA LA PANTALLA LCD-------------------;----------------------------------------------------

call LCD_Inicializa ;PARA INICIAR LA LCD

call RS232_Inicializa ;Inicializa la comunicación con el puerto Serie. RA1=TX y RA5 = RD (en lugar de RA3 y RA4

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

;++++++POR SI SE VA LA LUZ LEER LAS POSICIONES DE 0 A 17 DE LA EEPROM++++++;++++++++++++para así trabajar con los valores PROGRAMADOS ++++++++++++

;LAS POSICIONES 0 a 17 están recogidas el flag de no reptir programar. Las TempMin y TempMax de cada SENSOR Y el valor del "TiempoMuestreo"

call EEPROM_Lectura_De_0_a_17 ;;;Rutina en EEPROM_16F87XX.INC;EEPROM_Lectura_De_0_a_17 EEPROM_Lectura_TempMin_a_TempMax ;EEPROM_Lectura_TempMin_a_TempMax Rutina en

5

Page 20: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera

EEPROM_16F87XX.INC

Parpadeo ;Fijo el mensaje "ESPERE" y Parpadeante el "Leyendo Sensores"

movlw .5call LCD_PosicionLinea1 ; primera línea más el valor del registro Wmovlw Espere ;Mensaje "ESPERE"call LCD_Mensaje ;Visualiza el Mensaje

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

call LCD_Linea2 ; Pasa a la segunda línea.movlw Leyendo_Sensores ; Apunta al mensaje parpadeante. "Leyendo Sensores"call LCD_Mensaje ; Lo visualiza.

;------ANULO EL PARPADEO-----;; call Retardo_500ms ; Durante este tiempo.;; call LCD_Linea2 ; Vuelve a situarse al principio de la línea 2.;; call LCD_LineaEnBlanco ; Visualiza línea en blanco.Para no ver nada en esa línea y así producir efecto intermitente; call Retardo_500ms ; Durante este tiempo, produciendo un efecto de Parpadeo LO SUPRIMO por

;tener en cada sensor un Call Retardo_1s que se va a mantener apagado

;++++++SI QUITO LAS DOS INSTRUCCIONES DE ABAJO SE QUEDA PARPADEANDO PERMANENTEMENTE+++++

; btfsc FlagSaltarElReturn,0 ;Si está cargado con valor (0) saltar el Return ya que es la primera vez ; return ;retorna de cada Sensor_1 al Sensor_7 Si está cargado con valor 1 hacer el return para poder seguir con el parpadeo;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

;---------------------------------------------------------------------------;LECTURA DE LOS SENSORES DE TEMPERATURA;

Sensor_0

;; bsf FlagSaltarElReturn,0 ;para activar el flag

call DS1624_Inicializa_0 ; Configura el DS1624 e inicia la conversión.call Retardo_1s ;retardo de 1 segundoscall DS1624_LeeTemperatura ; Lee la temperatura.

; call DS1624_IniciaConversion ;Comienza conversión para la siguiente lectura SI LO PONGO NO FUNCIONAN NI LOS ENTEROS -8

movwf TempSensor_0 ;lo guardo temporalmente para reflejarlo en la LCD todas las temperaturas juntas

movf DS1624_Signo,Wmovwf TempSigno_0 ;Para guardar temporalmente el signo del sensor 1

;---Para guardar temporalmente el DECIMAL del Sensor_0---movf DS1624_Decimal,Wmovwf DS1624_Decimal_0

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

;++++INSTRUCCIONES PARA PODER PROGRAMAR LAS TempMin y TempMax y el TiempoMuestreo++++++btfsc PORTB,1 ;VERIFICA si está PULSADO .No pongo RB1 por no reconocerlogoto Sensor_1 ;NO ESTÁ PULSADO continuar en "Sensor_0"call Retardo_20ms ;Espera que se estabilicen los niveles de tensiónbtfsc PORTB,1 ;Comprueba si es un Rebotegoto Sensor_1 ;NO ESTÁ PULSADO "Sensor_0"goto VisualizaTermometro_LCD_0 ;Sí está pulsado

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

Sensor_1

;; call Parpadeo

6

Page 21: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera

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

; call DS1624_IniciaConversion_1 ;Comienza conversión para la siguiente lectura

movwf TempSensor_1 ;lo guardo temporalmente para reflejarlo en la LCD todas las temperaturas juntas

movf DS1624_Signo,Wmovwf TempSigno_1 ;Para guardar temporalmente el signo del sensor 1

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

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

Sensor_2

;; call Parpadeo

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

; call DS1624_IniciaConversion_2 ;Comienza conversión para la siguiente lectura

movwf TempSensor_2 ;lo guardo temporalmente para reflejarlo en la LCD todas las temperaturas juntas

movf DS1624_Signo,Wmovwf TempSigno_2 ;Para guardar temporalmente el signo del sensor 2

;---Para guardar temporalmente el DECIMAL del Sensor_2---movf DS1624_Decimal,Wmovwf DS1624_Decimal_2

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

Sensor_3

;; call Parpadeo

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

; call DS1624_IniciaConversion_1 ;Comienza conversión para la siguiente lectura

movwf TempSensor_3 ;lo guardo temporalmente para reflejarlo en la LCD todas las temperaturas juntas

movf DS1624_Signo,Wmovwf TempSigno_3 ;Para guardar temporalmente el signo del sensor 3

;---Para guardar temporalmente el DECIMAL del Sensor_0---movf DS1624_Decimal,Wmovwf DS1624_Decimal_3

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

Sensor_4

;; bsf FlagSaltarElReturn,0 ;para activar el flag

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

; call DS1624_IniciaConversion ;Comienza conversión para la siguiente lectura SI LO PONGO NO FUNCIONAN NI LOS ENTEROS -8

movwf TempSensor_4 ;lo guardo temporalmente para reflejarlo en la LCD todas las temperaturas juntas

movf DS1624_Signo,Wmovwf TempSigno_4 ;Para guardar temporalmente el signo del sensor 4

7

Page 22: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera

;---Para guardar temporalmente el DECIMAL del Sensor_0---movf DS1624_Decimal,Wmovwf DS1624_Decimal_4

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

Sensor_5

;; call Parpadeo

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

; call DS1624_IniciaConversion_1 ;Comienza conversión para la siguiente lectura

movwf TempSensor_5 ;lo guardo temporalmente para reflejarlo en la LCD todas las temperaturas juntas

movf DS1624_Signo,Wmovwf TempSigno_5 ;Para guardar temporalmente el signo del sensor 5

;---Para guardar temporalmente el DECIMAL del Sensor_5---movf DS1624_Decimal,Wmovwf DS1624_Decimal_5

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

;++++INSTRUCCIONES PARA PODER PROGRAMAR LAS TempMin y TempMax y el TiempoMuestreo++++++btfsc PORTB,1 ;VERIFICA si está PULSADO .No pongo RB1 por no reconocerlogoto Sensor_6 ;NO ESTÁ PULSADO continuar en "Sensor_0"call Retardo_20ms ;Espera que se estabilicen los niveles de tensiónbtfsc PORTB,1 ;Comprueba si es un Rebotegoto Sensor_6 ;NO ESTÁ PULSADO "Sensor_6"goto VisualizaTermometro_LCD_0 ;Sí está pulsado

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

Sensor_6

;; call Parpadeo

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

; call DS1624_IniciaConversion_2 ;Comienza conversión para la siguiente lectura

movwf TempSensor_6 ;lo guardo temporalmente para reflejarlo en la LCD todas las temperaturas juntas

movf DS1624_Signo,Wmovwf TempSigno_6 ;Para guardar temporalmente el signo del sensor 6

;---Para guardar temporalmente el DECIMAL del Sensor_6---movf DS1624_Decimal,Wmovwf DS1624_Decimal_6

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

Sensor_7

;; call Parpadeo

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

; call DS1624_IniciaConversion_1 ;Comienza conversión para la siguiente lectura

movwf TempSensor_7 ;lo guardo temporalmente para reflejarlo en la LCD todas las temperaturas juntas

movf DS1624_Signo,Wmovwf TempSigno_7 ;Para guardar temporalmente el signo del sensor 7

;---Para guardar temporalmente el DECIMAL del Sensor_7---

8

Page 23: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera

movf DS1624_Decimal,Wmovwf DS1624_Decimal_7

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

;++++++Primero visualiza todos los sensores desde el 0 al 7 en la LCD+++++

goto VisualizaTermometro_LCD_0 ;EN PANTALLA LCD *ESTE SÍ ESTABA la de arriba y abajo NO

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

;*****PARA EVITAR SI ALGÚN SENSOR DEJA DE FUNCIONAR QUE APAREZCA ;*****EN LA PANTALLA EL VALOR -0º. con estas rutinas de más abajo;*****se consigue que aparezca en blanco el valor.

EliminarMenosCero_0movlw MensajeEnBlanco ;;Lo utilizo por si falla un Sensor aparezca en blanco su valor en

lugar de :-0ºcall LCD_Caracter ;LCD_Mensajegoto Histerisis_0 ;para que active o desactive la salida en función del valor de

histerisis establecido;con la TempMini y TempMax

EliminarMenosCero_1movlw MensajeEnBlanco ;;Lo utilizo por si falla un Sensor aparezca en blanco su valor en

lugar de :-0ºcall LCD_Caracter ;LCD_Mensajegoto Histerisis_1 ;para que active o desactive la salida en función del valor de

histerisis establecido;con la TempMini y TempMax

EliminarMenosCero_2movlw MensajeEnBlanco ;;Lo utilizo por si falla un Sensor aparezca en blanco su valor en

lugar de :-0ºcall LCD_Caracter ;LCD_Mensajegoto Histerisis_2 ;para que active o desactive la salida en función del valor de

histerisis establecido;con la TempMini y TempMax

EliminarMenosCero_3movlw MensajeEnBlanco ;;Lo utilizo por si falla un Sensor aparezca en blanco su valor en

lugar de :-0ºcall LCD_Caracter ;LCD_Mensajegoto Histerisis_3 ;para que active o desactive la salida en función del valor de

histerisis establecido;con la TempMini y TempMax

EliminarMenosCero_4movlw MensajeEnBlanco ;;Lo utilizo por si falla un Sensor aparezca en blanco su valor en

lugar de :-0ºcall LCD_Caracter ;LCD_Mensajegoto Histerisis_4 ;para que active o desactive la salida en función del valor de

histerisis establecido;con la TempMini y TempMax

EliminarMenosCero_5movlw MensajeEnBlanco ;;Lo utilizo por si falla un Sensor aparezca en blanco su valor en

lugar de :-0ºcall LCD_Caracter ;LCD_Mensajegoto Histerisis_5 ;para que active o desactive la salida en función del valor de

histerisis establecido;con la TempMini y TempMax

EliminarMenosCero_6movlw MensajeEnBlanco ;;Lo utilizo por si falla un Sensor aparezca en blanco su valor en

lugar de :-0ºcall LCD_Caracter ;LCD_Mensajegoto Histerisis_6 ;para que active o desactive la salida en función del valor de

histerisis establecido;con la TempMini y TempMax

EliminarMenosCero_7movlw MensajeEnBlancocall LCD_Caracter ;LCD_Mensajegoto Histerisis_7 ;**Iniciar ciclo de visualización de los sensores sin repetir T1 a T8

;---------------------------------------------------------------------------;RUTINAS PARA VISUALIZAR EN PANTALLA LCD y/o HIPERTERMINAL LAS TEMPERATURAS;DEPENDERÁ DE LA POSICIÓN DEL INTERRUPTOR SE SELECCIÓN (RB0) : SÓLO LCD o bien PC Y LCD par poder configurar;---------------------------------------------------------------------------

9

Page 24: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera

;-----------------PARA VER EN LCD LA TEMPERATURA DEL Sensor_0---------------------;-------------------ESTE COMIENZA EN LA LÍNEA 1 posición .3 -------------------------

VisualizaTermometro_LCD_0 ;EN PANTALLA LCD

call LCD_Borra ;Borra toda la pantalla.EVITA que al pasar de 10º a 9º se vea 9ºº SE ENCUENTRA EN LA LIBRERIA "LCD_4BIT_4X16.INC"

call Visualizar_T1_a_T8 ;Para visualizar en la LCD T:1 a T:8 SE ENCUENTRA EN LA LIBRERIA "Temperatura_a_LCD.INC"

;EVITA que al pasar de XXº a Xº se vean dos grados Xºº

;-------------------------------------------------; PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC;-------------------------------------------------

;----Lo primero será ver si DESEO MODIFICAR LA PROGRAMACIÓN DE LOS VALORES-----;Para ver si modifico los valores de TempMin, TempMax y el Tiempo de Muestreo;"SI Mantengo Presionado el Pulsador "RB1" A MASA, SÍ DESEO PROGRAMAR."

goto Verificar_Deseo_PROGRAMAR ;esta rutina está en "CONFIGURACION_DESDE_PC.INC";según desee PROGRAMAR o No, se irá a "Continuar" o a

"Continuar_1";------------------------------------------------------------------------------Continuar ;NO QUIERO PROGRAMAR. Verificar ahora si deseo llevar también al PC

btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto No_PC_0_1 ;primer salto para evitar el PC

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

;************INICIALIZAR EL PUERTO SERIE comunicación con el PC*******************;;Continuar_1 ;si mantengo pulsado "RB1" Es porque quiero PROGRAMAR. se vuelve aquí desde "Borrar_EEPROM"

;PRIMERO COMPRUEBO SI ES LA PRIMERA VEZ QUE SE PROGRAMA SI ES ASÍ PERMITIRLO DE LO CONTRARIO NO

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

;Flag_No_Repetir_Programar

movlw .1movwf Flag_No_Repetir_Programar ;utilizo el mismo nombre por no utilizar otro registro

clrf EE_Dir ;Posición "0" donde está grabado el Flag en la EEPROM (lo hice dese la Rutina "PROGRAMAR"

call EEPROM_LeeDato ;lee lo escrito en la posición "0" de la EEprom si ya se hubiese PROGRAMADO tendrá valor "1"

;----COMPARA SI TIENE VALOR 1 EN CUYO CASO NO VOLVER A PROGRAMAR-----

subwf Flag_No_Repetir_Programar,W ;btfsc STATUS,Z ;Si Z=1 NO VOLVER A PROGRAMAR. Y SI Z=0 PROGRAMAR es decir

configurar las Tmin y Tmax de cada sensorgoto No_Volver_A_PROGRAMAR ;si quiero volver a programar pulsar el boton de RESET.

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

;+++++PARA BORRAR LO QUE HAYA EN LA PANTALLA DEL PC HIPERTERMINAL++++ ;Para ello simplemente salto de página--> decimal; .12

movlw .12 ; Nueva página call RS232_EnviaDato

call Retardo_200ms ;para que no salga raro la primera vez aunque en las siguientes ok

Continuar_1 ;LO PONGO AQUÍ PARA QUE SIEMPRE TENGA UN RENGLÓN DE SEPARACIÓN Respecto a lo anterior escrito

movlw .13call RS232_EnviaDato

10

Page 25: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera

call PROGRAMAR ; Rutina de la librería "CONFIGURACION_DESDE_PC.INC";escribe en PC ; "PROGRAMAR: SENSOR1: Tmin: Tmax: HASTA EL

SENSOR8: Tmin: Tmax:"nop

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

;------------MENSAJE TIEMPO DE MUESTREO------------------

movlw MensajesAlPC_Tiempo_Muestreo ;carga el Mensaje para visualizar en el PCcall RS232_Mensaje ;Mensaje al PC

call Tiempo_De_Muestreo ;Rutina donde selecciono el valor 1-2-3 del tiempo de muestreo (1= 10sg)(2=20 Sg)(3 = 1 min)

;y lo guarda en el registro: "TiempoMuestreo" y en EEPROM posición .17

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

No_Volver_A_PROGRAMAR ;Este primer corte es para una vez PROGRAMADAS LAS Tmin y Tmax;No vuelva a salir lo de volver a PROGRAMARLAS

;; call RS232_Inicializa ;Inicializa la comunicación con el puerto Serie. RA1=TX y RA5 = RD (en lugar de RA3 y RA4

;----No suprimirlo evito que salga "SENSOR 1" SI volviese a PROGRAMAR-----------

btfss PORTB,0 ;Si está a (1) Si llevar datos al PCgoto No_PC_0_1 ;Si está a (0) no llevar al PC

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

movlw .13call RS232_EnviaDato

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

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

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

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

; Se coloca para visualización en la T1:XXº T2:movlw .3 ; Se coloca para visualización en lacall LCD_PosicionLinea1 ; primera línea más el valor del registro Wbtfss TempSigno_0,7 ; ¿Temperatura negativa?.goto TemperaturaPositiva_0 ; No, la temperatura es positiva.

TemperaturaNegativa_0;Para comprobar que un registro vale (0) hay que cargar el registro sobre sí mismo;mediante la instrucción (movf)(que es la única que posiciona flags), con lo cual se logra;posicionar el flag (Z) sin variar su contenido.

;Si el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco:;Compara si el registro vale 0

movf TempSensor_0,F ;para posicionar el flag Zbtfsc STATUS,Z ;¿Es cero?, ¿Z=1? Si Z=1 "el Registro vale 0"goto EliminarMenosCero_0 ;Si el valor es cero eliminar el menos -0º

;si es Z=0 el registro NO vale 0 por tanto escribir -

;Si el registro No vale Cero ponerle el signo -

movlw '-' ; Visualiza el signo "-" de temperatura negativa.call LCD_Caracter

;---------------------------------------------------------------------------------------;activar El "Flag_Es_Negativo" Para ver o no ver el signo 'º' por falta de espacio en LCD

bsf Flag_Es_Negativo,0

11

Page 26: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera

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

;_______________________________________________________________________;++++++++++++++++++++AÑADIDO PARA VER EN EL PC++++++++++++;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC

btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto TemperaturaPositiva_0 ;sólo EN PANTALLA LCD

;PARA LLEVARLO AL PC En negativomovlw '-' ; Visualiza el signo "-" de temperatura negativa. en el PC call RS232_EnviaDato

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;______________________________________________________________________________

TemperaturaPositiva_0

movf TempSensor_0,W ; Visualiza el valor absoluto de la temperatura siempre en (+)

call BIN_a_BCD ; pasándola previamente a BCD.

Call Temperatura_En_LCD ;para ver la temperatura suprimiendo el cero no significativo ej "089" saldrá "89"

;+++++++++++++AÑADIDO PARTE DECIMAL++++++++++++++++movf DS1624_Decimal_0,F ;para ver si tiene el valor .0º en cuyo caso no visualizarlo

en la LCD por falta de espaciobtfsc STATUS,Z ;Si Z=1 es CERO LA PARTE DECIMAL .0ºgoto Decimal_0_Es_Cero ;como es cero NO REPRESENTARLO y ponerle 'º'

;Si Z=0 NO ES CERO y por tanto visualizar el '.' y el 'º'

movlw '.' ; Visualiza el punto decimal.call LCD_Caracter

movf DS1624_Decimal_0,W ;Visualiza la parte decimal

call LCD_Nibble ;Visualiza en el lugar actual de la pantalla el valor HEXADECIMAL que almacena el nibble bajo del registro (W). El

;nibble alto en (W) no es tenido en cuenta ej: si (W) = 0101 0110 se visualiza "6"

; si (W) es 1010 1110, se visualiza "E"

;------------lo he suprimido de la libreria Temperatura_a_LCD.INC-------------btfsc Flag_TresCaracteres,0 ;Si tiene tres Caracteres la parte entera NO PONER 'º' por

razón de NO TENER espaciogoto Continua_0 ;

;Se representa el signo "º"Decimal_0_Es_Cero

movlw MensajeGradoCentigrado ; En pantalla aparece "º".call LCD_Mensaje

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

;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC ;ACTIVAR LAS SALIDAS comparando con los valores de la EEPROM programados

Continua_0

btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto Histerisis_0 ;para también activar las salidas aún eligiendo solo el LCD sin

PC;;;;; goto VisualizaTermometro_LCD_1 ;EN PANTALLA LCD;-------------------------------------

movf DS1624_Decimal_0,W ;para poder ver el valor en decimal de cada sensor librería "temperatura_a_PC.INC"

movwf DS1624_Decimal;--------------------------------------------------------------

movf TempSensor_0,W ; Visualiza el valor absoluto de la temperatura, en (+)

call Temperatura_En_PC ;Desde aquí se verán las Centanas-Decenas-Unidades en el PC

12

Page 27: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera

;---------------------------------------------------------------------------------------;+++++ACTIVA LA SALIDA CORRESPONDIENTE ENTRE LOS VALORES DE HISTERISIS ESTABLECIDOS++++++;++++++ENTRE LA TempMin_X y TempMax_X. Es decir sólo activa entre estos valores++++++++;---------------------------------------------------------------------------------------Histerisis_0 ;Activar_Desactivar_Salidas

call EEPROM_Lectura_De_0_a_17 ;Esta en "EEPROM_16F87X.INC" para la lectura de los valores de

;la TempMin y TempMax de cada sensor grabados en la EEPROM

btfss TempSigno_0,7 ;Si el último bit es un "1" Es una temperatura Negativa.goto EsPositivo_0goto EsNegativo_0

EsPositivo_0

movf TempSensor_0,W ;Carga el Valor (+) de la Temperatura en (W)goto Activar_Desactivar_Salidas_0 ;Se va a Activar o Desactivar la salida

EsNegativo_0

movf GlobalNegativa_0,W ;Carga el Valor (-) de la Temperatura en (W) se encuentra en libreria "DS1624_Modificado_0.INC"

movwf TempSensor_0 ;y ya en VALOR NEGATIVO lo llevo a TempSensor_0;goto Activar_Desactivar_Salidas ;Se va a Activar o

Desactivar la salida

;-----está modificado para hacer como en el programa de internet que active por encima de la tempMin hasta la TempMax pero siempre de abajo a arriba y no al revés Activar_Desactivar_Salidas_0

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;-----------------------------------------------------------------;Si la Temperatura del Sensor (TempSensor_x)está por debajo de la TempMin_X estará activa la Salida. Y se mantendrá activa hasta;alcanzar la TempMax_X . Nota si partimos de una temperatura del sensor comprendida entre dichos valores No estará activa la salida;hasta quedar por debajo de la TempMini_X. ;(La otras instrucciones que tenía la salida estaría activa siempre que la temperatura del sensor estuviese entre los valores ; de la TempMin y la TempMax);-----------------------------------------------------------------

movf TempMax_0,Wsubwf TempSensor_0,Wbtfsc STATUS,C ;¿C=0? TempSensor_0 < (TempMax_0)bcf PORTC,0 ;Desactiva la salida 0 de PORTC por ser Mayor o igual la

TempMax_0 que la del TempSensor_0

movf TempMin_0,Wsubwf TempSensor_0,Wbtfss STATUS,C ;¿C=1? (TempMin_0) >= TempSensor_0bsf PORTC,0 ;Activa la salida 0 de PORTC por ser Mayor la TempMin_0 que

la del Sensor_0

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

;-----------------PARA VER EN LCD LA TEMPERATURA DEL Sensor_1---------------------;-------------------ESTE COMIENZA EN LA LÍNEA 1 posición .11 -------------------------

VisualizaTermometro_LCD_1 ;EN PANTALLA LCD

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

;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC

btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto No_PC_1_1 ;

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

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

13

Page 28: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera

;SOBRA EL goto no_pc_2 de arriba; 2º CORTE , NO HACE FALTA LLAMAR POR HABERLO YA HECHO DESDE EL PRIMER SENSOR

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

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

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

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

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

movlw .11 ; Se coloca para visualización en la T1: T2:XXºcall LCD_PosicionLinea1 ; primera línea.btfss TempSigno_1,7 ; ¿Temperatura negativa?.goto TemperaturaPositiva_1 ; No, la temperatura es positiva.

TemperaturaNegativa_1

;Si el el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco:movf TempSensor_1,Fbtfsc STATUS,Z ;¿Es cero?, ¿Z=1? Si Z=1 "el Registro vale 0"goto EliminarMenosCero_1 ;Si el valor es cero eliminar el menos -0º

;si es Z=0 el registro NO vale 0 por tanto escribir -

;Si el registro No vale Cero ponerle el signo -

movlw '-' ; Visualiza el signo "-" de temperatura negativa.call LCD_Caracter

;---------------------------------------------------------------------------------------;activar El "Flag_Es_Negativo" Para ver o no ver el signo 'º' por falta de espacio en LCD

bsf Flag_Es_Negativo,0

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

;_______________________________________________________________________

;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC

btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto No_PC_1_2 ;

;-------------------------------------;PARA LLEVARLO AL PC En negativo

movlw '-' ; Visualiza el signo "-" de temperatura negativa. en el PC call RS232_EnviaDato

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

;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PCNo_PC_1_2 ; se puede quitar. Salto para no reflejar en PC

nop ;se puede quitar

TemperaturaPositiva_1

movf TempSensor_1,W ; Visualiza el valor absoluto de la temperatura,

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

"089" saldrá "89"

;+++++++++++++AÑADIDO PARTE DECIMAL++++++++++++++++

movf DS1624_Decimal_1,F ;para ver si tiene el valor .0º en cuyo caso no visualizarlo en la LCD por falta de espacio

btfsc STATUS,Z ;Si Z=1 es CERO LA PARTE DECIMAL .0ºgoto Decimal_1_Es_Cero ;como es cero NO REPRESENTARLO y ponerle 'º'

;Si Z=0 NO ES CERO y por tanto visualizar el '.' y el 'º'

14

Page 29: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera

movlw '.' ; Visualiza el punto decimal.call LCD_Caracter

movf DS1624_Decimal_1,W ;Visualiza la parte decimal

call LCD_Nibble ;Visualiza en el lugar actual de la pantalla el valor HEXADECIMAL que almacena el nibble bajo del registro (W). El

;nibble alto en (W) no es tenido en cuenta ej: si (W) = 0101 0110 se visualiza "6"

; si (W) es 1010 1110, se visualiza "E"

;------------lo he suprimido de la libreria Temperatura_a_LCD.INC-------------btfsc Flag_TresCaracteres,0 ;Si tiene tres Caracteres la parte entera NO PONER 'º' por

razón de NO TENER espaciogoto Continua_1 ;

;Se representa el signo "º"Decimal_1_Es_Cero

movlw MensajeGradoCentigrado ; En pantalla aparece "º".call LCD_Mensaje

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

;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC ;ACTIVAR LAS SALIDAS comparando con los valores de la EEPROM programados

Continua_1

btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto Histerisis_1 ;Se va a Activar o Desactivar la salida

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

movf DS1624_Decimal_1,W ;para poder ver el valor en decimal de cada sensor librería "temperatura_a_PC.INC"

movwf DS1624_Decimal;--------------------------------------------------------------

movf TempSensor_1,W ; Visualiza el valor absoluto de la temperatura,

call Temperatura_En_PC ;Desde aquí se verán las centenas-decenas-unidades en el PC

; call RetornoCarro_Y_CambioLinea ; hace cambio de linea con retorno

;---------------------------------------------------------------------------------------;+++++ACTIVA LA SALIDA CORRESPONDIENTE ENTRE LOS VALORES DE HISTERISIS ESTABLECIDOS++++++;++++++ENTRE LA TempMin_1 y TempMax_1. Es decir sólo activa entre estos valores++++++++;---------------------------------------------------------------------------------------Histerisis_1

btfss TempSigno_1,7 ;Si el último bit es un "1" Es una temperatura Negativa.goto EsPositivo_1goto EsNegativo_1

EsPositivo_1

movf TempSensor_1,W ;Carga el Valor (+) de la Temperatura en (W)goto Activar_Desactivar_Salidas_1 ;Se va a Activar o Desactivar la salida

EsNegativo_1

movf GlobalNegativa_1,W ;Carga el Valor (-) de la Temperatura en (W) se encuentra en libreria "DS1624_Modificado_0.INC"

movwf TempSensor_1 ;y ya en VALOR NEGATIVO lo llevo a TempSensor_1;goto Activar_Desactivar_Salidas ;Se va a Activar o

Desactivar la salida

Activar_Desactivar_Salidas_1;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;-----------------------------------------------------------------;Si la Temperatura del Sensor (TempSensor_x)está por debajo de la TempMin_X estará activa la Salida. Y se mantendrá activa hasta;alcanzar la TempMax_X . Nota si partimos de una temperatura del sensor comprendida entre dichos

15

Page 30: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera

valores No estará activa la salida;hasta quedar por debajo de la TempMini_X. ;(La otras instrucciones que tenía la salida estaría activa siempre que la temperatura del sensor estuviese entre los valores ; de la TempMin y la TempMax);-----------------------------------------------------------------

movf TempMax_1,Wsubwf TempSensor_1,Wbtfsc STATUS,C ;¿C=0? TempSensor_1 < (TempMax_1)bcf PORTC,1 ;Desactiva la salida 0 de PORTC por ser Mayor o igual la

TempMax_0 que la del TempSensor_1

movf TempMin_1,Wsubwf TempSensor_1,Wbtfss STATUS,C ;¿C=1? (TempMin_1) >= TempSensor_1bsf PORTC,1 ;Activa la salida 1 de PORTC por ser Mayor la TempMin_1 que

la del Sensor_1

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

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

libro de Remiro.

; subwf TempMin_1,W ;(TempMin_1)- (TempSensor_1) subwf TempMin_1,W; btfss STATUS,C ;¿C=1? (TempMin_1) >= TempSensor_1; goto Menor_1

;goto MayorIgual_1 ;sobra

;MayorIgual_1;C=1 Entonces ha sido (TempMin_1 ó TempMax_1) >= TempSensor_1

; btfsc STATUS,Z ;SI (Z)=1 SON IGUALES Y EN ESE CASO ACTIVAR LA SALIDA para que se active desde el valor mínimo al máximo que establezcamos; goto Menor_1; bcf PORTC,1 ;Desactiva la salida 1 de PORTC

; goto VisualizaTermometro_LCD_2 ;***Para salir y continuar con las siguientes instrucciones Sería AL VisualizaTermometro_LCD_2

;Menor_1; bsf PORTC,1 ;Activa la salida 0 de PORTC

; movf TempSensor_1,W ;valor absoluto de Temperatura del "Sensor 2"; subwf TempMax_1,W ;(TempMax_1)- (TempSensor_1); btfss STATUS,C ;¿C=1? (TempMax_1) >= TempSensor_1; goto MayorIgual_1 ;"Desactiva la Salida Estará activa sólo entre la TempMin y la TempMax"

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

;-----------------PARA VER EN LCD LA TEMPERATURA DEL Sensor_2---------------------;-------------------ESTE COMIENZA EN LA LÍNEA 2 posición .3 -------------------------

VisualizaTermometro_LCD_2 ;EN PANTALLA LCD

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

;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC

btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto No_PC_2_1 ;

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

;+++++++++++++++++++++++++++++++++++++++++++++++++++++;SOBRA EL goto no_pc_2 de arriba; 2º CORTE , NO HACE FALTA LLAMAR POR HABERLO YA HECHO DESDE EL PRIMER SENSOR

movlw MensajesAlPC_SENSOR ;carga la primera posición del mensaje "SENSOR "

16

Page 31: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera

call RS232_Mensaje ;lo visualiza en el PC

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

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

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

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

movlw .3 ; Se coloca para visualización en la T3: T4:XXºcall LCD_PosicionLinea2 ; SEGUNDA línea.btfss TempSigno_2,7 ; ¿Temperatura negativa?.goto TemperaturaPositiva_2 ; No, la temperatura es positiva.

TemperaturaNegativa_2

;Si el el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco:movf TempSensor_2,Fbtfsc STATUS,Z ;¿Es cero?, ¿Z=1? Si Z=1 "el Registro vale 0"goto EliminarMenosCero_2 ;Si el valor es cero eliminar el menos -0º

;si es Z=0 el registro NO vale 0 por tanto escribir -

;Si el registro No vale Cero ponerle el signo -

movlw '-' ; Visualiza el signo "-" de temperatura negativa.call LCD_Caracter

;---------------------------------------------------------------------------------------;activar El "Flag_Es_Negativo" Para ver o no ver el signo 'º' por falta de espacio en LCD

bsf Flag_Es_Negativo,0

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

;_______________________________________________________________________

;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC

btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto No_PC_2_2 ;

;-------------------------------------;PARA LLEVARLO AL PC En negativo

movlw '-' ; Visualiza el signo "-" de temperatura negativa. en el PC call RS232_EnviaDato

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

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

nop ;se puede quitar

TemperaturaPositiva_2

movf TempSensor_2,W ; Visualiza el valor absoluto de la temperatura,

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

"089" saldrá "89"

;+++++++++++++AÑADIDO PARTE DECIMAL++++++++++++++++movf DS1624_Decimal_2,F ;para ver si tiene el valor .0º en cuyo caso no visualizarlo

en la LCD por falta de espaciobtfsc STATUS,Z ;Si Z=1 es CERO LA PARTE DECIMAL .0ºgoto Decimal_2_Es_Cero ;como es cero NO REPRESENTARLO y ponerle 'º'

;Si Z=0 NO ES CERO y por tanto visualizar el '.' y el 'º'

movlw '.' ; Visualiza el punto decimal.

17

Page 32: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera

call LCD_Caracter

movf DS1624_Decimal_2,W ;Visualiza la parte decimal

call LCD_Nibble ;Visualiza en el lugar actual de la pantalla el valor HEXADECIMAL que almacena el nibble bajo del registro (W). El

;nibble alto en (W) no es tenido en cuenta ej: si (W) = 0101 0110 se visualiza "6"

; si (W) es 1010 1110, se visualiza "E"

;------------lo he suprimido de la libreria Temperatura_a_LCD.INC-------------btfsc Flag_TresCaracteres,0 ;Si tiene tres Caracteres la parte entera NO PONER 'º' por

razón de NO TENER espaciogoto Continua_2 ;

;Se representa el signo "º"Decimal_2_Es_Cero

movlw MensajeGradoCentigrado ; En pantalla aparece "º".call LCD_Mensaje

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

;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC ;ACTIVAR LAS SALIDAS comparando con los valores de la EEPROM programados

Continua_2

btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto Histerisis_2 ;Se va a Activar o Desactivar la salida

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

movf DS1624_Decimal_2,W ;para poder ver el valor en decimal de cada sensor librería "temperatura_a_PC.INC"

movwf DS1624_Decimal;--------------------------------------------------------------

movf TempSensor_2,W ; Visualiza el valor absoluto de la temperatura,

call Temperatura_En_PC ;Desde aquí se verán las centenas-decenas-unidades en el PC

; call RetornoCarro_Y_CambioLinea ; hace cambio de linea con retorno

;---------------------------------------------------------------------------------------;+++++ACTIVA LA SALIDA CORRESPONDIENTE ENTRE LOS VALORES DE HISTERISIS ESTABLECIDOS++++++;++++++ENTRE LA TempMin_2 y TempMax_2. Es decir sólo activa entre estos valores++++++++;---------------------------------------------------------------------------------------Histerisis_2

btfss TempSigno_2,7 ;Si el último bit es un "1" Es una temperatura Negativa.goto EsPositivo_2goto EsNegativo_2

EsPositivo_2

movf TempSensor_2,W ;Carga el Valor (+) de la Temperatura en (W)goto Activar_Desactivar_Salidas_2 ;Se va a Activar o Desactivar la salida

EsNegativo_2

movf GlobalNegativa_2,W ;Carga el Valor (-) de la Temperatura en (W) se encuentra en libreria "DS1624_Modificado_0.INC"

movwf TempSensor_2 ;y ya en VALOR NEGATIVO lo llevo a TempSensor_1;goto Activar_Desactivar_Salidas ;Se va a Activar o

Desactivar la salida

Activar_Desactivar_Salidas_2;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;-----------------------------------------------------------------;Si la Temperatura del Sensor (TempSensor_x)está por debajo de la TempMin_X estará activa la Salida. Y se mantendrá activa hasta;alcanzar la TempMax_X . Nota si partimos de una temperatura del sensor comprendida entre dichos valores No estará activa la salida;hasta quedar por debajo de la TempMini_X. ;(La otras instrucciones que tenía la salida estaría activa siempre que la temperatura del sensor estuviese entre los valores

18

Page 33: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera

; de la TempMin y la TempMax);-----------------------------------------------------------------

movf TempMax_2,Wsubwf TempSensor_2,Wbtfsc STATUS,C ;¿C=0? TempSensor_2 < (TempMax_2)bcf PORTC,2 ;Desactiva la salida 2 de PORTC por ser Mayor o igual la

TempMax_2 que la del TempSensor_2

movf TempMin_2,Wsubwf TempSensor_2,Wbtfss STATUS,C ;¿C=1? (TempMin_2) >= TempSensor_2bsf PORTC,2 ;Activa la salida 2 de PORTC por ser Mayor la TempMin_2 que

la del Sensor_2

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

;-----------------PARA VER EN LCD LA TEMPERATURA DEL Sensor_3---------------------;-------------------ESTE COMIENZA EN LA LÍNEA 2 posición .11 -------------------------

VisualizaTermometro_LCD_3 ;EN PANTALLA LCD

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

;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC

btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto No_PC_3_1 ;

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

;+++++++++++++++++++++++++++++++++++++++++++++++++++++;SOBRA EL goto no_pc_2 de arriba; 2º CORTE , NO HACE FALTA LLAMAR POR HABERLO YA HECHO DESDE EL PRIMER SENSOR

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

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

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

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

movlw .11 ; Se coloca para visualización en la T3: T4:XXºcall LCD_PosicionLinea2 ; SEGUNDA línea.btfss TempSigno_3,7 ; ¿Temperatura negativa?.goto TemperaturaPositiva_3 ; No, la temperatura es positiva.

TemperaturaNegativa_3

;Si el el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco:movf TempSensor_3,Fbtfsc STATUS,Z ;¿Es cero?, ¿Z=1? Si Z=1 "el Registro vale 0"goto EliminarMenosCero_3 ;Si el valor es cero eliminar el menos -0º

;si es Z=0 el registro NO vale 0 por tanto escribir -

;Si el registro No vale Cero ponerle el signo -

movlw '-' ; Visualiza el signo "-" de temperatura negativa.call LCD_Caracter

;---------------------------------------------------------------------------------------;activar El "Flag_Es_Negativo" Para ver o no ver el signo 'º' por falta de espacio en LCD

bsf Flag_Es_Negativo,0

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

;_______________________________________________________________________

19

Page 34: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera

;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC

btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto No_PC_3_2 ;

;-------------------------------------;PARA LLEVARLO AL PC En negativo

movlw '-' ; Visualiza el signo "-" de temperatura negativa. en el PC call RS232_EnviaDato

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

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

nop ;se puede quitar

TemperaturaPositiva_3

movf TempSensor_3,W ; Visualiza el valor absoluto de la temperatura,

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

"089" saldrá "89"

;+++++++++++++AÑADIDO PARTE DECIMAL++++++++++++++++movf DS1624_Decimal_3,F ;para ver si tiene el valor .0º en cuyo caso no visualizarlo

en la LCD por falta de espaciobtfsc STATUS,Z ;Si Z=1 es CERO LA PARTE DECIMAL .0ºgoto Decimal_3_Es_Cero ;como es cero NO REPRESENTARLO y ponerle 'º'

;Si Z=0 NO ES CERO y por tanto visualizar el '.' y el 'º'

movlw '.' ; Visualiza el punto decimal.call LCD_Caracter

movf DS1624_Decimal_3,W ;Visualiza la parte decimal

call LCD_Nibble ;Visualiza en el lugar actual de la pantalla el valor HEXADECIMAL que almacena el nibble bajo del registro (W). El

;nibble alto en (W) no es tenido en cuenta ej: si (W) = 0101 0110 se visualiza "6"

; si (W) es 1010 1110, se visualiza "E"

;------------lo he suprimido de la libreria Temperatura_a_LCD.INC-------------btfsc Flag_TresCaracteres,0 ;Si tiene tres Caracteres la parte entera NO PONER 'º' por

razón de NO TENER espaciogoto Continua_3 ;

;Se representa el signo "º"Decimal_3_Es_Cero

movlw MensajeGradoCentigrado ; En pantalla aparece "º".call LCD_Mensaje

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

;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC ;ACTIVAR LAS SALIDAS comparando con los valores de la EEPROM programados

Continua_3

btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto Histerisis_3 ;Se va a Activar o Desactivar la salida

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

movf DS1624_Decimal_3,W ;para poder ver el valor en decimal de cada sensor librería "temperatura_a_PC.INC"

movwf DS1624_Decimal;--------------------------------------------------------------

movf TempSensor_3,W ; Visualiza el valor absoluto de la temperatura,

call Temperatura_En_PC ;Desde aquí se verán las centenas-decenas-unidades en el PC

; call RetornoCarro_Y_CambioLinea ; hace cambio de linea con retorno

20

Page 35: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera

;---------------------------------------------------------------------------------------;+++++ACTIVA LA SALIDA CORRESPONDIENTE ENTRE LOS VALORES DE HISTERISIS ESTABLECIDOS++++++;++++++ENTRE LA TempMin_3 y TempMax_3. Es decir sólo activa entre estos valores++++++++;---------------------------------------------------------------------------------------Histerisis_3

btfss TempSigno_3,7 ;Si el último bit es un "1" Es una temperatura Negativa.goto EsPositivo_3goto EsNegativo_3

EsPositivo_3

movf TempSensor_3,W ;Carga el Valor (+) de la Temperatura en (W)goto Activar_Desactivar_Salidas_3 ;Se va a Activar o Desactivar la salida

EsNegativo_3

movf GlobalNegativa_3,W ;Carga el Valor (-) de la Temperatura en (W) se encuentra en libreria "DS1624_Modificado_0.INC"

movwf TempSensor_3 ;y ya en VALOR NEGATIVO lo llevo a TempSensor_1;goto Activar_Desactivar_Salidas ;Se va a Activar o

Desactivar la salida

Activar_Desactivar_Salidas_3;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;-----------------------------------------------------------------;Si la Temperatura del Sensor (TempSensor_x)está por debajo de la TempMin_X estará activa la Salida. Y se mantendrá activa hasta;alcanzar la TempMax_X . Nota si partimos de una temperatura del sensor comprendida entre dichos valores No estará activa la salida;hasta quedar por debajo de la TempMini_X. ;(La otras instrucciones que tenía la salida estaría activa siempre que la temperatura del sensor estuviese entre los valores ; de la TempMin y la TempMax);-----------------------------------------------------------------

movf TempMax_3,Wsubwf TempSensor_3,Wbtfsc STATUS,C ;¿C=0? TempSensor_3 < (TempMax_3)bcf PORTC,3 ;Desactiva la salida 3 de PORTC por ser Mayor o igual la

TempMax_3 que la del TempSensor_3

movf TempMin_3,Wsubwf TempSensor_3,Wbtfss STATUS,C ;¿C=1? (TempMin_3) >= TempSensor_3bsf PORTC,3 ;Activa la salida 3 de PORTC por ser Mayor la TempMin_3 que

la del Sensor_3

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

;-----------------PARA VER EN LCD LA TEMPERATURA DEL Sensor_4---------------------;-------------------ESTE COMIENZA EN LA LÍNEA 3 posición .3 -------------------------

VisualizaTermometro_LCD_4 ;EN PANTALLA LCD

;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC

btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto No_PC_4_1 ;

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

;+++++++++++++++++++++++++++++++++++++++++++++++++++++;SOBRA EL goto no_pc_2 de arriba; 2º CORTE , NO HACE FALTA LLAMAR POR HABERLO YA HECHO DESDE EL PRIMER SENSOR

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

21

Page 36: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera

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

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

movlw .3 ; Se coloca para visualización en la T5:XXº T6:call LCD_PosicionLinea3 ; primera línea.btfss TempSigno_4,7 ; ¿Temperatura negativa?.goto TemperaturaPositiva_4 ; No, la temperatura es positiva.

TemperaturaNegativa_4

;Si el el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco:movf TempSensor_4,Fbtfsc STATUS,Z ;¿Es cero?, ¿Z=1? Si Z=1 "el Registro vale 0"goto EliminarMenosCero_4 ;Si el valor es cero eliminar el menos -0º

;si es Z=0 el registro NO vale 0 por tanto escribir -

;Si el registro No vale Cero ponerle el signo -

movlw '-' ; Visualiza el signo "-" de temperatura negativa.call LCD_Caracter

;---------------------------------------------------------------------------------------;activar El "Flag_Es_Negativo" Para ver o no ver el signo 'º' por falta de espacio en LCD

bsf Flag_Es_Negativo,0

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

;_______________________________________________________________________

;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC

btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto No_PC_4_2 ;

;-------------------------------------;PARA LLEVARLO AL PC En negativo

movlw '-' ; Visualiza el signo "-" de temperatura negativa. en el PC call RS232_EnviaDato

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

;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PCNo_PC_4_2 ; éste es el tercer salto para no reflejar en PC;-------------------------------------nop ;se puede quitar

TemperaturaPositiva_4

movf TempSensor_4,W ; Visualiza el valor absoluto de la temperatura,

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

"089" saldrá "89"

;+++++++++++++AÑADIDO PARTE DECIMAL++++++++++++++++movf DS1624_Decimal_4,F ;para ver si tiene el valor .0º en cuyo caso no visualizarlo

en la LCD por falta de espaciobtfsc STATUS,Z ;Si Z=1 es CERO LA PARTE DECIMAL .0ºgoto Decimal_4_Es_Cero ;como es cero NO REPRESENTARLO y ponerle 'º'

;Si Z=0 NO ES CERO y por tanto visualizar el '.' y el 'º'

movlw '.' ; Visualiza el punto decimal.call LCD_Caracter

movf DS1624_Decimal_4,W ;Visualiza la parte decimal

call LCD_Nibble ;Visualiza en el lugar actual de la pantalla el valor HEXADECIMAL que almacena el nibble bajo del registro (W). El

;nibble alto en (W) no es tenido en cuenta ej: si (W) = 0101 0110 se visualiza "6"

22

Page 37: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera

; si (W) es 1010 1110, se visualiza "E"

;------------lo he suprimido de la libreria Temperatura_a_LCD.INC-------------btfsc Flag_TresCaracteres,0 ;Si tiene tres Caracteres la parte entera NO PONER 'º' por

razón de NO TENER espaciogoto Continua_4 ;

;Se representa el signo "º"Decimal_4_Es_Cero

movlw MensajeGradoCentigrado ; En pantalla aparece "º".call LCD_Mensaje

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

;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC ;ACTIVAR LAS SALIDAS comparando con los valores de la EEPROM programados

Continua_4

btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto Histerisis_4 ;Se va a Activar o Desactivar la salida ;;;;;No_PC_4 ;

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

movf DS1624_Decimal_4,W ;para poder ver el valor en decimal de cada sensor librería "temperatura_a_PC.INC"

movwf DS1624_Decimal;--------------------------------------------------------------

movf TempSensor_4,W ; Visualiza el valor absoluto de la temperatura,

call Temperatura_En_PC ;Desde aquí se verán las centenas-decenas-unidades en el PC

; call RetornoCarro_Y_CambioLinea ; hace cambio de linea con retorno

;---------------------------------------------------------------------------------------;+++++ACTIVA LA SALIDA CORRESPONDIENTE ENTRE LOS VALORES DE HISTERISIS ESTABLECIDOS++++++;++++++ENTRE LA TempMin_4 y TempMax_4. Es decir sólo activa entre estos valores++++++++;---------------------------------------------------------------------------------------Histerisis_4

btfss TempSigno_4,7 ;Si el último bit es un "1" Es una temperatura Negativa.goto EsPositivo_4goto EsNegativo_4

EsPositivo_4

movf TempSensor_4,W ;Carga el Valor (+) de la Temperatura en (W)goto Activar_Desactivar_Salidas_4 ;Se va a Activar o Desactivar la salida

EsNegativo_4

movf GlobalNegativa_4,W ;Carga el Valor (-) de la Temperatura en (W) se encuentra en libreria "DS1624_Modificado_0.INC"

movwf TempSensor_4 ;y ya en VALOR NEGATIVO lo llevo a TempSensor_1;goto Activar_Desactivar_Salidas ;Se va a Activar o

Desactivar la salida

Activar_Desactivar_Salidas_4;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;-----------------------------------------------------------------;Si la Temperatura del Sensor (TempSensor_x)está por debajo de la TempMin_X estará activa la Salida. Y se mantendrá activa hasta;alcanzar la TempMax_X . Nota si partimos de una temperatura del sensor comprendida entre dichos valores No estará activa la salida;hasta quedar por debajo de la TempMini_X. ;(La otras instrucciones que tenía la salida estaría activa siempre que la temperatura del sensor estuviese entre los valores ; de la TempMin y la TempMax);-----------------------------------------------------------------

movf TempMax_4,Wsubwf TempSensor_4,Wbtfsc STATUS,C ;¿C=0? TempSensor_4 < (TempMax_4)bcf PORTC,4 ;Desactiva la salida 4 de PORTC por ser Mayor o igual la

TempMax_4 que la del TempSensor_4

23

Page 38: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera

movf TempMin_4,Wsubwf TempSensor_4,Wbtfss STATUS,C ;¿C=1? (TempMin_4) >= TempSensor_4bsf PORTC,4 ;Activa la salida 4 de PORTC por ser Mayor la TempMin_4 que

la del Sensor_4

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

;-----------------PARA VER EN LCD LA TEMPERATURA DEL Sensor_5---------------------;-------------------ESTE COMIENZA EN LA LÍNEA 3 posición .11 -------------------------

VisualizaTermometro_LCD_5 ;EN PANTALLA LCD

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

;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC

btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto No_PC_5_1 ;

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

;+++++++++++++++++++++++++++++++++++++++++++++++++++++;SOBRA EL goto no_pc_2 de arriba; 2º CORTE , NO HACE FALTA LLAMAR POR HABERLO YA HECHO DESDE EL PRIMER SENSOR

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

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

; movlw MensajesAlPC_Sensor6 ;carga la primera posición del mensaje "SENSOR 6: "; call RS232_Mensaje ;lo visualiza en el PC

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

;EL TABULADOR NO ACTÚA EN EL PROTEUS PERO LUEGO EN LA PRÁCTICA SÍ ACTÚA. ver ejemplo "Termometro_4_LM35"; movlw TabuladorH ;Un tabulador horizontal; call RS232_EnviaDato

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

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

movlw .11 ; Se coloca para visualización en la T5: T6:XXºcall LCD_PosicionLinea3 ; TERCERA línea.btfss TempSigno_5,7 ; ¿Temperatura negativa?.goto TemperaturaPositiva_5 ; No, la temperatura es positiva.

TemperaturaNegativa_5

;Si el el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco:movf TempSensor_5,Fbtfsc STATUS,Z ;¿Es cero?, ¿Z=1? Si Z=1 "el Registro vale 0"goto EliminarMenosCero_5 ;Si el valor es cero eliminar el menos -0º

;si es Z=0 el registro NO vale 0 por tanto escribir -

;Si el registro No vale Cero ponerle el signo -

movlw '-' ; Visualiza el signo "-" de temperatura negativa.call LCD_Caracter

;---------------------------------------------------------------------------------------;activar El "Flag_Es_Negativo" Para ver o no ver el signo 'º' por falta de espacio en LCD

bsf Flag_Es_Negativo,0

24

Page 39: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera

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

;_______________________________________________________________________

;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC

btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto No_PC_5_2 ;

;-------------------------------------;PARA LLEVARLO AL PC En negativo

movlw '-' ; Visualiza el signo "-" de temperatura negativa. en el PC call RS232_EnviaDato

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

;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PCNo_PC_5_2 ; éste es el tercer salto para no reflejar en PC;-------------------------------------nop ;se puede quitar

TemperaturaPositiva_5

movf TempSensor_5,W ; Visualiza el valor absoluto de la temperatura,

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

"089" saldrá "89"

;+++++++++++++AÑADIDO PARTE DECIMAL++++++++++++++++movf DS1624_Decimal_5,F ;para ver si tiene el valor .0º en cuyo caso no visualizarlo

en la LCD por falta de espaciobtfsc STATUS,Z ;Si Z=1 es CERO LA PARTE DECIMAL .0ºgoto Decimal_5_Es_Cero ;como es cero NO REPRESENTARLO y ponerle 'º'

;Si Z=0 NO ES CERO y por tanto visualizar el '.' y el 'º'

movlw '.' ; Visualiza el punto decimal.call LCD_Caracter

movf DS1624_Decimal_5,W ;Visualiza la parte decimal

call LCD_Nibble ;Visualiza en el lugar actual de la pantalla el valor HEXADECIMAL que almacena el nibble bajo del registro (W). El

;nibble alto en (W) no es tenido en cuenta ej: si (W) = 0101 0110 se visualiza "6"

; si (W) es 1010 1110, se visualiza "E"

;------------lo he suprimido de la libreria Temperatura_a_LCD.INC-------------btfsc Flag_TresCaracteres,0 ;Si tiene tres Caracteres la parte entera NO PONER 'º' por

razón de NO TENER espaciogoto Continua_5 ;

;Se representa el signo "º"Decimal_5_Es_Cero

movlw MensajeGradoCentigrado ; En pantalla aparece "º".call LCD_Mensaje

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

;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC ;ACTIVAR LAS SALIDAS comparando con los valores de la EEPROM programados

Continua_5

btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto Histerisis_5 ;Se va a Activar o Desactivar la salida

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

movf DS1624_Decimal_5,W ;para poder ver el valor en decimal de cada sensor librería "temperatura_a_PC.INC"

movwf DS1624_Decimal;--------------------------------------------------------------

movf TempSensor_5,W ; Visualiza el valor absoluto de la temperatura,

25

Page 40: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera

call Temperatura_En_PC ;Desde aquí se verán las centenas-decenas-unidades en el PC

; call RetornoCarro_Y_CambioLinea ; hace cambio de linea con retorno

;---------------------------------------------------------------------------------------;+++++ACTIVA LA SALIDA CORRESPONDIENTE ENTRE LOS VALORES DE HISTERISIS ESTABLECIDOS++++++;++++++ENTRE LA TempMin_5 y TempMax_5. Es decir sólo activa entre estos valores++++++++;---------------------------------------------------------------------------------------Histerisis_5

btfss TempSigno_5,7 ;Si el último bit es un "1" Es una temperatura Negativa.goto EsPositivo_5goto EsNegativo_5

EsPositivo_5

movf TempSensor_5,W ;Carga el Valor (+) de la Temperatura en (W)goto Activar_Desactivar_Salidas_5 ;Se va a Activar o Desactivar la salida

EsNegativo_5

movf GlobalNegativa_5,W ;Carga el Valor (-) de la Temperatura en (W) se encuentra en libreria "DS1624_Modificado_0.INC"

movwf TempSensor_5 ;y ya en VALOR NEGATIVO lo llevo a TempSensor_5;goto Activar_Desactivar_Salidas ;Se va a Activar o

Desactivar la salida

Activar_Desactivar_Salidas_5;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;-----------------------------------------------------------------;Si la Temperatura del Sensor (TempSensor_x)está por debajo de la TempMin_X estará activa la Salida. Y se mantendrá activa hasta;alcanzar la TempMax_X . Nota si partimos de una temperatura del sensor comprendida entre dichos valores No estará activa la salida;hasta quedar por debajo de la TempMini_X. ;(La otras instrucciones que tenía la salida estaría activa siempre que la temperatura del sensor estuviese entre los valores ; de la TempMin y la TempMax);-----------------------------------------------------------------

movf TempMax_5,Wsubwf TempSensor_5,Wbtfsc STATUS,C ;¿C=0? TempSensor_5 < (TempMax_5)bcf PORTC,5 ;Desactiva la salida 5 de PORTC por ser Mayor o igual la

TempMax_5 que la del TempSensor_5

movf TempMin_5,Wsubwf TempSensor_5,Wbtfss STATUS,C ;¿C=1? (TempMin_5) >= TempSensor_5bsf PORTC,5 ;Activa la salida 5 de PORTC por ser Mayor la TempMin_5 que

la del Sensor_5

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

;-----------------PARA VER EN LCD LA TEMPERATURA DEL Sensor_6---------------------;-------------------ESTE COMIENZA EN LA LÍNEA 4 posición .3 -------------------------

VisualizaTermometro_LCD_6 ;EN PANTALLA LCD

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

;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC

btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto No_PC_6_1 ;

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

;+++++++++++++++++++++++++++++++++++++++++++++++++++++;SOBRA EL goto no_pc_2 de arriba; 2º CORTE , NO HACE FALTA LLAMAR POR HABERLO YA HECHO DESDE EL PRIMER SENSOR

26

Page 41: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera

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

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

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

movlw .3 ; Se coloca para visualización en la T7:XXº T8:call LCD_PosicionLinea4 ; CUARTA línea.btfss TempSigno_6,7 ; ¿Temperatura negativa?.goto TemperaturaPositiva_6 ; No, la temperatura es positiva.

TemperaturaNegativa_6

;Si el el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco:movf TempSensor_6,Fbtfsc STATUS,Z ;¿Es cero?, ¿Z=1? Si Z=1 "el Registro vale 0"goto EliminarMenosCero_6 ;Si el valor es cero eliminar el menos -0º

;si es Z=0 el registro NO vale 0 por tanto escribir -

;Si el registro No vale Cero ponerle el signo -

movlw '-' ; Visualiza el signo "-" de temperatura negativa.call LCD_Caracter

;---------------------------------------------------------------------------------------;activar El "Flag_Es_Negativo" Para ver o no ver el signo 'º' por falta de espacio en LCD

bsf Flag_Es_Negativo,0

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

;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC

btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto No_PC_6_2 ;

;-------------------------------------;PARA LLEVARLO AL PC En negativo

movlw '-' ; Visualiza el signo "-" de temperatura negativa. en el PC call RS232_EnviaDato

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

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

nop ;se puede quitar

TemperaturaPositiva_6

movf TempSensor_6,W ; Visualiza el valor absoluto de la temperatura,

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

"089" saldrá "89"

;+++++++++++++AÑADIDO PARTE DECIMAL++++++++++++++++movf DS1624_Decimal_6,F ;para ver si tiene el valor .0º en cuyo caso no visualizarlo

en la LCD por falta de espaciobtfsc STATUS,Z ;Si Z=1 es CERO LA PARTE DECIMAL .0ºgoto Decimal_6_Es_Cero ;como es cero NO REPRESENTARLO y ponerle 'º'

;Si Z=0 NO ES CERO y por tanto visualizar el '.' y el 'º'

movlw '.' ; Visualiza el punto decimal.call LCD_Caracter

movf DS1624_Decimal_6,W ;Visualiza la parte decimal

call LCD_Nibble ;Visualiza en el lugar actual de la pantalla el valor HEXADECIMAL

27

Page 42: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera

que almacena el nibble bajo del registro (W). El;nibble alto en (W) no es tenido en cuenta ej: si (W) = 0101 0110 se

visualiza "6"; si (W) es 1010 1110, se visualiza "E"

;------------lo he suprimido de la libreria Temperatura_a_LCD.INC-------------btfsc Flag_TresCaracteres,0 ;Si tiene tres Caracteres la parte entera NO PONER 'º' por

razón de NO TENER espaciogoto Continua_6 ;

;Se representa el signo "º"Decimal_6_Es_Cero

movlw MensajeGradoCentigrado ; En pantalla aparece "º".call LCD_Mensaje

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

;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC ;ACTIVAR LAS SALIDAS comparando con los valores de la EEPROM programados

Continua_6

btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto Histerisis_6 ;Se va a Activar o Desactivar la salida ;;;;;No_PC_4 ;

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

movf DS1624_Decimal_6,W ;para poder ver el valor en decimal de cada sensor librería "temperatura_a_PC.INC"

movwf DS1624_Decimal;--------------------------------------------------------------

movf TempSensor_6,W ; Visualiza el valor absoluto de la temperatura,

call Temperatura_En_PC ;Desde aquí se verán las centenas-decenas-unidades en el PC

; call RetornoCarro_Y_CambioLinea ; hace cambio de linea con retorno

;---------------------------------------------------------------------------------------;+++++ACTIVA LA SALIDA CORRESPONDIENTE ENTRE LOS VALORES DE HISTERISIS ESTABLECIDOS++++++;++++++ENTRE LA TempMin_6 y TempMax_6. Es decir sólo activa entre estos valores++++++++;---------------------------------------------------------------------------------------Histerisis_6

btfss TempSigno_6,7 ;Si el último bit es un "1" Es una temperatura Negativa.goto EsPositivo_6goto EsNegativo_6

EsPositivo_6

movf TempSensor_6,W ;Carga el Valor (+) de la Temperatura en (W)goto Activar_Desactivar_Salidas_6 ;Se va a Activar o Desactivar la salida

EsNegativo_6

movf GlobalNegativa_6,W ;Carga el Valor (-) de la Temperatura en (W) se encuentra en libreria "DS1624_Modificado_0.INC"

movwf TempSensor_6 ;y ya en VALOR NEGATIVO lo llevo a TempSensor_1;goto Activar_Desactivar_Salidas ;Se va a Activar o

Desactivar la salida

Activar_Desactivar_Salidas_6;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;-----------------------------------------------------------------;Si la Temperatura del Sensor (TempSensor_x)está por debajo de la TempMin_X estará activa la Salida. Y se mantendrá activa hasta;alcanzar la TempMax_X . Nota si partimos de una temperatura del sensor comprendida entre dichos valores No estará activa la salida;hasta quedar por debajo de la TempMini_X. ;(La otras instrucciones que tenía la salida estaría activa siempre que la temperatura del sensor estuviese entre los valores ; de la TempMin y la TempMax);-----------------------------------------------------------------

movf TempMax_6,Wsubwf TempSensor_6,Wbtfsc STATUS,C ;¿C=0? TempSensor_6 < (TempMax_6)

28

Page 43: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera

bcf PORTC,6 ;Desactiva la salida 6 de PORTC por ser Mayor o igual la TempMax_6 que la del TempSensor_6

movf TempMin_6,Wsubwf TempSensor_6,Wbtfss STATUS,C ;¿C=1? (TempMin_6) >= TempSensor_6bsf PORTC,6 ;Activa la salida 6 de PORTC por ser Mayor la TempMin_6 que

la del Sensor_6

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

;-----------------PARA VER EN LCD LA TEMPERATURA DEL Sensor_7---------------------;-------------------ESTE COMIENZA EN LA LÍNEA 4 posición .11 -------------------------

VisualizaTermometro_LCD_7 ;EN PANTALLA LCD

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

;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC

btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto No_PC_7_1 ;

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

;+++++++++++++++++++++++++++++++++++++++++++++++++++++;SOBRA EL goto no_pc_2 de arriba; 2º CORTE , NO HACE FALTA LLAMAR POR HABERLO YA HECHO DESDE EL PRIMER SENSOR

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

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

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

movlw .11 ; Se coloca para visualización en la T7: T8:XXºcall LCD_PosicionLinea4 ; TERCERA línea.btfss TempSigno_7,7 ; ¿Temperatura negativa?.goto TemperaturaPositiva_7 ; No, la temperatura es positiva.

TemperaturaNegativa_7

;Si el el sensor Falla daria -0º y no puede ser. Por tanto para que salga en blanco:movf TempSensor_7,Fbtfsc STATUS,Z ;¿Es cero?, ¿Z=1? Si Z=1 "el Registro vale 0"goto EliminarMenosCero_7 ;Si el valor es cero eliminar el menos -0º

;si es Z=0 el registro NO vale 0 por tanto escribir -

;Si el registro No vale Cero ponerle el signo -

movlw '-' ; Visualiza el signo "-" de temperatura negativa.call LCD_Caracter

;---------------------------------------------------------------------------------------;activar El "Flag_Es_Negativo" Para ver o no ver el signo 'º' por falta de espacio en LCD

bsf Flag_Es_Negativo,0

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

;_______________________________________________________________________

;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC

btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto No_PC_7_2 ;

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

29

Page 44: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera

;PARA LLEVARLO AL PC En negativomovlw '-' ; Visualiza el signo "-" de temperatura negativa. en el PC call RS232_EnviaDato

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

;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC

No_PC_7_2 ; éste es el tercer salto para no reflejar en PC;-------------------------------------nop ;se puede quitar

TemperaturaPositiva_7

movf TempSensor_7,W ; Visualiza el valor absoluto de la temperatura,

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

"089" saldrá "89"

;+++++++++++++AÑADIDO PARTE DECIMAL++++++++++++++++movf DS1624_Decimal_7,F ;para ver si tiene el valor .0º en cuyo caso no visualizarlo

en la LCD por falta de espaciobtfsc STATUS,Z ;Si Z=1 es CERO LA PARTE DECIMAL .0ºgoto Decimal_7_Es_Cero ;como es cero NO REPRESENTARLO y ponerle 'º'

;Si Z=0 NO ES CERO y por tanto visualizar el '.' y el 'º'

movlw '.' ; Visualiza el punto decimal.call LCD_Caracter

movf DS1624_Decimal_7,W ;Visualiza la parte decimal

call LCD_Nibble ;Visualiza en el lugar actual de la pantalla el valor HEXADECIMAL que almacena el nibble bajo del registro (W). El

;nibble alto en (W) no es tenido en cuenta ej: si (W) = 0101 0110 se visualiza "6"

; si (W) es 1010 1110, se visualiza "E"

;------------lo he suprimido de la libreria Temperatura_a_LCD.INC-------------btfsc Flag_TresCaracteres,0 ;Si tiene tres Caracteres la parte entera NO PONER 'º' por

razón de NO TENER espaciogoto Continua_7 ;

;Se representa el signo "º"Decimal_7_Es_Cero

movlw MensajeGradoCentigrado ; En pantalla aparece "º".call LCD_Mensaje

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

;PONER AQUÍ SALTO SI NO QUIERO ENVIAR AL PC ;ACTIVAR LAS SALIDAS comparando con los valores de la EEPROM programados

Continua_7

btfss PORTB,0 ;Compruebo si quiero PC o sólo LCD ;RB0=1 SÍ QUIERO PCgoto Histerisis_7 ;Se va a Activar o Desactivar la salida

;--------SÍ QUIERO PC---------;--------------------------------------------------------------

movf DS1624_Decimal_7,W ;para poder ver el valor en decimal de cada sensor librería "temperatura_a_PC.INC"

movwf DS1624_Decimal;--------------------------------------------------------------

movf TempSensor_7,W ; Visualiza el valor absoluto de la temperatura,

call Temperatura_En_PC ;Desde aquí se verán las centenas-decenas-unidades en el PC

; call RetornoCarro_Y_CambioLinea ; hace cambio de linea con retorno

;---------------------------------------------------------------------------------------;+++++ACTIVA LA SALIDA CORRESPONDIENTE ENTRE LOS VALORES DE HISTERISIS ESTABLECIDOS++++++

30

Page 45: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

OYECTOS\PROYECTOS TEMPERATURA OK\CON DECI COMPLETO\Termometro Con 16F876A _LCD20X4_Y_PC\Control_I2C_8_Sensores_De_Tempera

;++++++ENTRE LA TempMin_7 y TempMax_7. Es decir sólo activa entre estos valores++++++++;---------------------------------------------------------------------------------------Histerisis_7

btfss TempSigno_7,7 ;Si el último bit es un "1" Es una temperatura Negativa.goto EsPositivo_7goto EsNegativo_7

EsPositivo_7

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

goto Activar_Desactivar_Salidas_7 ;Se va a Activar o Desactivar la salida

EsNegativo_7

movf GlobalNegativa_7,W ;Carga el Valor (-) de la Temperatura en (W) se encuentra en libreria "DS1624_Modificado_0.INC"

movwf TempSensor_7 ;y ya en VALOR NEGATIVO lo llevo a TempSensor_1;goto Activar_Desactivar_Salidas ;Se va a Activar o Desactivar la

salida

Activar_Desactivar_Salidas_7;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++;-----------------------------------------------------------------;Si la Temperatura del Sensor (TempSensor_x)está por debajo de la TempMin_X estará activa la Salida. Y se mantendrá activa hasta;alcanzar la TempMax_X . Nota si partimos de una temperatura del sensor comprendida entre dichos valores No estará activa la salida;hasta quedar por debajo de la TempMini_X. ;(La otras instrucciones que tenía la salida estaría activa siempre que la temperatura del sensor estuviese entre los valores ; de la TempMin y la TempMax);-----------------------------------------------------------------

movf TempMax_7,Wsubwf TempSensor_7,Wbtfsc STATUS,C ;¿C=0? TempSensor_7 < (TempMax_7)bcf PORTC,7 ;Desactiva la salida 7 de PORTC por ser Mayor o igual la

TempMax_7 que la del TempSensor_7

movf TempMin_7,Wsubwf TempSensor_7,Wbtfss STATUS,C ;¿C=1? (TempMin_7) >= TempSensor_7bsf PORTC,7 ;Activa la salida 7 de PORTC por ser Mayor la TempMin_7 que

la del Sensor_7

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

;-----------------------------------------------------------------------------------------------call Tiempo_De_Muestreo_LCD_1; Esta en "TIEMPO_DE_MUESTREO.INC" por COMPARACION determina

;Si he elegido la opcion 1 ,2 ó 3 ; 10sg, 20 sg ó 1 Min;Es valido aunque se vaya la LUZ por estar en EEPROM

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

goto Sensor_0; ;;;;***VisualizaTermometro_LCD_0 ;***Para salir y continuar con las siguientes instrucciones Sería AL VisualizaTermometro_LCD_2 Pero como no he puesto más vuelvo al inicial

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

;ESTE SERÁ EL VALOR POR DEFECTO EN CASO DE NO CONFIGURAR EN EL PC.

;si no se pone al reflejar el último sensor directamente se iria a Inicio y no se vería En la LCD;por ello poner un retraso Standar de por ej 10 sg

;;;; call Retardo_10s ;PARA REFLEJAR DURANTE 10sg los 4 últimos sensores;-----------------------------------------------------------------------------------------------

call Tiempo_De_Muestreo_LCD_1; Está en "TIEMPO_DE_MUESTREO.INC" por COMPARACION determina ;Si he elegido la opcion 1 ,2 ó 3 ; 10sg, 20 sg ó 1 Min;Es valido aunque se vaya la LUZ por estar en EEPROM

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

31

Page 46: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

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

Page 47: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

: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

H77
Cuadro de texto
Hexadecimal usando LCD de 4x20 (4 lineas 20 caracteres)
Page 48: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

: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

Page 49: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

: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

Page 50: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

: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

Page 51: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

: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

Page 52: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

: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

H77
Cuadro de texto
Hexadecimal usando LCD de 4x16 (4 líneas 16 caracteres)
Page 53: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

: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

Page 54: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

: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

Page 55: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

: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

Page 56: Control de 8 sensores de temperatura ds1621 en proteus eagle-asm-hex por joaquin berrocal piris

: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