ASCENSOR, fotos, esquemas y

Page 1

ASCENSOR DE 5 PISOS (en ensamblador) JOAQUÍN BERROCAL PIRIS (2002)

Visitar; http://iesccp.comze.com/

1


ASCENSOR DE 5 PISOS (en ensamblador) JOAQUÍN BERROCAL PIRIS (2002)

ASCENSOR DE 5 PISOS (Realizado con una impresora de formato A3) Autor: JOAQUÍN BERROCAL PIRIS Fecha : 2002 Hecho en ENSAMBLADOR.

►El programa y el hexadecimal se encuentran al final ► SE MEMORIZAN LOS PULSADORES PRESIONADOS Y SE DESPLAZARÁ A LOS PISOS CORRESPONDIENTES SEGÚN EL ORDEN Y LA CERCANÍA DEL PISO EN EL QUE SE ENCUENTRE ► EL DISPLAY INDICA EL PISO POR EL QUE VA PASANDO ► DISPONE DE 10 PULSDORES; 5 SITUADOS EN EL PROPIO ASCENSOR Y OTROS 5 REPRESENTATIVOS DE CADA PISO -. Los LEDS son indicadores de: -. ROJO : Puerta Cerrada

-. AMBAR: Puerta Abriendo

-. VERDE: Entrar/Salir

-. ROJO dcho: NO entrar ni salir

Visitar; http://iesccp.comze.com/

2


ASCENSOR DE 5 PISOS (en ensamblador) JOAQUÍN BERROCAL PIRIS (2002)

Visitar; http://iesccp.comze.com/

3


ASCENSOR DE 5 PISOS (en ensamblador) JOAQUÍN BERROCAL PIRIS (2002)

Visitar; http://iesccp.comze.com/

4


ASCENSOR DE 5 PISOS (en ensamblador) JOAQUÍN BERROCAL PIRIS (2002)

Visitar; http://iesccp.comze.com/

5


ASCENSOR DE 5 PISOS (en ensamblador) JOAQUÍN BERROCAL PIRIS (2002)

Visitar; http://iesccp.comze.com/

6


ASCENSOR DE 5 PISOS (en ensamblador) JOAQUÍN BERROCAL PIRIS (2002)

Visitar; http://iesccp.comze.com/

7


ASCENSOR DE 5 PISOS (en ensamblador) JOAQUÍN BERROCAL PIRIS (2002)

Visitar; http://iesccp.comze.com/

8


ASCENSOR DE 5 PISOS (en ensamblador) JOAQUÍN BERROCAL PIRIS (2002)

Visitar; http://iesccp.comze.com/

9


ASCENSOR DE 5 PISOS (en ensamblador) JOAQUÍN BERROCAL PIRIS (2002)

Visitar; http://iesccp.comze.com/

10


ASCENSOR DE 5 PISOS (en ensamblador) JOAQUÍN BERROCAL PIRIS (2002)

Visitar; http://iesccp.comze.com/

11


ASCENSOR DE 5 PISOS (en ensamblador) JOAQUÍN BERROCAL PIRIS (2002)

Visitar; http://iesccp.comze.com/

12


ASCENSOR DE 5 PISOS (en ensamblador) JOAQUÍN BERROCAL PIRIS (2002)

Visitar; http://iesccp.comze.com/

13


ASCENSOR DE 5 PISOS (en ensamblador) JOAQUÍN BERROCAL PIRIS (2002)

Visitar; http://iesccp.comze.com/

14


+12V

ESQUEMA COMPLETO DEL ASCENSOR; GND

GND

1

OK5

+5 V

S7

+5V pulsador piso 5

3

4

LLAMADA-5

(D)

RB5 RB6

RB4 RB3 RB2 RB1 RB0/INT

R28 1k

47k R27 2

SFH610

1 (+)

1K

(E)

OK4

SFH610 (D)

3

(+)

4

3

4

(D)

(+)

2

(E)

OK3

SFH610

(+)

R26 1k

R25

47k

R24 1k

2

1

OK2

(D)

3

(+)

(+)

1

R23

47k

R22 1k

47k R21

3

(D)

(E) (+)

SFH610

2

(E)

OK1

SFH610

IC1P

C1

(+)

1

(E)

2

14

C2

7

+

IC4

VDD

GND

4

47k

OUT

R19

IN

X1-1

4

X1-2

VSS

>9 voltios

+5V

R20 1k

L7805C-V

B1

3 4

1 2

(+)

0V

1K

R13

1K

R14

1K

R15

1K

R16

1K

R10 R11

CÁTODO-COMÚN GND

R12

GND

1K

f g P K K

a b c d e

S8 zumbador

1 2

+5V

SG1

INT

13

5

GND2

GND4

12

6

2Y

3Y

11

RA1 >5 a 36 Voltios

7

2A

3A

10

3-4EN

GND

2K2

1

OUT2

VCC2

10 9 8 7 6 5 4 3 2

10k

GND3

IC3 INT

13

OUT4 OUT3 OUT2 OUT1

RB3 RC5 RB2 RC6 RB1 RC7 RB0/INT GND RA3 GND RA2 RA5 RA1 +5V RA0 MCLR RA4

16

P0 P1 P2 P3 P4 P5 P6 P7

4 5 6 7 9 10 11 12

SDA SCL

1 2 3

A0 A1 A2

GND

VSS

JP3

RA0 RA1 RA2 RA3

4 3 2 1

DCBA BOBINAS DEL MOTOR P.A.P.

10/03/2009 17:26:39 f=0.72 C:\EAGLE\ascensor.sch (Sheet: 1/1)

P3(B) P4(B) P5(B) P6(B) RC2 +5V

RB0/INT RB1 RB2

1 2

1 2 3 4 5 6 7 8 9

1K

R6

1K

1K

TECLA5

1 2

pulsador piso 1

R3

+5V GND

GND TECLA1 TECLA2 TECLA3 TECLA4 TECLA5

+5V A B C

D E F G LED-ROJO-NO-E/S LED-VERDE-ENTRAR/SALIR LED-AMBAR-ABRIR LED-ROJO-CERRAR RB7

GND

1 2

S2 3 4

1K R2 1K

tecla piso 4

S3

1 2

Autor: Joaquín Berrocal Piris

tecla piso 3

tecla piso 2

S1 3 4

1 2 TECLA1

R1

+5V

ZUMBADOR

8

1 2

3 4

1K

JP6 1 2 3 4 5 6 7 8 9 10

LED-ROJO-NO-E/S

RB7

R4

TECLA4

3 4

GND

JP8

JP7 RB3 RB4 RB5 RB6

LLAMADA-1

LLAMADA-3 LLAMADA-4 LLAMADA-5 TECLA1 TECLA2 TECLA3 TECLA4 No Conex.

PCF8574P JP1

RC4/SDA

RB7 RC1 RB6 RC2 RB5 RC3/SCL RB4

25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1

RC0 1

VDD INT

RC4/SDA 15 RC3/SCL 14

+5V

(B)

GND

RC1 RC0 RA5 RA4 RB7 Zumbador

RA2

+5V 9

L293 E- DRIVER MOTOR

JP2

LLAMADA-1 LLAMADA-2 LLAMADA-3 LLAMADA-4 LLAMADA-5 RA0 RA1 RA2 RA3

OUT3

+12V

REGLETA DE EXPANSIÓN

8

GND

+5V

4Y

GND1

4 5 6 7 9 10 LLAMADA-1 11 LLAMADA-2 12 No Conex.

PCF8574P

RN1

OUT4

1Y

4

2K2

INT

RA3

14

VSS

+5V

15

A0 A1 A2

R31

2K2 4A

R30

+5V VCC1

3

8

R29

1A

1 2 3

GND

+5V GND

1-2EN

16

P0 P1 P2 P3 P4 P5 P6 P7

SDA SCL

16

GND LLAMADA-1 LLAMADA-2 LLAMADA-3 LLAMADA-4 LLAMADA-5

tecla piso 5

S4 3 4

1K S11

1 2

GND

13

P5(A) P6(A) P0(B) P1(B) P2(B)

R5

TECLA2

INT

RC4/SDA 15 RC3/SCL 14

RC3/SCL

2

(A)

1 2 3 4 5 6

1 2

TECLA3

GND

INT

3 4

1K

pulsador piso 2

JP5

IC2

PIC16F876P

LLAMADA-2

S5 3 4

RC2 P6(B) P5(B) P4(B) P3(B)

IC1E

0V

RA0

triger Schmit para conformar las señales de los Finales de Carrera

FC5

S10

D2

10 C 9 B 8 A 7 +5V 6 TECLA5 5 TECLA4 4 TECLA3 3 TECLA2 2 TECLA1 1 GND

11

FC1 FC2 FC3 FC4 FC5

RB0/INT

10

VDD

IC5

1 2 3 4 5

IC1A

40106N P4(A)

JP4

1 FC1

RB2 RB1

IC1D

RC4/SDA

1

P0(A) 2

SV1

18 17 16 15

9 FC4

LED-ROJO-CERRAR LED-AMBAR-ABRIR LED-VERDE-ENTRAR/SALIR LED-ROJO-NO-E/S

RC7 RC6 SDO/RC5 SDI/RC4

8

P3(A)

+5V

19 8

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

28 27 26 25 24 23 22 21

+5V

11 12 13 14

15 pf

OSC1/CLKIN OSC2/CLKOUT

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

pulsador piso 3

9 ZUMBADOR 8 7 6 5 4 G 3 F 2 E 1 D

20

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

1 2

SV2

IC1B 40106N

3 4

RB7 RC1 RC0 RA5 RA4 RB6 RB5 RB4 RB3

IC1C

+5V

1 2

C4

2 3 4 5 6 7 9 10

4 Mhz

Q1

MCLR#/THV

GND LLAMADA-3

3 FC2

D3

R7

+5V 10k

R18 S6

1 2

R17

1

5

40106N

VDD

100 ohm

40106N P1(A) 4

FC3

6

P2(A)

D4

-

S9 40106N

IC6

C3 15 pf

0V

D5 +

3 4

PULSADOR DE RESET

+5V

pulsador piso 4

LED-VERDE-ENTRAR/SALIR

FC5

1K

FC4

R8

FC3

LED-AMBAR-ABRIR

FC2

R9

FC1

3 4

LED-ROJO-CERRAR

LLAMADA-4

tecla piso 1


PULSADOR DE RESET

0V

10k

+5V R18 1 2 3 4

15 pf

C4

JP2

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

OSC1/CLKIN OSC2/CLKOUT

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

MCLR#/THV

+12V

RA1 >5 a 36 Voltios

OUT2

RA0

11 12 13 14

9 10

2 3 4 5 6 7

VCC2

2A

2Y

GND2

GND1

1Y

1A

1-2EN

IC5

3-4EN

3A

3Y

GND4

GND3

4Y

4A

VCC1

9

10

11

12

13

14

15

16

L293 E- DRIVER MOTOR

8

7

6

5

4

3

2

1

RC3/SCL

0V

+5V

18 17 16 15

28 27 26 25 24 23 22 21

PIC16F876P

RC7 RC6 SDO/RC5 SDI/RC4

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

OUT4

RA3

RA2

OUT3

REGLETA DE EXPANSIÓN

RC0

Q1

GND 1

C3 15 pf 4 Mhz

+5V RB7 RC1 RB6 RC2 RB5 RC3/SCL RB4

1 2

1

RC4/SDA

19 8

R17

+5V

20

VDD

+5V

100 ohm

>9 voltios RB3 RC5 RB2 RC6 RB1 RC7 RB0/INT GND RA3 GND RA2 RA5 RA1 +5V RA0 MCLR RA4

RC4/SDA

X1-1

JP1

INT

13

13

1

GND

1 2 3

RC4/SDA 15 RC3/SCL 14

INT

1 2 3

RC4/SDA 15 RC3/SCL 14

INT

IC1E

10

40106N

IC1D

8

C1

FC3

VSS

P0 P1 P2 P3 P4 P5 P6 P7

VDD

(B)

10 9 8 7 6 5 4 3 2

PCF8574P

A0 A1 A2

SDA SCL

INT

IC3

P0 P1 P2 P3 P4 P5 P6 P7 VSS

PCF8574P

A0 A1 A2

SDA SCL

IC1P

VDD

(A)

11 FC5

9 FC4

5

INT

IC2

IC4

BOBINAS DEL MOTOR P.A.P.

DCBA

0V

IC1C

6

OUT GND

40106N

+5V

P4(A)

P3(A)

IN

40106N

C2

P2(A)

+

L7805C-V

VDD VSS

B1

14 7

X1-2

RC3/SCL

2K2 R29

RC4/SDA

2K2

INT

2K2 R31 +5V

R30 RA0 RA1 RA2 RA3

IC6

GND

25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1

+5V

LLAMADA-1 LLAMADA-2 No Conex.

GND

8

4 5 6 7 9 10 11 12

16 LLAMADA-3 LLAMADA-4 LLAMADA-5 TECLA1 TECLA2 TECLA3 TECLA4 No Conex.

LLAMADA-1 LLAMADA-2 LLAMADA-3 LLAMADA-4 LLAMADA-5 RA0 RA1 RA2 RA3

GND

8

4 5 6 7 9 10 11 12

16

IC1A

40106N P0(A) 2

IC1B

40106N P1(A) 4

1

3

RB7 Zumbador

RC1 RC0 RA5 RA4

RB3 RB4 RB5 RB6

RB0/INT RB1 RB2

P3(B) P4(B) P5(B) P6(B) RC2 +5V

GND

P5(A) P6(A) P0(B) P1(B) P2(B)

1 2 3 4 5 6 7 8 9

JP7

1 2 3 4 5 6 7 8 9 10

JP6

1 2

JP8

JP5

1 2 3 4 5

JP4

1 2 3 4 5 6

FC1 FC2 FC3 FC4 FC5

GND

FC1

FC2

triger Schmit para conformar las señales de los Finales de Carrera

+5V

+5V

+12V GND JP3

OUT4 OUT3 OUT2 OUT1

4 3 2 1

10k RN1

10/03/2009 17:25:02 f=0.75 C:\EAGLE\control-ascensor.sch (Sheet: 1/1) +5V

+5V

ZUMBADOR

RB7

D E F G LED-ROJO-NO-E/S LED-VERDE-ENTRAR/SALIR LED-AMBAR-ABRIR LED-ROJO-CERRAR

TECLA 1 TECLA 2 TECLA 3 TECLA 4 TECLA 5 + 5V SENSORES FC y PUERTA A B C

(+) FINALES DE CARRERA (-) FINALES DE CARRERA

LLAMADA 1 LLAMADA 2 LLAMADA 3 LLAMADA 4 LLAMADA 5

(-) PULSADORES DE LLAMADA

SENSOR FC 1 SENSOR FC 2 SENSOR FC 3 SENSOR FC 4 SENSOR FC 5

Autor: Joaquín Berrocal Piris

S6


" Puerta del Ascensor " Autor: Joaquín Berrocal Piris

E D C B A

F G

1K

1K

R45

1K

R46

1K

R47

1K

f g P K K

a b c d e

1KR44

1K

R41 R42

CÁTODO-COMÚN1 GND

R43

zumbador

+5V D8

D7

D6

D1

R39

R38

R37

1K

1K

RB7

GND

1K

-

1K

+

R40

SG2

S16 3 4

3 4 TECLA4

3 4 TECLA3

3 4 TECLA2

1K R32

10 C 9 B 8 A 7 +5V 6 TECLA5 5 TECLA4 4 TECLA3 3 TECLA2 2 TECLA1 1 GND

G F E D

SV3

SV4

9 8 7 6 5 4 3 2 1

RB7

+5V

10/03/2009 17:01:31 C:\EAGLE\puerta-ascensor.sch (Sheet: 1/1)

1 2

S13

1K R33

1 2

tecla piso 4

S14

1K R34

tecla piso 5

S15

1K R35

1 2

tecla piso 3 GND

R36

TECLA5

1K

1 2

tecla piso 2

S12 3 4

1 2 TECLA1

tecla piso 1


F:\MIS PROYECTOS\ASCENSOR\ascensor.asm ; ; ASCENSOR (sacado con ayuda del EJEMPLO 33) ; ; Autor: Joaquín Berrocal Piris ; ; ;El módulo MSSP. Modo I2C Master. Trama de recepción ; ;El módulo MSSP de los dispositivos PIC16F87X incorpora por hardware el interface I2C tanto ;en el modo Master como en el modo Slave. Las líneas RC3/SCL y RC4/SDA actúan como señales ;de reloj y datos del bus I2C respectivamente. ; ;se trata de controlar un ascensor de un edificio de 5 plantas. Se simula el motor de apertura ; y cierre de las puertas con leds. Los finales de carrera se obtinen con optoacopladores ;CNY 70 ver pagina 69 del libro de Microbótica. Sobre fondo negro o bien al aire da nivel 0 ;y sobre fondo blanco; nivel 1 a través de la patilla (D) ;DISPOSITIVOS DE LOS QUE CONSTA; ;1 CHIP 16f876; 2 CHIPS PCF 8574 ; UN DRIVER L293B PARA EL CONTROL DEL MOTOR ;1 DISPLAY 7 SEGMENTOS Para indicar el piso en el que se encuentra Conectado (RB0 A RB6) ;Zumbador conectado a RB7 ;MOTOR PASO A PASO Conectado de RA0 A RA3 ;4 LEDS: ;ROJO1 (Cerrar) -------RA4 AMBAR(Abrir) --------- RA5 VERDE(Entrar/salir)----RC0 ;ROJO2 (NO SALIR) -----RC1 ;TRANSMISIÓN BUS I2C -------------RC3(SCL) y RC4 (SDA) "ponerlas como entradas" ;El pulsador de teclado 5 está conectado a RC2

; NO UTILIZO LAS PATILLAS P7 DE LOS PCF 8574 POR CREAR PROBLEMAS CON EL BUS I2C Y BLOQUEARLO ; ;El dispositivo I2C PCF8574. Puerto de E/S de 8 bits:LOS UTILIZO PARA CAPTAR EL ESTADO ; DE LOS FINALES DE CARRERA, DE LOS PULSADORES Y DE LOS PULSADORES DE LLAMADA ;(A) PCF8574 ---- Dirección 0111(000)1 -- dirección 0 en modo lectura ;Conectado a ;5 Finales de carrera----P0/P1/P2/P3/P4 ;2 Pulsadores de llamada--P5/P6 ;(B) pcf8574 ---- Dirección 0111(001)1 -- dirección 1 en modo lectura ;Conectado a ;3 Pulsadores de llamada----P0/P1/P2 ;4 Pulsadores teclado--------P3/P4/P5/P6 ;El quinto pulsador del teclado lo conecto a RC2 ; ;DRIVER L293B ------- salidas: ;out1 ----a 1 del motor out2 --- a 2 del motor out3 --- a 3 del motor out4-- a 4 del motor ; Entradas; ;IN1----con RA0 IN2 ----Con RA1 IN3 ---- con RA2 IN4 --- con RA3 ; ;OBSERVACIONES; COMBINACIONES DEL GIRO DEL MOTOR; ; A DERECHA A IZQUIERDA ;1 PASO-- 0101 1 PASO-- 0110 ;2 PASO-- 0110 2 PASO-- 0101 Conectado a RA0/RA1/RA2/RA3 ;3 PASO-- 1010 3 PASO-- 1001 ;4 PASO-- 1001 4 PASO-- 1010 ; ; NOTA: CONSIDERO QUE EL MOTOR TIENE MÁX VELOCIDAD CON 130 PASOS/SEG-----7,6923 msg es decir ;que la temporización deber ser como mínimo de ese valor.YO LE DARÉ UNA TEMPORIZACIÓN MAYOR ;PARA QUE VAYA MÁS LENTO Y A SU VEZ CON MAS FUERZA. le voy a dar 18,482 msgs. ;Observacion; al (B) PCF8574 le sobra una E/S la P7 y al 16F876 las RC2/RC5/RC6/RC7 List p=16F876 ;Tipo de procesador include "P16F876.INC" ;Definiciones de registros internos RA0 RA1 RA2 RA3 RA4 RA5

equ equ equ equ equ equ

H'0000' H'0001' H'0002' H'0003' H'0004' H'0005'

RB0 RB1 RB2 RB3 RB4

equ equ equ equ equ

H'0000' H'0001' H'0002' H'0003' H'0004'

;Posicione de las puertas de E/S de los ; PIC 16F876

1


F:\MIS PROYECTOS\ASCENSOR\ascensor.asm RB5 RB6 RB7

equ equ equ

H'0005' H'0006' H'0007'

RC0 RC1 RC2 RC3 RC4 RC5 RC6 RC7

equ equ equ equ equ equ equ equ

H'0000' H'0001' H'0002' H'0003' H'0004' H'0005' H'0006' H'0007'

P0 P1 P2 P3 P4 P5 P6 P7

equ equ equ equ equ equ equ equ

H'0000' H'0001' H'0002' H'0003' H'0004' H'0005' H'0006' H'0007'

TEMP1 TEMP2

equ 0X31 equ 0X32

CONTA1 CONTA2 CONTA3 CONTA4

equ equ equ equ

PUERTOA PUERTOB

equ 0X25 equ 0X26

FinalesdeC equ TRESLLAMADAS DOSLLAMADAS equ TECLADO equ

;Posicione de las puertas de E/S de los ;pic PCF8574 (Dispositivo I2C.Puerto de E/S de 8 bits)

;registro de temporización (para la velocidad motor) ;registro de temporización (para la velocidad motor)

0X21 0X22 0X23 0X24

;registros para la temporización de Abrir/cerrar puerta

0X27 equ 0X28 0X29 0X30

;************************

P R O G R A M A

*********************************************

org 0x00 goto Inicio

;Vector de Reset

org 0x05

;Salva el vector de interrupción

;***************TEMPORIZCIÓN PARA DAR LA VELOCIDAD AL MOTOR****************************** ;Se temporiza 10 MILISEGUNDOS (considero que la velocidad máxima es de ;130pasos/seg = a 7,692msg)PERO PONGO UNA TEMPORIZACIÓN DE 18,482 msg DELAY

movlw 0x25 movwf TEMP1 clrf TEMP2

DELAY_1

decfsz TEMP2,F ;Decremento temp2 (767 usg) goto DELAY_1 ;Todavía no, temporizar decfsz TEMP1,F ;decrementar 25 veces mas; 7702usg =18,482) goto DELAY_1 return

;***************************************************************************************** ;**********************TEMPORIZACIÓN DE 2 SGDOS PARA ABRIR/CERRAR ************************ TEMPO2S

movlw 0x0C movwf CONTA3 clrf CONTA1 clrf CONTA2

;Cargo con valor 12 decimal para contar hasta 1,9635 sgs

TEMP2S

decfsz CONTA1,F goto TEMP2S decfsz CONTA2,F

;Temporización de Abrir/Cerrar de aprox. 2 sg.

2


F:\MIS PROYECTOS\ASCENSOR\ascensor.asm goto decfsz goto

TEMP2S CONTA3,F TEMP2S

return

;***************************************************************************************** ;*************************TEMPORIZACIÓN DE 6 SGDOS

PARA ENTRAR-SALIR*********************

TEMPO6S

movlw 0x24 movwf CONTA4 clrf CONTA1 clrf CONTA2

;Cargo con valor 36 decimal para contar hasta 5,89 sg

TEMP6S

decfsz CONTA1,F goto TEMP6S decfsz CONTA2,F goto TEMP6S decfsz CONTA4,F goto TEMP6S

;Temporización de Abrir/Cerrar de aprox. 2 sg.

return

;***************************************************************************************** ;Send_Start: Envía la condición de inicio Send_Start bcf PIR1,SSPIF ;Restaura el flag del módulo MSSP bsf STATUS,RP0 ;Seleciona página 1 bsf SSPCON2,SEN ;Activa secuencia de inicio bcf STATUS,RP0 Start_Wait btfss PIR1,SSPIF ;Fin de secuencia de inicio ?? goto Start_Wait ;No, esperar return ;Send_Stop: Envía la secuencia de stop Send_Stop bcf PIR1,SSPIF ;Restaura el flag del módulo MSSP bsf STATUS,RP0 ;Seleciona página 1 bsf SSPCON2,PEN ;Activa secuencia de stop bcf STATUS,RP0 Stop_Wait btfss PIR1,SSPIF ;Fin de secuencia de Stop ?? goto Stop_Wait ;No, esperar return ;Send_Byte: Transmite el byte del W vía I2C. La rutina finaliza cuando se recibe /ACK Send_Byte bcf movwf Send_Byte_Wait goto return

PIR1,SSPIF ;Restaura el flag del módulo MSSP SSPBUF ;Byte a transmitir pasa al buffer de salida btfss PIR1,SSPIF ;Recibido el bit /ACK ?? Send_Byte_Wait ;No, esperar

;Read_Byte: Lee un byte procedente del dispositivo I2C selecionado y lo devuelve en W ;Seguidamente se genera y transmite el bit /ACK Read_Byte bcf PIR1,SSPIF ;Restaura el flag del módulo MSSP bsf STATUS,RP0 ;Selecciona página 1 bsf SSPCON2,RCEN ;Activa el modo receptor bcf STATUS,RP0 ;Selecciona página 0 Read_Wait btfss PIR1,SSPIF ;Recibidos los 8 bits ?? goto Read_Wait ;No, esperar bcf bsf bcf bsf bcf

PIR1,SSPIF ;Restaura el flag del módulo MSSP STATUS,RP0 ;Selecciona página 1 SSPCON2,ACKDT ;Pone bit ACK a "0" SSPCON2,ACKEN ;Aciva la secuencia de generación del bit ACK STATUS,RP0 ;Selecciona página 0 ACK_Wait btfss PIR1,SSPIF ;Secuencia ACK finalizada ?? goto ACK_Wait ;No, esperar movf SSPBUF,W ;Lee el byte recibido return ;**********************************INICIO DEL PROGRAMA ***********************************

3


F:\MIS PROYECTOS\ASCENSOR\ascensor.asm ;PROGRAMA PRINCIPAL Inicio

bsf movlw movwf clrf clrf movlw movwf

STATUS,RP0 b'00000110' ADCON1 TRISA TRISB b'00011100' TRISC

movlw movwf movlw movwf

b'10000000' SSPSTAT ;Velocidad estándar con niveles I2C .9 SSPADD ;Velocidad del bus I2C 100KHz

bcf STATUS,RP0 movlw movwf

;Selecciona banco 1 ;Puerta A digital ;Puerta A salida ;Puerta B salida ;RC2/RC3/SCL y RC4/SDA entradas las demás salida

;Selecciona banco 0

b'11111111' ;PARA INICIAR LAS PUETAS DESDE UN ESTADO PORTA ;CONOCIDO

clrf clrf

PORTC PORTB ;Para iniciar con los leds desconectados bsf PORTC,RC0 ;activan por negativo el led verde de entrar/salir bsf PORTC,RC1 ;y el led rojo 2 de No Entrar/salir ;**RUTINA PARA POSICIONAR EL ASCENSOR EN EL CASO DE NO ESTAR ENFRENTADO A UN FINAL DE CARRERA** bcf STATUS,Z

;para inicar con seguridad en z=0

movlw movwf

b'00101000' SSPCON ;Módulo MSSP en On

call movlw call

Send_Start ;Envía condición de inicio b'01110001' Send_Byte ;Envía byte de dirección del(A) PCF8574 ("lectura")

call

Read_Byte ;Lee el dispositivo (A) PCF8584 para conocer el estado ; de los 5 finales de carrera

andlw

b'00011111' ;Discrimino para conocer el estado de los 5 finales

btfss goto

STATUS,Z ;verifica si hay un Final de Carrera activo. Si no hay POSICION ;Z=1 el resultado de la operación es cero.Ir a POSICIONAR ;si está enfrentado a un Final de Carrera. Leer ;los pulsadores de llamada y del teclado

call

Send_Stop

;Parar la lectura

;**************************Módulo MSSP en el modo Master I2C****************************** ;Aquí inicio el módulo MSSP y leo los puertos de E/S de los dispositivos I2C PCF8574

LECTURA

movlw b'00101000' movwf SSPCON ;Módulo MSSP en On call movlw call

Send_Start ;Envía condición de inicio b'01110001' Send_Byte ;Envía byte de dirección del(A) PCF8574 ("lectura")

call movwf movf

Read_Byte PUERTOA PUERTOA,W

andlw movwf

b'00011111' ;Discrimino para conocer el estado de los 5 finales FinalesdeC ;los guardo en el registro

movf andlw movwf

PUERTOA,W ;Llevo de nuevo el contenido del (A) PCF 8574 al W b'01100000' ;Discrimino para conocer el estado de 2 puls. de llamada DOSLLAMADAS ;los guardo (pisos 1-2)

call

Send_Stop

;Lee el dispositivo (A) PCF8584 para conocer el estado ; de los 5 finales de carrera y de 2 puls. de llamada ;lo vuelvo a poner en el banco W

;Para poder leer ahora el (B)

;AHORA ENVÍO DIRECCIÓN DEL PUERTO

PCF 8474

(B) PCF8574 PARA CONOCER EL ESTADO DE LOS TRES PULSADORES DE 4


F:\MIS PROYECTOS\ASCENSOR\ascensor.asm ;LLAMADA (pisos 3-4 y 5) y EL DE LOS 5 PULSADORES DEL TECLADO. movlw movwf

b'00101000' SSPCON ;Módulo MSSP en On

call

Send_Start

movlw call

b'01110011' ;dirección del segundo puerto de E/S el (B) pcf8574 Send_Byte ;Envía byte de dirección del(B) PCF8574 ("lectura")

call

Read_Byte ;Lee el dispositivo (B) PCF8584 para conocer el estado ;de los tres pulsadores de llamada y los 4 del TECLADO

movwf movf

PUERTOB PUERTOB,W

andlw

b'00000111' ;Discrimino para conocer el estado de los 3 llamadas ;(pulsadores de los pisos 3-4 y 5) TRESLLAMADAS ;los guardo en el registro TRESLLAMADAS (pisos 3-4 y 5)

movwf

;Envía condición de inicio

;lo vuelvo a poner en el banco W

movf andlw movwf

PUERTOB,W ;Llevo de nuevo el contenido del (B) PCF 8574 al W b'01111000' ;Discrimino para conocer el estado de los 4 puls. del TECLADO TECLADO ;los guardo en el registro (estado pulsadores del teclado) ;pulsador 1-2-3-4 .el 5º lo leo a traves de RC0

call

Send_Stop ;Para terminar la lectura del (B) y poder leer ahora ; el (A) PCF 8474

;***************************************************************************************** ;**************RUTINAS PARA CONOCER CUÁL pulsador

de llamada está activo****************

;--------------------HAY UN PULSADOR DE LLAMADA EN CADA PISO------------------------------

LLAMADA1 goto goto

btfsc DOSLLAMADAS,P5 ;comprueba si corresponde al LLAMADA2 ;pulsador del piso 1 PLANTA1A

goto goto

btfsc DOSLLAMADAS,P6 ;comprueba si corresponde al LLAMADA3 ;pulsador del piso 2 PLANTA1B

LLAMADA2

;-------------- DEL CHIP (B) PCF 8574 -------------------------------------LLAMADA3 goto goto

btfsc TRESLLAMADAS,P0 ;comprueba si corresponde al LLAMADA4 ;pulsador del piso 3 PLANTA1C

goto goto

btfsc TRESLLAMADAS,P1 ;comprueba si corresponde al LLAMADA5 ;pulsador del piso 4 PLANTA1D

goto goto

btfsc TRESLLAMADAS,P2 ;comprueba si corresponde al PULSADORES1 ;pulsador del piso 5 PLANTA1E ;salta a leer los pulsadores del teclado

LLAMADA4

LLAMADA5

;**************RUTINAS PARA CONOCER CUÁL pulsador DEL TECLADO ESTÁ ACTIVO****************

PULSADORES1 btfsc TECLADO,P3 ; VERIFICA goto PULSADORES2 ;PISO Nº 1 goto PLANTA1A

SI SE HA PULSADO PARA IR AL

PULSADORES2 btfsc TECLADO,P4 ; VERIFICA goto PULSADORES3 ;PISO Nº 2 goto PLANTA1B

SI SE HA PULSADO PARA IR AL

PULSADORES3 btfsc TECLADO,P5 ; VERIFICA goto PULSADORES4 ;PISO Nº 3 goto PLANTA1C

SI SE HA PULSADO PARA IR AL

PULSADORES4 btfsc TECLADO,P6 ; VERIFICA goto PULSADORES5 ;PISO Nº 4 goto PLANTA1D

SI SE HA PULSADO PARA IR AL

5


F:\MIS PROYECTOS\ASCENSOR\ascensor.asm PULSADORES5 btfsc

PORTC,RC2 ;EL TECLADO 5º Piso está conectado al RC2 ;VERIFICA SI SE HA PULSADO PARA IR AL PISO Nº 5 LECTURA ;vuelvo a leer el estado de pulsadores ;de llamada/del teclado y los Finales de Carrera PLANTA1E

goto goto

;************************************************************************************************ ;***RUTINAS PARA AVERIGUAR DONDE SE ENCUENTRA EL ASCENSOR Y HACERLO ABRIR/CERRAR/BAJAR 0 SUBIR*** ;debo poner de nuevo las istrucciones de lectura del dispositivo I2C pcf8574 Del A y del B para conocer ;el estado de los finales de carrera y de los pulsadores de llamada y del teclado. PLANTA1A

movlw b'00101000' movwf SSPCON ;Módulo MSSP en On call

Send_Start

;Envía condición de inicio

movlw call

b'01110001' Send_Byte ;Envía byte de dirección del(A) PCF8574 ("lectura")

PLANTA1A1 call Read_Byte ;Lee el dispositivo (A) PCF8584 para conocer el estado movwf PUERTOA ; de los 5 finales de carrera y de 2 puls. de llamada movf PUERTOA,W ;lo vuelvo a poner en el banco W. (pisos 1º y 2º) andlw movwf

b'00011111' ;Discrimino para conocer el estado de los 5 finales FinalesdeC ;los guardo en el registro

movf

PUERTOA,W

btfsc goto movlw movwf goto

FinalesdeC,P0 ;en el reg FinalesdeC esta el estado de los 5 Finales PLANTA2A b'00000110' ;Activa display cátodo comun Piso 1 PORTB ABRIR ;por estar en la primera planta y nosotros también

;Llevo de nuevo el contenido del (A) PCF 8574 al W

PLANTA2A

btfsc FinalesdeC,P1 ;en el reg FinalesdeC esta el estado de los 5 Finales goto PLANTA3A movlw b'01011011' ;Activa display cátodo comun Piso 2 movwf PORTB goto BAJAR_A_1 ;por estar en la segunda planta y nosotros en la 1ª

PLANTA3A

btfsc FinalesdeC,P2 ;en el reg FinalesdeC esta el estado de los 5 Finales goto PLANTA4A movlw b'01001111' ;Activa display cátodo comun Piso 3 movwf PORTB goto BAJAR_A_1 ;por estar en la tercera planta y nosotros en la 1ª

PLANTA4A

btfsc FinalesdeC,P3 ;en el reg FinalesdeC esta el estado de los 5 Finales goto PLANTA5A movlw b'01100110' ;Activa display cátodo comun Piso 4 movwf PORTB goto BAJAR_A_1 ;por estar en la cuarta planta y nosotros en la 1ª

PLANTA5A

btfsc

FinalesdeC,P4

;en el reg FinalesdeC esta el estado de los 5 Finales

goto

PLANTA1A1

movlw movwf goto

b'01101101' ;Activa display cátodo comun Piso 5 PORTB BAJAR_A_1 ;por estar en la quinta planta y nosotros en la 1ª

;************************************************************************************************* PLANTA1B

movlw b'00101000' movwf SSPCON ;Módulo MSSP en On call

Send_Start

movlw call

b'01110001' Send_Byte ;Envía byte de dirección del(A) PCF8574 ("lectura")

PLANTA1B1

call

;Envía condición de inicio

Read_Byte

;Lee el dispositivo (A) PCF8584 para conocer el estado 6


F:\MIS PROYECTOS\ASCENSOR\ascensor.asm movwf movf

PUERTOA PUERTOA,W

; de los 5 finales de carrera y de 2 puls. de llamada ;lo vuelvo a poner en el banco W

andlw movwf

b'00011111' ;Discrimino para conocer el estado de los 5 finales FinalesdeC ;los guardo en el registro

btfsc goto movlw movwf goto

FinalesdeC,P0 ;en el reg FinalesdeC esta el estado de los 5 Finales PLANTA2B b'00000110' ;Activa display cátodo comun Piso 1 PORTB SUBIR_A_2 ;por estar en la primera planta y nosotros en la 3ª

PLANTA2B

btfsc FinalesdeC,P1 ;en el reg FinalesdeC esta el estado de los 5 Finales goto PLANTA3B movlw b'01011011' ;Activa display cátodo comun Piso 2 movwf PORTB goto ABRIR ;por estar en la segunda planta y nosotros también

PLANTA3B

btfsc FinalesdeC,P2 ;en el reg FinalesdeC esta el estado de los 5 Finales goto PLANTA4B movlw b'01001111' ;Activa display cátodo comun Piso 3 movwf PORTB goto BAJAR_A_2 ;por estar en la tercera planta y nosotros en la 2ª

PLANTA4B

btfsc FinalesdeC,P3 ;en el reg FinalesdeC esta el estado de los 5 Finales goto PLANTA5B movlw b'01100110' ;Activa display cátodo comun Piso 4 movwf PORTB goto BAJAR_A_2 ;por estar en la cuarta planta y nosotros en la 2ª

PLANTA5B

btfsc

FinalesdeC,P4

;en el reg FinalesdeC esta el estado de los 5 Finales

goto

PLANTA1B1

movlw movwf goto

b'01101101' ;Activa display cátodo comun Piso 5 PORTB BAJAR_A_2 ;por estar en la quinta planta y nosotros en la 2ª

;************************************************************************************************* PLANTA1C

movlw b'00101000' movwf SSPCON ;Módulo MSSP en On call

Send_Start

;Envía condición de inicio

movlw call

b'01110001' Send_Byte ;Envía byte de dirección del(A) PCF8574 ("lectura")

PLANTA1C1 call Read_Byte ;Lee el dispositivo (A) PCF8584 para conocer el estado movwf PUERTOA ; de los 5 finales de carrera y de 2 puls. de llamada movf PUERTOA,W ;lo vuelvo a poner en el banco W andlw movwf

b'00011111' ;Discrimino para conocer el estado de los 5 finales FinalesdeC ;los guardo en el registro

btfsc goto movlw movwf goto

FinalesdeC,P0 ;en el reg FinalesdeC esta el estado de los 5 Finales PLANTA2C b'00000110' ;Activa display cátodo comun Piso 1 PORTB SUBIR_A_3 ;por estar en la primera planta y nosotros en la 3ª

PLANTA2C

btfsc FinalesdeC,P1 ;en el reg FinalesdeC esta el estado de los 5 Finales goto PLANTA3C movlw b'01011011' ;Activa display cátodo comun Piso 2 movwf PORTB goto SUBIR_A_3 ;por estar en la segunda planta y nosotros en la 3ª

PLANTA3C

btfsc FinalesdeC,P2 ;en el reg FinalesdeC esta el estado de los 5 Finales goto PLANTA4C movlw b'01001111' ;Activa display cátodo comun Piso 3 movwf PORTB goto ABRIR ;por estar en la tercera planta y nosotros también

PLANTA4C

btfsc FinalesdeC,P3 ;en el reg FinalesdeC esta el estado de los 5 Finales goto PLANTA5C movlw b'01100110' ;Activa display cátodo comun Piso 4 movwf PORTB 7


F:\MIS PROYECTOS\ASCENSOR\ascensor.asm goto PLANTA5C

BAJAR_A_3 btfsc

;por estar en la cuarta planta y nosotros en la 3ª

FinalesdeC,P4

;en el reg FinalesdeC esta el estado de los 5 Finales

goto

PLANTA1C1

movlw movwf goto

b'01101101' ;Activa display cátodo comun Piso 5 PORTB BAJAR_A_3 ;por estar en la quinta planta y nosotros en la 3ª

;************************************************************************************************ PLANTA1D movlw b'00101000' movwf SSPCON ;Módulo MSSP en On call

Send_Start

;Envía condición de inicio

movlw call

b'01110001' Send_Byte ;Envía byte de dirección del(A) PCF8574 ("lectura")

PLANTA1D1 call Read_Byte ;Lee el dispositivo (A) PCF8584 para conocer el estado movwf PUERTOA ; de los 5 finales de carrera y de 2 puls. de llamada movf PUERTOA,W ;lo vuelvo a poner en el banco W andlw movwf

b'00011111' ;Discrimino para conocer el estado de los 5 finales FinalesdeC ;los guardo en el registro

btfsc goto movlw movwf goto

FinalesdeC,P0 ;en el reg FinalesdeC esta el estado de los 5 Finales PLANTA2D b'00000110' ;Activa display cátodo comun Piso 1 PORTB SUBIR_A_4 ;por estar en la primera planta y nosotros en la 4ª

PLANTA2D

btfsc FinalesdeC,P1 ;en el reg FinalesdeC esta el estado de los 5 Finales goto PLANTA3D movlw b'01011011' ;Activa display cátodo comun Piso 2 movwf PORTB goto SUBIR_A_4 ;por estar en la segunda planta y nosotros en la 4ª

PLANTA3D

btfsc FinalesdeC,P2 ;en el reg FinalesdeC esta el estado de los 5 Finales goto PLANTA4D movlw b'01001111' ;Activa display cátodo comun Piso 3 movwf PORTB goto SUBIR_A_4 ;por estar en la tercera planta y nosotros en la 4ª

PLANTA4D

btfsc FinalesdeC,P3 ;en el reg FinalesdeC esta el estado de los 5 Finales goto PLANTA5D movlw b'01100110' ;Activa display cátodo comun Piso 4 movwf PORTB goto ABRIR ;por estar en la cuarta planta y nosotros también

PLANTA5D

btfsc

FinalesdeC,P4

;en el reg FinalesdeC esta el estado de los 5 Finales

goto

PLANTA1D1

movlw movwf goto

b'01101101' ;Activa display cátodo comun Piso 5 PORTB BAJAR_A_4 ;por estar en la quinta planta y nosotros en la 4ª

;************************************************************************************************ PLANTA1E

movlw b'00101000' movwf SSPCON ;Módulo MSSP en On call

Send_Start

;Envía condición de inicio

movlw call

b'01110001' Send_Byte ;Envía byte de dirección del(A) PCF8574 ("lectura")

PLANTA1E1 call Read_Byte ;Lee el dispositivo (A) PCF8584 para conocer el estado movwf PUERTOA ; de los 5 finales de carrera y de 2 puls. de llamada movf PUERTOA,W ;lo vuelvo a poner en el banco W

andlw movwf

b'00011111' ;Discrimino para conocer el estado de los 5 finales FinalesdeC ;los guardo en el registro

8


F:\MIS PROYECTOS\ASCENSOR\ascensor.asm btfsc goto movlw movwf goto

FinalesdeC,P0 ;en el reg FinalesdeC esta el estado de los 5 Finales PLANTA2E b'00000110' ;Activa display cátodo comun Piso 1 PORTB SUBIR_A_5 ;por estar en la primera planta y nosotros en la 5ª

PLANTA2E

btfsc FinalesdeC,P1 ;en el reg FinalesdeC esta el estado de los 5 Finales goto PLANTA3E movlw b'01011011' ;Activa display cátodo comun Piso 2 movwf PORTB goto SUBIR_A_5 ;por estar en la segunda planta y nosotros en la 5ª

PLANTA3E

btfsc FinalesdeC,P2 ;en el reg FinalesdeC esta el estado de los 5 Finales goto PLANTA4E movlw b'01001111' ;Activa display cátodo comun Piso 3 movwf PORTB goto SUBIR_A_5 ;por estar en la tercera planta y nosotros en la 5ª

PLANTA4E

btfsc FinalesdeC,P3 ;en el reg FinalesdeC esta el estado de los 5 Finales goto PLANTA5E movlw b'01100110' ;Activa display cátodo comun Piso 4 movwf PORTB goto SUBIR_A_5 ;por estar en la cuarta planta y nosotros en la 5ª

PLANTA5E

btfsc

FinalesdeC,P4

;en el reg FinalesdeC esta el estado de los 5 Finales

goto

PLANTA1E1

movlw movwf goto

b'01101101' ;Activa display cátodo comun Piso 5 PORTB ABRIR ;por estar en la quinta planta y nosotros también

;************************************************************************************************ ;***********************RUTINA PARA POSICIONAR EL ASCENSOR***************************************

POSICIONAR

POSICION

call

SUBIR ;NOS ENCONTRAMOS LEYENDO EL PUERTO (A) DE E/S por ello ; no pongo el MSSP en ON ni direcciona al chip (A)

call Read_Byte ;Lee el dispositivo (A) PCF8584 para conocer el estado movwf PUERTOA ; de los 5 finales de carrera y de 3 puls. de llamada movf PUERTOA,W ;lo vuelvo a poner en el banco W andlw movwf

b'00011111' ;Discrimino para conocer el estado de los 5 finales FinalesdeC ;los guardo en el registro

UNO

btfsc FinalesdeC,P0 ;¿ha llegado al piso nº 1? goto DOS ;Ver si está en el piso nº 2 movlw b'01000110' ;Activa display cátodo común Piso 1 movwf PORTB goto PARAR

DOS

btfsc goto movlw movwf goto

TRES

btfsc FinalesdeC,P2 ;¿ha llegado al piso nº 3? goto CUATRO ;Ver si está en el piso nº 4 movlw b'01001111' ;Activa display cátodo común Piso 3 movwf PORTB goto PARAR

CUATRO

btfsc FinalesdeC,P3 ;¿ha llegado al piso nº 4? goto CINCO ;Ver si está en el piso nº 5 movlw b'01100110' ;Activa display cátodo común Piso 4 movwf PORTB goto PARAR

CINCO

btfsc FinalesdeC,P4 ;¿ha llegado al piso nº 5? goto POSICIONAR ;VOLVER A ACTIVAR EL MOTOR Y A LEER LOS FINALES DE CARRERA movlw b'01101101' ;Activa display cátodo común Piso 5 movwf PORTB goto PARAR

FinalesdeC,P1 ;¿ha llegado al piso nº 2? TRES ;Ver si está en el piso nº 3 b'01011011' ;Activa display cátodo común Piso 2 PORTB PARAR

9


F:\MIS PROYECTOS\ASCENSOR\ascensor.asm

PARAR

bsf PORTA,RA0 bsf PORTA,RA1 bsf PORTA,RA2 bsf PORTA,RA3

;SI; parar motor

goto

;ABRIR PUERTA

ABRIR

;_________________________________________________________________________________________________ _

;************************************************************************************************

;****************************RUTINAS DE ABRIR / BAJAR A 1-2-3-4 / SUBIR A 2-3-4-5 *************** ABRIR

bcf PORTA,RA5 ;activa por (-) RA5 led Ambar (abrir) bcf PORTC,RC1 ;Led rojo2 No entrar ni salir encendido call TEMPO2S ;tiempo que tarda en abrirse bsf PORTA,RA5 ;puerta abierta y led ambar y rojo2 apagados bsf PORTC,RC1 ; bcf PORTC,RC0 ;led verde encendido se puede entrar y/o salir bsf PORTB,RB7 ;Zumbador activo por + call TEMPO6S ;Tiempo para entrar y/o salir bsf PORTC,RC0 ;led verde apagado no se puede entrar ni salir bcf PORTB,RB7

;Zumbador desactivado.Puerta cerrada

bcf PORTA,RA4 ;activa por (-) RA4 led Rojo1 (cerrar) bcf PORTC,RC1 ;led rojo2 encendido No E/S call TEMPO2S ;tiempo que tarda en cerrarse bsf PORTA,RA4 ;puerta cerrada y led rojo1 apagado call

Send_Stop

;para poder leer el siguiente puerto de E/S

goto LECTURA ;Ir de nuevo a chequear los pulsadores y el teclado ;________________________________________________________________________________________________ BAJAR

call Read_Byte ;Lee el dispositivo (A) PCF8584 para conocer el estado movwf PUERTOA ; de los 5 finales de carrera y de 3 puls. de llamada movf PUERTOA,W ;lo vuelvo a poner en el banco W andlw movwf

b'00011111' ;Discrimino para conocer el estado de los 5 finales FinalesdeC ;los guardo en el registro

btfsc goto movlw movwf

FinalesdeC,P0 ;¿ha llegado al piso nº 1? DOS_A ;Mirar si está en el piso 1 y así indicarlo en el display b'00000110' ;Activa display cátodo comun Piso 1 PORTB

DOS_A

btfsc FinalesdeC,P1 ;¿ha llegado al piso nº 2? goto TRES_A ;Mirar si está en el piso 2 y así indicarlo en el display movlw b'01011011' ;Activa display cátodo comun Piso 2 movwf PORTB

TRES_A

btfsc FinalesdeC,P2 ;¿ha llegado al piso nº 3? goto CUARTO_A ;Mirar si está en el piso 3 y así indicarlo en el display movlw b'01001111' ;Activa display cátodo comun Piso 3 movwf PORTB

CUARTO_A

btfsc FinalesdeC,P3 ;¿ha llegado al piso nº 4? goto QUINTO_A ;Mirar si está en el piso 4 y así indicarlo en el display movlw b'01100110' ;Activa display cátodo comun Piso 4 movwf PORTB

QUINTO_A

btfsc FinalesdeC,P4 ;¿ha llegado al piso nº 5? goto MOTOR_BAJA ;Mirar si está en el piso 5 y así indicarlo en el display movlw b'01101101' ;Activa display cátodo comun Piso 5 movwf PORTB

MOTOR_BAJA bcf PORTA,RA0 bcf PORTA,RA3 call DELAY bsf PORTA,RA0 ; bsf PORTA,RA3 ;

;combinación de bajar RA3 RA2 RA1 RA0 ;

1º paso--2ºpaso--0 3ºpaso--1 0 10

0 1 0

1 0 1

1 1

0


F:\MIS PROYECTOS\ASCENSOR\ascensor.asm ;

4ºpaso---

1

0

1

0

bcf PORTA,RA1 bcf PORTA,RA3 call DELAY bsf PORTA,RA1 bsf PORTA,RA3

bcf PORTA,RA1 bcf PORTA,RA2 call DELAY bsf PORTA,RA1 bsf PORTA,RA2 bcf PORTA,RA0 bcf PORTA,RA2 call DELAY bsf PORTA,RA0 bsf PORTA,RA2 return ;_________________________________________________________________________________________________ __ BAJAR_A_1

call

BAJAR ;NOS ENCONTRAMOS LEYENDO EL PUERTO (A) DE E/S por ello ; no pongo el MSSP en ON ni direcciona al chip (A)

call movwf movf

Read_Byte PUERTOA PUERTOA,W

andlw movwf

b'00011111' ;Discrimino para conocer el estado de los 5 finales FinalesdeC ;los guardo en el registro

btfsc goto movlw movwf

FinalesdeC,P0 ;¿ha llegado al piso nº 1? BAJAR_A_1 b'00000110' ;Activa display cátodo comun Piso 1 PORTB

bsf bsf bsf bsf

PORTA,RA0 PORTA,RA1 PORTA,RA2 PORTA,RA3

goto

;Lee el dispositivo (A) PCF8584 para conocer el estado ; de los 5 finales de carrera y de 3 puls. de llamada ;lo vuelvo a poner en el banco W

;SI; parar motor

ABRIR

;ABRIR PUERTA

;_______________________________________________________________________________________________ BAJAR_A_2

call

BAJAR ;NOS ENCONTRAMOS LEYENDO EL PUERTO (A) DE E/S por ello ; no pongo el MSSP en ON ni direcciona al chip (A)

call movwf movf

Read_Byte PUERTOA PUERTOA,W

andlw movwf

b'00011111' ;Discrimino para conocer el estado de los 5 finales FinalesdeC ;los guardo en el registro

btfsc goto movlw movwf

FinalesdeC,P1 ;¿ha llegado al piso nº 2? BAJAR_A_2 b'01011011' ;Activa display cátodo comun Piso 2 PORTB

bsf bsf bsf bsf

PORTA,RA0 PORTA,RA1 PORTA,RA2 PORTA,RA3

goto

;Lee el dispositivo (A) PCF8584 para conocer el estado ; de los 5 finales de carrera y de 3 puls. de llamada ;lo vuelvo a poner en el banco W

;SI; parar motor

ABRIR

;ABRIR PUERTA

;_______________________________________________________________________________________________ BAJAR_A_3

call

BAJAR 11


F:\MIS PROYECTOS\ASCENSOR\ascensor.asm

;NOS ENCONTRAMOS LEYENDO EL PUERTO (A) DE E/S por ello ; no pongo el MSSP en ON ni direcciona al chip (A)

call movwf movf

Read_Byte PUERTOA PUERTOA,W

andlw movwf

b'00011111' ;Discrimino para conocer el estado de los 5 finales FinalesdeC ;los guardo en el registro

btfsc goto movlw movwf

FinalesdeC,P2 ;¿ha llegado al piso nº 3? BAJAR_A_3 b'01001111' ;Activa display cátodo comun Piso 3 PORTB

bsf bsf bsf bsf

PORTA,RA0 PORTA,RA1 PORTA,RA2 PORTA,RA3

goto

;Lee el dispositivo (A) PCF8584 para conocer el estado ; de los 5 finales de carrera y de 3 puls. de llamada ;lo vuelvo a poner en el banco W

;SI; parar motor

ABRIR

;ABRIR PUERTA

;________________________________________________________________________________________________ BAJAR_A_4

call

BAJAR ;NOS ENCONTRAMOS LEYENDO EL PUERTO (A) DE E/S por ello ; no pongo el MSSP en ON ni direcciona al chip (A)

call movwf movf

Read_Byte PUERTOA PUERTOA,W

andlw movwf

b'00011111' ;Discrimino para conocer el estado de los 5 finales FinalesdeC ;los guardo en el registro

btfsc goto movlw movwf

FinalesdeC,P3 ;¿ha llegado al piso nº 4? BAJAR_A_4 b'01100110' ;Activa display cátodo comun Piso 4 PORTB

bsf bsf bsf bsf

PORTA,RA0 PORTA,RA1 PORTA,RA2 PORTA,RA3

goto

ABRIR

;Lee el dispositivo (A) PCF8584 para conocer el estado ; de los 5 finales de carrera y de 3 puls. de llamada ;lo vuelvo a poner en el banco W

;SI; parar motor

;ABRIR PUERTA

;*************************************************************************************************

SUBIR

call Read_Byte ;Lee el dispositivo (A) PCF8584 para conocer el estado movwf PUERTOA ; de los 5 finales de carrera y de 3 puls. de llamada movf PUERTOA,W ;lo vuelvo a poner en el banco W andlw movwf

b'00011111' ;Discrimino para conocer el estado de los 5 finales FinalesdeC ;los guardo en el registro

btfsc goto movlw movwf

FinalesdeC,P0 ;¿ha llegado al piso nº 1? DOS_B ;Mirar si está en el piso 1 y así indicarlo en el display b'00000110' ;Activa display cátodo comun Piso 1 PORTB

DOS_B

btfsc FinalesdeC,P1 ;¿ha llegado al piso nº 2? goto TRES_B ;Mirar si está en el piso 2 y así indicarlo en el display movlw b'01011011' ;Activa display cátodo comun Piso 2 movwf PORTB

TRES_B

btfsc FinalesdeC,P2 ;¿ha llegado al piso nº 3? goto CUARTO_B ;Mirar si está en el piso 3 y así indicarlo en el display movlw b'01001111' ;Activa display cátodo comun Piso 3 movwf PORTB

CUARTO_B goto

btfsc FinalesdeC,P3 ;¿ha llegado al piso nº 4? QUINTO_B ;Mirar si está en el piso 4 y así indicarlo en el display 12


F:\MIS PROYECTOS\ASCENSOR\ascensor.asm movlw movwf

b'01100110' ;Activa display cátodo comun Piso 4 PORTB

goto movlw movwf

btfsc FinalesdeC,P4 ;¿ha llegado al piso nº 5? MOTOR_SUBE ;Mirar si está en el piso 5 y así indicarlo en el display b'01101101' ;Activa display cátodo comun Piso 5 PORTB

QUINTO_B

MOTOR_SUBE bcf PORTA,RA1 bcf PORTA,RA3 call DELAY bsf PORTA,RA1 ; bsf PORTA,RA3 ; ;

;combinación de subir RA3 RA2 RA1 RA0 ;

1º paso--2ºpaso--0 3ºpaso--1 0 4ºpaso--1 0

0 1 1 0

1 1 0 1

0 0

1

bcf PORTA,RA0 bcf PORTA,RA3 call DELAY bsf PORTA,RA0 bsf PORTA,RA3

bcf PORTA,RA0 bcf PORTA,RA2 call DELAY bsf PORTA,RA0 bsf PORTA,RA2 bcf PORTA,RA1 bcf PORTA,RA2 call DELAY bsf PORTA,RA1 bsf PORTA,RA2 return ;_______________________________________________________________________________________________ SUBIR_A_2

call

SUBIR ;NOS ENCONTRAMOS LEYENDO EL PUERTO (A) DE E/S por ello ; no pongo el MSSP en ON ni direcciona al chip (A)

call movwf movf

Read_Byte PUERTOA PUERTOA,W

andlw movwf

b'00011111' ;Discrimino para conocer el estado de los 5 finales FinalesdeC ;los guardo en el registro

btfsc goto movlw movwf

FinalesdeC,P1 ;¿ha llegado al piso nº 2? SUBIR_A_2 b'01011011' ;Activa display cátodo comun Piso 2 PORTB

bsf bsf bsf bsf

PORTA,RA0 PORTA,RA1 PORTA,RA2 PORTA,RA3

goto

;Lee el dispositivo (A) PCF8584 para conocer el estado ; de los 5 finales de carrera y de 3 puls. de llamada ;lo vuelvo a poner en el banco W

;SI; parar motor

ABRIR

;ABRIR PUERTA

;_________________________________________________________________________________________________

SUBIR_A_3

call

SUBIR ;NOS ENCONTRAMOS LEYENDO EL PUERTO (A) DE E/S por ello ; no pongo el MSSP en ON ni direcciona al chip (A)

call

Read_Byte

;Lee el dispositivo (A) PCF8584 para conocer el estado 13


F:\MIS PROYECTOS\ASCENSOR\ascensor.asm movwf movf

PUERTOA PUERTOA,W

andlw movwf

b'00011111' ;Discrimino para conocer el estado de los 5 finales FinalesdeC ;los guardo en el registro

btfsc goto movlw movwf

FinalesdeC,P2 ;¿ha llegado al piso nº 3? SUBIR_A_3 b'01001111' ;Activa display cátodo comun Piso 3 PORTB

bsf bsf bsf bsf

PORTA,RA0 PORTA,RA1 PORTA,RA2 PORTA,RA3

goto

; de los 5 finales de carrera y de 3 puls. de llamada ;lo vuelvo a poner en el banco W

;SI; parar motor

ABRIR

;ABRIR PUERTA

;_________________________________________________________________________________________________ _ SUBIR_A_4

call

SUBIR ;NOS ENCONTRAMOS LEYENDO EL PUERTO (A) DE E/S por ello ; no pongo el MSSP en ON ni direcciona al chip (A)

call movwf movf

Read_Byte PUERTOA PUERTOA,W

andlw movwf

b'00011111' ;Discrimino para conocer el estado de los 5 finales FinalesdeC ;los guardo en el registro

btfsc goto movlw movwf

FinalesdeC,P3 ;¿ha llegado al piso nº 4? SUBIR_A_4 b'01100110' ;Activa display cátodo comun Piso 4 PORTB

bsf bsf bsf bsf

PORTA,RA0 PORTA,RA1 PORTA,RA2 PORTA,RA3

goto

;Lee el dispositivo (A) PCF8584 para conocer el estado ; de los 5 finales de carrera y de 3 puls. de llamada ;lo vuelvo a poner en el banco W

;SI; parar motor

ABRIR

;ABRIR PUERTA

;_________________________________________________________________________________________________ ___ SUBIR_A_5

call

SUBIR ;NOS ENCONTRAMOS LEYENDO EL PUERTO (A) DE E/S por ello ; no pongo el MSSP en ON ni direcciona al chip (A)

call movwf movf

Read_Byte PUERTOA PUERTOA,W

andlw movwf

b'00011111' ;Discrimino para conocer el estado de los 5 finales FinalesdeC ;los guardo en el registro

btfsc goto movlw movwf

FinalesdeC,P4 ;¿ha llegado al piso nº 5? SUBIR_A_5 b'01101101' ;Activa display cátodo comun Piso 5 PORTB

bsf bsf bsf bsf goto

end

PORTA,RA0 PORTA,RA1 PORTA,RA2 PORTA,RA3 ABRIR

;Lee el dispositivo (A) PCF8584 para conocer el estado ; de los 5 finales de carrera y de 3 puls. de llamada ;lo vuelvo a poner en el banco W

;SI; parar motor

;ABRIR PUERTA

;Fin del programa fuente

14


F:\MIS PROYECTOS\ASCENSOR\ascensor.asm

;************************************************************************************************ ;

A S C E N S O R

HEXADECIMAL

;************************************************************************************************ :020000040000FA :02000000452891 :06000A002530B100B20137 :10001000B20B0828B10B082808000C30A300A1017E :10002000A201A10B1128A20B1128A30B1128080073 :100030002430A400A101A201A10B1C28A20B1C28A2 :10004000A40B1C2808008C118316111483128C1D1C :10005000272808008C118316111583128C1D2E2859 :1000600008008C1193008C1D332808008C11831616 :10007000911583128C1D3A288C118316911211163A :1000800083128C1D412813080800831606309F0038 :10009000850186011C308700803094000930930070 :1000A0008312FF308500870186010714871403112E :1000B0002830940023207130312036201F39031D51 :1000C0004D292A20283094002320713031203620F9 :1000D000A50025081F39A70025086039A9002A2096 :1000E000283094002320733031203620A6002608C3 :1000F0000739A80026087839B0002A20A91A8128D3 :100100009C28291B8428C02828188728E328A81899 :100110008A28062928198D282929B01990289C2871 :10012000301A9328C028B01A9628E328301B992843 :1001300006290719622829292830940023207130C4 :1001400031203620A50025081F39A70025082718CB :10015000AC28063086007029A718B1285B308600CD :10016000AE292719B6284F308600AE29A719BB281B :1001700066308600AE29271AA1286D308600AE2988 :10018000283094002320713031203620A500250826 :100190001F39A7002718CF2806308600182AA7186D :1001A000D4285B30860070292719D9284F30860063 :1001B000BD29A719DE2866308600BD29271AC52863 :1001C0006D308600BD292830940023207130312005 :1001D0003620A50025081F39A7002718F228063069 :1001E0008600272AA718F7285B308600272A2719B8 :1001F000FC284F3086007029A71901296630860037 :10020000CC29271AE8286D308600CC2928309400A4 :100210002320713031203620A50025081F39A70082 :100220002718152906308600362AA7181A295B30A8 :100230008600362A27191F294F308600362AA7192B :100240002429663086007029271A0B296D30860014 :10025000DB29283094002320713031203620A5007E :1002600025081F39A7002718382906308600452A97 :10027000A7183D295B308600452A271942294F30AF :100280008600452AA719472966308600452A271A7D :100290002E296D3086007029EA213620A500250818 :1002A0001F39A70027185729463086006B29A71841 :1002B0005C295B3086006B29271961294F30860045 :1002C0006B29A7196629663086006B29271A4C29E5 :1002D0006D3086006B290514851405158515702968 :1002E000851287100D208516871407108617182091 :1002F00007148613051287100D2005162A20622880 :100300003620A50025081F39A7002718892906309F :100310008600A7188D295B308600271991294F3058 :100320008600A719952966308600271A99296D300D :100330008600051085110520051485158510851189 :1003400005208514851585100511052085140515D2 :10035000051005110520051405150800802136201B :10036000A50025081F39A7002718AE2906308600EA :100370000514851405158515702980213620A500E2 :1003800025081F39A700A718BD295B308600051472 :10039000851405158515702980213620A5002508AE :1003A0001F39A7002719CC294F3086000514851462 :1003B00005158515702980213620A50025081F39CF :1003C000A700A719DB2966308600051485140515DA :1003D000851570293620A50025081F39A700271884 :1003E000F32906308600A718F7295B308600271905 :1003F000FB294F308600A719FF2966308600271A8F :10040000032A6D3086008510851105208514851519 :100410000510851105200514851505100511052009 :10042000051405158510051105208514051508000E :10043000EA213620A50025081F39A700A718182A89 15


F:\MIS PROYECTOS\ASCENSOR\ascensor.asm :100440005B30860005148514051585157029EA2191 :100450003620A50025081F39A7002719272A4F3065 :10046000860005148514051585157029EA213620A6 :10047000A50025081F39A700A719362A663086006F :1004800005148514051585157029EA213620A50067 :1004900025081F39A700271A452A6D308600051444 :0804A00085140515851570296E :00000001FF ;************************************************************************************************

16


Turn static files into dynamic content formats.

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