el microcontrolador 8x51-2 problemas - portal del Área de

112
UNIVERSIDAD DE OVIEDO D.I.E.E.C.S Area de Ingeniería de Sistemas y Automática EL MICROCONTROLADOR 8X51 / 2 PROBLEMAS JORGE ARGÜELLES GARCÍA JORGE ALONSO GONZÁLEZ Gijón. Octubre de 1999

Upload: others

Post on 02-Jul-2022

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: El microcontrolador 8X51-2 Problemas - Portal del Área de

UNIVERSIDAD DE OVIEDO

D.I.E.E.C.S

Area de Ingeniería de Sistemas y Automática

EL MICROCONTROLADOR 8X51 / 2

PROBLEMAS

JORGE ARGÜELLES GARCÍA JORGE ALONSO GONZÁLEZ Gijón. Octubre de 1999

Page 2: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

2 J. Argüelles / J. Alonso

AUTOMATISMOS

INDICE 1. Instrucciones aritméticas, de tranferencia de datos y de salto................................4

1.1 SUMA1 1.2 SUMA2 1.3 SUMA2B 1.4 MAYOR 1.5 COMPARA1

1.6 RELLENA1 1.7 RELLENA2 1.8 SUMTABLA 1.9 HEX-BCD 1.10 ECUACION

1.11 RESTA 1.12 ORDENA 1.13 SUMABCD

2. Instrucciones lógicas y booleanas ...........................................................................15

2.1 COMPARA2 2.2 MASCARA

2.3 CUENTA0 2.4 CONSECUT

2.5 COMPLEME

3. Tratamiento de tablas de datos ................................................................................19

3.1 PARIMPAR 3.2 COPIAPAG

3.3 BUSCAMAY 3.4 NUMPAR

4. Tratamiento de subrutinas ........................................................................................23

4.1 ASCIIDEC 4.2 CONHEXAS

5. Temporizadores y contadores ..................................................................................27 5.1 SEÑALCUA 5.1B SEÑAL1HZ

5.2 BARCO 5.3 TRENIMP

5.4 MOTORES 5.5 COMPARA

6. Interrupciones............................................................................................................35

6.1 DESPLAZA 6.2 PRIORIDA 7. Control de procesos ..................................................................................................41

7.1 TALADRO 7.2 CEPILLAD 7.3 TOLVA 7.4 PORTON 7.5 GARAJE 7.6 EMPAQUET 7.7 CUENTACO

7.8 APARCAM 7.9 PUERTA 7.10 VAGONETA 7.11 AUTOPISTA 7.12 GRUA 7.13 TREN 7.14 IMPRESOR

7.15 ESCALMEC 7.16 MUSEO 7.17 RELOJ 7.18 BATERIA1 7.19 SUBASTA

8. Comunicaciones serie.............................................................................................101

8.1 RECEP_M0 8.2 TRANS_M0 8.3 MULTIPRO

9. Problemas propuestos ............................................................................................105 9.1 SEMAFORO 9.2 CRONO 9.3 LAMPARAS 9.4 GARAJE2

9.5 CALEFAC 9.6 BOMBAS

9.7 SEM2CARR 9.8 MONTACARGA

Page 3: El microcontrolador 8X51-2 Problemas - Portal del Área de

PROLOGO Con este libro de problemas iniciado en 1.994, hemos querido que nuestros alumnos se adentren en la programación de los microcontroladores 8x51/2 de una forma sencilla y progresivamente vayan dominando todos los aspectos del software y hardware de los mismos. Comenzamos con una serie de ejercicios elementales, cuyo objetivo es el conocimiento y diferenciación de los distintos tipos de direccionamientos. A continuación iremos resolviendo una serie de problemas, mediante los cuales, se irán viendo todo el conjunto de instrucciones del microcontrolador, teniendo al final, un bloque de enunciados útiles para poder comprobar el grado de comprensión y asimilación adquirido. Teniendo en cuenta, que muchos aspectos serán aclarados y ampliados en las clases teóricas de la asignatura, esperamos sinceramente que este trabajo les sirva de ayuda. Los autores. PD.: El documento está formateado para ser impreso a doble cara. Se deberán tener instaladas las fuentes que se adjuntan: Arial, Technical, Times New Roman y BrushScript BT para una correcta visualización e impresión

Page 4: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

4 J. Argüelles / J. Alonso

AUTOMATISMOS

1. INSTRUCCIONES ARITMÉTICAS, DE TRANSFERENCIA DE DATOS Y DE SALTO Ejemplo de los direccionamientos inmediato y directo.

� 1.1. Sumar el contenido de la posición de memoria 0033H con el valor 77H y depositar el resultado en la posmem 34H. .TITLE SUMA1.ASM .ORG 0000H ; esta directiva es optativa ya que por defecto ; el ensamblador deposita el código en 0000H MOV A,#77H ;cargamos el acumulador con el primer sumando ADD A,33H ;sumamos el acumulador con la posmem 33H y MOV 34H,A ;situamos el resultado en el acumulador .END ;llevamos el resultado a la posmem 34H Ejemplo de los direccionamientos por registro e indirecto � 1.2. Sumar el contenido del registro 0 del banco actual con el valor almacenado en la posmem 70H y almacenar el resultado en la posmem apuntada por el registro 1 (R1 deberá estar cargado con el valor 3AH). .TITLE SUMA2.ASM .ORG 0000H MOV A,R0 ;cargamos en el acumulador el valor de R0 ADD A,70H ;sumamos con el contenido de la posmem 70H MOV R1,#3AH ;cargamos R1 con 3AH MOV @R1,A ;resultado a la posmem indicada por R1 .END

Page 5: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

5

AUTOMATISMOS

J. Argüelles / J. Alonso

� 1.3. Sumar dos números de dos bytes, situados en las posmem 70H, 71H y 72H, 73H. Colocando el resultado a continuación. .TITLE SUMA2B.ASM .ORG 0000 RESBAJO: .EQU 74H ;la parte baja del resultado la llevamos RESMEDIO: .EQU 75H ;a la posmem 74H RESALTO: .EQU 76H MOV RESALTO,#00H ;inicializamos la parte alta MOV A,70H ADD A,72H ;sumamos los bytes bajos de cada número MOV RESBAJO,A ;cargamos parte baja MOV A,71H ADDC A,73H ;sumamos los bytes altos de los núm teniendo ;en cuenta el acarreo de la suma de los bajos MOV RESMEDIO,A ;cargamos parte media JNC FIN ;si el carry es cero salta INC RESALTO ;el acarreo nos incrementa el resultado alto FIN: NOP ;si no hay acarreo no hace nada .END � 1.4. De las posmem 50 y 51 coger la de mayor contenido y depositarlo en el acumulador. .TITLE MAYOR.ASM .ORG 0000H MOV A,50H CLR C SUBB A,51H ;restamos (50H) - (51H) JNC POSITIVO ;si C=0 -> (50H) >= (51H) MOV A,51H JMP FIN POSITIVO: MOV A,50H FIN: NOP .END

Page 6: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

6 J. Argüelles / J. Alonso

AUTOMATISMOS

SUMA2B.ASM

InicializamosRESALTO

SumamosBytes bajos

AlmacenamosRESBAJO

SumamosBytes altos y C

AlmacenamosRESMEDIO

C = 0

INC RESALTO

No

Si

END

MAYOR.ASM

RESTO(50H) - (51H)

C = 0

A = (51H)

No

END

A = (50H)

Si

Page 7: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

7

AUTOMATISMOS

J. Argüelles / J. Alonso

� 1.5. Realizar la suma o resta de dos variables DATO1 (78H) y DATO2 (79H); si la posmem CHEQUEO (77H) es cero, suma el contenido de las posmem, si el contenido es distinto de cero, las resta. En cualquier caso, el resultado de la operación se deposita a partir de la posmem 7AH. .TITLE COMPARA1.ASM .ORG 0000H DATO1: .EQU 78H DATO2: .EQU 79H CHEQUEO: .EQU 77H RESBAJO: .EQU 7AH RESALTO: .EQU 7BH MOV RESALTO,#00 MOV A,CHEQUEO JZ SUMA MOV A,DATO1 CLR C SUBB A,DATO2 JMP SALVARES SUMA: MOV A,DATO1 ADD A,DATO2 JNC SALVARES MOV RESALTO,#1 SALVARES: MOV RESBAJO,A .END � 1.6. La posmem 77H puede contener números comprendidos entre 1 y 9, teniendo en cuenta esta característica, poner las posiciones de memoria comprendidas entre 61H y 69H a FFH, según esta relación: Si VALOR=1 cargar con FFH las posmem 61H Si VALOR=2 cargar con FFH las posmem 61H y 62H Si VALOR=3 cargar con FFH las posmem 61H, 62H y 63H . . . . . . . . . . . . . . . . . . . . . . . . . . . Si VALOR=9 cargar con FFH las posmem de 61H a 69H .TITLE RELLENA1.ASM .ORG 0000H VALOR: .EQU 77H MOV R0,#61H ;posición inicial a cargar con FFH MOV R1,VALOR ;posmem a comprobar SALTA: MOV @R0,#0FFH ;cargamos la posmem indicada INC R0 ;siguiente posmem a cargar DJNZ R1,SALTA ;decrementamos, y si no es cero seguimos el .END ; proceso

Page 8: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

8 J. Argüelles / J. Alonso

AUTOMATISMOS

RELLENA1.ASM

R0=61HR1= Valor

@R0=FFHINC R0

DEC R1R1<>0

END

No

Si

Si

COMPARA1.ASM

InicializamosRESALTO

CHEQUEO=0

SumamosDATO1+DATO2

RestamosDATO1-DATO2

No

Si

C = 0

RESALTO=1

No

RESBAJO=A

END

Page 9: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

9

AUTOMATISMOS

J. Argüelles / J. Alonso

� 1.7. Repetir el ejercicio anterior si ahora la posmem 77H puede tomar valores de 0 a 9. .TITLE RELLENA2.ASM .ORG 0000H VALOR: .EQU 77H MOV R0,#61H ;posición inicial a cargar con FFH MOV A,VALOR ;posmem a comprobar JZ FIN ;si es cero acaba el proceso SALTA: MOV @R0,#0FFH ;cargamos la posmem indicada INC R0 ;siguiente posmem a cargar DEC A JNZ SALTA ;si a no es cero seguimos el proceso FIN: NOP .END � 1.8. Sumar una tabla de 30 bytes situados a partir de la posmem 33. Depositar el resultado a partir de la posmem 75. .TITLE SUMTABLA.ASM .ORG 0000H RESBAJO: .EQU 75H RESALTO: .EQU 76H MOV RESALTO,#00H ;inicializamos el resultado alto MOV R0,#33H ;cargamos la primera posmem MOV R1,#29 ;número de veces que realizamos la suma MOV A,@R0 ;cargamos la primera posmem SUMA: INC R0 ;señala la siguiente posmem ADD A,@R0 JNC NOCARRY ;salta si C=0 INC RESALTO NOCARRY: DJNZ R1,SUMA ;sigue hasta que el registro R1 sea cero. MOV RESBAJO,A .END

Page 10: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

10 J. Argüelles / J. Alonso

AUTOMATISMOS

SUMTABLA.ASM

RESALTO=00R0 =33HR1 =29

A = @R0

INC R0Sumo A+@R0

C = 0

INC RESALTO

No

Si

DEC R1R1 <> 0

Si

No

RESBAJO = A

END

RELLENA2.ASM

R0=61HA=Valor

A=0

@R0=FFHINC R0DEC A

A <> 0

END

Si

Si

No

Page 11: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

11

AUTOMATISMOS

J. Argüelles / J. Alonso

� 1.9. Convertir un número almacenado en la posición de memoria 00H a formato BCD. El número tendrá un valor máximo de 99. .TITLE HEX-BCD.ASM .ORG 0000H DATO: .EQU 00H UNIDAD: .EQU 02H DECENA: .EQU 01H RESUL: .EQU 03H MOV A,DATO MOV DECENA,#00 ;inicializamos las decenas SALTO: MOV UNIDAD,A CLR C SUBB A,#10 ;RESTA DECENAS JC MENOR INC DECENA ;incrementa decenas JMP SALTO MENOR: MOV A,DECENA ;sitúa decenas SWAP A ADD A,UNIDAD MOV RESUL,A .END 1.10. Resolver la ecuación X = 12A + B + 15 - C. Donde el dato A está en la posmem 50, el B en 51, y el C en 52. El resultado se almacenará en 53. .TITLE ECUACION.ASM .ORG 0000H DATOA: .EQU 50H DATOB: .EQU 51H DATOC: .EQU 52H RESBAJO: .EQU 53H RESALTO: .EQU 54H MOV RESALTO,#00H ;inicializamos el resultado alto MOV B,#12 ;cargamos el registro B MOV A,DATOA MUL AB MOV RESALTO,B ;cargamos la parte alta SUMAB: ADD A,DATOB ;si al sumar la parte baja de la multiplicación JNC SUMA15 ;con el dato B el C=0 saltamos para sumar 15 INC RESALTO SUMA15: ADD A,#15 JNC RESTAC ;si la suma es de 1 byte restamos C INC RESALTO

Page 12: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

12 J. Argüelles / J. Alonso

AUTOMATISMOS

HEX-BCD.ASM

A = DATODECENA = 0

A = A - 10

C = 1

UNIDAD =AC = 0

INC DECENA

A = DECENAIntercam nibbleA = A+UNIDAD

No

Resultado = A

END

Si

ECUACION.ASM

RESALTO = 0B = 12

A = DATOA

Multiplicamos12 * DATOA

1

C = 0

INC RESALTO

RestamosA - DATOC

No

RESBAJO = A

RESALTO - 0RESALTO = A

END

Si

RESALTO = B

SumamosA + DATOB

C = 0

INC RESALTO

A + 15

No

Si

1

Page 13: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

13

AUTOMATISMOS

J. Argüelles / J. Alonso

CLR C ;inicializamos la toma RESTAC: SUBB A,DATOC MOV RESBAJO,A MOV A,RESALTO ;restamos 0 a la parte alta de las operaciones SUBB A,#00 ;anteriores para tener en cuenta el posible ;acarreo de la resta de los bytes bajos MOV RESALTO,A ;si C = 0 el número resultante es positivo ;si es 1 será un número negativo expresado .END ;en complemento a dos 1.11. Restar las posmem 38H (minuendo) y 39H (sustraendo). Si el resultado es igual o mayor que cero, poner el resultado en la posmem 70H y si es menor, poner la suma de dichas posmem. .TITLE RESTA.ASM .ORG 0000H MOV A,38H CLR C SUBB A,39H JC NEGATIVO ;resultado 38H<39H MOV 70H,A ;resultado >=0 JMP FIN NEGATIVO: MOV A,38H ADD A,39H JNC SIGUE MOV 71H,#01H SIGUE: MOV 70H,A FIN: NOP .END 1.12. Cargar las posmem 20H a 29H con los diez primeros números (del 1 al 10) ordenados de menor a mayor. .TITLE ORDENA.ASM .ORG 0000H MOV R0,#29H ;última posmem, en ella debemos situar el núm 10 MOV R1,#0AH ;primer número a situar PONERN: MOV A,R1 ;cargamos la pomem con el núm que tenemos MOV @R0,A ;en el registro 1 DEC R0 ;siguiente posmem DJNZ R1,PONERN ;seguimos si no llegamos al cero .END

Page 14: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

14 J. Argüelles / J. Alonso

AUTOMATISMOS

No

Si

RESTA.ASM

(38H) - (39H)

C = 1

(38H) + (39H)

(70H) = A

END

Si

ORDENA.ASM

R0 = 29HR1 = 0AH

A =R1@R0 = A

DEC R0 y R1

R1<>0

END

No

� 1.13. Realizar una suma de dos números en formato BCD empaquetado. El primer sumando se encuentra en la posmem 60H (byte bajo) y 61H (byte alto), y el segundo en las posmem 62H (byte bajo) y 63H (byte alto). El resultado se sitúa en la posmem 64H (byte bajo), 65H (byte alto) y 66H (posible acarreo). .TITLE SUMABCD.ASM .ORG 0000H MOV 66H,#00 ;inicializamos el RESALTO MOV A,60H ;sumamos partes bajas ADD A,62H DA A ;correjimos posibles errores MOV 64H,A ;almacenamos parte baja MOV A,61H ;sumamos partes altas ADDC A,63H DA A ;correjimos posibles errores MOV 65H,A ;almacenamos parte alta JNC FIN ;tenemos en cuenta el posible acarreo MOV 66H,#01 FIN: NOP .END

Page 15: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

15

AUTOMATISMOS

J. Argüelles / J. Alonso

2. INSTRUCCIONES LÓGICAS Y BOOLEANAS

� 2.1. Leer el valor actual de una variable almacenada en la posmem 44H y compararlo con el valor de consigna almacenado en la posmem 70H

• Si valor actual es mayor que el de consigna poner a 0 el bit 0 del acumulador y a 1 el bit 7.

• Si es menor poner a 1 el bit 0 y a 0 el bit 7

• Si son iguales poner el bit 0 y el bit 7 a 0 CONDICIÓN ACCIÓN V. Actual> V. Consigna A.0=0 A.7=1 V. Actual< V. Consigna A.0=1 A.7=0 V. Actual= V. Consigna A.0=0 A.7=0 .TITLE COMPARA2.ASM .ORG 0000H VACTUAL: .EQU 44H VCONSIG: .EQU 70H MOV A,VACTUAL CLR C SUBB A,VCONSIG ;realizamos la comparación mediante una resta JNC MAYIGUAL ;si C=0 valor actual >=valor de consigna SETB A.0 ;direccionable bit a bit CLR A.7 JMP FIN MAYIGUAL: JZ IGUALES ;si el A=0 los valores son iguales CLR A.0 SETB A.7 JMP FIN IGUALES: CLR A.0 CLR A.7 FIN: NOP .END

Page 16: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

16 J. Argüelles / J. Alonso

AUTOMATISMOS

COMPARA2.ASM

VACTUAL -VCONSIGNA

C = 0

A.0 =1A.7 =0

No

A = 0

Si

A.0 = 0A.7 =1

Si

No

A.0 =0A.7 =0

END

� 2.2. Situar en 1 los bits 0,1,3 de la posmem 37H, en 0 los bits 2,4 ; el resto no se modifican. .TITLE MASCARA.ASM .ORG 0000H MASCARA1: .EQU 00001011B MASCARA0: .EQU 11101011B ORL 37H,#MASCARA1 ;situamos en 1 los bits 0,1 y 3 ANL 37H,#MASCARA0 ;ponemos a 0 los bits 2 y 4 sin modificar el resto .END

Page 17: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

17

AUTOMATISMOS

J. Argüelles / J. Alonso

� 2.3. Hacer un programa para contabilizar el número de ceros contenidos en los bits B6 de las memorias 40 hasta 47. El resultado lo almacenaremos en la memoria 48. .TITLE CUENTA0.ASM .ORG 0000H RESUL: .EQU 48H MOV R0,#08H ;número de veces MOV R1,#3FH ;posmem anterior MOV RESUL,#00H ;inicializamos el resultado CONTAR: INC R1 ;primera posmem a comprobar MOV A,@R1 ANL A,#01000000B ; estas dos instrucciones se pueden JNZ NOCERO ; sustituir por JB A.6, NOCERO INC RESUL NOCERO: DJNZ R0,CONTAR .END 2.4. Cargar la posmem 22H con 34H si las posmem 35H y 36H contienen números consecutivos, y si no cumple esta condición ponerla a "cero". .TITLE CONSECUT.ASM .ORG 0000H MOV A,35H CLR C ;inicializamos la toma SUBB A,36H JNC POSITIVO ;35H>36H CPL A ;si la resta es negativa la complemento INC A POSITIVO: CJNE A,#01H,NOCONS ;si son consecutivos la resta es 1 MOV 22H,#34H JMP FIN NOCONS: MOV 22H,#00H FIN: NOP .END

Page 18: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

18 J. Argüelles / J. Alonso

AUTOMATISMOS

CUENTA0.ASM

R0 = 8R1 = 3F

RESUL = 00

INC R1A = @R1

A.6 <> 0

No

INC RESUL

DEC R0R0 <> 0

END

No

Si

Si

CONSECT.ASM

(35H) - (36H)

C = 0

CPL AINC A

No

A <> 01

(22H) = 34H (22H) =00

END

Si

Si

No

2.5. Complementar a 1 y a 2 el dato contenido en la posmem 60H y depositar el resultado en las posmem 61H y 62H, respectivamente. .TITLE COMPLEME.ASM .ORG 0000H MOV A,60H CPL A ;complemento a 1 MOV 61H,A INC A ;complemento a 1 + 1 = complemento2 MOV 62H,A .END

Page 19: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

19

AUTOMATISMOS

J. Argüelles / J. Alonso

3. TRATAMIENTO DE TABLAS DE DATOS 3.1. Se tiene un grupo de datos situados en las posmem 50H, 52H, 54H, 56H y 58H. Realizar un programa que almacene en las posmem posteriores a las dadas 01H si el dato anterior es impar y 00H si es par. Por ejemplo, si el dato situado en la posmem 50H es 85H (impar) en la posmem 51H, deberá contener 01H. .TITLE PARIMPAR.ASM .ORG 0000H MOV R0,#50H ;primera posmem a comprobar MOV R1,#05H ;número de posmem a comprobar COMPROB: MOV A,@R0 INC R0 ;indica posmem a situar el resultado JB A.0,IMPAR ;si A.0 = 1 es impar MOV @R0,#00H JMP SIGUIENT IMPAR: MOV @R0,#01H SIGUIENT: INC R0 ;siguiente posmem a comprobar DJNZ R1,COMPROB .END � 3.2. Se quiere copiar un bloque de datos situado en las posmem 0315H a 0380H (página 3) de la RAM externa, a la página 5. El bloque de datos se copiará en las posmem 0515H a 0580H. .TITLE COPIAPAG.ASM .ORG 0000H MOV R0,#15H ;byte bajo de las posmem a copiar COPIA: MOV DPL,R0 ;cargamos la 1ª posmem en el puntero de datos MOV DPH,#03H ;cargamos página fuente MOVX A,@DPTR ;cargamos en A el contenido de la posmem ;externa indicada por el puntero MOV DPH,#05H ;indicamos página en la que copiamos MOVX @DPTR,A INC R0 ;siguiente posmem CJNE R0,#81H,COPIA ;si no llegamos a la última posmem .END ;seguimos copiando

Page 20: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

20 J. Argüelles / J. Alonso

AUTOMATISMOS

PARIMPAR.ASM

R0=1ª posmemR1=nº de mem

A = @R0INC R0

A.0 = 1

@R0 = 00

@R0 = 01No

Si

INC R0DEC R1

R1 = 0

Si

END

No

COPIAPAG.ASM

R0 = Byte bajo a copiar

DPL = R0DPH = 03

A = @DPTR

DPH = 05@DPTR = A

INC R0

R0<>81H

END

No

Si

� 3.3. Se tiene una tabla de datos, en la memoria de programas, de la posmem 1000H a 1010H. Escribir un programa para buscar el dato de mayor valor de la tabla y situarlo en la posmem 60H de la memoria RAM interna. .TITLE BUSCAMAY.ASM .ORG 1000H .BYTE 15,16,0A3H,2BH,17,9FH,37,0ABH,23,56,78,90,87,34,56,89,0ACH .ORG 0000H

Page 21: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

21

AUTOMATISMOS

J. Argüelles / J. Alonso

MAYOR: .EQU 60H ;posmem del número mayor MOV DPTR,#1000H CLR A MOVC A,@A+DPTR ;leo el contenido de la tabla MOV MAYOR,A MOV R1,#01 BUSCA: MOV A,R1 MOVC A,@A+DPTR CLR C SUBB A,MAYOR ;comparo el A con el valor hasta ahora mayor JC SEGUIR ;si C=1 A<MAYOR el nº mayor está en la posmem JZ SEGUIR ;el número obtenido es igual al mayor MOV A,R1 MOVC A,@A+DPTR ;recupero el número que es el mayor MOV MAYOR,A SEGUIR: INC R1 ;siguiente posmem a comprobar CJNE R1,#11H,BUSCA ;seguimos buscando si no llegamos a la .END ;posmem final 3.4. En la tabla del ejercicio anterior, determinar el número de datos pares e impares. Colocar el número de datos pares en la posmem 50H y el de los impares en la 51H. .TITLE NUMPAR.ASM .ORG 1000H .BYTE 15,16,0A3H,2BH,17,9FH,37,0ABH,23,56,78,90,87,34,56,89,0ACH .ORG 0000H PAR: .EQU 50H ;posmem para no de pares IMPAR: .EQU 51H ;posmem para no de impares MOV PAR,#00H ;inicializo las posmem que van a llevar la cuenta MOV IMPAR,#00H MOV R1,#00H ;posmem inicial MOV DPTR,#1000H BUSCA: MOV A,R1 MOVC A,@A+DPTR JB A.0,ESIMPAR ;si A.0=1 el núm que hay en al acum es impar INC PAR JMP SEGUIR ESIMPAR: INC IMPAR SEGUIR: INC R1 CJNE R1,#11H,BUSCA .END

Page 22: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

22 J. Argüelles / J. Alonso

AUTOMATISMOS

BUSCAMAY.ASM

DPTR=1000HMAYOR=1er

valor

R1 = 01

A = R1A = @A+DPTR

RestamosA - MAYOR

C = 1

A = 0

No

Si

MAYOR=nuevoval (R1+DPTR)

No

INC R1

R1 <> 11

END

No

Si

Si

NUMPAR.ASM

Inicializamosnº de pares

nº de impares

DPTR = 1000HR1 = 00H

A = R1A = @A+DPTR

A.0 = 1

INC PAR

NoINC IMPAR

Si

INC R1

R1 <> 11

END

No

Si

Page 23: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

23

AUTOMATISMOS

J. Argüelles / J. Alonso

4. TRATAMIENTO DE SUBRUTINAS Empleo de una subrutina proporcionándole nosotros en el programa principal, la dirección de memoria donde está almacenada mediante una etiqueta. � 4.1. Convertir 10 números codificados en ASCII a decimal. Los números están situados en las posmem comprendidas entre la 60H y la 69H. Colocar los resultados en las posmem 70H a 79H. Nota.- Utilizar una subrutina para la conversión del número ASCII en decimal. ;--------------------------------------- ; PROGRAMA PRINCIPAL ;--------------------------------------- .TITLE ASCIIDEC.ASM .ORG 0000H MOV R0,#69H MOV R1,#79H SEGUIR: MOV A,@R0 CALL ASCIIDEC MOV @R1,A DEC R1 DEC R0 CJNE R0,#5FH,SEGUIR JMP FIN ;------------------------------------------------ ; RUTINA DE CONVERSION ;------------------------------------------------ .ORG 0300H ASCIIDEC: CLR C SUBB A,#48 ;código ASCII del no 0 = 48 RET FIN: NOP .END

Page 24: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

24 J. Argüelles / J. Alonso

AUTOMATISMOS

ASCIIDEC

RestamosA - 48

RET

ASCIIDEC.ASM

R0 = 69HR1 = 79H

A = @R0

@R1 = A

DEC R1DEC R0

R0<> 5FH

END

No

Si

ASCIIDEC

Dec = 0 1 2 3 4 5 6 7 8 9ASCII = 48 49 50 51 52 53 54 55 56 57

Page 25: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

25

AUTOMATISMOS

J. Argüelles / J. Alonso

Ejemplo de enlazado de dos programas para formar solamente uno. Empleo de una subrutina en el programa principal, usando una etiqueta definida como externa para proporcionar la dirección de memoria donde está almacenada. � 4.2. Convertir 10 números codificados en HEXADECIMAL (0, 1, ..,9 , A , .. ,F ) a caracteres ASCII. Los números están situados en las posmem comprendidas entre la 60H y la 69H. Colocar los resultados en las posmem 70H a 79H. Nota.- Crear un fichero para el programa principal y otro para la subrutina. ;--------------------------------------- ; PROGRAMA PRINCIPAL ;--------------------------------------- .TITLE CONHEXAS.ASM .ORG 0000H .EXTERN HEXASCII MOV R0,#69H MOV R1,#79H SEGUIR: MOV A,@R0 CALL HEXASCII MOV @R1,A DEC R1 DEC R0 CJNE R0,#5FH,SEGUIR .END ;------------------------------------------ ; RUTINA DE CONVERSION ;------------------------------------------ .TITLE HEXASCII.ASM .ORG 0300H .PUBLIC HEXASCII HEXASCII: PUSH A ;ejemplo de utilización de la pila CLR C SUBB A,#0AH JNC MAYOR POP A ;equivale a MOV A,@R0 ADD A,#48 ;código ASCII del 0=48 RET MAYOR: POP A ADD A,#55 ;código ASCII de la letra A=65 RET .END

Page 26: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

26 J. Argüelles / J. Alonso

AUTOMATISMOS

CONHEXAS.ASM

R0 = 69HR1 = 79H

A = @R0

@R1 = A

DEC R1DEC R0

R0<> 5FH

END

No

Si

HEXASCII

HEX = 0 1 2 3 4 5 6 7 8 9 A B C D E FASCII = 48 49 50 51 52 53 54 55 56 57 65 66 67 68 69 70

HEXASCII

RestamosA - 0AH

C = 0

A = @R0Sumamos

A + 48

A = @R0Sumamos

A + 55

END

No

Si

Page 27: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

27

AUTOMATISMOS

J. Argüelles / J. Alonso

5. TEMPORIZADORES Y CONTADORES

� 5.1. Utilizando el temporizador 0 obtener una señal cuadrada de frecuencia 10 Hz por el pin P2.0. Iniciar la secuencia con un pulsador NA de arranque P0.1 y con otro NA la parada P0.0. Realizar el mismo ejercicio pero para una frecuencia de 1 Hz. .TITLE SEÑALCUA.ASM .ORG 0000H .EXTERN TEM50 INICIO: CLR P2.0 ;inicializamos la salida JNB P0.1,$ BUCLE: CPL P2.0 ; f = 10 HZ => T/2 = 0,05 s CALL TEM50 JNB P0.0,BUCLE JMP INICIO .END .TITLE TEM50.ASM .ORG 0300H ;temporiza 50.000 microsegundos .PUBLIC TEM50 TEM50: MOV TMOD,#01H ; T0 Modo 1 SOFT MOV TH0,#>15536 ; 65536-50000 = 15536 MOV TL0,#<15536 MOV TCON,#10H ;arranca el temporizador activando TR0 JNB TF0,$ MOV TCON,#00H ;para el temporizador y borra TF0 RET .END .TITLE SEÑAL1HZ.ASM .ORG 0000H .EXTERN TEM50 INICIO: CLR P2.0 ;inicializamos la salida JNB P0.1,$ BUCLE: CPL P2.0 ; f = 1 HZ => T/2 = 0,5 s MOV R0,#10 RUTINA: CALL TEM50 DJNZ R0,RUTINA JNB P0.0,BUCLE JMP INICIO .END

Page 28: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

28 J. Argüelles / J. Alonso

AUTOMATISMOS

SEÑALCUA.ASM

Desactivamosla Salida

Arranque

Complementola Salida

Paro

Si

No

No

Si

Temporizo0,05 s

TEM50.ASM

TMOD = 01H

TH0 = 3CHTL0 = 0B0H

Arranco TEMP

TF = 0

Paro TEMP

No

RET

Si

No R0 = 0

SEÑAL1HZ.ASM

Desactivamosla Salida

Arranque

Complementola Salida

Paro

Si

No

No

Si

Temporizo0,05 s

R0 = 10

DEC R0

Si

Page 29: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

29

AUTOMATISMOS

J. Argüelles / J. Alonso

� 5.2. Imaginar que se tiene un barco de paseo que sólo admite a 30 personas. Diseñar con el microcontrolador un sistema que detecte el paso de la persona número 20 señalando por el pin P2.0 la alarma de prevenido y cuando pase la persona número 30 indique completo por el pin P2.1. El sistema arrancará mediante el pulsador P1.0 En cualquier momento que se accione un pulsador exterior P1.1, deberá aparecer en el puerto 0 el número de personas que en ese momento están a bordo.

UDCM

Inicio

Nº Personas

P1.0

P1.1

P0.7 P0.6 P0.5 P0.4

P0.0 .. P0.3

LPrevenidoP2.0

µC

LCompletoP2.1

.TITLE BARCO.ASM .ORG 0000H LPREVENI: .REG P2.0 LCOMPLET: .REG P2.1 PMARCHA: .REG P1.0 PNUMPER: .REG P1.1 ; Fotocélula -> a la patilla T0 del contador MOV TMOD,#06H ;MODO 2, contador con autorrecarga, control sof. MOV TL0,#226 ;256-30 => 226 MOV TH0,#226 ARRANCA: JNB PMARCHA,$ MOV TCON,#10H ;activo TR0, borramos TF0 CLR LPREVENI CLR LCOMPLET SALTO1: JNB PNUMPER,CUENTA20 CALL VEONUMB CUENTA20: MOV A,#246 ;256-10 => 246 CJNE A,TL0,SALTO1 SETB LPREVENI ;prevenido

Page 30: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

30 J. Argüelles / J. Alonso

AUTOMATISMOS

SALTO2: JNB PNUMPER,CUENTA30 CALL VEONUMB CUENTA30: JNB TF0,SALTO2 SETB LCOMPLET ;completo MOV TCON,#00H ;desactivamos la cuenta y borramos flag JMP ARRANCA ;------------------------------------ ;SUBRUTINA VEONUMB ;----------------------------------- .ORG 0300H VEONUMB: CLR C MOV A,TL0 SUBB A,#226 MOV P0,A ;la información se transmite en binario RET .END

Page 31: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

31

AUTOMATISMOS

J. Argüelles / J. Alonso

BARCO.ASM

T0 autorecargaT0 cuenta 30Apagar luces

arranca

activo TR0

Si

No

2

apago luces dePREVENIDOCOMPLETO

ver nºpersonas

VEONUMB

Si

No

entraron 20personas

1

Si

No

No

VEONUMB

TL0 - 226

P1 = A

RET

1

enciendo luzPREVENIDO

ver nºpersonas

VEONUMB

Si

entraron 30personas

enciendoLCOMPLETO

desactivocontador

2

No

Si

Page 32: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

32 J. Argüelles / J. Alonso

AUTOMATISMOS

� 5.3. Obtener por el pin 2.0 una señal que tenga el siguiente periodo:

40 40 80 40T

120 40 40

.TITLE TRENIMP.ASM .ORG 0000H INICIO: SETB P2.0 CALL T0M1S40 ;2 microsegundos CLR P2.0 ;1 microsegundo CALL T0M1S40 SETB P2.0 CALL T0M1S80 CLR P2.0 CALL T0M1S40 SETB P2.0 CALL T0M1S120 CLR P2.0 CALL T0M1S40B JMP INICIO ;2 microsegundos T0M1S40: MOV TMOD,#01H MOV TL0,#<65512 ;65536-40+(2+13+1)=65512 MOV TH0,#>65512 SETB TR0 JNB TF0,$ MOV TCON,#00H RET T0M1S80: MOV TMOD,#01H MOV TL0,#<65472 ;65536-80+(2+13+1)=65472 MOV TH0,#>65472 SETB TR0 JNB TF0,$ MOV TCON,#00H RET T0M1S120: MOV TMOD,#01H MOV TL0,#<65432 ;65536-120+(2+13+1)=65432 MOV TH0,#>65432 SETB TR0 JNB TF0,$ MOV TCON,#00H RET T0M1S40B: MOV TMOD,#01H

Page 33: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

33

AUTOMATISMOS

J. Argüelles / J. Alonso

MOV TL0,#<65514 ;65536-40+(2+13+1+2)=65514 MOV TH0,#>65514 SETB TR0 JNB TF0,$ MOV TCON,#00H RET .END 5.4. Al accionar el pulsador marcha P0.0 debe ponerse en intermitencia la señal del pin 2.0 del microcontrolador durante 10 segundos como aviso de la puesta en marcha de un complejo de máquinas; al final de este intervalo de tiempo el pin 2.0 se desactivará y se activará el pin 2.1 que las pone en marcha. Un segundo pulsador PARO P0.1 desactiva, en cualquier instante, el complejo de máquinas. .TITLE MOTORES.ASM .ORG 0000H PMARCHA: .REG P0.0 PPARO: .REG P0.1 LAVISO: .REG P2.0 MOTORES: .REG P2.1 .EXTERN TEM50 INICIO: MOV P2,#00 JNB PMARCHA,$ MOV R0,#20 COMPLEM: CPL LAVISO MOV R1,#10 TEMPO: CALL TEM50 JB PPARO,INICIO DJNZ R1,TEMPO DJNZ R0,COMPLEM CLR LAVISO SETB MOTORES JNB PPARO,$ JMP INICIO .END .TITLE TEM50.ASM .ORG 0300H ;temporiza 50.000 microsegundos .PUBLIC TEM50 TEM50: MOV TMOD,#01H ; T0 Modo 1 SOFT MOV TH0,#>15536 MOV TL0,#<15536 MOV TCON,#10H ;arranca el temporizador y borra TF0 JNB TF0,$ MOV TCON,#00H ;para el temporizador y borra TF0 RET .END

Page 34: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

34 J. Argüelles / J. Alonso

AUTOMATISMOS

MOTORES.ASM

Desactivamoslas salidas

en marcha

R0 =20

complementoLAVISO

R1 = 10

TEM50

paro

R1 <> 0

1

R0 <> 0

apagoLAVISO

conectoMOTORES

paro

2

Si

No

Si

3

No

Si

3

DEC R1

1NoSi

DEC R0

Si

No

No

2

Page 35: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

35

AUTOMATISMOS

J. Argüelles / J. Alonso

5.5. Diseñar un comparador de 8 bits siendo uno de los bytes el A que accederá al microcontrolador por el puerto 0, y el otro, el byte B, por el puerto 1. Si A>B por la patilla P2.0 se emitirá una señal de frecuencia 1 Hz en la que la duración del pulso en 1 sea 1/5 del ciclo. Si A=B por la patilla P2.1 se obtendrá una señal a nivel alto permanentemente. Si A<B se activarán las salidas P2.0 y P2.1 de manera alternativa con frecuencia 0,5 Hz. .TITLE COMPARA.ASM .ORG 0000H .EXTERN TEM50 INICIO: MOV A,P0 CLR C SUBB A,P1 ;P0-P1 JC MENOR JNZ MAYOR IGUAL: SETB P2.1 CLR P2.0 JMP INICIO MENOR: SETB P2.0 CLR P2.1 MOV R1,#02 TEMPO1: MOV R0,#20 TEMPO: CALL TEM50 DJNZ R0,TEMPO CPL P2.0 CPL P2.1 DJNZ R1,TEMPO1 JMP INICIO MAYOR: CLR P2.1 SETB P2.0 MOV R0,#04 TEMPO2: CALL TEM50 DJNZ R0,TEMPO2 CLR P2.0 MOV R0,#16 TEMPO3: CALL TEM50 DJNZ R0,TEMPO3 JMP INICIO .END

Page 36: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

36 J. Argüelles / J. Alonso

AUTOMATISMOS

6. INTERRUPCIONES � 6.1. Realizar un programa para desplazar un bit de izquierda a derecha y de derecha a izquierda, que excitará 8 leds situados en el puerto 2. El sistema contará con una interrupción externa, que hará parpadear los leds 10 veces. .TITLE DESPLAZA.ASM .ORG 0000H ;vector reset JMP 0200H ;comienzo del programa .ORG 0003H ;vectorización de la rutina INT0 JMP INT0 ;comienzo de la rutina de interrupción .ORG 0200H MOV TCON,#01 ;se programa INT0 por flanco MOV IE,#81H ;habilita la interrupción INT0 MOV A,#00H SETB C ;se pone el carry a 1 IZQUIER: RLC A ;rotación de un bit a la izquierda MOV P2,A ;se escribe el el puerto P2 CALL RETARDO ;retardo en señalización JNB A.7,IZQUIER ;si no llegamos al tope izquierdo, seguimos DERECHA: RRC A ;rotación de un bit a la derecha MOV P2,A CALL RETARDO JNB A.0,DERECHA ;si no llegamos al tope derecho sigo JMP IZQUIER ;pasamos a movernos a la izquierda ;----------------------------------------- ; SUBRUTINA DE RETARDO ;----------------------------------------- RETARDO: MOV TMOD,#01H MOV R0,#10 ;retardamos 0,05 * 10 = 0,5 segundos CUENTA: MOV TH0,#>15536 MOV TL0,#<15536 MOV TCON,#11H ;activa TR0 , borra TF0 , INT0 activa por flanco JNB TF0,$ DJNZ R0,CUENTA MOV TCON,#01H ;para el temporizador y borra el flag TF0 RET ;---------------------------------------------------- ; SUBRUTINA DE ATENCIÓN A INT0 ;---------------------------------------------------- INT0: PUSH P2 ;guardo estado de la señalización PUSH TL0 PUSH TH0

Page 37: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

37

AUTOMATISMOS

J. Argüelles / J. Alonso

DESPLAZA.ASM

habilito INT0activo flanco

A = 00C = 1

RLC AP2 = A

RETARDO

A.7 = 0Si

RRC AP2 = A

RETARDO

A.0 = 0Si

NO

No

RETARDO

TMOD = 01

TH0 = 3CHTL0 = B0H

Activamos TR0Borramos TF0

TF0 = 0

DEC R0

R0 <> 0

RET

No

R0 =10

Si

No

Si

INT0

GuardamosP2, TL0, TH0,

TCON, R0

R1 = 10

P2 = FFH

RETARDO

P2 = 00

RETARDO

DEC R1

R1 <> 0

RecuperamosR0, TCON,

TH0, TL0, P2

RETI

No

Si

Borramos TR0

Page 38: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

38 J. Argüelles / J. Alonso

AUTOMATISMOS

PUSH TCON MOV A,R0 PUSH A MOV R1,#10 ;parpadeo 10 veces SALTO: MOV P2,#0FFH ;todos los bits encendidos CALL RETARDO ;retardo señalización MOV P2,#00H ;todos los bits a cero CALL RETARDO ;retardo la señalización DJNZ R1,SALTO POP A MOV R0,A POP TCON POP TH0 POP TL0 POP P2 RETI .END � 6.2. Realizar un programa para desplazar un bit de izquierda a derecha y de derecha a izquierda, que excitará 8 leds situados en el puerto 2. El sistema contará con dos interrupciones externas. INT0 hará parpadear 10 veces los leds. INT1, con prioridad sobre INT0, hará parpadear alternativamente los nibbles 8 veces. .TITLE PRIORIDA.ASM .ORG 0000H JMP 0200H .ORG 0003H ;vectorización de interrupción INT0 JMP INT0 ;comienzo de la rutina de INT0 .ORG 0013H ;vectorización de interrupción INT1 JMP INT1 ;comienzo de rutina de INT1 .ORG 0200H MOV TCON,#05H ; INT0 e INT1 activas por flanco MOV IP,#04H ; INT1 prioridad alta MOV IE,#85H ; habilita INT0 e INT1 MOV A,#00H SETB C IZQUIER: RLC A MOV P2,A CALL RETARDO JNB A.7,IZQUIER DERECHA: RRC A MOV P2,A CALL RETARDO JNB A.0,DERECHA JMP IZQUIER

Page 39: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

39

AUTOMATISMOS

J. Argüelles / J. Alonso

;----------------------------------------- ; SUBRUTINA DE RETARDO ;----------------------------------------- RETARDO: MOV TMOD,#01H MOV R0,#10 ; retardamos 0,05 * 10 = 0,5 segundos CUENTA: MOV TH0,#3CH MOV TL0,#0B0H CLR TF0 SETB TR0 ; TR0=1 JNB TF0,$ ; mira TF0 CLR TR0 ; TR0=0 DJNZ R0,CUENTA RET ;---------------------------------------------------- ; SUBRUTINA DE ATENCIÓN A INT0 ;---------------------------------------------------- INT0: PUSH P2 PUSH TL0 PUSH TH0 PUSH TCON MOV A,R0 PUSH A MOV R1,#10 SALTO: MOV P2,#0FFH CALL RETARDO MOV P2,#00H CALL RETARDO DJNZ R1,SALTO POP A MOV R0,A POP TCON POP TH0 POP TL0 POP P2 RETI ;---------------------------------------------------- ; SUBRUTINA DE ATENCIÓN A INT1 ;---------------------------------------------------- INT1: PUSH P2 ;guardo estado de la señal PUSH TL0 ;guardo estado del temporizador PUSH TH0 PUSH TCON MOV A,R0 PUSH A MOV R2,#08 BUCLE: MOV P2,#0FH ;4 bits bajos a uno CALL RETARDO ;retardo de señalización MOV P2,#0F0H ;4 bits altos a uno CALL RETARDO ;retardo de señalización DJNZ R2,BUCLE POP A

Page 40: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

40 J. Argüelles / J. Alonso

AUTOMATISMOS

MOV R0,A POP TCON ;recupero el estado de la temporización POP TH0 POP TL0 ;recupero estado del retardo POP P2 RETI .END

Page 41: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

41

AUTOMATISMOS

J. Argüelles / J. Alonso

PRIORIDA.ASM

INT0, INT1 act flancoINT1 prior 1

habilito INT0, INT1

A = 00C = 1

RLC AP2 = A

RETARDO

A.7 = 0

RRC AP2 = A

RETARDO

A.0 = 0

NO

No

Si

SI

SI

RETARDO

TMOD = 01

TH0 = 3CHTL0 = B0H

TF0 = 0

Activamos TR0

TF0 = 0

DEC R0

R0 <> 0

RET

No

R0 =10

Si

No

Si

Borramos TR0

INT0

Guardamos P2,TL0, TH0,TCON, R0

R1 = 10

P2 = FFH

RETARDO

P2 = 00

RETARDO

DEC R1

R1 <> 0

RecuperamosR0, TCON,

TH0, TL0, P2

RETI

No

INT1

GuardamosP2, TL0, TH0,

TCON, R0

R2 = 8

P2 = 0FH

RETARDO

P2 = F0H

RETARDO

DEC R2

R2 <> 0

RecuperamosR0, TCON,

TH0, TL0, P2

RETI

No

Si

Page 42: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

42 J. Argüelles / J. Alonso

AUTOMATISMOS

7. CONTROL DE PROCESOS � 7.1. Mediante un microcontrolador DS5000 se desea implementar un sistema para el control automático de una taladradora vertical. Dicha máquina deberá realizar la siguiente función: Mediante un pulsador PBAJA (P0.0) iniciamos el descenso de la herramienta la cual, al llegar a un fin de carrera FCI (P0.1), debe de interrumpir el descenso e iniciar la subida. Al llegar, en la subida, a un fin de carrera FCS (P0.2), la herramienta debe detenerse. El circuito deberá llevar un pulsador de paro PPARO (P0.3), mediante el cual pueda interrumpirse el descenso de la herramienta para que automáticamente se inicie la subida. Cuando la herramienta esté subiendo de ninguna manera deberá poder iniciarse el descenso, aunque se pulse PBAJA. El circuito llevará un control de emergencia, mediante el cual pueda interrumpirse el funcionamiento, hasta que se accione un pulsador PCONT (P0.4), en cuyo momento el sistema continuará el modo de trabajo que tenía en el instante de la interrupción Para comenzar el descenso se debe partir siempre de la posición superior. Una señal nos dará la orden de bajar P2.0, y otra la orden de subir P2.1. el circuito de control de emergencia lo trataremos como una interrupción externa. .TITLE TALADRO.ASM .ORG 0000H ;vector reset JMP 0200H .ORG 0003H ;vectorización de interrupción externa JMP INT0 ;comienzo de rutina de interrupción PBAJA: .REG P0.0 ;pulsador de bajada FCI: .REG P0.1 ;final de carrera inferior FCS: .REG P0.2 ;final de carrera superior PPARO: .REG P0.3 ;pulsador de paro PCONT: .REG P0.4 ;pulsador para continuar el funcionamiento BAJART: .REG P2.0 ;orden de bajar el taladro SUBIRT: .REG P2.1 ,orden de subir el taladro .ORG 0200H MOV IE,#81H ;habilita INT0 MOV TCON,#01H ;activa INT0 flanco INICIO: MOV P2,#00H ;salidas a 0 JNB FCS,SUBIR ;si no está arriba, lo subo JNB PBAJA,$ SETB BAJART ;bajo taladro MIRAFCI: JB PPARO,PARASUBE ;controlo pulsador de paro JNB FCI,MIRAFCI ;miro si llegué abajo PARASUBE: CLR BAJART ;paro CALL RETARDO ;para no estar activos los dos relés a la vez

Page 43: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

43

AUTOMATISMOS

J. Argüelles / J. Alonso

SUBIR: SETB SUBIRT ;subo taladro JNB FCS,$ ;miro si llegué arriba JMP INICIO ;----------------------------------------- ; SUBRUTINA DE RETARDO ;----------------------------------------- RETARDO: MOV TMOD,#01H MOV R0,#10 ;retardo de 0.5 segundos CUENTA: MOV TH0,#3CH MOV TL0,#0B0H MOV TCON,#11H ;activo TR0 y borro TF0 JNB TF0,$ DJNZ R0,CUENTA MOV TCON,#01H ;desactivo temporizador y borro TF0 RET ;---------------------------------------------------- ; SUBRUTINA DE ATENCIÓN A INT0 ;---------------------------------------------------- INT0: PUSH P2 ;guardo estado del taladro MOV P2,#00H JNB PCONT,$ ;espero que se accione el pulsador de continuar POP P2 ;recupero estado del taladro RETI .END

Page 44: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

44 J. Argüelles / J. Alonso

AUTOMATISMOS

TALADRO.ASM

habilito INT0activo flanco

P2 = 0

FCS = 1 No

bajotaladroNo

SI

Si

bajo taladro

PARO

No

FCINo

Si

paro taladro

SI

1

3

2

1

RETARDO

subir taladro

FCS No

Si

2

INT0

Guardo registros

paro taladro

continuo

Recuperoregistros

RETI

Si

No

3

Page 45: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

45

AUTOMATISMOS

J. Argüelles / J. Alonso

7.2. Mediante un microcontrolador DS500 se desea implementar un sistema para controlar un mando automático de vaivén, por ejemplo una cepilladora, el cual debe cumplir los siguientes requisitos:

1. Mediante dos pulsadores: marcha derecha MD (P0.0) y marcha izquierda MI (P0.1), debe poder iniciarse el movimiento de vaiven, en un sentido o en otro.

2. Mediante dos finales de carrera FCD (P0.2) y FCI (P0.3) , debe de limitarse el recorrido en un sentido, para iniciarse el recorrido en sentido contrario.

3. Mediante un pulsador de parada P (P0.4), deberá poder detenerse el movimiento de vaivén, sea cual sea la posición en que se encuentre el carro. Esperando la activación de uno de los dos pulsadores de marcha MD y MI, para saber el sentido en el que debe reiniciar su movimiento.

4. El circuito llevará un control de emergencia, mediante el cual pueda interrumpirse el funcionamiento, hasta que se accione un pulsador A (P0.5), en cuyo momento el sistema continuará el modo de trabajo que tenía en el instante de la interrupción.

Trataremos el pulsador de emergencia como una interrupción externa. El sentido de movimiento vendrá dado por la activación de dos señales distintas, derecha P2.0 e izquierda P2.1. .TITLE CEPILLAD.ASM .ORG 0000H JMP 0200H .ORG 0003H JMP INT0 .EXTERN RETARDO PMDER: .REG P0.0 PMIZQ: .REG P0.1 FCD: .REG P0.2 FCI: .REG P0.3 PPARO: .REG P0.4 PCONTIN: .REG P0.5 MDER: .REG P2.0 MIZQ: .REG P2.1 .ORG 0200H MOV IE,#81H MOV TCON,#01H INICIO: MOV P2,#00H ;paro funcionamiento MARCHA: JNB PMDER,MIRAIZQ ;no pulsador a la derecha JB FCD,MARCHA ;marcha derecha y está en tope derecho GIRADER: SETB MDER ;movimiento a derecha DERECHA: JB PPARO,INICIO ;si paro a inicio JNB FCD,DERECHA ;final carrera derecha CLR MDER ;paro CALL RETARDO ;retardo para evitar el arco en los relés GIRAIZQ: SETB MIZQ ;movimiento a izquierda IZQUIERDA: JB PPARO,INICIO ;si paro a inicio

Page 46: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

46 J. Argüelles / J. Alonso

AUTOMATISMOS

JNB FCI,IZQUIERDA ;final de carrera izquierda CLR MIZQ ;paro CALL RETARDO JMP GIRADER ;sigo movimiento a derecha MIRAIZQ: JNB PMIZQ,MARCHA ;no pulsador a izquierda JB FCI,MARCHA ;marcha izquierda y tope izquierdo JMP GIRAIZQ ;voy movimiento a izquierda ;---------------------------------------------------- ; SUBRUTINA DE ATENCIÓN A INT0 ;---------------------------------------------------- INT0: PUSH P2 ;guardo estado de salidas MOV P2,#00H JNB PCONTIN,$ ;espero que se accione el pulsador de continuar POP P2 RETI .END ;----------------------------------------- ; SUBRUTINA DE RETARDO ;----------------------------------------- .TITLE RETARDO.ASM .ORG 0300H .PUBLIC RETARDO RETARDO: MOV TMOD,#01H MOV R7,#10 ;retardo de 0.5 segundos CUENTA: MOV TH0,#3CH MOV TL0,#0B0H CLR TF0 SETB TR0 ,activo TR0 JNB TF0,$ ;miro TF0 CLR TR0 ;borro TR0 DJNZ R7,CUENTA RET .END

Page 47: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

47

AUTOMATISMOS

J. Argüelles / J. Alonso

CEPILLAD.ASM

Hab INT0Activo flanco

Desactivo salidas

PDER

FCD

Activo MDER

PARO

PIZQ

FCI

FCD

Paro MDER

1

1

RETARDO

Activo MIZQ

PARO

FCI

paro MIZQ

RETARDO

2

INT0

Guardo registros

PCONTIN

Recuperoregistros

RETISi

No

2

Si

No

Si

3

No

No

Si

Si

No

4

Si

No

3

No

Si

Si4

No

SI

Page 48: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

48 J. Argüelles / J. Alonso

AUTOMATISMOS

� 7.3. Una tolva vierte por medio de un orificio B (P2.0), un producto (arena) sobre una cinta transportadora (P2.1). Se dispone de un botón de marcha M (P0.0) y otro de paro P (P0.1). Para poner la instalación en funcionamiento se activa momentáneamente el botón M; en este momento la cinta transportadora se pone en marcha pero el orificio B no se abre hasta que no han transcurrido 4 segundos. Por el contrario, después de activar el pulsador P, el orificio debe cerrarse inmediatamente en tanto que la cinta transportadora se detiene después de 8 segundos. El proceso debe llevar un sistema de alarma capaz de detectar cualquier defecto o avería en su funcionamiento provocando una interrupción del sistema. Producido un defecto, debe pararse el proceso, encenderse una luz roja (P2.2) intermitentemente al mismo tiempo que empieza a sonar una alarma (P2.3). Percibida la alarma, el operario pulsa un botón de alarma recibida AL (P0.2) que anula la señal acústica, pero deja la luz roja encendida de forma continua. Esta luz se deberá mantener encendida hasta que se haya reparado la avería y se haya accionado un pulsador de retorno (P0.3) a las condiciones iniciales del proceso. .TITLE TOLVA.ASM .ORG 0000H JMP 0200H .ORG 0003H ;vectorizo interrupción JMP INT0 ;comienzo de rutina de interrupción .EXTERN RETARDO PMARCHA: .REG P0.0 PPARO: .REG P0.1 ALREC: .REG P0.2 PRETOR: .REG P0.3 ORIFB: .REG P2.0 MCINTA: .REG P2.1 LROJA: .REG P2.2 CLAXON: .REG P2.3 .ORG 0200H MOV P2,#00H ;inicializo el puerto MOV IE,#81H ;habilito interrupción MOV TCON,#01H ;INT0 por flanco MARCHA: JNB PMARCHA,$ SETB MCINTA ;activo cinta transportadora MOV R1,#08 ;temporizo 4 segundos TEM4: CALL RETARDO DJNZ R1,TEM4 SETB ORIFB ;abro orificio B JNB PPARO,$ ;pulsador de paro CLR ORIFB ;cierro orificio MOV R1,#16 ;temporizo 8 segundos TEM8: CALL RETARDO DJNZ R1,TEM8 CLR MCINTA ;paro cinta JMP MARCHA

Page 49: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

49

AUTOMATISMOS

J. Argüelles / J. Alonso

;------------------------------------------------------------------- ; SUBRUTINA DE ATENCIÓN A INT0 - ALARMA ;------------------------------------------------------------------- INT0: MOV P2,#0CH ;paro cinta y orificio, activo luz y claxón INTERMIT: CALL RETARDO ;un segundo en cada estado de intermitencia CALL RETARDO CPL LROJA JNB ALREC,INTERMIT ;pulsador de alarma recibida CLR CLAXON ;apago claxón SETB LROJA ;dejo luz fija JNB PRETOR,$ ;pulsador de retorno a condiciones iniciales MOV SP,#09 MOV 08H,#00 ;modifico la dirección de retorno de la pila MOV 09H,#02 ;desactiva las salidas y comienza el proceso RETI .END ;----------------------------------------- ; SUBRUTINA DE RETARDO ;----------------------------------------- .TITLE RETARDO.ASM .ORG 0300H .PUBLIC RETARDO RETARDO: MOV TMOD,#01H MOV R7,#10 ;retardo de 0.5 segundos CUENTA: MOV TH0,#>15536 ;65536 - 50000 = 15536 MOV TL0,#<15536 CLR TF0 SETB TR0 ,activo TR0 JNB TF0,$ ;miro TF0 CLR TR0 ;borro TR0 DJNZ R7,CUENTA RET .END

Page 50: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

50 J. Argüelles / J. Alonso

AUTOMATISMOS

TOLVA.ASM

Habilito INT0Activo flanco

Desactivo salidas

PMARCHA

Activo MCINTA

RETARDO 4s

Abro ORIFB

PARO

Cierro ORIFB

RETARDO 8s

Paro MCINTA

Si

No

No

Si

INT0

DesactivoMCINTA ORIFB

Activo LROJA yCLAXON

RETARDO 1sComple LROJA

PALREC

PRETOR

Modifico ladirección de

retorno a la pila

RETI

Si

No

No

Paro CLAXONLROJA fija

Si

Page 51: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

51

AUTOMATISMOS

J. Argüelles / J. Alonso

7.4. Se desea diseñar un automatismo que permita con una llave magnética (P0.0) la apertura y cierre de un portón. El sistema dispondrá de los siguientes elementos: un final de carrera de cerrado (P0.1) y otro de abierto (P0.2), una célula fotoeléctrica (P0.3), un relé térmico y un motor eléctrico con dos sentidos de giro, abrir (P2.0) y cerrar (P2.1). Cuando se desee abrir el portón se deberá introducir la llave magnética y seguidamente si el portón está cerrado se abrirá. Cuando desee cerrarlo se deberá introducir la llave magnética y el portón bajará. Si cuando se está produciendo la bajada un obstáculo se interpone debajo del portón, la célula fotoeléctrica lo detectará y provocará la subida del portón. .TITLE PORTON.ASM .ORG 0000H .EXTERN RETARDO LLAVE: .REG P0.0 FCC: .REG P0.1 FCA: .REG P0.2 CELULA: .REG P0.3 MABRIR: .REG P2.0 MCERRAR: .REG P2.1 MOV P2,#00H MARCHA: JNB LLAVE,$ ;no arranco sin accionar llave JNB FCC,CERRAR ;no está cerrada, por tanto cierro ABRIR: SETB MABRIR ;abro portón JNB FCA,$ ;controlo final de carrera CLR MABRIR ;paro JMP MARCHA CERRAR: SETB MCERRAR ;no cerrada, cierro portón CERRANDO: JB CELULA,SUBIR ;si activo sensor hay que subir JNB FCC,CERRANDO CLR MCERRAR ;paro JMP MARCHA SUBIR: CLR MCERRAR ;paro después de activarse sensor CALL RETARDO ;para que no se activen los 2 relés JMP ABRIR .END ;----------------------------------------- ; SUBRUTINA DE RETARDO ;----------------------------------------- .TITLE RETARDO.ASM .ORG 0300H .PUBLIC RETARDO RETARDO: MOV TMOD,#01H MOV R7,#10 ;retardo de 0.5 segundos CUENTA: MOV TH0,#>15536 MOV TL0,#<15536 CLR TF0 SETB TR0 ,activo TR0 JNB TF0,$ ;miro TF0 CLR TR0 ;borro TR0

Page 52: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

52 J. Argüelles / J. Alonso

AUTOMATISMOS

DJNZ R7,CUENTA RET .END

PORTON.ASM

LLAVE No

Si

FCC No

ABRO PORTON

1SICIERRO PORTON

FCA No

Si

PARO PORTON

SENSOR

No

FCCNo

Si

PARO PORTON

Si

PARO PORTON

RETARDO

1

Page 53: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

53

AUTOMATISMOS

J. Argüelles / J. Alonso

7.5. Se quiere automatizar un portón de un garaje que cumpla las siguientes condiciones: Dispondrá a la entrada de una llave magnética (P0.0) que active la apertura del portón el cual posee dos finales de carrera (abierto P0.1 y cerrado P0.2). En el interior del garaje dispone de un semáforo (rojo P2.0 y verde P2.1) que cuando se abra (P2.2) y se cierre (P2.3) el portón se active la luz roja, y cuando el portón esté totalmente abierto se active la luz verde, si el portón está cerrado no se activa ninguna luz. El cierre del portón deberá producirse automáticamente cuando hallan transcurrido 20 segundos después de su apertura. El portón dispone de un sensor (P0.3) que detecta cualquier objeto que se encuentre en su línea de acción obligando al portón abrirse, cerrándose automáticamente transcurridos otros 20 segundos. .TITLE GARAJE.ASM .ORG 0000H .EXTERN RETARDO LLAVE: .REG P0.0 FCA: .REG P0.1 FCC: .REG P0.2 SENSOR: .REG P0.3 LROJA: .REG P2.0 LVERDE: .REG P2.1 MABRIR: .REG P2.2 MCERRAR: .REG P2.3 MOV P2,#00H ;inicializo el puerto INICIO: JNB LLAVE,$ ;espero activación de llave SETB LROJA ;luz roja ABRIR: SETB MABRIR ;abro portón JNB FCA,$ ;no está totalmente abierto CLR MABRIR ;paro CLR LROJA ;apago luz roja SETB LVERDE ;luz verde MOV R0,#40 ;portón 20 segundos abierto ESPERA: CALL RETARDO DJNZ R0,ESPERA CLR LVERDE ;apago luz verde SETB LROJA ;luz roja SETB MCERRAR ;cierro portón CERRANDO: JB SENSOR,SUBIR ;activación del sensor JNB FCC,CERRANDO ;no está totalmente cerrado CLR MCERRAR ;paro CLR LROJA ;apago luz roja JMP INICIO SUBIR: CLR MCERRAR ;paro si se activa sensor CALL RETARDO ;espero 0.5 segundos para protección de los relés JMP ABRIR .END

Page 54: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

54 J. Argüelles / J. Alonso

AUTOMATISMOS

;----------------------------------------- ; SUBRUTINA DE RETARDO ;----------------------------------------- .TITLE RETARDO.ASM .ORG 0300H .PUBLIC RETARDO RETARDO: MOV TMOD,#01H MOV R7,#10 ;retardo de 0.5 segundos CUENTA: MOV TH0,#>15536 MOV TL0,#<15536 CLR TF0 ;TF0=0 SETB TR0 ,activo TR0 JNB TF0,$ ;miro TF0 CLR TR0 ;borro TR0 DJNZ R7,CUENTA RET .END

Page 55: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

55

AUTOMATISMOS

J. Argüelles / J. Alonso

GARAJE.ASM

Inicio salidas

LLAVENo

Si

2

Activo LROJA

Abrir PORTON

3

FCANo

Si

Apago LROJA

Paro PORTON

Activo LVERDE

RETARDO 20 s

1

1

Apago LVERDE

Activo LROJA

Cerrar PORTON

SENSOR

No

Si

FCCNo

Apago LROJA

Paro PORTON

2

Paro PORTON

RETARDO

3

Page 56: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

56 J. Argüelles / J. Alonso

AUTOMATISMOS

7.6. Se quiere automatizar un sistema de empaquetamiento que dispone de los siguientes elementos: un pulsador de marcha M (P0.0); un pulsador de paro tras cuya activación el sistema debe interumpirse a la espera de activarse el pulsador de marcha, en cuyo caso vuelve a las condiciones que tenía; una célula fotoeléctrica para el contaje cuya información entrará al microcontrolador por el pin T0; un selector de datos (puerto 1) de dos dígitos en BCD ; un motor para la cinta transportadora (P2.0) y una empaquetadora (P2.1). Cuando se hallan contado el número de elementos seleccionados se detendrá el motor de la cinta y pondrá en marcha la empaquetadora. Cuando ésta finalice (señal que proporciona el sistema P0.2) debe pararse la empaquetadora y poner en marcha el motor de la cinta. .TITLE EMPAQUET.ASM .ORG 0000H JMP 0200H .ORG 0003H ;vectorizo interrupción INT0 JMP INT0 ;comienzo de rutina de interrupción PMARCHA: .REG P0.0 SEMPAQ: .REG P0.2 MCINTA: .REG P2.0 MEMPAQ: .REG P2.1 .ORG 0200H MOV P2,#00H MOV IE,#81H ;habilito interrupción INT0 MOV TMOD,#05H ;contador T0 16 bits, control por software MOV TCON,#01H ;interrupción por flanco MARCHA: JNB PMARCHA,$ SALTO: CALL BCD_BIN ;conversión de BCD de 2 dígitos a binario MOV A,#0FFH ;cargamos con el valor edecuado el contador CLR C SUBB A,50H INC A MOV TL0,A MOV TH0,#0FFH SETB TR0 ;autorizo contador manteniendo flanco de INT SETB MCINTA ;activo cinta JNB TF0,$ ;espero fin de cuenta CLR TF0 ;borro el indicador de sobrepasamiento CLR TR0 ;anulo el contador manteniendo la interrupción CLR MCINTA ;paro cinta SETB MEMPAQ ;activo empaquetadora JNB SEMPAQ,$ ;espero señal fin empaquetar CLR MEMPAQ ;paro empaquetadora JMP SALTO ;------------------------------------------------------------------- ; SUBRUTINA DE ATENCIÓN A INT0 - PARO ;------------------------------------------------------------------- INT0: PUSH P2 ;guardo estado de señales PUSH TH0

Page 57: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

57

AUTOMATISMOS

J. Argüelles / J. Alonso

PUSH TL0 ;guardo estado de cuenta MOV P2,#00H ;desactivo las salidas JNB PMARCHA,$ ;espero rearme POP TL0 POP TH0 POP P2 RETI ;-------------------------------------------------------------------------- ; SUBRUTINA DE CONVERSIÓN DE BCD A BINARIO ;-------------------------------------------------------------------------- BCD_BIN: MOV 50H,P1 ;leo número seleccionado MOV A,50H ;lo cargo en el acumulador SWAP A ;coloco decenas en nibble bajo ANL A,#0FH ;enmascaro nibble bajo MOV B,#10 ;multiplico el valor que corresponde MUL AB ;a las decenas por 10 MOV 51H,A ;guardo resultado de decenas MOV A,50H ;cargo el número ANL A,#0FH ;enmascaro las unidades ADD A,51H ;sumo a las unidades las decenas MOV 50H,A ;guardo el número en binario RET .END

Page 58: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

58 J. Argüelles / J. Alonso

AUTOMATISMOS

EMPAQUET.ASM

Habilito INT0Activo flanco

T0 contad 16 bits

Inicio salidas

PMARCHANo

SI2

BCD_BIN

Cargo contadorcon el nº

apropiado

Activo contador

Activo CINTA

TF0No

Si

1

1

Paro CINTA

Activo EMPAQ

Acabó No

Si

Paro EMPAQ

2

INT0 - PARO

Guardo registrosP2, TL0, TH0

Paro CINTA yEMPAQ

PMARCHANo

Si

Recuperoregistros

P2, TL0, TH0

RETI

BCD_BIN

Número=P1

A=NúmeroSWAP A

A ANL 0FH

Multiplico A.10MEMORIA=A

A=NúmeroA ANL 0FH

SumoA + MEMORIA

Número = A

RET

Page 59: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

59

AUTOMATISMOS

J. Argüelles / J. Alonso

� 7.7. Se quiere diseñar un automatismo que permita contabilizar el número de coches que se encuentran en un aparcamiento. El sistema dispone de un selector de datos (puertos 0 y 1) de 4 dígitos en BCD que permite seleccionar el número máximo de coches. Mientras el número sea inferior al seleccionado se debe activar permanentemente una lámpara verde (P2.0) y cuando sea igual, desactivarla y activar otra lámpara roja (P2.1) con un parpadeo de frecuencia 2 HZ. Para efectuar la cuenta de los coches se disponen de dos detectores, que pueden ir conectados bien a los pines correspondientes a los temporizadores/contadores o bien como interrupciones externas. TITLE CUENTACO.ASM .ORG 0000H JMP 0200H .ORG 0003H ;interrupción INT0 para descontar JMP INT0 ;va a descontar una unidad RESL: .EQU 50H RESH: .EQU 51H LVERDE: .REG P2.0 LROJA: .REG P2.1 .ORG 0200H MOV IE,#81H ;habilito interrupción INT0 MOV TMOD,#15H ;contador T0 y temporizador T1 ambos de16 bits MOV TCON,#01H ;interrupción por flanco CLR LROJA ;apago luz roja y SETB LVERDE ;enciendo luz verde CALL BCD4BIN ;conversión de selectores CLR C ;cargo contadores con el valor correcto MOV A,#0FFH ;65536-N SUBB A,RESL MOV TL0,A MOV A,#0FFH SUBB A,RESH MOV TH0,A MOV A,TL0 ADD A,#01 MOV TL0,A MOV A,TH0 ADDC A,#00 MOV TH0,A ;ya están cargados los contadores SETB TR0 ;autorizo contador MENOR: JNB TF0,$ ;igual a número seleccionado CLR LVERDE ;apago luz verde INTERMIT: CPL LROJA ;enciendo luz roja MOV R0,#5 ;intermitencia de 2 hz SALTO1: MOV TH1,#>15536 MOV TL1,#<15536 SETB TR1 ;activo TR1

Page 60: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

60 J. Argüelles / J. Alonso

AUTOMATISMOS

JNB TF1,$ CLR TR1 ;desactivo T1 CLR TF1 ;TF1=0 DJNZ R0,SALTO1 JMP INTERMIT ;------------------------------------------------------------------------------------------ ; SUBRUTINA DE CONVERSIÓN DE 4 DÍGITOS BCD A BINARIO ;------------------------------------------------------------------------------------------ BCD4BIN: MOV A,P0 ;leo unidades y decenas ANL A,#0FH ;enmascaro unidades MOV RESL,A ;guardo resultado unidades MOV A,P0 SWAP A ;coloco decenas en nibble bajo ANL A,#0FH ;enmascaro decenas MOV B,#10 MUL AB ;multiplico decenas por 10 ADD A,RESL ;sumo unidades + decenas MOV RESL,A MOV A,P1 ;leo centenas y miles ANL A,#0FH ;enmascaro centenas MOV RESH,A MOV A,P1 SWAP A ;coloco miles en nibble bajo ANL A,#0FH ;enmascaro miles MOV B,#10 MUL AB ;y las multiplico por 10 ADD A,RESH ;sumo centenas + miles MOV B,#100 ;multiplico el resultado de centenas + miles por 100 MUL AB ;para obtener el valor correcto ADD A,RESL ;el núm a sumar está en el A y en el B MOV RESL,A MOV A,B ADDC A,#00 MOV RESH,A RET ;------------------------------------------------------------------------- ; SUBRUTINA DE ATENCIÓN A INT0 - DESCUENTA ;------------------------------------------------------------------------- INT0: CLR C ;descuenta 1 MOV A,TL0 SUBB A,#01 MOV TL0,A MOV A,TH0 SUBB A,#00 MOV TH0,A JB TF0,LLENO

Page 61: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

61

AUTOMATISMOS

J. Argüelles / J. Alonso

RETI ;deja las luces como estaban LLENO: CLR LROJA ;apago luz roja SETB LVERDE ;enciendo luz verde MOV SP,#09H MOV 08H,#<MENOR ;modifica dirección de retorno de la pila MOV 09H,#>MENOR MOV TCON,#11H ;borra flag de rebase del contador, autoriza T0 RETI ;deja INT0 por flanco y desactivo T1 .END

Page 62: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

62 J. Argüelles / J. Alonso

AUTOMATISMOS

No

CUENTACO.ASM

Habilito INT0Activo flanco

T0 contadorT1 temporiza

Apago LROJAActivo LVERDE

Leo preselectoresnº BCD -> Bin

Calculo número ycargo los

contadores

Autorizo T0

Rebasacontador

Apago LVERDE

Temporizo 0,25s

Si

CPL LROJA

BCD4BIN

leo P0RESL=

unid + 10dec

leo P1RESH=

cent + 10millar

A = RESHB = 100

MUL A.B

RESL = A+RESL

RESH = B +0 +C

RET

INT0

Restamos al númTH0,TL0 una

unidad

TF0=1

RETI

No

Activo LVERDEDesac LROJA

Si

Altero direcciónde retorno de lapila. MENOR

Borro TF0Desactivo T1

RETI

Page 63: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

63

AUTOMATISMOS

J. Argüelles / J. Alonso

7.8. Diseñar un automatismo que efectúe el control de un aparcamiento en las siguientes condiciones: .- Se dispondrá de un sensor (P0.0) que detecte la llegada de un coche. .- Cuando se detecte la presencia de un coche y la barrera esté bajada, se deberá proporcionar una señal para salir el billete (P2.2). Un detector (P0.2) nos avisa cuando hay billete (P0.2=1) y cuando no lo hay (P0.2=0). .- La barrera dispone de un motor que puede funcionar en ambos sentidos, abrir (P2.0) y cerrar (P2.1) protegido por un relé térmico cuyo contacto está normalmente cerrado y se dispone de dos finales de carrera FCA (P0.3) y FCC (P0.4) para indicar el final del recorrido de la barrera. .- Cuando la barrera llega arriba, espera 5 segundos y comienza a bajar. .- Cuando algún obstáculo se encuentre situado debajo de la barrera y ésta se encuentre bajando, la célula fotoeléctrica CF (P0.5) lo detectará y hará que la barrera se detenga, y suba esperando nuevamente 5 segundos antes de volver a bajar. .TITLE APARCAM.ASM .ORG 0000H .EXTERN RETARDO SENSOR: .REG P0.0 DETBILL: .REG P0.2 FCA: .REG P0.3 FCC: .REG P0.4 CF: .REG P0.5 MABRIR: .REG P2.0 MCERRAR: .REG P2.1 MBILLETE: .REG P2.2 MOV P2,#00H JB FCC,INICIO ;miro si la barrera está abajo SETB MCERRAR ;cierro barrera JNB FCC,$ PARABAR: CLR MCERRAR INICIO: JNB SENSOR,$ ;espero llegada coche SETB MBILLETE ;activo salida billete JNB DETBILL,$ ;compruebo salida billete CLR MBILLETE ;desactivo salida de billete JB DETBILL,$ ;compruebo si coge billete ABRIR: SETB MABRIR ;subo barrera JNB FCA,$ ;espero totalmente abierta CLR MABRIR ;paro MOV R1,#10 ;espero 5 segundos TEM5: CALL RETARDO DJNZ R1,TEM5 CERRAR: SETB MCERRAR ;bajo barrera BUCLE: JB CF,PILLACO ;compruebo activación de sensor JNB FCC,BUCLE ;espero totalmente cerrado JMP PARABAR PILLACO: CLR MCERRAR ;paro si se activa sensor CALL RETARDO ;espero 0,5 segundos

Page 64: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

64 J. Argüelles / J. Alonso

AUTOMATISMOS

JMP ABRIR .END ;----------------------------------------- ; SUBRUTINA DE RETARDO ;----------------------------------------- .ORG 0300H .PUBLIC RETARDO RETARDO: MOV TMOD,#01H MOV R7,#10 ;retardo de 0.5 segundos CUENTA: MOV TH0,#>15536 MOV TL0,#<15536 CLR TF0 ;borro el TF0 SETB TR0 ,activo TR0 JNB TF0,$ ;miro TF0 CLR TR0 ;borro TR0 DJNZ R7,CUENTA RET .END

Page 65: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

65

AUTOMATISMOS

J. Argüelles / J. Alonso

APARCAM.ASM

Desactivo salidas

FCC

No

Si

Bajo barrera

FCCNo

Paro barrera

sensorcocheNo

Si

Activo MBILLETE

DETBILLETE

Paro MBILLETE

No

Si

1

1

DETBILLETESi

NO

Subir barrera

FCA No

Si

3

Paro barrera

ESPERA 5 s

Cerrar barrera

CF

No

FCCNo

Si

2

Si

Paro barrera

RETARDO

3

2

Page 66: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

66 J. Argüelles / J. Alonso

AUTOMATISMOS

7.9. Automatizar el funcionamiento de una puerta corredera. Cuando una persona entra en la zona barrida por el detector de infrarrojos (P0.0) la puerta debe abrirse y permanecer en ese estado 7 segundos, al término de los cuales si no hay ninguna persona en la zona de acción del detector la puerta se cerrará. Si cuando la puerta se está cerrando una persona entra en la zona de acción, la puerta debe de abrirse y permanecer abierta 7 segundos. El sistema dispone de dos finales de carrera para detectar la puerta abierta (FCA=P0.1) y cerrada (FCC=P0.2), y de dos salidas para el funcionamiento del motor: abrir (P2.0) y cerrar (P2.1). .TITLE PUERTA.ASM .ORG 0000H DETINF: .REG P0.0 FCA: .REG P0.1 FCC: .REG P0.2 MABRIR: .REG P2.0 MCERRAR: .REG P2.1 MOV P2,#00H NADIE: JNB DETINF,$ ;espero llegada de persona ABRIR: SETB MABRIR ;abro puerta JNB FCA,$ ;compruebo totalmente abierta CLR MABRIR ;paro SALTO: MOV R0,#14 ;abierta 7 segundos CUENTA7: CALL RETARDO DJNZ R0,CUENTA7 JB DETINF,SALTO SETB MCERRAR ;cierro puerta CERRADO: JB DETINF,PERSONA ;compruebo si hay otra persona JNB FCC,CERRADO ;miro si totalmente cerrado CLR MCERRAR ;paro JMP NADIE PERSONA: CLR MCERRAR ;paro si hay otra persona CALL RETARDO ;espero 0,5 s por los relés JMP ABRIR RETARDO: MOV TMOD,#01H MOV R7,#10 ;retardo de 0.5 segundos CUENTA: MOV TH0,#>15536 MOV TL0,#<15536 SETB TR0 ,activo TR0 JNB TF0,$ ;miro TF0 CLR TF0 DJNZ R7,CUENTA CLR TR0 ;borro TR0 CLR TF0 ;TF0=0 RET .END

Page 67: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

67

AUTOMATISMOS

J. Argüelles / J. Alonso

PUERTA.ASM

INICIO SALIDAS

DETECTOR

2

No

SI3

ABRIR PUERTA

FCANo

Si

PARO PUERTA

RETARDO 7s

DETECTORSi

No

Cerrar PUERTA

1

1

DETECTOR

No

Si

PARO PUERTA

3

FCC

Si

PARO PUERTA

2

No RETARDO0,5 s

Page 68: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

68 J. Argüelles / J. Alonso

AUTOMATISMOS

7.10. Se trata de realizar un programa de control para una vagoneta accionada por un motor M con dos sentidos de funcionamiento hacia la derecha (P2.0) y a la izquierda (P2.1). La vagoneta tiene una posición de reposo A (P0.0). Cuando accionamos un pulsador (P0.1) la vagoneta se desplaza a la derecha. Si accionamos otra vez sigue su camino, cuando llega al final de carrera B (P0.2) permanece 2 segundos, al término de los cuales retorna a la posición de reposo detectada por el final de carrera A. Si la vagoneta se desplaza de la posición de reposo, se puede volver a ésta accionando el pulsador. .TITLE VAGONETA.ASM .ORG 0000H MOTDER: .REG P2.0 MOTIZQ: .REG P2.1 FCA: .REG P0.0 FCB: .REG P0.2 PULSA: .REG P0.1 .EXTERN TEM50 MOV P2,#00H ;inicializa el puerto INICIO: JNB FCA,MIRAPUL ;no está en situación de reposo JNB PULSA,INICIO ;espero activación de pulsador SETB MOTDER ;marcha a la derecha JNB FCB,$ ;espero llegada a posición B CLR MOTDER ;paro MOV R0,#40 ;retardo de 2 segundos para RETARDO: CALL TEM50 ;activar izquierda DJNZ R0,RETARDO IZQUIERD: SETB MOTIZQ ;marcha a la izquierda JNB FCA,$ ;espero llegada a posición A CLR MOTIZQ ;paro JMP INICIO MIRAPUL: JNB PULSA,$ ;no está en posición A y espero activación del JMP IZQUIERD ;pulsador para que vuelva a la posición A .END .TITLE TEM50.ASM .ORG 0300H .PUBLIC TEM50 TEM50: MOV TMOD,#01H ;temporizador 0, modo 1, sotfware MOV TH0,#3CH ; 65536-50000 = 3CB0 MOV TL0,#0B0H MOV TCON,#10H ;autorizo temporización JNB TF0,$ ;controlo bit de sobrepasamiento MOV TCON,#00H ;desautorizo temporización y borro TF0 RET .END

Page 69: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

69

AUTOMATISMOS

J. Argüelles / J. Alonso

� 7.11. Para acceder a una autopista, el automovilista debe pararse en el peaje y depositar una moneda de 100 pts en una ranura, la luz roja (P2.0) de STOP se apagará, encendiéndose la verde (P2.1) y la barrera se levanta. SECUENCIA A: El automovilista detiene su coche, deposita la moneda, la cual actúa sobre un contacto (P0.0) que proporciona un impulso. La luz roja se apaga, se enciende la verde y la barrera se levanta (P2.2) hasta llegar a un fin de carrera FCA (P0.2). El coche avanza e intercepta el haz luminoso de un sistema sensor (P0.1). Una vez deje de interceptar el haz, a los 10 segundos, la luz verde se apaga, se enciende la roja y se baja la barrera (P2.3) hasta llegar a un fin de carrera (P0.3). SECUENCIA B:El automovilista sobrepasa por distracción el control e intercepta el haz luminoso sin haber depositado la moneda, la luz roja permanecerá encendida, la barrera bajada y se activará una señal acústica (P2.4). Si el conductor retrocede hasta la posición de control, e introduce la moneda, la señal acústica desaparece y la secuencia continúa como en el caso anterior. .TITLE AUTOPISTA.ASM .ORG 0000H .EXTERN TEM50 SENMON: .REG P0.0 HAZSEN: .REG P0.1 FCA: .REG P0.2 FCC: .REG P0.3 LROJA: .REG P2.0 LVERDE: .REG P2.1 MSUBE: .REG P2.2 MBAJA: .REG P2.3 CLAXON: .REG P2.4 MOV P2,#00H ;inicializo puerto SETB LROJA JB FCC,NOMON BAJABA: SETB MBAJA ;bajo barrera JNB FCC,$ ;espero bajada de barrera CLR MBAJA ;paro barrera NOMON: JB HAZSEN,SOBREPA ;activa sensor sin depositar moneda JNB SENMON,NOMON ;espero moneda CONTINUA: CLR LROJA ;apago luz roja SETB LVERDE ;enciendo luz verde SETB MSUBE ;subo barrera JNB FCA,$ CLR MSUBE ;paro barrera JNB HAZSEN,$ ;espero activación de sensor JB HAZSEN,$ ;espero desactivación de sensor MOV R0,#200 ;temporizo 10 segundos SALTO: CALL TEM50 DJNZ R0,SALTO CLR LVERDE ;apago luz verde SETB LROJA ;enciendo luz roja JMP BAJABA

Page 70: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

70 J. Argüelles / J. Alonso

AUTOMATISMOS

SOBREPA: SETB CLAXON ;enciendo sirena JNB SENMON,$ ;espero moneda CLR CLAXON ;apago sirena JMP CONTINUA .END ;---------------------------------------------------------------- ; SUBRUTINA DE TEMPORIZACIÓN DE 0,05s ;---------------------------------------------------------------- .TITLE TEM50.ASM .ORG 0300H .PUBLIC TEM50 TEM50: MOV TMOD,#01H ;temporizador 0, modo 1, sotfware MOV TH0,#>15536 ; 65536-50000 = 15536 MOV TL0,#<15536 SETB TR0 ;autorizo temporización JNB TF0,$ ;controlo bit de sobrepasamiento CLR TR0 CLR TF0 ;TF0=0 RET .END

Page 71: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

71

AUTOMATISMOS

J. Argüelles / J. Alonso

AUTOPISTA.ASM

INICIO SALIDAS

Activo LROJA

FCC

2 NO

Si

Bajar BARRERA

FCCNo

Si

Para BARRERA

HAZSENSOR Si

Activo CLAXONNo

SENSORMONEDANo

Si

1

SENSORMONEDANo

Si

Apago CLAXON

1

Apago LROJA

Activo LVERDE

Subir BARRERA

FCANo

Si

Para BARRERA

HAZSENSOR

HAZSENSOR

No

SI

No

Si

RETARDO 10s

Apago LVERDEActivo LROJA

2

Page 72: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

72 J. Argüelles / J. Alonso

AUTOMATISMOS

� 7.12 La pluma de un camión grúa puede variar su longitud entre un valor de 9 y 25 metros formando un ángulo θ con la horizontal. La distancia a la que está situada la proyección de la carga a elevar, respecto del origen de la pluma, se denomina radio (radio = longitud de la pluma * cos θ ). Según sea esa longitud y ese radio, se puede elevar un peso máximo dado por la tabla de valores de consigna adjunta (Capacidades de elevación máximas).

Longitud de la pluma en m. Radio en

metros 9 15 21 25 3 250 215 0 0 4 217 185 139 0 5 189 157 120 0 6 131 126 102 85 7 108 106 90 73 8 0 88 78 64 9 0 74 67 56 10 0 62 57 50 11 0 52 49 45 12 0 45 43 40 13 0 38 38 36 14 0 0 31 31 15 0 0 27 27 16 0 0 24 24 17 0 0 21 21 18 0 0 19 19 19 0 0 17 17 20 0 0 0 15 21 0 0 0 13 22 0 0 0 12 23 0 0 0 11 24 0 0 0 11 25 0 0 0 9

Hacer un programa que saque por el puerto 2 el valor de la capacidad de elevación máxima continuamente, teniendo en cuenta que: Por el puerto 0 obtenemos la información del radio, cuyo valor está comprendido entre 3 y 25 metros. Por el puerto 1 obtenemos la información de la longitud de la pluma, pudiendo variar la longitud de ésta entre cualquier valor entero comprendido entre 9 y 25 metros. En caso de quedar entre dos valores, se debe coger el de la longitud superior.

L (lon

gitud d

e la p

luma)

R (radio)

Page 73: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

73

AUTOMATISMOS

J. Argüelles / J. Alonso

.TITLE GRUA.ASM .ORG 0100H RADIO: .BYTE 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 LONGIT: .BYTE 9,15,21,25 DATOS: .BYTE 250,217,189,131,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 215,185,157,126,106,88,74,62,52,45,38,0,0,0,0,0,0,0,0,0,0,0,0 .BYTE 0,139,120,102,90,78,67,57,49,43,38,31,27,24,21,19,17,0,0,0,0,0,0 .BYTE 0,0,0,85,73,64,56,50,45,40,36,31,27,24,21,19,17,15,13,12,11,11,9 NCOL: .EQU 50H NFILA: .EQU 51H .ORG 0000H INICIO: MOV A,P0 ; calculamos la fila según el radio [1, 2, ...] CLR C SUBB A,#2 MOV NFILA,A MOV NCOL,#01 ; calculamos la columna según la longitud MOV DPTR,#LONGIT SALTO2: MOV A,#0 MOVC A,@A+DPTR CLR C SUBB A,P1 ; P1 el valor de la longitud actual JNC SALTO INC DPL INC NCOL JMP SALTO2 SALTO: MOV DPTR,#DATOS-1 ;VALOR=DPTR+(NCOL-1)*23+NFILA) MOV A,NCOL DEC A MOV B,#23 MUL AB ADD A,NFILA MOVC A,@A+DPTR MOV P2,A JMP INICIO .END

Page 74: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

74 J. Argüelles / J. Alonso

AUTOMATISMOS

.TITLE GRUA2.ASM .ORG 0100H RADIO: .BYTE 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 LONGIT: .BYTE 9,15,21,25 .ORG 0200H DATOS: .BYTE 250,217,189,131,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 .ORG 0300H .BYTE 215,185,157,126,106,88,74,62,52,45,38,0,0,0,0,0,0,0,0,0,0,0,0 .ORG 0400H .BYTE 0,139,120,102,90,78,67,57,49,43,38,31,27,24,21,19,17,0,0,0,0,0,0 .ORG 0500H .BYTE 0,0,0,85,73,64,56,50,45,40,36,31,27,24,21,19,17,15,13,12,11,11,9 NCOL: .EQU 50H NFILA: .EQU 51H .ORG 0000H INICIO: MOV A,P0 ; calculamos la fila según el radio [0, 1, ...] CLR C SUBB A,#3 MOV NFILA,A MOV NCOL,#0 ; calculamos la columna según la longitud MOV DPTR,#LONGIT SALTO2: MOV A,#0 MOVC A,@A+DPTR ; A = 1ª longitud de la tabla CLR C SUBB A,P1 ; P1 el valor de la longitud actual JNC SALTO ; salta si valor de longitud real <= valor de la tabla INC DPL INC NCOL JMP SALTO2 SALTO: MOV DPTR,#0200H MOV A,DPH ADD A,NCOL MOV DPH,A MOV A,NFILA MOVC A,@A+DPTR MOV P2,A JMP INICIO .END

Page 75: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

75

AUTOMATISMOS

J. Argüelles / J. Alonso

� 7.13. Un cruce de trenes y coches está configurado por dos vías en ambos sentidos en las que se han instalado dos sensores que detectan el paso de los trenes, por la izquierda y por la derecha. Se dispone tambien de dos semáforos de color rojo y verde para los trenes, dos rojos y dos verdes para cada sentido de circulación, y otros dos de color rojo (P2.4) para los vehículos, tambien se dispone de un conmutador de vía (P2.5) para seleccionar el sentido de circulación de los trenes. Mientras los sensores no se activen por un tren, las barreras deben permanecer levantadas, los semáforos de trenes en verde y los de vehículos apagados. Cuando un tren active uno de los sensores, el semáforo (de trenes) contrario se situará en rojo, se activará el conmutador de vía para el sentido correcto, los semáforos de coches parpadearán y al cabo de 4 segundos las barreras bajarán (B1 => P1.0 , B2 => P1.2), permaneciendo fija la luz roja de los semáforos de coches. Cuando el tren active el otro sensor se levantarán (B1 => P1.1 , B2 => P1.3) las barreras, se apagarán los semáforos de coches y se situará en verde el semáforo de trenes. Sentido D: conmutador de vía = 1 Sentido I: conmutador de vía = 0 Tomaremos como sensor de llegada de un tren con sentido de circulación a la derecha la INT0 (sensor a la izquierda de las barreras), como sensor de salida el P0.5, y los semáforos situados a la izquierda son: rojo P2.0 y verde P2.2. El sentido a izquierda vendrá dado a la entrada por la INT1, a la salida será el P0.4, y el semafóro situado a la derecha de la barrera tiene como luz roja P2.1 y como luz verde P2.3. Las barreras tendrán unos finales de carrera que limitarán su recorrido que son FCAB1 (P0.1), FCCB1 (P0.0), FCAB2 (P0.3) y FCCB2 (P0.2).

SENIZQ1

SENDER2

LROJAILVERDEI

LROJADLVERDED

SENIZQ2

SENDER1

INT0

INT1LROJAC

LROJAC

CV CV

B1

B2

Page 76: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

76 J. Argüelles / J. Alonso

AUTOMATISMOS

.TITLE TREN.ASM .ORG 0000H JMP 0200H .ORG 0003H JMP INT0 ; llegada del tren por la izquierda .ORG 0013H JMP INT1 ; llegada del tren por la derecha ;SENIZQ1 INT0 ;SENDER1 INT1 FCCB1: .REG P0.0 ; entradas puerto 0 FCAB1: .REG P0.1 FCCB2: .REG P0.2 FCAB2: .REG P0.3 SENDER2: .REG P0.4 SENIZQ2: .REG P0.5 LROJAI: .REG P2.0 ; salidas puerto 2 LROJAD: .REG P2.1 LVERDEI: .REG P2.2 LVERDED: .REG P2.3 LROJACO: .REG P2.4 CONVIA: .REG P2.5 MB1BAJAR: .REG P1.0 ; salidas puerto 1 MB1SUBIR: .REG P1.1 MB2BAJAR: .REG P1.2 MB2SUBIR: .REG P1.3 .ORG 0200H MOV IE,#85H ; habilitamos interrupciones externas INT0 e INT1 MOV TCON,#00H ;activas por nivel MOV P2,#00 ;inicializo salidas MOV P1,#00 SUBIRBA: MOV A,P0 ; iinicialmente pueden estar abiertas o cerradas ANL A,#00001010B ;información de los FCA de B1 y B2 CLR C SUBB A,#10 JZ ABIERTAS ; salta si las dos barreras están abiertas MOV A,P0 XRL A,#11111111B ANL A,#00001010B MOV P1,A ; activa el motor de subir de la barrera no abierta JMP SUBIRBA ; y para el motor de la barrera ya abierta ABIERTAS: MOV P1,#00 MOV P2,#0CH ;activo luces verdes trenes, coches apagadas JMP $

Page 77: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

77

AUTOMATISMOS

J. Argüelles / J. Alonso

; --------------------------------------------- ; Llegada de tren por la izquierda ;---------------------------------------------- INT0: CLR LVERDED ;apago luz verde derecha de los trenes SETB LROJAD ;enciendo luz roja derecha de los trenes SETB CONVIA ;coloco conmutador de vía en sentido a derechas CALL INTERMIT SETB LROJACO ;enciendo luz roja de coches MOV P1,#00000101B ; bajo las dos barreras MIRA$: MOV A,P0 ;información de los FCC de B1 y B2 ANL A,#00000101B CLR C SUBB A,#5 JZ CERRADAS$ MOV A,P0 XRL A,#11111111B ANL A,#00000101B MOV P1,A ; activa el motor de bajar la barrera no cerrada JMP MIRA$ ; y para el motor de la barrera ya cerrada CERRADAS$: MOV P1,#00 JNB SENIZQ2,$ ; espero llegada del tren a la derecha CLR IE0 ; borro flag IE0 MOV 08H,#<SUBIRBA ; modifico la dirección de retorno en la pila MOV 09H,#>SUBIRBA RETI ; --------------------------------------------- ; Llegada de tren por la derecha ;---------------------------------------------- INT1: CLR LVERDEI ;apago luz verde izquierda de los trenes SETB LROJAI ;enciendo luz roja izquierda de los trenes CLR CONVIA ;coloco conmutador de vía en sentido a izquierda CALL INTERMIT SETB LROJACO ;enciendo luz roja de coches MOV P1,#00000101B ; bajo las dos barreras MIRA$: MOV A,P0 ;información de los FCC de B! y B2 ANL A,#00000101B CLR C SUBB A,#5 JZ CERRADAS$ MOV A,P0 XRL A,#11111111B ANL A,#00000101B MOV P1,A ; activa el motor de bajar la barrera no cerrada JMP MIRA$ ; y para el motor de la barrera ya cerrada CERRADAS$: MOV P1,#00 JNB SENDER2,$ ;espero llegada del tren a la izquierda CLR IE1 ; borro flag IE1 MOV 08H,#<SUBIRBA ; modifico la dirección de retorno en la pila MOV 09H,#>SUBIRBA RETI

Page 78: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

78 J. Argüelles / J. Alonso

AUTOMATISMOS

;---------------------------------------------------------------------------------------------------- ; SUBRUTINA DE INTERMITENCIA DE LA LUZ ROJA DE LOS COCHES ;---------------------------------------------------------------------------------------------------- INTERMIT: MOV TMOD,#01H MOV R0,#8 PARPADEO: CPL LROJACO MOV R1,#10 TIEMPO: MOV TL0,#0B0H MOV TH0,#3CH CLR TF0 ; borramos TF0 SETB TR0 ; activamos TR0 JNB TF0,$ CLR TR0 ; borramos TR0 DJNZ R1,TIEMPO DJNZ R0,PARPADEO RET .END

Page 79: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

79

AUTOMATISMOS

J. Argüelles / J. Alonso

TREN.ASM

Activo salidas, einterrup. por nivel

Desact LVERDEIActivo LROJAI

barreraslevantadas Si

NO

Subir barreras

INT1

CONVIA izquierda

LROJACO fija

Bajar barreras

Desact LVERDEDActivo LROJAD

CONVIA derecha

INT0

LROJACO fija

Bajar barrerasActivo luces

NOP

LROJACOintermit 4s

SENIZQ2

Si

No

Borro flag IE0 ymodifico dir. de

retorno en la pila

RETI

LROJACOintetermit 4s

SENDER2

Si

No

Borro flag IE1 ymodifico dir. de

retorno en la pila

RETI

Page 80: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

80 J. Argüelles / J. Alonso

AUTOMATISMOS

7.14. Se quiere diseñar un programa que recoja 50 datos proporcionados por un conversor A/D de 8 bits (P0) y los introduzca en una tabla que comienza en la posmem 30. Una vez almacenados los valores, deberán ser imprimidos uno a uno por una impresora (P2). Para que el conversor A/D inicie la conversión de un dato necesita que sea aplicado un pulso de 100 microsegundos por una de sus líneas (P1.0) y a su vez envía un flanco descendente por otra de ellas cuando tiene listo el dato convertido para ser leído. La impresora deberá recibir un nivel alto por una de sus líneas (P1.1) para quedar conectada antes de pasar a enviarle los datos a imprimir y cuando está lista para imprimir envía un flanco descendente por otra de sus líneas. Después de imprimir los datos, deberá desconectarse la impresora poniendo a nivel bajo la señal. .TITLE IMPRESOR.ASM .ORG 0000H JMP 0200H .ORG 0003H ;interrupción para avisar que JMP INT0 ;está listo el conversor .ORG 0013H ;interrupción para avisar JMP INT1 ;que está lista la impresora HABCAD: .REG P1.0 HABIMP: .REG P1.1 .ORG 0200H MOV P1,#00 ;inicializo salidas MOV IE,#85H ;autorizo interrupciones INT0 e INT1 MOV TCON,#05H ;por flanco ambas MOV R1,#50 ;número de datos MOV R0,#30H ;origen de tabla LEEDATO: SETB HABCAD ;activo la señal para el conversor CALL RETARDO ;retardo 100 microsegundos CLR HABCAD ;desactivo la señal para el conversor MOV R2,#0FFH CJNE R2,#00,$ ;espero señal de dato convertido por el CAD MOV A,P0 ;leo dato MOV @R0,A ;y lo llevo a la tabla INC R0 DJNZ R1,LEEDATO SETB HABIMP ;conecto la impresora MOV R2,#0FFH CJNE R2,#00,$ ;espero señal de preparada MOV R1,#50 MOV R0,#30H SACADATO: MOV A,@R0 ;leo dato de la tabla MOV P2,A ;y lo saco hacia la impresora INC R0 DJNZ R1,SACADATO CLR HABIMP ;desconecto la impresora JMP FIN

Page 81: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

81

AUTOMATISMOS

J. Argüelles / J. Alonso

;---------------------------------------------------------------------------------------- ; SUBRUTINA DE ATENCIÓN A INT0 - SEÑAL DEL CAD AL µP ;---------------------------------------------------------------------------------------- INT0: MOV R2,#00H RETI ;-------------------------------------------------------------------------------------------------------- ; SUBRUTINA DE ATENCIÓN A INT1 - SEÑAL DE LISTA LA IMPRESORA ;-------------------------------------------------------------------------------------------------------- INT1: MOV R2,#00H RETI ;----------------------------------------- ; SUBRUTINA DE RETARDO ;----------------------------------------- RETARDO: MOV TMOD,#01H ;retardo de 100 microsegundos MOV TH0,#>65453 ;65536-100+2+14+1 = 65453 MOV TL0,#<65453 MOV TCON,#15H TIEMPO: JNB TF0,TIEMPO CLR TR0 ;desactivo el temporizador T0 CLR TF0 ;TF0=0 RET FIN: NOP .END

Page 82: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

82 J. Argüelles / J. Alonso

AUTOMATISMOS

IMPRESOR.ASM

Inicio salidas

Habilito INT0 yINT1

Activo flancos

R1 = nº de datosR0 = origen tablaR0=30 R1=50

2

Activar CAD

Retardo 100 µs

Desactivar CAD

R2=FFh, Esperola señal de listo

el CAD

R2=00No

Si

Leo el dato en P0

1

1

Lo llevamos a latabla @R0=P0

INC R0

DEC R1

R1 = 0 No 2

Si

Activar impresora

R2=FFh, Esperola señal de lista

la impresora

R2 = 00

Si

No

R1 = nº de datosR0 = origen tablaR0=30 R1=50

3

3

P2 = @R0

INC R0DEC R1

R1 = 0No

Si

Desact impresora

END

INT0

R2 = 00H

END

INT1

R2 = 00H

END

Page 83: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

83

AUTOMATISMOS

J. Argüelles / J. Alonso

� 7.15 Desarrollar el programa que realice la automatización de una escalera mecánica (E.M.) instalada en un centro comercial. La E.M. se pondrá en marcha (P2.0) cuando alguna persona acceda al primer escalón y sea detectada por el sensor que se encuentra en éste punto el cual está conectado al puerto P1.0. Si transcurren más de 25 segundos sin que el sensor de presencia detecte una persona se entenderá que no hay interés en su uso y debemos dar la orden de parada. La señalización del estado de la E.M. se realizará mediante dos lámparas una verde (P2.1) que indicará el estado de funcionamiento y otra roja (P2.2) que indicará el estado de parada. Se dispondrá de un pulsador de emergencia (INT0) para que se pueda parar en cualquier momento la E.M. momento en el cual la lámpara roja parpadeará a una frecuencia de 2,5 Hz indicando la alarma producida. El acuse de recibo de la alarma se realizará mediante la activación de un pulsador de alarma recibida (P1.1) momento en el cual la lámpara roja pasará a fija. Una vez subsanada la causa que motivó la alarma, se reinicializará el sistema mediante el accionamiento del pulsador de alarma recibida (P1.1). .TITLE “ESCALMEC.ASM” .ORG 0000 JMP 0200H .ORG 0003H JMP INT0 MARCHA: .REG P2.0 LVERDE: .REG P2.1 LROJA: .REG P2.2 SENSOR: .REG P1.0 ALARREC: .REG P1.1 .ORG 0200H MOV TCON,#01H ; habilito INT0 por flanco MOV IE,#81H ; habilito INT0 INICIO: MOV P2,#04H ; enciendo luz roja, apago luz verde JNB SENSOR,$ ; compruebo si hay alguna persona en la escalera MOV P2,#03H ; activo escalera, apago luz roja, enciendo luz verde TEM25S: MOV R1,#5 ; contabilizo 25 segundos SALTO2: MOV R2,#250 SALTO: CALL RETARDO JB SENSOR,TEM25S DJNZ R2,SALTO DJNZ R1,SALTO2 JMP INICIO ;----------------------------------------------- ; SUBRUTINA DE RETARDO 2 cs ;----------------------------------------------- RETARDO: MOV TMOD,#01 MOV TL0,#<45536 ; 65536-20000 = 45536 MOV TH0,#>45536 MOV TCON,#11H

Page 84: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

84 J. Argüelles / J. Alonso

AUTOMATISMOS

JNB TF0,$ MOV TCON,#01H RET ;--------------------------------------------------- ; SUBRUTINA DE ATENCIÓN A INT0 ;---------------------------------------------------- INT0: CLR MARCHA CLR LVERDE INTERMIT: CPL LROJA MOV R0,#10 ; retardo 0,2 seg para una frecuencia de 2,5 Hz SALTO3: CALL RETARDO DJNZ R0,SALTO3 JNB ALARREC,INTERMIT SETB LROJA ; dejo fija la luz roja JB ALARREC,$ ; CHEQUEO FLANCO ASCENDENTE del pulsador JNB ALARREC,$ JB ALARREC,$ ; control por flanco descendente MOV SP,#09H MOV 08,#<INICIO MOV 09,#>INICIO RETI .END

Page 85: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

85

AUTOMATISMOS

J. Argüelles / J. Alonso

ESCALMEC

Habilito INT0

Inicializo Salidas

1

SensorNo

Si

Act Esc, LVerdeApago LRoja

Inicio Tem 25 s

SensorSi

No

AcabóTem 25 s

Si

1

No

INT0

Paro EscaleraApago LVerde

Complem LRoja

Retardo 2 cs

PAlar RecNo

Si

Activo LRoja

Flan DescAlar Rec

No

Si

ModificoDir Ret a 1

RETI

Page 86: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

86 J. Argüelles / J. Alonso

AUTOMATISMOS

7.16 El acceso y salida de una sala de museo con una capacidad máxima de 35 personas, se realiza através de unas puertas con unos detectores que nos dan un impulso por cada persona que entra o que sale. ( Entrada en T0, salida en INT0 ). Realizar el programa de control de acceso a dicha sala, de forma tal que cuando haya un número de personas en su interior inferior al máximo se encienda una luz verde, y cuando la sala esté completa se encienda una luz roja. En todo momento se facilitará, mediante unos displays con entrada BCD, el número de personas que todavía pueden entrar para completar dicha sala. Inicialmente se supondrá que no habrá ninguna persona en el interior. Se dispondrá de un pulsador para poder cargar los contadores de forma tal que puedan entrar de nuevo 35 personas. .TITLE “MUSEO.ASM” LVERDE: .REG P2.0 LROJA: .REG P2.1 UNIDAD: .EQU 21H DECENA: .EQU 20H .ORG 0000H JMP INICIO .ORG 0003H JMP INT0 INICIO: MOV P2,#01H MOV TMOD,#05 ;Contador 16 bits MOV TCON,#11H ;INTO flanco, hablito cont. MOV IE,#81H ; habilitamos INT0 MOV TL0,#<65536-35 MOV TH0,#>65536-35 ;va a ser FFH BUCLE: CALL VISUALIZA JNB TF0,BUCLE CLR LVERDE SETB LROJA CALL VISUALIZA JMP $-3 ;------------------------------------------------- ; SUBRUTINA DE VISUALIZACIÓN ;------------------------------------------------- VISUALIZA: CLR C MOV A,#00 SUBB A,TL0 MOV B,#10 DIV AB MOV UNIDAD,B MOV DECENA,A SETB UNIDAD.4 MOV P0,UNIDAD SETB DECENA.5

Page 87: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

87

AUTOMATISMOS

J. Argüelles / J. Alonso

MOV P0,DECENA RET ;------------------------------------------------------ ; SUBRUTINA DE DESCUENTO INT0 ;------------------------------------------------------ INT0: CLR C MOV A,TL0 SUBB A,#01 MOV TL0,A MOV A,TH0 SUBB A,#00 MOV TH0,A JB TF0,SALTO RETI SALTO: SETB LVERDE CLR LROJA CLR TF0 MOV 08,#<BUCLE MOV 09,#>BUCLE MOV SP,#09 RETI .END

Page 88: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

88 J. Argüelles / J. Alonso

AUTOMATISMOS

MUSEO

Iniciamos salidas

T0 contador 16 bitINT0 activa por fl

Contador =65536-35

1

Calculamos nºpersonas por

entrar

BIN-BCD

TF0=1No

LVerde OFFLRoja ON

INT0

T0=T0-1

TF0=1

No

RETI

LVerde ONLRoja OFF

TF0 = 0

Dirección deretorno a 1

RETI

Visualizavalor

Si

Visualizavalor

Page 89: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

89

AUTOMATISMOS

J. Argüelles / J. Alonso

� 7.17 Realizar un programa para controlar un reloj en tiempo real en el que se visualicen las horas y los minutos. La visualización se hará en 4 displays de 7 segmentos con memoria y con entrada en formato BCD (por el nibble bajo irá el dígito y por las líneas del nibble alto se habilitarán, cuando proceda, cada uno de los displays). Para poner el reloj en hora se utilizan 2 preselectores conectados al puerto 1, la salida de dichos preselectores viene en BCD. El ajuste de los minutos se efectuará poniendo el interruptor P 3.3 MINUTOS / HORAS a 1. El ajuste de las horas se hará poniéndolo a 0. Cuando se introduzca un valor erróneo sonará un pequeño zumbador conectado a P 2.0, hasta que el valor sea correcto. Sólo cuando los valores sean correctos, se podrá activar el reloj. El reloj podrá ser puesto en hora en todo momento. Para ello se hace un RESET, y se ajustan los preselectores. El reloj comenzará a funcionar cuando se active un pulsador P 3.2 de INICIO. Inicialmente el display visualizará 00 horas 00 minutos, a continuación modificará las horas o los minutos, con el valor mostrado en el preselector, en función de lo señalado por el interruptor P 3.3.

.TITLE RELOJ.ASM .ORG 0000H JMP INICIO .ORG 000BH JMP INT_T0 SEGUNDOS: .REG R5 MINUTOS: .REG R4 HORAS: .REG R3 PINICIO: .REG P3.2 MIN/HOR: .REG P3.3 ZUMBADOR .REG P2.0 INICIO: MOV P2,#00 MOV R0,#40 ; para simularlo poner 4 MOV R1,#100 ; para simularlo poner 2 MOV TMOD,#02H ;T0 8 Bits con autorecarga, c software

MMHH

Inicio

Minutos / Horas

P1

P3.2

P3.3

P0.7 P0.6 P0.5 P0.4

P0.0 .. P0.3

ZumbadorP2.0

7 7

844

µC

Page 90: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

90 J. Argüelles / J. Alonso

AUTOMATISMOS

MOV TH0,#6 ;temporiza 250 µs MOV TL0,#6 ; para simularlo cargar ambos con 250 MOV IE,#82H ;habilita T0 BUCLE: CALL VIS_HORA JNB MIN/HOR,AJ_HORAS ;ajusta horas MOV MINUTOS,P1 JMP VEVALOR AJ_HORAS: MOV HORAS,P1 VEVALOR: MOV A,#59H CLR C SUBB A,MINUTOS ;59-MINUTOS JC ERROR MOV A,#23H CLR C SUBB A,HORAS ;23-HORAS JC ERROR CLR ZUMBADOR ;para zumbador JMP VE_PINICIO ERROR SETB ZUMBADOR ;activa zumbador JMP BUCLE VE_PINICIO: JNB PINICIO,BUCLE SETB TR0 SALTO: CALL VIS_HORA JMP SALTO ;------------------------------------------------ ; SUBRUTINA DE VISUALIZACION ;------------------------------------------------ VIS_HORA: MOV A,MINUTOS ANL A,#0FH ORL A,#10H MOV P0,A MOV A,MINUTOS SWAP A ANL A,#0FH ORL A,#20H MOV P0,A MOV A,HORAS ANL A,#0FH ORL A,#40H MOV P0,A MOV A,HORAS SWAP A ANL A,#0FH ORL A,#80H MOV P0,A RET

Page 91: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

91

AUTOMATISMOS

J. Argüelles / J. Alonso

;------------------------------------------------- ; SUBRUTINA DE INTERRUPCION ;------------------------------------------------- INT_T0: DJNZ R0,FIN ; 250x40x100 =1.000.000 µs = 1 s MOV R0,#40 ; para simularlo poner 4 DJNZ R1,FIN MOV R1,#100 ; para simularlo poner 2 MOV A,#1 ;incrementa los segundos ADD A,SEGUNDOS DA A MOV SEGUNDOS,A CJNE SEGUNDOS,#60H,FIN MOV SEGUNDOS,#00 MOV A,#1 ;incrementa los minutos ADD A,MINUTOS DA A MOV MINUTOS,A CJNE MINUTOS,#60H,FIN MOV MINUTOS,#00 MOV A,#1 ;incrementa las horas ADD A,HORAS DA A MOV HORAS,A CJNE HORAS,#24H,FIN MOV HORAS,#00 FIN: RETI .END

Page 92: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

92 J. Argüelles / J. Alonso

AUTOMATISMOS

INT_T0

DEC R0

R0 =0 No

Si

2

R0 = 40DEC R1

R1 = 0

Si

Inc SegundosR1 = 100

Seg = 60

No 2

No 2

Segundos = 0Inc Minutos

Minutos=60 No 2

Si

Si

RELOJ.ASM

Inicializamosvariables

T0 8 bits conautorecarga

HabilitamosINT_T0

Visualizavalores

1

Minutos

Si

Minutos = P1 Horas = P1

No

Valorescorrectos

Activamoszumbador

No

Paramoszumbador

Si

1

Inicio

1

No

Si

Page 93: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

93

AUTOMATISMOS

J. Argüelles / J. Alonso

Minutos = 0Inc Horas

Horas = 24 No 2

Si

Horas = 0

RETI

2

Si

Activa T0

Visualizavalores

Si

Page 94: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

94 J. Argüelles / J. Alonso

AUTOMATISMOS

7.18 Se desea automatizar el proceso de descarga y carga automática de un máximo de 5 baterías mediante un circuito electrónico ( C.E.) basado en un microcontrolador 8751. Inicialmente, cuando aún no tenemos puestas las baterías a descargar, deberá estar encendido un led azul (P0.0). Una vez metidas las baterías que queramos descargar en los zócalos correspondientes (de una a cinco), accionaremos el pulsador de conexión (P1.5) para comenzar el proceso de descarga. El micro deberá proporcionar una señal para que el C.E. comienze la descarga (P0.4), apagándose el led azul, así mismo, se encenderá un led naranja (P0.1) indicándonos que estamos en proceso de descarga El circuito electrónico de descarga nos informará que en un determinado zócalo no existe batería descargando dándonos una señal 1 por el pin correspondiente (P1.0 a P1.4). Cuando una batería está descargando y el proceso finaliza, el circuito electrónico nos lo informa dándonos un 1 luego un 0 , 1 sucesivamente por el pin correspondiente (P1.0 a P1.4). El sistema deberá conectar la descarga de todas las baterías pines P2.0 a P2.4 y luego deberá desconectar cada proceso individualmente a medida que se hayan descargado las baterías o no haya batería en el zócalo en cuestión. Cuando las 5 baterías estén descargadas, nos desconectará el proceso de descarga (P0.4), desactivará el led naranja y nos activará el proceso de carga (P0.5) y un led rojo (P0.2) indicando que estamos en proceso de carga. El proceso de carga durará 14 horas, al término de las cuales lo desactivaremos, desactivaremos el led rojo y activaremos un led verde (P0.3) para indicar que ya se pueden retirar las baterías. Para reinicializar el proceso activaremos el RESET PD.: Se debe efectuar el proceso de control de descarga en el menor tiempo posible.

P1.5PCONEX P0.0P0.1P0.2P0.3

P0.4P0.5

P2.4P2.3P2.2P2.1P2.0

P1.4P1.3P1.2P1.1P1.0

LAZULLNARANJALROJALVERDE

PROCESO DESCARGAPROCESO CARGA

CONTROL DESCARGA B5CONTROL DESCARGA B4CONTROL DESCARGA B3CONTROL DESCARGA B2CONTROL DESCARGA B1

ESTADO DESCARGA DE B5ESTADO DESCARGA DE B4ESTADO DESCARGA DE B3ESTADO DESCARGA DE B2ESTADO DESCARGA DE B1

8X51

CE

B

P2.

Page 95: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

95

AUTOMATISMOS

J. Argüelles / J. Alonso

.TITLE BATERIA1.ASM PCONEX: .REG P1.5 LAZUL: .REG P0.0 LNARAN: .REG P0.1 LROJO: .REG P0.2 LVERDE: .REG P0.3 PDESCARGA .REG P0.4 PCARGA: .REG P0.5 ; P2.0 — P2.4 salidas de control individual de descarga de las baterías ; P1 .0 — P1.4 entradas de información de batería descargada .ORG 0000 MOV P0,#01 ; activamos LED azul, apagamos el resto MOV P2,#00 ; desactivamos la descarga individual de las bat. MOV R0,#00 JNB PCONEX,$ SETB PDESCARGA CLR LAZUL SETB LNARAN ; baterías descargando MOV P2,#1FH ; activamos la descarga individual de las bat. INICIO: MOV A,P1 ANL A,#1FH ; mascaramos la información de las baterías ORL A,R0 ; memorizamos cuales han acabado MOV R0,A CPL A ; 1 activo descarga - 0 desactivo descarga MOV P2,A CJNE R0,#1FH,INICIO CLR LNARAN SETB LROJO ; baterías cargando SETB PCARGA MOV TMOD,#01 MOV R0,#70 ; 14*60*60*20 = 70*240*60 SALTO3: MOV R1,#240 SALTO2: MOV R2,#60 SALTO1: MOV TH0,#>15536 MOV TL0,#<15536 CLR TF0 SETB TR0 JNB TF0,$ CLR TR0 DJNZ R2,SALTO1 DJNZ R1,SALTO2 DJNZ R0,SALTO3 CLR PCARGA CLR LROJO SETB LVERDE .END

Page 96: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

96 J. Argüelles / J. Alonso

AUTOMATISMOS

.TITLE BATERIA2.ASM PCONEX: .REG P1.5 LAZUL: .REG P0.0 LNARAN: .REG P0.1 LROJO: .REG P0.2 LVERDE: .REG P0.3 PDESCARGA .REG P0.4 PCARGA: .REG P0.5 ; P2.0 — P2.4 salidas de control individual de descarga de las baterías ; P1 .0 — P1.4 entradas de información de batería descargada .ORG 0000 MOV P0,#01 ; activamos LED azul, apagamos el resto MOV P2,#00 ; desactivamos la descarga individual de las bat. JNB PCONEX,$ SETB PDESCARGA CLR LAZUL SETB LNARAN ; baterías descargando MOV P2,#1FH ; activamos la descarga individual de las bat. INICIO: MOV A,P1 CPL A ANL A,P2 ; memorizamos cuales han acabado MOV P2,A CJNE A,#00,INICIO CLR LNARAN SETB LROJO ; baterías cargando SETB PCARGA MOV TMOD,#01 MOV R0,#70 ; 14*60*60*20 = 70*240*60 SALTO3: MOV R1,#240 SALTO2: MOV R2,#60 SALTO1: MOV TH0,#>15536 MOV TL0,#<15536 CLR TF0 SETB TR0 JNB TF0,$ CLR TR0 DJNZ R2,SALTO1 DJNZ R1,SALTO2 DJNZ R0,SALTO3 CLR PCARGA CLR LROJO SETB LVERDE .END

Page 97: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

97

AUTOMATISMOS

J. Argüelles / J. Alonso

.TITLE BATERIA3.ASM PCONEX: .REG P1.5 LAZUL: .REG P0.0 LNARAN: .REG P0.1 LROJO: .REG P0.2 LVERDE: .REG P0.3 PDESCARGA .REG P0.4 PCARGA: .REG P0.5 ; P2.0 — P2.4 salidas de control individual de descarga de las baterías ; P1 .0 — P1.4 entradas de información de batería descargada MOV P0,#01 ; activamos LED azul, apagamos el resto MOV P2,#00 ; desactivamos la descarga individual de las bat. JNB PCONEX,$ SETB PDESCARGA CLR LAZUL SETB LNARAN ; baterías descargando MOV P2,#1FH ; activamos la descarga individual de las bat. INICIO: JNB P1.0,VEB1 CLR P2.0 VEB1: JNB P1.1,VEB2 CLR P2.1 VEB2: JNB P1.2,VEB3 CLR P2.2 VEB3: JNB P1.3,VEB4 CLR P2.3 VEB4: JNB P1.4,VETODAS CLR P2.4 VETODAS: MOV A,P2 CJNE A,#00,INICIO CLR LNARAN SETB LROJO ; baterías cargando SETB PCARGA MOV TMOD,#01 MOV R0,#70 ; 14*60*60*20 = 70*240*60 SALTO3: MOV R1,#240 SALTO2: MOV R2,#60 SALTO1: MOV TH0,#>15536 MOV TL0,#<15536 CLR TF0 SETB TR0 JNB TF0,$ CLR TR0 DJNZ R2,SALTO1 DJNZ R1,SALTO2 DJNZ R0,SALTO3 CLR PCARGA CLR LROJO SETB LVERDE .END

Page 98: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

98 J. Argüelles / J. Alonso

AUTOMATISMOS

7.19 Realizar el programa para la automatización de un sistema de subasta basado en µC. El precio del bien subastado será un número que se irá decrementando de 1 en 1 y que se visualizará en 4 displays de 7 segmentos con entrada en formato BCD (por el nibble bajo irá el dígito y por las líneas del nibble alto se habilitarán, cuando proceda, cada uno de los displays). Inicialmente el display deberá mostrar el número 0000. Para poder poner el valor adecuado para la subasta en los displays se tendrá un pulsador que permitirá incrementar el dígito seleccionado en incrementos de 1 en 1, de forma tal que cuando se llegue a 9 pasará de nuevo a 0. La selección del dígito se hará mediante 4 interruptores (Unidad, Decena, Centena, Millar) de forma tal que deberemos asegurarnos que para la incrementación del dígito sobre el que queramos actuar, sólo esté uno de ellos activo. Una vez que hallamos alcanzado el valor de partida se iniciará la subasta (decrementación del valor y su correspondiente visualuización) cuando el subastador active un pulsador de “Inicio”. Cuando alguna persona presente levante la mano, el subastador activará un pulsador de petición de interrupción que parará el sistema en el valor requerido y permitirá, a partir de este momento, seleccionar otro nuevo valor por el subastador comenzando de nuevo el proceso.

UDCMSelector Unidad

Selector Decena

Selector CentenaSelector Millar

Incrementa

Inicio

Paro

P1.0P1.1

P1.2

P1.3

P1.4P1.5

INT0

P0.7 P0.6 P0.5 P0.4

P0.0 .. P0.3

Page 99: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

99

AUTOMATISMOS

J. Argüelles / J. Alonso

.TITLE "SUBASTA.ASM" Sin memoria los displays JMP INICIO .ORG 0003 JMP INT0 PIncrem: .REG P1.4 PInicio: .REG P1.5 UNIDAD: .EQU 33H DECENA: .EQU 32H CENTENA: .EQU 31H MILLAR: .EQU 30H INICIO: MOV P0,#0F0H MOV TMOD,#01 ; T0 16 bits control por software MOV TCON,#01 ; INT0 activa por flanco DESHAINT0: MOV IE,#00 ; deshabilitamos INT0 LeeSelec: CALL VERDATO MOV A,P1 ANL A,#0FH CJNE A,#1,MIRADEC JMP IncUni MIRADEC: CJNE A,#2,MIRACENT JMP IncDec MIRACENT: CJNE A,#4,MIRAMIL JMP IncCent MIRAMIL: CJNE A,#8,LeeSelec JMP IncMil IncUni: JNB PIncrem,VE_PINICIO ; incrementa unidad INC UNIDAD MOV A,UNIDAD CJNE A,#10,VISDATO$ MOV UNIDAD,#00 VISDATO$: CALL VERDATO MOV R0,#10 CALL Ret5Cent VE_PINICIO: JNB PInicio,LeeSelec MOV IE,#81H ;habilitamos INT0 CICLO: CALL VERDATO MOV A,UNIDAD ;miramos si el número es 0 ORL A,DECENA ORL A,CENTENA ORL A,MILLAR JZ DESHAINT0 CLR C ; restamos una unidad MOV A,UNIDAD SUBB A,#01 JNC SALTO1 MOV UNIDAD,#09

Page 100: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

100 J. Argüelles / J. Alonso

AUTOMATISMOS

CLR C MOV A,DECENA SUBB A,#01 JNC SALTO2 MOV DECENA,#09 CLR C MOV A,CENTENA SUBB A,#01 JNC SALTO3 MOV CENTENA,#09 CLR C MOV A,MILLAR SUBB A,#01 JNC SALTO4 JMP SALTO5 SALTO1: MOV UNIDAD,A JMP SALTO5 SALTO2: MOV DECENA,A JMP SALTO5 SALTO3: MOV CENTENA,A JMP SALTO5 SALTO4: MOV MILLAR,A SALTO5: MOV R0,#2 CALL Ret5Cent JMP CICLO IncDec: JNB PIncrem,VE_PINICIO ; incrementa decena INC DECENA MOV A,DECENA CJNE A,#10,VISDATO$ MOV DECENA,#00 VISDATO$: CALL VERDATO MOV R0,#10 CALL Ret5Cent JMP VE_PINICIO IncCent: JNB PIncrem,VE_PINICIO ; incrementa centena INC CENTENA MOV A,CENTENA CJNE A,#10,VISDATO$ MOV CENTENA,#00 VISDATO$: CALL VERDATO MOV R0,#10 CALL Ret5Cent SALTO6: JMP VE_PINICIO IncMil: JNB PIncrem,SALTO6 ; incrementa millares INC MILLAR MOV A,MILLAR CJNE A,#10,VISDATO$

Page 101: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

101

AUTOMATISMOS

J. Argüelles / J. Alonso

MOV MILLAR,#00 VISDATO$: CALL VERDATO MOV R0,#10 CALL Ret5Cent JMP VE_PINICIO ;------------------------------------------------- ; SUBRUTINA DE VISUALIZACIÓN ;------------------------------------------------- VERDATO: MOV P0,UNIDAD SETB P0.4 MOV P0,DECENA SETB P0.5 MOV P0,CENTENA SETB P0.6 MOV P0,MILLAR SETB P0.7 RET ;------------------------------------------------ ; SUBRUTINA DE RETARDO 5 cs ;------------------------------------------------ Ret5Cent: MOV TL0,#<15536 MOV TH0,#>15536 SETB TR0 SALTO$: CALL VERDATO JNB TF0,SALTO$ CLR TF0 CLR TR0 DJNZ R0,Ret5Cent RET ;---------------------------------------------------- ; SUBRUTINA DE ATENCIÓN A INT0 ;---------------------------------------------------- INT0: MOV 08,#<DESHAINT0 MOV 09,#>DESHAINT0 MOV SP,#09 RETI .END

Page 102: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

102 J. Argüelles / J. Alonso

AUTOMATISMOS

8. COMUNICACIONES 8.1. Programa para recibir bytes por el puerto serie en modo 0 .TITLE RECEP_M0.ASM .ORG 0000H JMP 0200H .ORG 0023H ;vectorizo la interrupción serie JMP INTSER .ORG 0200H MOV IE,#90H ;habilito int de recepción serie INICIO: MOV SCON,#10H ;permito la recepción REN=1 y RI=0 CALL RETARDO JMP INICIO RETARDO: MOV R0,#02H SALTO1: MOV R1,#0FFH SALTO2: MOV R2,#0FFH DJNZ R2,$ DJNZ R1,SALTO2 DJNZ R0,SALTO1 RET INTSER: MOV A,R0 PUSH A MOV A,R1 PUSH A MOV A,R2 PUSH A MOV A,SBUF ;recoje el dato MOV P0,A ;lo saca por el puerto 0 CALL RETARDO POP A MOV R2,A POP A MOV R1,A POP A MOV R0,A CLR SCON.0 ;borra flag RI para permitir otra recepción RETI .END

Page 103: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

103

AUTOMATISMOS

J. Argüelles / J. Alonso

8.2. Programa para transmitir en modo 0 los bytes que se leen del puerto 0. TITLE TRANS_M0.ASM .ORG 0000H JMP 0200H .ORG 0200H MOV SCON,#00 ;inicializo SCON en modo 0 INICIO: MOV A,P0 ;leo el dato del puerto 0 MOV SBUF,A ;Inicio la transmisión y espero que finalice JNB TI,$ ;espero que termine la transmisión CALL RETARDO CLR TI JMP INICIO RETARDO: MOV R0,#02 ;temporiza aproximadamente 4 segundos SALTO1: MOV R1,#0FFH SALTO2: MOV R2,#0FFH DJNZ R2,$ DJNZ R1,SALTO2 DJNZ R0,SALTO1 RET .END 8.3. Programa de control de un microcontrolador en un entorno multiprocesador. ; Modo multiproceso de la UART en un 8051 ; En éste caso, el microcontrolador esclavo tiene asignado una dirección cuyo código es 07. ; Únicamente responderá a la llamada del PC maestro cuando éste solicite su atención. ; Para ello, el maestro, deberá enviar por el bus serie, el valor de su código asociado. ; ; El microcontrolador esclavo borrará su bit SM2, y estará en disposición de aceptar ; todos los datos que le envíe el maestro. Los datos tendrán el bit TB8 puesto a 0, ; de ésta forma, el resto de los microcontroladores harán caso omiso a la comunicación. ; Para transmitir deberá activar el transmisor y al acabar desactivarlo. .TITLE MULTIPRO.ASM .ORG 0000H ;vector RESET JMP 0200H .ORG 0023H ;vector de la interrupción serie JMP INTSERIE ; ------------------------------ ; Definición de valores ; ------------------------------ CR: .EQU 13 ; Retorno de carro LF: .EQU 10 ; Avance de línea PCON: .EQU 87H

Page 104: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

104 J. Argüelles / J. Alonso

AUTOMATISMOS

ORDEN: .DB CR,LF,"Tarjeta nº 7 activada",CR,LF,"Orden : ",00 ERROR: .DB CR,LF,"Orden desconocida",CR,LF .DB "Las ordenes conocidas son: A => Activar P2.2",CR,LF .DB " D => Desactivar P2.2",CR,LF,00 CONTROL: .REG P2.0 ;Control del transmisor SN75176 ; ------------------------------ ; Programa principal ; ------------------------------ .ORG 0200H MOV SCON,#0F0H ; Inicializamos el SCON REN=1, RI=0, MODO 3 MOV TMOD,#20H ; Timer 1 en modo 2 "autorecarga" MOV TH1,#0FDH ; velocidad de 9.600 baudios ANL PCON,#7FH ; SMOD = 0 SETB TR1 ; Activa el TIMER1 MOV IE,#90H ; Habilita la interrupción serie INICIO: CPL P2.1 ; Hace parpadear el P2.1 CALL RETARDO JMP INICIO ; ------------------------------ ; Subrutina de retardo ; ------------------------------ RETARDO: MOV R0,#02 ;temporiza aproximadamente 4 segundos SALTO1$: MOV R1,#0FFH SALTO2$: MOV R2,#0FFH DJNZ R2,$ DJNZ R1,SALTO2$ DJNZ R0,SALTO1$ RET ;------------------------------ ; Interrupción serie ; ----------------------------- ; Sólamente se activará si se recibe un byte con el 9º bit =1 ; Se comprobará que el código de dirección recibido es el de la tarjeta. ; En caso contrario saldrá de la interrupción INTSERIE: PUSH A ; Salvaríamos los registros necesarios PUSH PSW MOV A,SBUF ; Obtenemos el código de dirección y si el mensaje CJNE A,#07H,FININT ; no destinado a ésta tarjeta, salimos de la Int CLR SCON.5 ; Borramos SM2 SETB CONTROL ; Habilitamos el transmisor PET_ORD: MOV DPTR,#ORDEN ; y pedimos que nos envien la orden CALL SAL_SER ; Sacamos el mensaje JNB RI,$ ; Espera recepción de la orden MOV A,SBUF ; Orden recibida CLR RI ; Borro RI para próxima recepción CJNE A,#"A",SALTO1$

Page 105: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

105

AUTOMATISMOS

J. Argüelles / J. Alonso

SETB P2.2 ; Activa el P2.2 JMP SALIR SALTO1$: CJNE A,"D",SALTO2$ CLR P2.2 ; Desactiva el P2.2 JMP SALIR SALTO2$: MOV DPTR,#ERROR ; Avisamos de que la orden era incorrecta CALL SAL_SER ; y volvemos a pedir que nos envien otra JMP PET_ORD SALIR: CLR CONTROL ; Desactivamos el transmisor SETB SCON.5 ; Activamos SM2 FININT: POP PSW ; Recuperaríamos los registros guardados POP A CLR RI ; Borramos RI para poder volver a recibir RETI ; ----------------------------------------- ; Subrutina para sacar mensajes ;------------------------------------------ SAL_SER: MOV A,#00 MOVC A,@A+DPTR JZ FINMEN MOV SBUF,A ; transmite el caracter del acumulador JNB TI,$ ; espera que termine de transmitirlo CLR TI ; borra TI para poder transmitir denuevo INC DPTR ; apuntamos al siguiente caracter JMP SAL_SER FINMEN: RET .END

Page 106: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

106 J. Argüelles / J. Alonso

AUTOMATISMOS

PROBLEMAS PROPUESTOS 9.1. Un semáforo compuesto de tres estados luminosos (rojo P2.0, verde P2.1 y ámbar P2.2), tiene que ser controlado mediante temporización variable, la cual es suministrada por dos preselectores BCD (formato empaquetado) conectados a los puertos P0 (entrada de la duración en segundos del estado en rojo) y P1 (entrada de la duración en segundos del estado en ámbar). La duración del ciclo completo deberá ser siempre de 50 segundos, a repartir entre el estado rojo, verde y ámbar. Siendo la duración del ciclo rojo siempre inferior o igual a 25 segundos y la del ámbar entre 6 y 10 segundos inclusive. Inicialmente el semáforo tendrá todas sus luces apagadas. Disponiéndose de un pulsador mediante el cual lo activaremos y lo desactivaremos instantáneamente. Cuando se active inicialmente el semáforo, o cuando haya terminado un ciclo de temporización, comenzará el nuevo ciclo de temporización con el valor indicado por los preselectores en ese instante. En el caso de tener un valor incorrecto los preselectores, se desactivarán las salidas y se activará una claxon P2.3 que cesará de sonar cuando se active el pulsador de alarma recibida. Volviendose a releer los preselectores y comenzando de nuevo todo el ciclo cuando se active un pulsador de continuar. N.B. Observar que la temporización puede ser variada, en un momento dado, modificando el valor de los preselectores, en cuyo caso, se terminaría el ciclo en curso y comenzaría el siguiente con la nueva temporización. 9.2. Realizar un programa para controlar un cronómetro en el que se visualice los minutos y los segundos. La salida se hará por el P0. Para habilitar los 4 displays BCD se utilizará el nibble bajo para mandar el dato y los pines P0.4 a P0.7 para habilitar el display. El cronómetro comenzará a funcionar con la activación de INT0 y parará con la activación de INT1. 9.3. Un sistema formado por tres lámparas se utiliza para advertir de un evento determinado. El funcionamiento es el siguiente: Disponemos de un pulsador, mediante el cual se activa una lámpara roja, y permanece activada durante 10 segundos, a continuación se debe desactivar la lámpara roja y activar otra ámbar en estado parpadeante a una frecuencia de 2 Hz durante 5 segundos, transcurridos estos se debe proceder a la desactivación de la lámpara ámbar y activación de otra lámpara verde. Para desactivar la lámpara verde y volver a las condiciones iniciales se debe proceder a una nueva activación del pulsador.

Page 107: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

107

AUTOMATISMOS

J. Argüelles / J. Alonso

9.4. Se desea automatizar mediante una tarjeta basada en el microcontrolador 8X51 el acceso, la salida y el interior de un garaje de coches que dispone de los siguientes elementos: � Un lector de tarjeta magnética para la petición de entrada al garaje (TME) y otro para la

salida (TMS), que proporcionaran un uno lógico ante la demanda. � Un portón accionado por un motor que dispondrá de dos sentidos de giro (Abrir) y

(Cerrar), y dos finales de carrera para indicar que el portón está abierto (FCA) y cerrado (FCC).

� Una puerta de acceso peatonal con llave. � Un sensor (SenCo) que informará cuando hay un coche en la trayectoria del portón. � Un sensor de luz (SenLuz) que nos informa mediante un uno lógico que la luz natural en

el interior es insuficiente. � Cuatro pulsadores (S1, S2, S3, S4) que conmutarán el estado de la luz artificial interior del

garaje. � Varios puntos de luz artificial en el interior del garaje (Luz).

Cuando se conecte la tarjeta microcontroladora se deberá cerrar el portón si no lo estuviese, quedando luego en funcionamiento automático. Ante una petición de entrada, el portón deberá abrirse durante 10 segundos y si no hay suficiente luz natural en el interior del garaje, deberá activarse la luz artificial de forma automática. De otra forma aunque existiese suficiente luz, ante una pulsación de S1, S2, S3 o S4 deberá conmutar el estado de la luz artificial del garaje.

Ante una petición de salida deberá abrirse el portón un máximo de 10 segundos y luego apagarse la luz artificial automáticamente. Cuando esté cerrando el portón y haya un coche en el trayecto del mismo, deberá parar la maniobra y abrir el portón hasta que el coche haya pasado. A continuación deberá seguir la maniobra de cierre. Si hubiese una petición de entrada o de salida cuando esté cerrando, se deberá atender automáticamente; para ello abrirá el portón y procederá en consecuencia.

Realizar el esquema de conexión del microcontrolador con los respectivos elementos de campo.

S4

S1

S2S3

M

SenCo Luz

Luz

LuzSenLuz

TME

TMS

FCC

FCA

Puertapeatonal

Page 108: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

108 J. Argüelles / J. Alonso

AUTOMATISMOS

9.5. Se desea controlar la temperatura de un local que va a ser calorifugado mediante 4 radiadores eléctricos distribuidos por el mismo. La temperatura estará comprendida entre 0 y 30 grados. Disponemos:

Un interruptor general ( IGENERAL = P1.7 ) para la puesta en servicio o desconexión de la instalación. Un sensor de temperatura que nos permitirá conocer el valor real de la temperatura en el local ( ST = P0 ). Un preselector BCD con el cual estableceremos la temperatura de referencia ( TR = P3 ). Si por error se mete un valor que esté fuera del intervalo admitido, deberá leerse continuamente el preselector hasta que el valor sea correcto. El valor correcto lo reflejaremos mediante un led controlado mediante la salida P2.5.

Secuencia de control Inicialmente se conectarán los cuatro radiadores mediante ordenes que emanarán por los bits P2.0, P2.1, P2.2, P2.3 El sensor de temperatura se consultará cada cinco minutos hasta alcanzar la temperatura de referencia “TR”. Una vez alcanzada se procederá de la siguiente manera para lograr su establecimiento:

Si la temperatura tomada por el sensor es superior a la de referencia, en cada consulta, tendremos que desconectar un radiador. Si la temperatura del sensor nos da una temperatura menor que la de referencia, dejaremos los radiadores como están y haremos otra segunda lectura, si persisten las condiciones, incrementaremos en uno los radiadores en funcionamiento, si disponemos de radiadores, y así sucesivamente.

Page 109: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

109

AUTOMATISMOS

J. Argüelles / J. Alonso

9.6. Una estación de bombeo consta de dos bombas B1 y B2, las cuales deben funcionar de manera alternada para evitar un desgaste excesivo de una respecto de otra. El depósito que recoge los líquidos a evacuar está dotado de dos sensores de nivel, uno para determinar el nivel mínimo (Nmin) y otro para determinar el nivel máximo (Nmax). CONDICIONES INICIALES. El sistema parte de la condición de Paro: las bombas deben estar paradas y la luz de paro activada. ARRANQUE DE LAS BOMBAS. El sistema tiene dos modos de trabajo:

1. Marcha automática, el arranque debe producirse de manera automática cuando se activa el sensor de nivel máximo. Funcionará la bomba que menos tiempo de uso tenga. 2. Forzado manual también podremos hacer, mediante un pulsador que, estando el sistema parado, o desactivadas las bombas en Marcha automática, arranque la bomba que le corresponda, funcionando éstas hasta el vaciado del depósito y quedando luego en la situacion de partida. Durante el forzado manual, se activará, además de la luz que estuviese, la de forzado manual.

Si una vez arrancado la bomba correspondiente, el nivel máximo permanece 5 minutos sin desactivarse, debe entrar en funcionamiento la otra bomba hasta que se desactive el sensor de nivel máximo. PARADA DE LAS BOMBAS. La parada debe producirse cuando se activa el sensor de nivel mínimo quedando en el modo de trabajo que estuviese. Mediante un pulsador de Paro, también podremos hacer que las bombas en funcionamiento se paren volviendo el sistema a las condiciones iniciales. SECUENCIA DE BOMBEO. Cada bomba no debe funcionar más de quince minutos seguidos . SEÑALIZACIÓN. Deberá existir una lámpara para indicar la condición de Paro, Marcha automática o Forzado manual.

Nota: El diseño se ha hecho de forma tal que el depósito se puede evacuar siempre con una sóla bomba. El sensor de nivel máximo da un 1 lógico, cuando el agua esté en ese nivel o superior. El sensor de nivel mínimo da un 1 lógico, cuando el agua esté en ese nivel o inferior.

B1 B2

N.Mín

N.MáxMarAut

Paro

ForMan

MarAut

ForManParo

Nmin = P 0.0 Nmax = P 0.1 MarAut = P 0.2 ForMan = INT_1Paro = INT_0 B1 = P 2.0 B2 = P 2.1 LMarAut = P 2.2 LParo = P 2.3 LForMan = P 2.4

Page 110: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

110 J. Argüelles / J. Alonso

AUTOMATISMOS

9.7 Automatización de un semáforo mediante el microcontrolador 8X52. El semáforo que ha de regir el paso de vehículos, estará sujeto a una variación en su temporización, según el número de vehículos que se encuentren en cola de espera. La calle, como se puede apreciar en el dibujo, está dividida en dos carriles con sus respectivos sensores (S1, S2) y (S3, S4).

Cuando en uno cualquiera de los carriles se encuentran 20 o más vehículos la temporización ha de ser la siguiente: verde: 30 s ámbar: 5 s fijo y 3 s a 2 Hz rojo: 15 s Cuando tengamos menos de 20 vehículos en ambos carriles la temporización ha de ser la siguiente: verde: 20 s ámbar: 5 s fijo y 3 s a 2 Hz rojo: 25 s El valor de la cuenta efectiva para efectuar el cambio de la secuencia de la temporización es la que realiza desde el momento en que el semáforo se pone en rojo hasta un instante antes de producirse el cambio a verde. Nota: Se supone que los carriles son de dirección única y no se puede cambiar de uno a otro. Los vehículos que circulan son solamente automóviles.

9.8 Se desea diseñar un programa, para que un µC, realice el control de las operaciones de un montacargas, éste está sólo destinado al transporte de mercancías, entre las tres plantas de un almacén. En cada planta disponemos:

1. Tres pulsadores, para enviar la mercancía a la planta deseada y también demandar el montacargas.

2. Un interruptor de enclavamiento para poder realizar las operaciones de carga y descarga pertinentes.

3. Durante el enclavamiento y durante el desplazamiento no se atenderá ninguna demanda mediante pulsador, el estado de enclavamiento se indicrá mediante un LED.

S1

S3

S2

S4

Page 111: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

111

AUTOMATISMOS

J. Argüelles / J. Alonso

4. Un final de carrera que detectará la posición en la planta correspondiente. 5. Un display sin memoria de tres dígitos (0,1,2) para indicar donde está el montacargas. 6. Cuando se accione el final de carrera al que se destina el montacargas, se visualizará

en el display correspondiente de las tres plantas (en paralelo) de manera continua el número de planta.

7. Cuando se reenvía o demanda el montacargas, a una planta determinada deberá parpadear a una frecuencia de 2 Hz el número de dicha planta en los displays, hasta que la petición sea atendida (accionamiento del final de carrera correspondiente).

El montacargas estará inicialmente en una planta cualquiera.

9.9 Se desea visualizar por el display la suma de dos números en formato BCD empaquetado.

Los números se introducirán por los puertos 1 y 2 en formato hexadecimal (cada uno podrá tener un valor de 0 a 255). Posteriormente se convertirán a BCD empaquetado depositando en las memorias 30 (millar,centena), 31 (decena,unidad) el primer número y en la 32 (millar,centena), 33 (decena,unidad) el segundo. Después se sumarán en BCD y su resultado se visualizará por 4 displays de 7 segmentos con entrada en formato BCD (por el nibble bajo irá el dígito y por las líneas del nibble alto se habilitarán, cuando proceda, cada uno de los displays) conectados al puerto 0.

Entradas

PPlanta0 P1.0PPlanta1 P1.1PPlanta2 P1.2IntEnclav P1.3FCP0 P1.4FCP1 P1.5FCP2 P1.6

Salidas

MSubir P2.0MBajar P2.1LED_Enc P2.2Display P0

012Pplanta0Pplanta1Pplanta2IntEnclav

P1.0P1.1

P1.2

P1.3

P0.6 P0.5 P0.4

P0.0 .. P0.3

P2.0P2.1P2.2

MSubir

LED_EncMBajar

Page 112: El microcontrolador 8X51-2 Problemas - Portal del Área de

El microcontrolador 8X51/2 Problemas

112 J. Argüelles / J. Alonso

AUTOMATISMOS

UDCM

P1

P0.7 P0.6 P0.5 P0.4

P0.0 .. P0.3

8

µC

P28