Este documento describe un reloj de 12 horas con cuatro dígitos que muestra la hora, los minutos y los segundos. Incluye constantes, variables, subrutinas y la lógica principal para incrementar y mostrar el tiempo de forma cíclica cada 4.096 milisegundos utilizando interrupciones del temporizador interno del PIC16F84A.
Este documento es un rider técnico que detalla los requerimientos para el equipo de sonido, iluminación, monitoreo e instrumentos necesarios para un concierto de Red Hot Chili Peppers. Incluye especificaciones para el sistema de sonido frontal, la consola de mezclas, los monitores de escenario, la mezcla de monitoreo, el escenario, la iluminación, el equipo de respaldo y la lista de entradas.
Este documento habla sobre los relojes digitales, incluyendo su historia, generalidades, componentes, funcionamiento y evolución. Explica que los relojes digitales se basan en electrónica digital para mostrar la hora y fueron inventados en 1956. También describe los primeros modelos comerciales de los años 70 y cómo se han vuelto omnipresentes en dispositivos electrónicos modernos.
Con la utilización de decodificadores, contadores y un generador de pulsos, se implementó un reloj digital que muestra los segundos, minutos y horas en displays de 7 segmentos. Adicionalmente, contiene un pulsador para detener y adelantar los minutos. El diseño también se realizó en un simulador de circuitos electrónicos.
DiseñO De Un Contador Con Flip Flops Tipo Jkguestff0bcb9e
Este documento presenta el diseño de un contador binario de tres bits utilizando flip-flops tipo JK. Explica los pasos para diseñar el contador, incluyendo una tabla de estados, simplificación de ecuaciones de entrada y el diagrama lógico resultante. El diseño implementa tres flip-flops JK para contar de 0 a 7 en binario y reiniciar el conteo con cada pulso de reloj.
Este documento describe un programa para mostrar la hora en cuatro displays de 7 segmentos utilizando un microcontrolador. El programa configura un timer para actualizar los displays cada 2 milisegundos y cuenta los segundos y minutos, reiniciando los contadores adecuadamente. Al presionar un botón, el reloj comienza a funcionar mostrando la hora en los displays mediante la habilitación secuencial de los displays y el envío de los números codificados a los puertos correspondientes.
Este documento describe cómo configurar un temporizador y contador utilizando un PIC microcontrolador. Se especifica implementar un sistema que puede funcionar como un contador ascendente o descendente, o como un temporizador regresivo desde 99 a 0 en intervalos de 1 o 0.5 segundos, y luego encender un LED. Se proporcionan detalles sobre la configuración del timer, E/S, variables y etiquetas a usar en el programa, así como el diagrama de flujo y pseudocódigo del algoritmo.
El primer documento describe un termómetro con Arduino que mide la temperatura mediante un sensor analógico y enciende LEDs rojos y azules en función de la temperatura medida. El segundo documento describe un cronómetro con Arduino que mide el tiempo transcurrido y permite pausar y reiniciar el cronómetro mediante dos botones. Muestra la hora, minutos, segundos y décimas en un LCD serial.
El documento describe el desarrollo de un controlador de acuario con Arduino. Incluye un menú en un LCD para modificar parámetros como luz, hora y fecha. Tendrá un sensor de temperatura y relés para controlar equipos. El objetivo es proveer una base de código que otros puedan usar y ampliar para controlar sus propios acuarios.
Este documento es un rider técnico que detalla los requerimientos para el equipo de sonido, iluminación, monitoreo e instrumentos necesarios para un concierto de Red Hot Chili Peppers. Incluye especificaciones para el sistema de sonido frontal, la consola de mezclas, los monitores de escenario, la mezcla de monitoreo, el escenario, la iluminación, el equipo de respaldo y la lista de entradas.
Este documento habla sobre los relojes digitales, incluyendo su historia, generalidades, componentes, funcionamiento y evolución. Explica que los relojes digitales se basan en electrónica digital para mostrar la hora y fueron inventados en 1956. También describe los primeros modelos comerciales de los años 70 y cómo se han vuelto omnipresentes en dispositivos electrónicos modernos.
Con la utilización de decodificadores, contadores y un generador de pulsos, se implementó un reloj digital que muestra los segundos, minutos y horas en displays de 7 segmentos. Adicionalmente, contiene un pulsador para detener y adelantar los minutos. El diseño también se realizó en un simulador de circuitos electrónicos.
DiseñO De Un Contador Con Flip Flops Tipo Jkguestff0bcb9e
Este documento presenta el diseño de un contador binario de tres bits utilizando flip-flops tipo JK. Explica los pasos para diseñar el contador, incluyendo una tabla de estados, simplificación de ecuaciones de entrada y el diagrama lógico resultante. El diseño implementa tres flip-flops JK para contar de 0 a 7 en binario y reiniciar el conteo con cada pulso de reloj.
Este documento describe un programa para mostrar la hora en cuatro displays de 7 segmentos utilizando un microcontrolador. El programa configura un timer para actualizar los displays cada 2 milisegundos y cuenta los segundos y minutos, reiniciando los contadores adecuadamente. Al presionar un botón, el reloj comienza a funcionar mostrando la hora en los displays mediante la habilitación secuencial de los displays y el envío de los números codificados a los puertos correspondientes.
Este documento describe cómo configurar un temporizador y contador utilizando un PIC microcontrolador. Se especifica implementar un sistema que puede funcionar como un contador ascendente o descendente, o como un temporizador regresivo desde 99 a 0 en intervalos de 1 o 0.5 segundos, y luego encender un LED. Se proporcionan detalles sobre la configuración del timer, E/S, variables y etiquetas a usar en el programa, así como el diagrama de flujo y pseudocódigo del algoritmo.
El primer documento describe un termómetro con Arduino que mide la temperatura mediante un sensor analógico y enciende LEDs rojos y azules en función de la temperatura medida. El segundo documento describe un cronómetro con Arduino que mide el tiempo transcurrido y permite pausar y reiniciar el cronómetro mediante dos botones. Muestra la hora, minutos, segundos y décimas en un LCD serial.
El documento describe el desarrollo de un controlador de acuario con Arduino. Incluye un menú en un LCD para modificar parámetros como luz, hora y fecha. Tendrá un sensor de temperatura y relés para controlar equipos. El objetivo es proveer una base de código que otros puedan usar y ampliar para controlar sus propios acuarios.
Material 1 de consulta microcontroladores temporizar por progMauricio Diaz Garcia
Este documento describe cómo crear retardos en el tiempo mediante subrutinas y bucles anidados en lenguaje ensamblador PIC. Explica cómo controlar el tiempo de ejecución de las instrucciones en función de la frecuencia del oscilador y provee ejemplos de código para generar retardos de milisegundos y segundos usando contadores y bucles anidados.
Tarjeta integradora de aplicaciones (06)alascaperu
El documento describe la implementación de un reloj digital usando un microcontrolador PIC y un display LCD. Se explica cómo configurar el timer0 del PIC para generar interrupciones cada segundo y actualizar la hora. También se detalla el código y diagrama de flujo para contar los segundos, minutos y horas, y mostrar la hora actualizada en el LCD. El reloj inicialmente mostrará 00:00:00 y contará el tiempo en formato de 24 horas.
Uso de las tablas en lenguaje ensambladorLuis Zurita
Este documento presenta diagramas de flujo para rutinas de retardo de 1 a 60 minutos y explica el uso de tablas en lenguaje ensamblador. Incluye dos ejemplos de programas en ensamblador que usan tablas para mostrar números en displays sin necesidad de un decodificador, mostrando los valores binarios correspondientes a cada número.
El documento describe el panel de control CP-IV, incluyendo su configuración, funcionamiento y características. Explica la navegación de menús, configuración especial, y ajustes como alarmas, puntos de ajuste, registro de tendencias, contraseñas y ajustes de entrada y salida analógicas.
Este documento proporciona una guía de operación para un reloj Casio que mide la presión barométrica, temperatura y altitud. Explica cómo configurar la ciudad local y la hora, usar los modos de barómetro, termómetro y altímetro, y las funciones de cronómetro, alarma y temporizador. También advierte sobre la precisión limitada de las mediciones y exime de responsabilidad a Casio por daños relacionados con el uso del reloj.
Este documento presenta un programa en ensamblador y C para controlar el tiempo de encendido y apagado de un LED sin usar interrupciones. El programa en ensamblador usa el temporizador interno (TMR0) del PIC16F84 para generar retardo, mientras que el programa en C usa la función delay_us() para crear un bucle de espera que genere el retardo necesario. Ambos programas encienden y apagan repetidamente el LED conectado al pin RB7 usando temporización software.
El documento presenta un programa que contiene varias interrupciones. Si la interrupción es causada por RB0, mostrará un 2 binario en el puerto A. Si es causada por un cambio en RB4:RB7, mostrará un 1 binario en el puerto A. Si es causada por un desbordamiento del TMR0, mostrará un 4 binario en el puerto A. El programa configura las interrupciones y los puertos y entra en un lazo infinito.
Este documento presenta información sobre interrupciones y temporizadores en microcontroladores PIC. Incluye una introducción a las interrupciones en PIC16F87X, el uso de interrupciones en lenguaje C y ejemplos de código para gestionar interrupciones externas y de temporizadores como TIMER0 y TIMER1. También describe las funciones y registros asociados a la gestión de interrupciones y temporizadores en lenguaje C.
Este documento presenta un programa para un microcontrolador PIC16F877A que realiza operaciones lógicas en los puertos A y E. Configura los puertos como entradas digitales, compara el valor del puerto E con diferentes valores binarios usando operaciones lógicas SUBWF y BTFSC, y dependiendo del resultado escribe valores binarios específicos en el puerto B.
Guía de ejercicios resueltos y propuestos tema 4Luis Zurita
Este documento presenta dos ejercicios resueltos sobre el uso del timer 0 y las interrupciones en microcontroladores PIC. El primer ejercicio muestra un programa que genera diferentes respuestas dependiendo de la causa de la interrupción, ya sea un pin, cambios en los bits del puerto B o un desbordamiento del timer 0. El segundo ejercicio genera una señal cuadrada de 200 Hz utilizando el desbordamiento del timer 0, presentando soluciones con y sin interrupciones.
Este programa demuestra el uso de la memoria EEPROM en un microcontrolador PIC para almacenar y recuperar datos de forma permanente. El programa graba un valor en la posición 0 de la EEPROM, luego lo lee y lo muestra en un puerto. Usa rutinas para inhabilitar y habilitar interrupciones durante los procesos de escritura y lectura para evitar errores.
El documento describe el uso de timers en PIC18, incluyendo timers 0-3. Explica cómo funcionan como contadores o temporizadores, y proporciona un ejemplo de código que configura el timer0 para generar interrupciones cada 5 milisegundos usando un prescaler de 16, generando un parpadeo en un LED.
Este documento presenta un tutorial sobre cómo escribir en un LCD usando un teclado matricial con un PIC. Explica cómo conectar y controlar el LCD y el teclado, así como cómo usar el temporizador Timer0 del PIC para evitar rebotes del teclado. También incluye código C que muestra cómo leer las teclas, mostrar los caracteres en el LCD y usar interrupciones del Timer0 para bloquear el teclado durante 30 ms después de cada pulsación.
El documento describe el desarrollo de un sistema para medir presión absoluta de 0 a 100 psi utilizando un sensor de presión, un amplificador, un microcontrolador PIC16F877A, decodificadores BCD a 7 segmentos y pantallas. Se explican los componentes seleccionados, la programación del microcontrolador, y la simulación y montaje del sistema. El diseño funcionó mostrando valores de presión, pero no pudo validarse debido a ruido y falta de otro medidor para comparación.
El documento describe el módulo TIMER2 del PIC16F87X. El TIMER2 es un temporizador-contador ascendente de 8 bits que puede usarse como base de tiempo para otros módulos. Tiene un registro de periodo PR2 que, cuando coincide con el valor del contador TMR2, genera una interrupción. El preescaler y postescaler permiten dividir la señal de reloj y la interrupción respectivamente.
Este documento presenta varios proyectos prácticos para utilizar el microcontrolador PIC16F84. Describe proyectos como la conexión de LED y dipswitch, el manejo de un display de siete segmentos para hacer un contador decimal, y la técnica de multiplexaje para compartir líneas de entrada/salida entre teclados y displays. Explica los diagramas esquemáticos, flujos de programación y códigos requeridos para cada proyecto con el objetivo de practicar el uso de puertos y otras funciones del PIC16F84.
Este documento describe varios proyectos prácticos con el microcontrolador PIC16F84, incluyendo la conexión de LED y dipswitch, el manejo de un display de siete segmentos para hacer un contador decimal, y la técnica de multiplexaje para leer teclados y mostrar datos en displays utilizando menos líneas de E/S. También se incluyen diagramas esquemáticos, diagramas de flujo y código de programa para cada proyecto.
Este documento describe varios proyectos prácticos con el microcontrolador PIC16F84, incluyendo la conexión de LED y dipswitch, el manejo de un display de siete segmentos para hacer un contador decimal, y la técnica de multiplexaje para leer teclados y mostrar datos en displays utilizando menos líneas de entrada/salida del microcontrolador. Se incluyen diagramas esquemáticos, diagramas de flujo y código de programa para cada proyecto.
Este documento describe el módulo TIMER0 del PIC16F87X. El TIMER0 es un temporizador/contador de 8 bits con interrupción por desbordamiento. Tiene un preescaler programable de 8 bits y puede trabajar con el reloj interno o externo. Se proporciona un ejemplo de programa que muestra números de 0 a 9 en un display cada segundo usando la interrupción del TIMER0.
Este documento describe cómo generar ondas cuadradas de 10 kHz utilizando interrupciones por desbordamiento del temporizador TMR0 en un microcontrolador PIC. Explica cómo configurar el TMR0 y el registro INTCON para habilitar las interrupciones y cómo usar una subrutina de interrupción para alternar el estado de una salida cada 50 microsegundos. También cubre cómo ajustar el valor de carga del TMR0 para lograr temporizaciones exactas de 50 microsegundos teniendo en cuenta los tiempos de ejecución de instrucciones. El documento incluye có
Material 1 de consulta microcontroladores temporizar por progMauricio Diaz Garcia
Este documento describe cómo crear retardos en el tiempo mediante subrutinas y bucles anidados en lenguaje ensamblador PIC. Explica cómo controlar el tiempo de ejecución de las instrucciones en función de la frecuencia del oscilador y provee ejemplos de código para generar retardos de milisegundos y segundos usando contadores y bucles anidados.
Tarjeta integradora de aplicaciones (06)alascaperu
El documento describe la implementación de un reloj digital usando un microcontrolador PIC y un display LCD. Se explica cómo configurar el timer0 del PIC para generar interrupciones cada segundo y actualizar la hora. También se detalla el código y diagrama de flujo para contar los segundos, minutos y horas, y mostrar la hora actualizada en el LCD. El reloj inicialmente mostrará 00:00:00 y contará el tiempo en formato de 24 horas.
Uso de las tablas en lenguaje ensambladorLuis Zurita
Este documento presenta diagramas de flujo para rutinas de retardo de 1 a 60 minutos y explica el uso de tablas en lenguaje ensamblador. Incluye dos ejemplos de programas en ensamblador que usan tablas para mostrar números en displays sin necesidad de un decodificador, mostrando los valores binarios correspondientes a cada número.
El documento describe el panel de control CP-IV, incluyendo su configuración, funcionamiento y características. Explica la navegación de menús, configuración especial, y ajustes como alarmas, puntos de ajuste, registro de tendencias, contraseñas y ajustes de entrada y salida analógicas.
Este documento proporciona una guía de operación para un reloj Casio que mide la presión barométrica, temperatura y altitud. Explica cómo configurar la ciudad local y la hora, usar los modos de barómetro, termómetro y altímetro, y las funciones de cronómetro, alarma y temporizador. También advierte sobre la precisión limitada de las mediciones y exime de responsabilidad a Casio por daños relacionados con el uso del reloj.
Este documento presenta un programa en ensamblador y C para controlar el tiempo de encendido y apagado de un LED sin usar interrupciones. El programa en ensamblador usa el temporizador interno (TMR0) del PIC16F84 para generar retardo, mientras que el programa en C usa la función delay_us() para crear un bucle de espera que genere el retardo necesario. Ambos programas encienden y apagan repetidamente el LED conectado al pin RB7 usando temporización software.
El documento presenta un programa que contiene varias interrupciones. Si la interrupción es causada por RB0, mostrará un 2 binario en el puerto A. Si es causada por un cambio en RB4:RB7, mostrará un 1 binario en el puerto A. Si es causada por un desbordamiento del TMR0, mostrará un 4 binario en el puerto A. El programa configura las interrupciones y los puertos y entra en un lazo infinito.
Este documento presenta información sobre interrupciones y temporizadores en microcontroladores PIC. Incluye una introducción a las interrupciones en PIC16F87X, el uso de interrupciones en lenguaje C y ejemplos de código para gestionar interrupciones externas y de temporizadores como TIMER0 y TIMER1. También describe las funciones y registros asociados a la gestión de interrupciones y temporizadores en lenguaje C.
Este documento presenta un programa para un microcontrolador PIC16F877A que realiza operaciones lógicas en los puertos A y E. Configura los puertos como entradas digitales, compara el valor del puerto E con diferentes valores binarios usando operaciones lógicas SUBWF y BTFSC, y dependiendo del resultado escribe valores binarios específicos en el puerto B.
Guía de ejercicios resueltos y propuestos tema 4Luis Zurita
Este documento presenta dos ejercicios resueltos sobre el uso del timer 0 y las interrupciones en microcontroladores PIC. El primer ejercicio muestra un programa que genera diferentes respuestas dependiendo de la causa de la interrupción, ya sea un pin, cambios en los bits del puerto B o un desbordamiento del timer 0. El segundo ejercicio genera una señal cuadrada de 200 Hz utilizando el desbordamiento del timer 0, presentando soluciones con y sin interrupciones.
Este programa demuestra el uso de la memoria EEPROM en un microcontrolador PIC para almacenar y recuperar datos de forma permanente. El programa graba un valor en la posición 0 de la EEPROM, luego lo lee y lo muestra en un puerto. Usa rutinas para inhabilitar y habilitar interrupciones durante los procesos de escritura y lectura para evitar errores.
El documento describe el uso de timers en PIC18, incluyendo timers 0-3. Explica cómo funcionan como contadores o temporizadores, y proporciona un ejemplo de código que configura el timer0 para generar interrupciones cada 5 milisegundos usando un prescaler de 16, generando un parpadeo en un LED.
Este documento presenta un tutorial sobre cómo escribir en un LCD usando un teclado matricial con un PIC. Explica cómo conectar y controlar el LCD y el teclado, así como cómo usar el temporizador Timer0 del PIC para evitar rebotes del teclado. También incluye código C que muestra cómo leer las teclas, mostrar los caracteres en el LCD y usar interrupciones del Timer0 para bloquear el teclado durante 30 ms después de cada pulsación.
El documento describe el desarrollo de un sistema para medir presión absoluta de 0 a 100 psi utilizando un sensor de presión, un amplificador, un microcontrolador PIC16F877A, decodificadores BCD a 7 segmentos y pantallas. Se explican los componentes seleccionados, la programación del microcontrolador, y la simulación y montaje del sistema. El diseño funcionó mostrando valores de presión, pero no pudo validarse debido a ruido y falta de otro medidor para comparación.
El documento describe el módulo TIMER2 del PIC16F87X. El TIMER2 es un temporizador-contador ascendente de 8 bits que puede usarse como base de tiempo para otros módulos. Tiene un registro de periodo PR2 que, cuando coincide con el valor del contador TMR2, genera una interrupción. El preescaler y postescaler permiten dividir la señal de reloj y la interrupción respectivamente.
Este documento presenta varios proyectos prácticos para utilizar el microcontrolador PIC16F84. Describe proyectos como la conexión de LED y dipswitch, el manejo de un display de siete segmentos para hacer un contador decimal, y la técnica de multiplexaje para compartir líneas de entrada/salida entre teclados y displays. Explica los diagramas esquemáticos, flujos de programación y códigos requeridos para cada proyecto con el objetivo de practicar el uso de puertos y otras funciones del PIC16F84.
Este documento describe varios proyectos prácticos con el microcontrolador PIC16F84, incluyendo la conexión de LED y dipswitch, el manejo de un display de siete segmentos para hacer un contador decimal, y la técnica de multiplexaje para leer teclados y mostrar datos en displays utilizando menos líneas de E/S. También se incluyen diagramas esquemáticos, diagramas de flujo y código de programa para cada proyecto.
Este documento describe varios proyectos prácticos con el microcontrolador PIC16F84, incluyendo la conexión de LED y dipswitch, el manejo de un display de siete segmentos para hacer un contador decimal, y la técnica de multiplexaje para leer teclados y mostrar datos en displays utilizando menos líneas de entrada/salida del microcontrolador. Se incluyen diagramas esquemáticos, diagramas de flujo y código de programa para cada proyecto.
Este documento describe el módulo TIMER0 del PIC16F87X. El TIMER0 es un temporizador/contador de 8 bits con interrupción por desbordamiento. Tiene un preescaler programable de 8 bits y puede trabajar con el reloj interno o externo. Se proporciona un ejemplo de programa que muestra números de 0 a 9 en un display cada segundo usando la interrupción del TIMER0.
Este documento describe cómo generar ondas cuadradas de 10 kHz utilizando interrupciones por desbordamiento del temporizador TMR0 en un microcontrolador PIC. Explica cómo configurar el TMR0 y el registro INTCON para habilitar las interrupciones y cómo usar una subrutina de interrupción para alternar el estado de una salida cada 50 microsegundos. También cubre cómo ajustar el valor de carga del TMR0 para lograr temporizaciones exactas de 50 microsegundos teniendo en cuenta los tiempos de ejecución de instrucciones. El documento incluye có
Los puentes son estructuras esenciales en la infraestructura de transporte, permitiendo la conexión entre diferentes
puntos geográficos y facilitando el flujo de bienes y personas.
La energía radiante es una forma de energía que
se transmite en forma de ondas
electromagnéticas esta energía se propaga a
través del vacío y de ciertos medios materiales y
es fundamental en una variedad naturales y
tecnológicos
Equipo 4. Mezclado de Polímeros quimica de polimeros.pptxangiepalacios6170
Presentacion de mezclado de polimeros, de la materia de Quimica de Polímeros ultima unidad. Se describe la definición y los tipos de mezclado asi como los aditivos usados para mejorar las propiedades de las mezclas de polimeros
1. Introduccion a las excavaciones subterraneas (1).pdfraulnilton2018
Cuando las excavaciones subterráneas son desarrolladas de manera artesanal, se conceptúa a la excavación como el “ que es una labor efectuada con la mínima sección posible de excavación, para permitir el tránsito del hombre o de
cémilas para realizar la extracción del material desde el
frontón hasta la superficie
Cuando las excavaciones se ejecutan controlando la sección de excavación, de manera que se disturbe lo menos posible la
roca circundante considerando la vida útil que se debe dar a la roca, es cuando aparece el
concepto de “ que abarca,
globalmente, al proceso de excavación, control de la periferia, sostenimiento, revestimiento y consolidación de la excavación
1. ;**************************************
***********************
; RELOJ DE 12 HORAS
;**************************************
***********************
LIST P=PIC16F84A ; Pic
a usar
#INCLUDE <P16F84A.INC> ;
Lista de etiquetas de microchip
;
;**************************************
***********************
; Configuración opciones de hardware
para la programación
__CONFIG _CP_OFF & _PWRTE_ON
& _WDT_OFF & _XT_OSC
;
;**************************************
************************
; Lista de constantes y variables para
el uso del programa
2. ;**************************************
************************
;
; Valores de constantes
***************************************
FRAC_INI equ D'12' ;
Constante para inicio cuenta de
fracciones de segundo
SEGS_INI equ D'196' ;
Constante para inicio cuenta de
segundos
MINS_INI equ D'196' ;
Constante para inicio cuenta de minutos
HORS_INI equ D'244' ;
Constante para cuenta de horas
HORS_12H equ D'243' ;
Constante para cuenta de horas
ADJMIN equ D'9' ;
Número de "frac_sec" que se necesita
sumar cada minuto
; para
ajustar el tiempo
3. ADJHOR equ D'34' ;
Número de "frac_sec" que se necesita
restar cada hora
; para
ajustar el tiempo
ADJDIA equ D'3' ;
Número de "frac_sec" que se necesita
sumar cada 12 horas
; para
ajustar el tiempo; Activación de RB1-3
para las entradas de los pulsadores
PULSADOR equ B'00001110' ; RB1,
RB2 y RB3; Asignación de banderas. Los
pulsadores activos proporcionan un "1"
CHG equ H'03' ;
Indica que se ha activado un pulsador o
que es necesario
;
actualizar los valores de la hora que
tienen que mostrarse
; en
los displays
4. PSEG equ H'04' ;
Pulsador A, modo segundero.
PMIN equ H'05' ;
Pulsador B, avance rápido minutos.
PHOR equ H'06' ;
Pulsador C, avance rápido horas.
P_ON equ H'07' ; Un
pulsador ha sido activadoDSPOFF
equ B'11111111' ; Displays
apagados (PORTA) ;
gfedcbap
CERO equ H'7E' ;
01111110
UNO equ H'0C' ;
00001100
DOS equ H'B6' ;
10110110
TRES equ H'9E' ;
10011110
CUATRO equ H'CC' ;
11001100
5. CINCO equ H'DA' ;
11011010
SEIS equ H'FA' ;
11111010
SIETE equ H'0E' ;
00001110
OCHO equ H'FE' ;
11111110
NUEVE equ H'DE' ;
11011110
SEGM_OFF equ H'00' ; Todos
los segmentos apagados. Separador entre
horas
; y
minutos apagado (RB0).; Posición de
memoria de variables
************************************fra
c_sec equ H'0C' ;
Fracciones de segundo (1/244)
segundos equ H'0D' ;
Segundos
6. minutos equ H'0E' ;
Minutos
horas equ H'0F' ; Horas
conta1 equ H'10' ;
Variable 1 para bucle contador
display equ H'11' ;
Indicador de display que debe
actualizarse
digito1 equ H'12' ;
Display unidad de minuto / unidad de
segundo
digito2 equ H'13' ;
Display decena de minuto / decena de
segundo
digito3 equ H'14' ;
Display unidad de hora
digito4 equ H'15' ;
Display decena de hora
banderas equ H'16' ;
Banderas; 3-CHG, 4-PSEG, 5-PMIN, 6-
PHOR, 7-P_ON
7. ;**************************************
************************
ORG 0x00 ;Vector de Reset
goto INICIO
org 0x05 ;Salva el vector
de interrupción
;**************************************
************************
; SUBRUTINAS
;**************************************
************************
CODIGO_7S ; Devuelve el
código 7 segmentos
addwf PCL,F
retlw CERO
retlw UNO
retlw DOS
retlw TRES
retlw CUATRO
retlw CINCO
retlw SEIS
8. retlw SIETE
retlw OCHO
retlw NUEVE
;**************************************
************************
; Comienzo del programa
;**************************************
************************
;
INICIO
; Configurar puertos como salidas,
blanquear display
bsf STATUS,RP0 ; Activa
el banco de memoria 1.
movlw B'10000011' ;
Configuración del registro Option, RB
Pull Up desconectadas
movwf OPTION_REG ; TMR0
en modo temporizador (uso de pulsos de
reloj internos, Fosc/4)
;
prescaler TMR0 a 1:16
9. movlw B'00000000'
movwf TRISA ; Pone
todas las patillas del puerto A como
salidas
movwf TRISB ; Pone
todas las patillas del puerto B como
salidas
bcf STATUS,RP0 ; Activa
el banco de memoria 0.
;
; Establecer estados iniciales de las
salidas
movlw DSPOFF
movwf PORTA ; Apaga
los displays
movlw B'00000001' ; Todos
los segmentos apagados. Separador
movwf PORTB ; entre
horas y minutos encendido (RB0).
; Inicialización de variables:
movlw H'01'
10. movwf TMR0 ; Pone
01h en TMR0
movlw B'11111110'
movwf display ;
Inicia display seleccionando decena de
hora
movlw CERO
movwf digito1 ;
Aparecerá un "0" en el display unidad
de minutos
movwf digito2 ;
Aparecerá un "0" en el display decena
de minutos
movlw DOS
movwf digito3 ;
Aparecerá un "2" en el display unidad
de hora
movlw UNO
movwf digito4 ;
Aparecerá un "1" en el display decena
de hora
movlw B'00000000'
11. movwf banderas ;
Coloca todas las banderas a 0
; Inicia las variables de tiempo
movlw FRAC_INI
movwf frac_sec ; 12
movlw SEGS_INI
movwf segundos ; 196
movlw MINS_INI
movwf minutos ; 196
movlw D'255'
movwf horas ; Las
horas comienzan con 12 por lo que
"horas" ha de ser 255
;**************************************
************************
PRINCIPAL ; Rutina principal cíclica
;**************************************
************************
;
; Esperar al desbordamiento de TMR0
12. TMR0_LLENO
; 4 MHz -> 1 MHz
; 1.000.000 Hz / 16 = 62.500 Hz
; 62.500 Hz / 256 = 244,140625 Hz ->
4,096 ms
movf TMR0,W
btfss STATUS,Z ; TMR0
cuenta libremente para no perder ciclos
del reloj
;
escribiendo valores
goto TMR0_LLENO
; Se ha desbordado TMR0 y se han
contado 256.
; Tarda en desbordarse 4.096 ciclos de
reloj, 4,096 ms
incfsz frac_sec,F ; Se
añade 1 a frac_sec
goto COMPROBAR_CHG ; Se
comprueba el estado de “CHG” por si se
ha activado
13. ;
algún pulsador o es necesario
actualizar los valores
; de
la hora que tienen que mostrarse en los
displays
; Se ha desbordado frac_sec y se han
contado 244 "frac_sec", 1 segundo.
; Tarda en desbordarse 4.096 ciclos de
reloj, 4,096 ms * 244 = 999,424 ms
; Al no consegirse exactamente 1
segundo sino 0,999424 s, luego se
necesitan ajustes
bsf PORTB,0 ;
Se activa separador horas-minutos
movlw FRAC_INI
movwf frac_sec ;
Restaura la variable frac_sec para la
próxima vuelta
14. COMPROBAR_PUL ;
Comprueba variables pulsadores
btfss banderas,P_ON ;
Si no se ha pulsado nada, se pasa a
INC_HORA
goto INC_HORA ;
Incrementa segundos, minutos y horas.
Ajustes y “CHG” a 1
btfsc banderas,PSEG ;
Comprobar si se ha pulsado PSEG
(Pulsador segundos)
goto INC_HORA ;
Se ha pulsado PSEG, (Pul A) y se
mostrarán
;
los segundos en el display
PONER_RELOJ
movlw SEGS_INI ; 196d
movwf segundos ; Inicia
los segundos cuando se pone el reloj en
hora
15. PONER_MINUTOS
btfss banderas,PMIN ;
Comprobar si se ha pulsado PMIN
(Pulsador minutos)
goto PONER_HORAS ;
No se ha pulsado PMIN, ir a comprobar
estado de PHOR
movlw H'AF' ;
175d
movwf frac_sec ;
Avance rápido del tiempo cuando se
ajustan minutos frac_sec = 175
incfsz minutos,F ;
Incrementar los minutos
goto PONER_HORAS
movlw MINS_INI
movwf minutos ;
Iniciar minutos si al incrementar se
han desbordado
PONER_HORAS
16. btfss banderas,PHOR ;
Comprobar si se ha pulsado PHOR
(Pulsador horas)
goto OBTENER_H_M ;
No se ha pulsado PHOR, no se cambian
las horas
movlw H'7F' ;
127d
movwf frac_sec ;
Avance rápido del tiempo cuando se
ajustan horas frac_sec = 127
incfsz horas,F ;
Incrementar la hora
goto OBTENER_H_M
movlw HORS_INI
movwf horas ;
Iniciar la hora si al incrementar se
han desbordado
goto OBTENER_H_M
INC_HORA ; Incrementar
segundos, minutos y horas
17. ; Ajustes cada
minuto, hora y 12 horas
bsf banderas,CHG ; Se
especifica que se ha producido un
cambio
incfsz segundos,F ; Como
ha pasado un segundo se incrementa
"segundos"
goto COMPROBAR_CHG
movlw SEGS_INI ; Se ha
desbordado "segundos" y se reestablece
el valor inicial
movwf segundos ; de
"segundos" para la próxima vuelta
movlw ADJMIN ; Se
resta 9 a "frac_sec" cada minuto para
los ajustes de tiempo
subwf frac_sec,F ; El
minuto será 9 "frac_sec" más largo
18. incfsz minutos,F ; Se
añade 1 minuto
goto COMPROBAR_CHG
movlw MINS_INI ; Se ha
desbordado "minutos" y Se reestablece
el valor inicial
movwf minutos ; de
"minutos" para la próxima vuelta
movlw ADJHOR ; Se
suma 34 a "frac_sec" cada hora para los
ajustes de tiempo
addwf frac_sec,F ; La
hora será 34 "frac_sec" más corta
;
incfsz horas,F ; Se
añade 1 hora
goto COMPROBAR_CHG
movlw HORS_INI ; Se ha
desbordado "horas" y se reestablece el
valor inicial
19. movwf horas ; de
"horas" para la próxima vuelta
movlw ADJDIA ; Se
resta 3 a "frac_sec" cada 12 horas para
los ajustes de tiempo
subwf frac_sec,F ; Cada
12 horas se añadirán 3 "frac_sec"
; Se comprueba el estado de “CHG” por
si se ha activado
; algún pulsador o es necesario
actualizar los valores
; de la hora que tienen que mostrarse
en los displays
; Se actualiza hora, displays y
pulsadores cada 4,096 ms (244 veces por
segundo)
COMPROBAR_CHG
btfss banderas,CHG ; Si
no se han activado pulsadores ni ha
cambiado la hora
20. goto DISPLAY_PUL ; se
salta a DISPLAY_PUL, que principalmente
refresca uno de los
; displays cada vez
que se accede a ella y escanea
pulsadores.
COMPROBAR_SEG ; Se
comprueba si se activo el pulsador de
segundos (Pul A)
; para mostrar los
segundos en el display
btfss banderas,PSEG
goto OBTENER_H_M ; No
estaba pulsado PSEG
movlw H'00' ; Se
mostrarán los segundos en el display de
minutos
movwf digito2 ;
Variables "digito2" a 0
movwf digito3 ;
Variables "digito3" a 0
21. movwf digito4 ;
Variables "digito4" a 0
movlw SEGS_INI
subwf segundos,W
movwf digito1 ; Se
guarda temporalmente el número de
segundos en “digito1”
goto DIV_DIGITOS
OBTENER_H_M
movlw HORS_12H
subwf horas,W
movwf digito3 ; La
variable digito3 almacena temporalmente
el valor para las horas
movlw MINS_INI
subwf minutos,W
movwf digito1 ; La
variable digito1 almacena temporalmente
el valor para los minutos
22. DIV_DIGITOS ; Divide los
segundos o los minutos y las horas en
dígitos independientes
; ejemplo, [14] lo
pasa a [1]-[4]
movlw H'00'
movwf digito4 ; Se
ponen a cero las posiciones de las
decenas
movwf digito2 ; para
el caso de que no se incrementen
movlw H'02'
movwf conta1 ; Bucle
para convertir cada número (segundos o
minutos y horas)
movlw digito1 ;
Dirección de digito1 en FSR para usar
INDF
movwf FSR ; La
primera vez, FSR = digito1 (minutos o
segundos) y la segunda vez FSR =
digito3 (horas)
23. goto LOOP
LOOP2 ; Este LOOP se utiliza para
las horas después de trabajar con los
minutos o los segundos
movlw digito3
movwf FSR
LOOP ; Este LOOP se utiliza primero
para los minutos o los segundos y
después para las horas
movlw D'10' ;
Averiguar cuantas "decenas" hay en el
número
subwf INDF,F ; En
cada LOOP restar 10 al número
btfsc STATUS,C ; Se
comprueba "C", que se pone a 1 si en la
resta no se ha
; producido llevada
24. goto INC_DECENAS ; C
= 1 por lo que se añade 1 a la posición
de las decenas
addwf INDF,F ; C = 0,
no se incrementan las decenas y se suma
10 para restaurar
; las unidades
goto PROX_NUM
INC_DECENAS
incf FSR,F ; El
puntero apunta a la primera posición de
las decenas
incf INDF,F ; Se
añade 1 a las decenas
decf FSR,F ; Se
restaura el valor de INDF para apuntar
al número
goto LOOP ; para la
próxima resta hasta que se termine
; Con "goto LOOP"
se vuelve a comprobar si es necesario
25. ; sumar uno a la
decena cada vez que esta se ha
incrementado
PROX_NUM ; Próximo
número, primero ha sido segundos o
minutos y luego horas
decfsz conta1,F
goto LOOP2
CONVER_COD_7S ;
Convierte cada dígito a código 7
segmentos para los displays
movlw digito1
movwf FSR ; Coloca la
dirección del primer digito (digito1)
en FSR
movlw H'04'
movwf conta1 ;
Prepara la variable conta1 para el
bucle de los 4 displays
26. PROX_DIGITO
movf INDF,W ; Obtener
el valor de la variable "digito" actual
call CODIGO_7S ; LLamar a
la rutina de conversión a código 7
segmentos
movwf INDF ; Colocar
en la variable "digito" el código 7
segmentos devuelto
incf FSR,F ;
Incremente INDF para el próximo
"digito"
decfsz conta1,F ; Permitir
que conta1 de sólo 4 vueltas
goto PROX_DIGITO
;BORRAR_CERO ; Si hay un
cero en el display de las decenas de
hora
; no se
muestra (borrado de los ceros a la
izquierda)
27. ; movlw CERO
; subwf digito4,W
; btfss STATUS,Z
; goto BORRAR_CERO_SEG
; movlw SEGM_OFF
; movwf digito4
;
BORRAR_CERO_SEG
btfss banderas,PSEG ; Si
está pulsado PSEG no se muestra nada en
el display de la
goto DISPLAY_PUL ;
posición de la unidad de hora.
movlw SEGM_OFF ;
Contando con BORRAR_CERO, esto
significa que sólo se
movwf digito3 ;
mostrarán los segundos.
movwf digito4
DISPLAY_PUL ; Se borran los
bits de flag para actualizar su estado
28. ; Escanea
pulsadores, si alguno está pulsado se
pone a 1
; el pulsador que
le correspoda así como "P_ON" y "CHG"
; Muestra los
dígitos correspondientes a los segundos
o a
; los minutos y
horas en el display que corresponda.
movlw B'00000000'
movwf banderas ; Se
borran los bits de flag para actualizar
su estado
; Apagar los displays
movlw DSPOFF
movwf PORTA
; Apagar los segmentos respetando
separador horas-minutos
29. movlw SEGM_OFF ; Respeta
valor RB0
xorwf PORTB, w
andlw B'11111110' ;
Poner "1" el la posición del bit a
copiar
xorwf PORTB, f
; Configurar los bits 1, 2 y 3 de
PORTB como entrada
bsf STATUS,RP0 ; Activa
el banco 1.
movlw PULSADOR
movwf TRISB ; Se
configuran los bits 1, 2 y 3 de PORTB
como entrada
bcf STATUS,RP0 ; Activa
el banco 0.
nop ; Las
instrucciones "nop" pueden no ser
necesarias.
30. nop ; En principio
proporcionan el tiempo suficiente para
que los
nop ; estados
anteriores de las salidas se actualicen
a través de
nop ; las
resistencias de 10K (y de las de 820
ohm si está activado
nop ; algún
pulsador) antes de leer las patillas
del puerto.
COMPROBAR_PSEG ; Se comprueba
Pulsador PSEG
btfss PORTB,1
goto COMPROBAR_PMIN
bsf banderas,CHG
bsf banderas,PSEG
bsf banderas,P_ON
31. COMPROBAR_PMIN ; Se comprueba
Pulsador PMIN
btfss PORTB,2
goto COMPROBAR_PHOR
bsf banderas,CHG
bsf banderas,PMIN
bsf banderas,P_ON
COMPROBAR_PHOR ; Se comprueba
Pulsador PHOR
btfss PORTB,3
goto ACTIVAR_SEGM
bsf banderas,CHG
bsf banderas,PHOR
bsf banderas,P_ON
ACTIVAR_SEGM ; Se coloca en PORTB el
valor para los segmentos del display
actual
bsf STATUS,RP0 ; Activa
el banco 1.
movlw H'00'
32. movwf TRISB ; Puerto
B como salida
bcf STATUS,RP0 ; Activa
el banco 0.
; Se determina que display debe
actualizarse, es decir, que dato debe
; presentarse en el puerto B y se
establece el siguiente display
btfss display,0 ; Si es
el primer display (decena de hora)
tomar digito4
movf digito4,W
btfss display,1 ; Si es
el segundo display (unidad de hora)
tomar valor digito3
movf digito3,W
btfss display,2 ; Si es
el tercer display (decena de min/seg)
tomar valor digito2
movf digito2,W
33. btfss display,3 ; Si es
el cuarto display (unidad de min/seg)
tomar valor digito1
movf digito1,W
; Entregar el valor en puerto B y
respetar valor RB0
xorwf PORTB, w
andlw B'11111110' ;
Poner "1" el la posición del bit a
copiar
xorwf PORTB, f
btfsc frac_sec,7 ;
Establecer el separador de horas y
minutos a un 50%
bcf PORTB,0 ; del
ciclo (1/2 segundo encendido, 1/2
segundo apagado)
34. movf display,W ; Tomar
el valor del display que debe
habilitarse
movwf PORTA ; Cada
display se “enciende” con una cadencia
de 244 Hz / 4 = 61 Hz
; Cada display se “enciende” con
una cadencia de 244 Hz / 4 = 61 Hz
; En este momento están encendidos
los segmentos correspondientes
rlf display,F ; Rota
display 1 bit a la próxima posición
bsf display,0 ; Asegura
un 1 en la posición más baja de display
(luego se hará 0 si es necesario)
btfss display,4 ;
Comprueba si el último display fue
actualizado
bcf display,0 ; Si lo
fue, se vuelve a habilitar el primer
display
35. ; La
variable display va cambiando:
; 1111
1101
; 1111
1011
; 1111
0111
; 1110
1110
; 1101
1101
; 1011
1011
; 0111
0111
; 1110
1110
; Sólo
valen los 4 bits menos significativos