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