MICROCONTROLADORES Timer/Contadores Timer/Contadores Los Los Temporizadores/Contadores Temporizadores/Contadores Carlos E. Canto Quintal MICROCONTROLADORES Timer/Contadores Timer/Contadores Los Timers/Contadores 9El 80C51 tiene dos registros de Timers/ Timers/Contadore de 16 bits : El Timer0 y el Timer 1. 9Se pueden configurar para operar ya sea como Timers o como contadores de eventos. TIMER PUEDE CONTAR EVENTOS O TEMPORIZAR Carlos E. Canto Quintal MICROCONTROLADORES Timer/Contadores Timer/Contadores Carlos E. Canto Quintal MICROCONTROLADORES Timer/Contadores Timer/Contadores Modelo de la operación de los Timers 0 y 1 del 80C51 fxtal fosc= fxtal Xtal1 Xtal1 Xtal2 Xtal2 Oscilador Oscilador interno interno fxtal / 12 ::12 12 C/T=0 timer Conteo inicial Conteo inicial CONTADOR CONTADOR CLK OVF C/T=1 contador TF0 TF0 Tx Tx Genera Genera Interrupción Interrupción GATE GATE CC/ /TT TRx TRx INTx INTx Carlos E. Canto Quintal EL TIMER Microcontroladores Configuración de Timer Funcionando como Timer, el registro es incrementado cada ciclo de de máquina, por lo tanto se puede pensar que opera como un contador de ciclos de má máquina . Ya que un ciclo de má máquina consta de 12 periodos del oscilador, la rapidez de conteo es de 1/12 la frecuencia del oscilador. Conteo Conteoinicial inicial Oscilador Oscilador interno interno :: 12 12 Contador Contador programable programable TF0 TF0 fxtal = 12 MHz fosc= fxtal = 12 MHz fxtal / 12= 1 MHhz 1µseg Facultad de Ciencias/UASLP MICROCONTROLADORES M.I. Carlos Canto Quintal Timer/Contadores Timer/Contadores Modelo de los Timer 0 y 1 Carlos E. Canto Quintal MICROCONTROLADORES Timer/Contadores Timer/Contadores Timer 0-1, Registro de control TMOD GATE GATE=1, el TIMER x está habilitado solamente cuando su patilla de entrada INTx está a ‘1’ y el bit TRx del registro TCON está a ‘1’ GATE = 0, el TIMER x está habilitado si TRx está a 1. C/T Permite la selección de la función TIMER: C/T = 0, el TIMER actúa como TEMPORIZADOR C/T = 1, el TIMER actúa como CONTADOR de los eventos presentes en la patilla de entrada Tx. Carlos E. Canto Quintal MICROCONTROLADORES Timer/Contadores Timer/Contadores Timer 0-1,TMOD – Modos de funcionamiento Carlos E. Canto Quintal MICROCONTROLADORES Timer/Contadores Timer/Contadores Timer 0-1, Registro de control TCON TF1: Indicador de desbordamiento del TIMER 1. Puesto a 1 automáticamente cuando el contador llega a 0. Si la interrupción correspondiente está permitida, este indicador automáticamente se vuelve a poner a 0 cuando se ejecuta la subrutina de interrupción Si se utiliza por sondeo hay que borrar el flag manualmente TR1: Bit de arranque del TIMER 1. Se debe poner a 1 por software para permitir la cuenta en el TIMER y a 0 para detenerla TF0: Indicador de desbordamiento del TIMER 0 . Mismo funcionamiento que TF1 TR0: Bit de arranque del TIMER 0. Mismo funcionamiento que TR1 Carlos E. Canto Quintal MICROCONTROLADORES Timer/Contadores Timer/Contadores Carlos E. Canto Quintal MICROCONTROLADORES Timer/Contadores Timer/Contadores Carlos E. Canto Quintal MICROCONTROLADORES Timer/Contadores Timer/Contadores Timer 0-1,Modo 0: Contador de 13 bits Carlos E. Canto Quintal MICROCONTROLADORES Timer/Contadores Timer/Contadores Timer 0-1,Modo 1: Contador de 16 bits Carlos E. Canto Quintal MICROCONTROLADORES Timer/Contadores Timer/Contadores Ejemplo del uso del Timer en modo 1 : Se desea conseguir un retardo de 50 msegs con un Timer del 80C51 Inicio Iniciode deconteo conteo Para Paragenerar generarun unretardo retardode de50 50 msegs con un cristal de 12 msegs con un cristal de 12Mhz Mhz se serequiere requierecontar contar50,000 50,000 pulsos de reloj (ciclos pulsos de reloj (ciclosde de máquina) máquina) 65,536-50,000=15,536 65,536-50,000=15,536 Reset Tx=15,536 T=50,000 Tmax=65,536 Cada ciclo de máquina es igual a 1µsegundo tal que: 50 msegs=1µsegundo X 50,000 Carlos E. Canto Quintal MICROCONTROLADORES Timer/Contadores Timer/Contadores Obtención del Valor Inicial del timer para conseguir el conteo de 50,000 pulsos (ciclos de máquina) 15, 15, 536/256=60.6875 536/256=60.6875 60*256=15360 60*256=15360 15536-15360=176 15536-15360=176 TH0=176 TH0=60 00 00 11 11 11 11 00 00 11 00 11 11 00 00 00 00 Timer T0=15,536 Carlos E. Canto Quintal MICROCONTROLADORES Timer/Contadores Timer/Contadores Timer 0-1,Modo 2: Contador de 8 bits con recarga Carlos E. Canto Quintal MICROCONTROLADORES Timer/Contadores Timer/Contadores FUNCIONALIDAD MODO 2 Generar interrupciones periódicas de periodo: – Frecuencia Máxima. Cargando en THx=0xFF – Frecuencia Mínima. Cargando en THx=0x00 Generar la frecuencia de reloj para las comunicaciones serie asíncronas Carlos E. Canto Quintal MICROCONTROLADORES Timer/Contadores Timer/Contadores Timer 1, Generador de frecuencia de comunicación serie Configuración TMOD Frecuencias comunicación normalizadas Carlos E. Canto Quintal MICROCONTROLADORES Timer/Contadores Timer/Contadores Timer 0 y 1. Modo 3 Si se configura el timer 1 en modo 3 este contador detiene su cuenta; tiene un efecto equivalente a poner TR1= 0 en los modos 0, 1 o Carlos E. Canto Quintal MICROCONTROLADORES Timer/Contadores Timer/Contadores FUNCIONAMIENTO DEL MODO 3 Al configurar el timer 0 en modo 3, se convierte en dos timers: – TL0: temporizador o contador de eventos de 8 bits, se pone en funcionamiento con TR0. Cuando se produce el desbordamiento activa TF0 – TH0: temporizador de 8 bits, se pone en funcionamiento con TR1. Cuando se produce el desbordamiento se activa TF1. Estos bits (TR1 y TF1) dejan de estar asociados al Timer 1 Cuando el timer 0 funciona en modo 3, el Timer 1 puede configurarse como temporizador o contador en uno de los modos: 0, 1 o 2, estando siempre funcionando y sin indicador de desbordamiento; para pararlo hay que configurarlo también en modo 3. El timer 1 se puede emplear, por ejemplo, para generar la frecuencia de funcionamiento del dispositivo de comunicaciones serie (UART) Carlos E. Canto Quintal EL TIMER Microcontroladores Ejemplo: programa el timer0 para que genere una onda cuadrada de aproximadamente 500hz +5 V Frecuencia = 500Hz 1ms P1.0 P1.0 fxtal = 12 MHz 8031 8031 1ms (1/8) 74LS244 2ms M.I. Carlos Canto Quintal Facultad de Ciencias/UASLP EL TIMER Microcontroladores CONTEO INICIAL=FFFFH-CONTEO DESEADO+1 0000h CONTEO DESEADO=1000=03E8H POR LO TANTO EL CONTEO INICIAL SERÁ: FFFFH-03E8H=FC17H+1=FC18H Se desea que cuando el contador rebase su conteo final FFFFh, no regrese a ceros sino que se recargue con el valor de conteo inicial FC18h Carga Cargade de Conteo Conteo inicial inicial Para Paratimer timer TR0=0 TR0=0 SI TF0=1 llama a RSI Facultad de Ciencias/UASLP TF0=0 Alcanzó Alcanzó Conteo Conteo final final FC18H Arranca Arrancatimer timer TR0=1 TR0=1 Conteo inicial 1000 pulsos contados FFFFh M.I. Carlos Canto Quintal EL TIMER Microcontroladores Diagrama de flujo para el programa del ejemplo del Timer Apagar LED en P1.0 Apagar LED en P1.0 Rutina Rutinade deservicio servicio del Timer0 del Timer0 TF0 TF0 se se hace hace 00 automáticamente automáticamente Habilita interrupción Habilita interrupción de Timer0 de Timer0 Parar Pararconteo conteo Selección Modo Selección Modo De operación del Timer0 De operación del Timer0 Complementa ComplementaP1.0 P1.0 Cargar conteo inicial Cargar conteo inicial en TH0 y TL0 en TH0 y TL0 Cargar Cargarconteo conteoinicial inicial en TH0 en TH0yyTL0 TL0 Arranca Timer0 Arranca Timer0 Arranca ArrancaTimer0 Timer0 Espera fin de conteo Espera fin de conteo Retorna Retorna Es TF0=1 Es TF0=1 ? ? No Call CallRutina Rutinade deservicio servicio del Timer del Timer00 El ElMicro Microrealiza realiza esta estaparte parte automáticamente automáticamente M.I. Carlos Canto Quintal Facultad de Ciencias/UASLP MICROCONTROLADORES Timer/Contadores Timer/Contadores Configuración como Contador de eventos externos La Laseñal señalde de reloj reloj proviene provienede de algún algúnsensor sensor del delevento evento Conteo inicial Conteo inicial CONTADOR CONTADOR CLK OVF TF0 TF0 contador Tx Tx Genera Genera Interrupción Interrupción GATE GATE CC/ /T=1 T=1 TRx TRx INTx INTx Carlos E. Canto Quintal MICROCONTROLADORES Timer/Contadores Timer/Contadores Configuración como Contador de eventos externos En esta función , la entrada externa T0 ó T1, es monitoreada durante S5P2 de cada ciclo de máquina. Cuando la muestra presenta un alto en un ciclo y bajo en el siguiente el conteo es incrementado. El valor de la nueva cuenta aparece en el registro durante S3P1 del ciclo siguiente en donde fue detectada la transición. Ya que se requieren 2 ciclos de máquina (24 periodos del oscilador) para detectar una transición de 1 a 0 , la velocidad máxima de conteo es de 1/24 la frecuencia del oscilador . No hay restricciones en el ciclo de trabajo de la señal de entrada externa , pero se debe asegurar que un nivel dado se debe muestrear al menos una vez en antes de que cambie , deberá sostenerse por al menos un ciclo completo CLK S1 S2 S3 S4 S5 S6 S1 S2 S3 S4 S5 S6 T0 2 ciclos de máquina= 24 ciclos de reloj Carlos E. Canto Quintal MICROCONTROLADORES Timer/Contadores Timer/Contadores ¿ Qué es exactamente un evento ? Es importante notar que el 80C51 checa la línea P3.4 en cada ciclo de máquina (12 ciclos de reloj). Esto significa que si P3.4 es bajo, va a alto y regresa a bajo en 6 ciclos de reloj es probable que no sea detectado por el 80C51. Esto también significa que el Contador de eventos del 80C51 solamente es capaz de contar eventos que ocurren a una velocidad máxima de 1/24 avo la velocidad de la frecuencia del cristal. Tal que , si la frecuencia del cristal es 12 Mhz se podría contar un máximo de 500,000 eventos por segundo (12Mhz*1/24=500,000). Si el evento a contar ocurre a más de 500,000 veces por segundo el 80C51 no será capaz de contarlo con exactitud. Carlos E. Canto Quintal MICROCONTROLADORES Timer/Contadores Timer/Contadores Ejemplo: Determinación de volúmen de táfico vehicular Supongamos que tenemos un sensor colocado en el camino, que enviará un pulso cada vez que un carro pasa por encima de él. Ésto podría ser usado para determinar el voúmen de tráfico del camino. Podríamos conectar este sensor a una de las líneas de E/S del 80C51 y monitorearla constantemente, detectando cuando el pulso es alto y entonces incrementar nuestro contador cuando regresa al estado bajo. Esta técnica de sondeo no es complicada pero si ineficiente, supongamos que el sensor está en P1.0 nuestro programa podría ser: JNB P1.0,$ ;si un carro no ha levantado la señal, se queda esperando JB P1.0,$ ;La línea es alta lo cual significa que el carro está sobre el sensor justo ahora INC COUNTER ;El carro ha pasado completamente, entoces lo contamos Carlos E. Canto Quintal MICROCONTROLADORES Timer/Contadores Timer/Contadores Lo que el Timer realmente cuenta, hablando a nivel eléctrico, son las transiciones de 1 a 0 de la línea P3.4. Esto significa que cuando un carro primero pasa por encima del sensor, ésto pondrá la entrada a una condición alta (“1”). En este momento el 80C51 no contará nada ya que la transición fue de 0 a 1, pero cuando el carro ya haya pasado el sensor regresará a su estado bajo (“0“) . Ésta ya es una transición de 1 a 0 y en ese instante el contador será incrementado en 1. Carlos E. Canto Quintal MICROCONTROLADORES Timer/Contadores Timer/Contadores PROBLEMA DE TAREA: Implemente un programa para contar el número de autos que pasan en un minuto por encima de un sensor de volumen de tránsito Carlos E. Canto Quintal MICROCONTROLADORES Timer/Contadores Timer/Contadores Ejemplo: Medición de la duración de un Pulso Con un sistema basado en el 80C51, se desea medir la duració duración de un pulso a nivel alto que se produce en la señ señal “pulso” pulso” tal y como se muestra en la figura. Supondremos que el microcontrolador tiene una señ señal de reloj de 12MHz. Indique qué qué recursos del 80C51 utilizarí utilizaría para realizar esta aplicació aplicación y có cómo conectarí conectaría las señ señales del sistema. Pulso Tiempo a medir Carlos E. Canto Quintal MICROCONTROLADORES Timer/Contadores Timer/Contadores Ejemplo: Medición de la duración de un Pulso Fxtal=12Mhz fosc= fxtal Xtal1 Xtal1 Xtal2 Xtal2 Pulso Oscilador Oscilador interno interno ::12 12 fxtal / 12 C/T=0 timer Tiempo a medir GATE=1 GATE=1 Conteo inicial Conteo inicial CONTADOR CONTADOR CLK OVF CC/ /T=0 T=0 TF0 TF0 Genera Genera Interrupción Interrupción TRx=1 TRx=1 INTx INTx Configuarció Configuarción del Timer para arrancarse por hardware ,al inicio del pulso y pararse pararse al final del mismo Carlos E. Canto Quintal Controlling the Brightness of an LED Pulse Width Modulation TIMER_0_INTERRUPT: • JB F0, HIGH_DONE LOW_DONE: • SETB F0 • SETB P1.0 • MOV TH0, R7 • CLR TF0 • RETI HIGH_DONE: • CLR F0 • CLR P1.0 • MOV A, #FFH • CLR C • SUBB A, R7 • MOV TH0, A • CLR TF0 • RETI ; If F0 is set then we just finished the high section of the ; cycle so Jump to HIGH_DONE ; Make F0=1 to indicate start of high section ; Turn off LED ; Load high byte of timer with R7 (our pulse width control value) ; Clear the Timer 0 interrupt flag ; Return from Interrupt to where the program came from ; Make F0=0 to indicate start of low section ; Turn on LED ; Move FFH (255) to A ; Clear C (the carry bit) so it does not affect the subtraction ; Subtract R7 from A. A = 255 - R7. ; so the value loaded into TH0 + R7 = 255 ; Clear the Timer 0 interrupt flag ; Return from Interrupt to where the program came from • The basic idea of the routine is fairly simple. First it checks to see if it just finished thigh or tlow. • If it was thigh then it jumps to HIGH_DONE and prepares for the tlow period. We set F0 to 0 to indicate we are timing tlow. Then we turn on the LED. Next we find the value to load into the 8 bit timer register TH0. Timer 0 will count up from there. If it was tlow then we continue through LOW_DONE and set F0 to 1 to indicate we are timing thigh. Then we turn off the LED. Next we load R7 into the 8 bit timer register TH0 and Timer 0 will count up from there. • • Main Code The main part of the code does not have to do anything. In this example we just move 01 to R7 for the minimum brightness and then make an infinite loop with • MOV R7, #001H LOOP: • AJMP LOOP • ; set pulse width control to dim ;go to LOOP The processor just sits there in an endless loop until the Timer 0 interrupt occurs. Then it goes off and goes through the Timer 0 interrupt routine and returns to the endless loop to wait for the next interrupt. If we had some other processing to do we could put that code in here in place of the endless loop and the processor could actually do something useful while it is waiting for the next interrupt. • Using the Timer • Now we can load a value into the 8 bit timer register, TH0, and it will run freely until it "overflows". The overflow occurs when it is at its maximum value of 255 and on the next count goes back to 0. This is the same as what would happen to the mileage meter in your car when it reaches all 9s and "flips over" to all 0s. The overflow triggers the Timer 0 interrupt and the processor stops whatever it is doing and goes to the point 0BH in its program. (0BH is the hex value 0B which is the 11th memory location) You can see in the program pwmled2.asm that we have used the ORG command to put a command in the 0BH location that jumps to our Interrupt Service Routine (ISR) for Timer 0. This just means that when the interrupt occurs the processor will go and process some code and then return to what is was doing before. • Below is the code that the processor goes through each time the Timer 0 interrupt occurs. Since we are using Timer 0 to time both tlow and thigh, we use a Flag (which is just a bit) to indicate whether we are currently timing tlow or thigh. We set the bit to 1 for thigh and 0 for tlow. MICROCONTROLADORES Timer/Contadores Timer/Contadores El El Timer Timer 22 Carlos E. Canto Quintal MICROCONTROLADORES Timer/Contadores Timer/Contadores Carlos E. Canto Quintal MICROCONTROLADORES Timer/Contadores Timer/Contadores Carlos E. Canto Quintal MICROCONTROLADORES Timer/Contadores Timer/Contadores Carlos E. Canto Quintal MICROCONTROLADORES Timer/Contadores Timer/Contadores Carlos E. Canto Quintal TIMER 2 Microcontroladores Microcontroladores TIMER 2 EN MODO CAPTURA osc osc _: 12 : 12 C/T2=0 TL2 TH2 TL2 TH2 (8bits) (8bits) (8bits)(8bits) C/T2=1 T2 T2 TF2 TF2 control Interrupción Interrupción del del Timer2 Timer2 TR2 Detector de transición captura RCAP2L RCAP2H RCAP2L RCAP2H T2EX T2EX EXF2 EXF2 control EXEN2 Carlos Canto Quintal TIMER 2 Microcontroladores Microcontroladores TIMER 2 EN MODO AUTO-RECARGA (cuando DCEN=0) Con la habilidad de conteo Up/Down desactivada osc osc _: 12 : 12 C/T2=0 TL2 TH2 TL2 TH2 (8bits) (8bits) (8bits)(8bits) C/T2=1 T2 T2 control TR2 Recarga RCAP2L RCAP2H RCAP2L RCAP2H Detector de transición TF2 TF2 T2EX T2EX EXF2 EXF2 control EXEN2 Carlos Canto Quintal Interrupción Interrupción del del Timer2 Timer2 TIMER 2 Microcontroladores Microcontroladores TIMER 2 EN MODO AUTO-RECARGA (cuando DCEN=1) Con la habilidad de conteo Up/Down activada Valor Valor de de recarga recarga en en conteo descendente conteo descendente 0FFh 0FFh conmuta 0FFh 0FFh EXF2 EXF2 osc osc _: 12 : 12 C/T2=0 TL2 TH2 TL2 TH2 (8bits) (8bits) (8bits)(8bits) C/T2=1 T2 T2 TF2 TF2 control TR2 Valor Valor de de recarga recarga en en conteo conteo ascendente ascendente T2EX T2EX Interrupción Interrupción del del Timer2 Timer2 RCAP2L RCAP2L RCAP2H RCAP2H Dirección de conteo 1= Up 0=Down Carlos Canto Quintal TIMER 2 Microcontroladores Microcontroladores TIMER 2 EN MODO GENERADOR DE BAUDAJE Sobre flujo delTimer 1 Nota: la frecuencia del oscilador es dividida entre 2 no entre12 osc osc _: 2 :2 1 _: 2 :2 0 TL2 TH2 TL2 TH2 (8bits) (8bits) (8bits)(8bits) C/T2=1 T2 T2 1 0 RCLK control _: 16 : 16 TR2 1 RCAP2L RCAP2H RCAP2L RCAP2H Detector de transición T2EX T2EX EXF2 EXF2 control EXEN2 Carlos Canto Quintal SMOD C/T2=0 Interrupción del Timer 2 RX Clock 0 TCLK _: 16 : 16 TX Clock TIMER 2 Microcontroladores Microcontroladores TIMER 2 EN MODO RELOJ DE SALIDA Nota: la frecuencia del oscilador es dividida entre 2 no entre12 osc osc TL2 TH2 TL2 TH2 (8bits) (8bits) (8bits)(8bits) _: 2 :2 TR2 Salida de reloj RCAP2L RCAP2H RCAP2L RCAP2H Bit C/T2 P1.0 _: 2 :2 T2 T2 P1.1 T2EX T2EX EXF2 EXF2 Interrupción del Timer 2 T2OE (T2MOD.1) Detector de transición EXEN2 Carlos Canto Quintal TIMER 2 Microcontroladores Microcontroladores (MSB) TF2 TF2 T2CON: REGISTRO DE CONTROL DELTIMER/CONTADOR2 EXF2 EXF2 RCLK RCLK TCLK TCLK EXEN2 EXEN2 TR2 TR2 (LSB) C/T2 C/T2 CP/RL2 CP/RL2 SIMBOLO POSICIÓN TF2 T2CON.7 Bandera de sobre flujo del Timer2 se hace 1 con el rebase del Timer y debe hacerse 0 por software.TF2 no se hace 1 cuando RCLK=1 o cuando RCLK=1 EXF2 T2CON.6 Bandera externa del Timer2, se hace 1 cuando ya sea una captura o una recarga sea producida desde el exterior, al ocurrir una transición negativa en T2EX y además que EXEN2=1. Siempre la interrupción del timer 2 esté habilitada, EXF2=1 hará que la CPU vectorice a la rutina de servicio del timer 2. EXF2 debe deshabilitarse por software. EXF2 no produce una interrupción en modo contador Up//Down (DCEN=!) RCLK T2CON.5 Bandera del reloj de recepción. Cuando se hace 1, hace que el puerto serie use los pulsos del sobre flujo del timer 2 para el reloj de su receptor en los Modos 1 , 3 y el timer 1 proporcionará el baudaje del transmisor. RCLK=0 hará que el sobre flujo del Timer 1 sea usado para el reloj del receptor TCLK T2CON.4 Bandera de reloj del transmisor. Cuando está en 1, hace que el puerto serial use los pulsos del sobre flujo del timer 2 para el reloj de su transmisor en los Modos 1 , 3 y el timer 1 proporcionará el baudaje del receptor. TCLK=0 hará que el sobre flujo del Timer 1 sea usado para el reloj del transmisor. EXEN2 T2CON.3 Bandera de habilitación externa, Cuanda está habilitada permite que ocuura una captura o una recarga como resultado de una transición negativa en T2EX si el Timer 2 no está siendo usado para temporizar el puerto serial. EXEN2=0 hace que el Timer2 ignore los eventos en T2EX TR2 T2CON.2 Control de Arranque /Paro del Timer2. Un 1 lógico arranca el Timer2 C/T2 T2CON.1 Selección de Timer o contador (Timer2) 0=Timer interno (OSC/12) 1=Contador de eventos externos (disparado en la transición de bajada) CP/RL2 T2CON.0 Bandera de Captura/Recarga. Cuando está en 1, ocurrirá una captura con una transición negativa en T2EX si EXEN2=1. Cuando está en cero, ocurirá una auto recarga ya sea cuando el Timer 2 rebase o una transición negativa en T2EX y que EXEN=1. Cuando ya sea que RCLK=1 o TCLK=1, este bit es ignorado y el timer es forzado a una auto recarga en el rebase del Timer 2. Carlos Canto Quintal NOMBRE Y SIGNIFICADO Microcontroladores Microcontroladores TIMER 2 Auto-recarga (contador Ascendente o Descendente) El timer 2 puede ser programado para conteo ascendente descendente cuando es configurado en su modo de recarga de 16 bits. Esta habilidad es invocada con el bit DCEN (Down Counter Enable ), localizado en el SFR T2MOD: Al resetear el DCEN está en cero tal que el Timer 2 por default cuenta hacia arriba (Up). Cuando el DCEN se pone a uno, elk Timer 2 puede contar hacia arriba o hacia abajo, dependiendo del valor de Carlos Canto Quintal