DOCUMENTO Nº 1 MEMORIA ÍNDICES 2 DOCUMENTO Nº1. MEMORIA ÍNDICE DE CONTENIDO Índice de Contenido ÍNDICE DE LA MEMORIA ÍNDICES ____________________________________________________________ 2 Índice de Contenido________________________________________________________ 3 Índice de Figuras __________________________________________________________ 8 Índice de Tablas __________________________________________________________10 PARTE I: MEMORIA ________________________________________________ 11 Capítulo 1 1. 2. 3. 4. 5. 6. Introducción _______________________________________________12 Estado del arte ___________________________________________________________ 12 Motivación ______________________________________________________________ 13 Objetivo ________________________________________________________________ 14 Metodología _____________________________________________________________ 15 Recursos ________________________________________________________________ 16 Contenidos ______________________________________________________________ 17 Capítulo 2 Descripción del sistema ____________________________________18 1. Elementos de las unidades de tratamiento de aire ______________________________ 18 1.1. Ventilador de succión _________________________________________________ 18 1.2. Servomotor bélimo joventa: ___________________________________________ 18 1.3. Medidor de calidad de aire ____________________________________________ 19 1.4. Potenciómetro de mínima apertura _____________________________________ 19 1.5. Baterías de enfriamiento/calentamiento del climatizador ____________________ 20 1.6. Electroválvula neumática de 2 vías ______________________________________ 20 1.7. Presostato __________________________________________________________ 20 1.8. Filtro de partículas: __________________________________________________ 21 1.9. Filtro hepa: _________________________________________________________ 21 1.10. Filtro de carbón activo: _______________________________________________ 21 1.11. Batería de humidificación y deshumidicacion ______________________________ 21 1.12. Medidor de la humedad del aire ________________________________________ 22 1.13. Ventilador de impulsión _______________________________________________ 22 1.14. Difusores orientables: ________________________________________________ 22 1.15. Equipo completo ____________________________________________________ 22 2. Funcionamiento de la unidad de tratamiento de aire ____________________________ 24 3. Funcionamiento del control de la unidad de tratamiento de aire ___________________ 26 Capítulo 3 1. 2. 3. 4. 5. 6. Capítulo 4 1. 2. 3. 4. Utilización del microprocesador Motorola MC68HC908LJ12 ___30 Características destacables. _________________________________________________ 30 Asignación de pines _______________________________________________________ 33 Alimentación ____________________________________________________________ 34 Puertos _________________________________________________________________ 35 Mapa de memoria ________________________________________________________ 35 Vector de interrupción _____________________________________________________ 38 Utilización del microprocesador PIC16F877A ________________39 Características destacables. _________________________________________________ 40 Asignación de pines _______________________________________________________ 43 Alimentación ____________________________________________________________ 44 Puertos _________________________________________________________________ 44 3 DOCUMENTO Nº1. MEMORIA 5. 6. ÍNDICE DE CONTENIDO Mapa de memoria ________________________________________________________ 45 Vector de interrupción _____________________________________________________ 46 Capítulo 5 Descripción del Hardware __________________________________47 1. Introducción _____________________________________________________________ 47 2. Pulsadores ______________________________________________________________ 49 3. Memoria EEPROM ________________________________________________________ 51 4. Comunicaciones serie _____________________________________________________ 53 5. Lectura de registros. ______________________________________________________ 55 6. Escritura de registros. _____________________________________________________ 56 7. Relés de salida. ___________________________________________________________ 56 8. Sensores de temperatura. __________________________________________________ 58 9. Conversor digital-analógico (D/A). ___________________________________________ 59 10. Comunicación con free-cooling. _____________________________________________ 60 11. Pantalla de cristal líquido. __________________________________________________ 63 12. Conector de programación. _________________________________________________ 64 13. Fuente de tensión. ________________________________________________________ 67 14. Oscilador. _______________________________________________________________ 68 15. Referencia de tensión para el convertidor A/D. _________________________________ 69 16. Otros dispositivos necesarios. _______________________________________________ 70 16.1. Regulador de tensión. ________________________________________________ 70 16.2. Transistores Darlington. _______________________________________________ 71 16.3. Amplificadores operacionales. _________________________________________ 72 16.4. Supercap. __________________________________________________________ 73 16.5. Diodos Zener. _______________________________________________________ 73 16.6. Diodos Schottky._____________________________________________________ 73 16.7. Transiles. ___________________________________________________________ 74 16.8. Puente de diodos. ___________________________________________________ 74 17. Dispositivos necesarios en la tarjeta S98 ______________________________________ 74 17.1. Potenciómetro de mínima apertura _____________________________________ 75 17.2. Servomotor de apertura de puertas _____________________________________ 75 17.3. Controlador de humedad ______________________________________________ 76 17.4. Medidor de calidad del aire ____________________________________________ 77 17.5. Medidor de presión para control de filtros ________________________________ 77 17.6. Interruptor _________________________________________________________ 78 17.7. Modulo de comunicaciones ____________________________________________ 78 17.8. MC34064 __________________________________________________________ 79 Capítulo 6 1. 2. 3. 4. 5. Descripción del Software ___________________________________80 Introducción _____________________________________________________________ 80 Rutina de inicialización. ____________________________________________________ 82 Rutina de autotest. _______________________________________________________ 84 Programa principal del control de climatización ________________________________ 87 Subrutinas destacables del la tarjeta TX98. ____________________________________ 89 5.1. MEDIA. ____________________________________________________________ 89 5.2. CALPI. _____________________________________________________________ 89 5.3. DISPL. _____________________________________________________________ 90 5.4. VPULS. _____________________________________________________________ 90 5.5. PRMODE. __________________________________________________________ 90 5.6. WPER. _____________________________________________________________ 90 5.7. DIGI, DIG2 Y DIG3. ___________________________________________________ 91 5.8. DPMH. _____________________________________________________________ 91 5.9. BTNDEC. ___________________________________________________________ 91 5.10. Memoria EEPROM: PROG y READ. ______________________________________ 91 5.11. Interrupciones: RTC, INTAD, TIMER. _____________________________________ 92 4 DOCUMENTO Nº1. MEMORIA ÍNDICE DE CONTENIDO 5.12. Watch-dog (WDOG). _________________________________________________ 92 5.13. Tabla de temperaturas. _______________________________________________ 93 6. Programa principal del la tarjeta S98 _________________________________________ 94 7. Subrutinas destacables de la tarjeta S98 ______________________________________ 95 7.1. Tabla de calidad del aire ______________________________________________ 95 7.2. Tabla de humedad ___________________________________________________ 96 Capítulo 7 Descripción del programa para el PC ________________________98 1. 2. Introducción _____________________________________________________________ 98 Pantalla principal. ________________________________________________________ 98 2.1. Descripción general. __________________________________________________ 98 2.2. Botones disponibles. _________________________________________________ 99 2.3. Información disponible. ______________________________________________ 100 3. Pantalla de climatizadores. ________________________________________________ 103 3.1. Descripción general. _________________________________________________ 103 3.2. Botones disponibles. ________________________________________________ 103 3.3. Información disponible. ______________________________________________ 104 4. Pantalla de la unidad de tratamiento de aire individual. _________________________ 105 4.1. Descripción general. _________________________________________________ 105 4.2. Botones disponibles. ________________________________________________ 106 4.3. Información disponible. ______________________________________________ 106 5. Pantalla de programaciones horarias.________________________________________ 107 5.1. Descripción general _________________________________________________ 107 5.2. Botones disponibles. ________________________________________________ 107 5.3. Funciones disponibles. _______________________________________________ 108 Capítulo 8 Conclusiones ____________________________________________ 111 Capítulo 9 Futuros desarrollos ______________________________________ 113 Bibliografia___________________________________________________________ 115 PARTE II: CÁLCULOS ______________________________________________ 116 Capítulo 1 Cálculos de Hardware ___________________________________ 117 1. 2. 3. Resistencias de pull-up de los pulsadores. ____________________________________ 117 Sondas de temperatura. __________________________________________________ 118 Resistencias para el circuito TL43L. __________________________________________ 119 3.1. Resistencias para fijar tensión de salida. _________________________________ 119 3.2. Resistencia para suministrar la corriente de cátodo mínima _________________ 120 4. Consumo. ______________________________________________________________ 121 5. Condensadores del circuito de alimentación. __________________________________ 122 Capítulo 2 1. 2. Cálculos de Software_____________________________________ 124 Frecuencia. _____________________________________________________________ 124 NTC: Tabla de temperaturas. _______________________________________________ 127 PARTE III: ESTUDIO ECONÓMICO _________________________________ 130 Capítulo 1 Estudio Económico _______________________________________ 131 PARTE IV: MANUAL DE USUARIO __________________________________ 132 Capítulo 1 1. 2. Características notables __________________________________ 133 Operación automática ____________________________________________________ 133 Pantalla simbólica _______________________________________________________ 134 5 DOCUMENTO Nº1. MEMORIA Capítulo 2 1. 2. 3. 4. 5. 6. 7. 8. 9. Programación de la unidad de tratamiento de aire _________ 135 Planifique su horario de utilización __________________________________________ 135 Puesta en hora y día de la unidad de tratamiento de aire ________________________ 136 Introducción/ Modificación del programa horario ______________________________ 137 Copia del programa diario _________________________________________________ 138 Anulación de la programación de un periodo __________________________________ 139 Anulación de la programación de un día______________________________________ 139 Activación/Desactivación del programa horario _______________________________ 140 Saltarse temporalmente la programación horaria. _____________________________ 140 Como recuperar la programación horaria durante un override o un standby ________ 141 Capítulo 3 1. 2. 3. 4. 5. 6. ÍNDICE DE CONTENIDO Manejo de la unidad de tratamiento de aire _______________ 142 Puesta en marcha/parada de la unidad de tratamiento de aire. ___________________ 142 .Como bloquear/ desbloquear la unidad de tratamiento de aire __________________ 143 Limitación de elección de temperatura de confort _____________________________ 143 Selección de la temperatura de confort ______________________________________ 144 Selección de modo de funcionamiento _______________________________________ 144 Comprobación del estado de la unidad de tratamiento de aire. ___________________ 145 PARTE V: MANUAL DEL INSTALADOR______________________________ 146 Capítulo 1 1. 2. 3. 4. 5. Capítulo 2 1. 2. 3. 4. 5. 6. Preparación _____________________________________________ 147 Introducción ____________________________________________________________ 147 Consideraciones generales ________________________________________________ 147 Alimentación eléctrica ____________________________________________________ 148 Comprobación del contenido ______________________________________________ 148 Manipulación del termostato ______________________________________________ 149 Instalación ______________________________________________ 150 Ubicación de la unidad de tratamiento de aire. ________________________________ 150 Sustitución de una unidad de tratamiento de aire existente. _____________________ 151 Montaje _______________________________________________________________ 152 Conexionado eléctrico ____________________________________________________ 153 Comprobación de funcionamiento.__________________________________________ 154 Fin de la instalación ______________________________________________________ 155 PARTE VI: CÓDIGO FUENTE _______________________________________ 157 Capítulo 1 1. Capítulo 2 1. Código de la tarjeta TX98 ________________________________ 158 Código fuente ___________________________________________________________ 158 Código fuente de la tarjeta SA98 __________________________ 251 Código fuente ___________________________________________________________ 251 PARTE VI: Datasheets ______________________________________________ 364 Capítulo 1 1. 2. 3. 4. 5. 6. 7. Datasheets ______________________________________________ 365 Termistor NTC __________________________________________________________ 366 MAX487 _______________________________________________________________ 368 MAX500 _______________________________________________________________ 376 ULN-2803 ______________________________________________________________ 383 MC34084 ______________________________________________________________ 386 TL431 _________________________________________________________________ 389 Relé OM-G5V-1 _________________________________________________________ 392 6 DOCUMENTO Nº1. MEMORIA ÍNDICE DE CONTENIDO LISTA DE PLANOS ____________________________ ¡Error! Marcador no definido. Índice de Contenido___________________________ ¡Error! Marcador no definido. Capítulo 1 1. 2. 3. Capítulo 2 1. 2. 3. Planos De La Tarjeta S98______ ¡Error! Marcador no definido. Plano electrónico de control de la U.T.A. _______________ ¡Error! Marcador no definido. Circuito impreso de control de la U.T.A. capa superior ____ ¡Error! Marcador no definido. Circuito impreso de control de la U.T.A. capa inferior ____ ¡Error! Marcador no definido. Capítulo 3 1. 2. 3. Planos De La Tarjeta TX98 ____ ¡Error! Marcador no definido. Plano electrónico de control del climatizador ___________ ¡Error! Marcador no definido. Circuito impreso de control del climatizador capa superior ¡Error! Marcador no definido. Circuito impreso de control del climatizador capa imferior ¡Error! Marcador no definido. Planos De La U.T.A. ___________ ¡Error! Marcador no definido. Vista frontal de la caja ______________________________ ¡Error! Marcador no definido. Esquema de conexionado ___________________________ ¡Error! Marcador no definido. Dimensiones de Display LCD _________________________ ¡Error! Marcador no definido. PLIEGO DE CONDICIONES ___________________ ¡Error! Marcador no definido. Índice de Contenido___________________________ ¡Error! Marcador no definido. Capítulo 1 Pliego de Condiciones Generales y Económicas _________ ¡Error! Marcador no definido. 1. 2. Condiciones Generales _____________________________ ¡Error! Marcador no definido. Condiciones Económicas. ___________________________ ¡Error! Marcador no definido. Capítulo 2 Pliego de Condiciones Técnicas y Particulares ¡Error! Marcador no definido. 1. 2. 3. 4. 5. 6. 7. Equipo informático. ________________________________ ¡Error! Marcador no definido. Placas de circuito impreso. __________________________ ¡Error! Marcador no definido. 2.1. Soporte. ____________________________________ ¡Error! Marcador no definido. 2.2. Diseño de las pistas. ___________________________ ¡Error! Marcador no definido. Sistema de radiofrecuencia. _________________________ ¡Error! Marcador no definido. Normas de calidad. ________________________________ ¡Error! Marcador no definido. Normas de Seguridad e Higiene. ______________________ ¡Error! Marcador no definido. Vida útil del producto. ______________________________ ¡Error! Marcador no definido. Otras criterios de diseño. ____________________________ ¡Error! Marcador no definido. PRESUPUESTO _______________________________ ¡Error! Marcador no definido. Índice de Contenido___________________________ ¡Error! Marcador no definido. Índice de Tablas ______________________________ ¡Error! Marcador no definido. Capítulo 1 1. Capítulo 2 2. 3. 4. Coste De Ingeniería ___________ ¡Error! Marcador no definido. Gasto de desarrollo ________________________________ ¡Error! Marcador no definido. Coste Material ________________ ¡Error! Marcador no definido. Software _________________________________________ ¡Error! Marcador no definido. Hardware ________________________________________ ¡Error! Marcador no definido. Coste total material ________________________________ ¡Error! Marcador no definido. Capítulo 3 Capítulo 4 Coste Intereses En Curso ______ ¡Error! Marcador no definido. Coste Total Del Proyecto _______ ¡Error! Marcador no definido. 7 DOCUMENTO Nº1. MEMORIA ÍNDICE DE FIGURAS Índice de Figuras Fig. 1: Conexionado de los componentes al control _______ ¡Error! Marcador no definido. Figure 1: Conexions between the components and the control units _____ ¡Error! Marcador no definido. ÍNDICES ___________________________________________________________________ 2 PARTE I: MEMORIA _______________________________________________________11 Figura 2.1: Funcionamiento de la U.T.A. ________________________________ 23 Figura 3.1: Diagrama de bloques del MC68HC908LJ12 ____________________ 32 Figura 3.2: Asignación de pines ________________________________________ 33 Figura 3.3: Bypass en la alimentación ___________________________________ 34 Figura 3.4: Alimentación del microprocesador ___________________________ 35 Figura 3.5: Mapa de memoria __________________________________________ 37 Figura 4.1: Diagrama de bloques del PIC16F877A ________________________ 42 Figura 4.2: Asignación de pines ________________________________________ 43 Figura 4.3: Alimentación del microprocesador ___________________________ 44 Figura 4.4: Mapa de memoria __________________________________________ 46 Figura 5.1: Pulsadores ________________________________________________ 50 Figura 5.2: Conexión de memoria EEPROM _____________________________ 52 Figura 5.3: Comunicaciones ___________________________________________ 54 Figura 5.4: Relees de salida ____________________________________________ 57 Figura 5.5: Acoplamiento de sondas de temperatura ______________________ 58 Figura 5.6: Conversor analógico digital MAX 500_________________________ 60 Figura 5.7: Comunicación con free-cooling ______________________________ 60 Figura 5.8: PTA1 Envía señal __________________________________________ 61 Figura 5.9: PTA2 Recibe señal _________________________________________ 62 Figura 5.10: Comienzo transmisión _____________________________________ 62 Figura 5.11: Ejemplo de funcionamiento del mando ______________________ 63 Figura 5.12: Display __________________________________________________ 64 Figura 5.13: Conector de programación tarjeta TX98 ______________________ 65 Figura 5.14: Conector de programación de la tarjeta S98 ___________________ 65 8 DOCUMENTO Nº1. MEMORIA ÍNDICE DE FIGURAS Figura 5.15: Fuente de tensión de la tarjeta TX98 _________________________ 67 Figura 5.16: Fuente de alimentación de la tarjeta S98 ______________________ 68 Figura 5.17: Reloj con cristal de cuarzo para MC68HC908LJ12 _____________ 69 Figura 5.18: Reloj de cuarzo para PIC16F877A ___________________________ 69 Figura 5.19: Circuito fijador de tensión del convertidor A/D del µP _________ 70 Figura 5.20: Circuito ULN2803 _________________________________________ 71 Figura 5.21: Amplificadores operacionales ______________________________ 72 Figura 5.22: Amplificador operacional USA _____________________________ 73 Figura 5.23: Conexión de potenciómetro de mínima apertura ______________ 75 Figura 5.24: Servomotor para apertura de compuerta _____________________ 76 Figura 5.25: Medidor de humedad interior ______________________________ 77 Figura 5.26: Sensor de calidad de aire ___________________________________ 77 Figura 5.27: Conexión del presostato ___________________________________ 78 Figura 5.28: Interruptor _______________________________________________ 78 Figura 5.29: Módulo de comunicaciones ________________________________ 79 Figura 5.30: MC34064 ________________________________________________ 79 Figura 6.1: Diagrama de flujo 1: Inicialización____________________________ 84 Figura 6.2: Diagrama de flujo 2: Autotest ________________________________ 86 Figura 6.3: Diagrama de flujo 3: Programa principal climatizador __________ 88 Figura 6.4: Diagrama de flujo del programa principal de la S98_____________ 97 PARTE II: Cálculos ______________________________________________________ 116 Figura 1.1: Resistencias de pull-up ____________________________________ 117 Figura 1.2: Cálculo de la NTC ________________________________________ 118 Figura 1.3: Resistencias de TL43L _____________________________________ 119 9 DOCUMENTO Nº1. MEMORIA ÍNDICE DE TABLAS Índice de Tablas PARTE II: CÁLCULOS ____________________________________________________ 116 Tabla 0.1: Consumo de componentes______________________________________131 Tabla 0.2: Rango de frecuencias__________________________________________136 Tabla 0.3: Parámetros__________________________________________________137 Tabla 0.4: Cálculo para la NTC__________________________________________139 PARTE IV: MANUAL DEL USUARIO________________________________________142 Tabla 0.5: Planificación de horario________________________________________146 PRESUPUESTO _________________________________________________________ 132 Tabla 1.1: Coste total de desarrollo ________________ ¡Error! Marcador no definido. Tabla 2.1: Coste del software _____________________ ¡Error! Marcador no definido. Tabla 2.2: Coste de la tarjeta del climatizador _______ ¡Error! Marcador no definido. Tabla 2.3: Coste de la tarjeta de ampliación _________ ¡Error! Marcador no definido. Tabla 2.4: Coste de materiales a montar ____________ ¡Error! Marcador no definido. Tabla 2.5: Coste total material ___________________ ¡Error! Marcador no definido. Tabla 3.1: Coste de intereses en curso ______________ ¡Error! Marcador no definido. Tabla 4.1: Coste del equipo ______________________ ¡Error! Marcador no definido. Tabla 4.2: Coste total del proyecto ________________ ¡Error! Marcador no definido. 10 PARTE I: MEMORIA 11 MEMORIA I. Memoria Capítulo 1. Introducción Capítulo 1 Introducción E Capítulo 1 Introducción 1. Daigual n este capítulo se estudia la mejor forma de controlar las unidades de tratamiento de aire (más conocidas como UTA). Se ha de tener en cuenta que en este proyecto no solo se va tratar las características del aire como limpieza y humedad sino también la temperatura de este. A partir de este estudio se mencionan cuáles han sido los incentivos del proyecto, cuáles son sus objetivos y cómo y con qué medios va a ser abordado. 1. Estado del arte Como ya se sabe hay unidades de tratamiento de aire en el mercado desde hace ya bastante tiempo. Para estas unidades cada una de las empresas ha diseñado una manera diferente de controlarlas aunque siempre con un mismo objetivo, permitir al usuario decidir la calidad, humedad y temperatura del aire en el local. Antes de las unidades de tratamiento de aire se empezó con las bases de la máquina de refrigeración (Willis Carrier en 1902), está maquina tenía un gran problema al aplicarse en espacios cerrados y era el aumento de la humedad. Aunque este problema se fue solucionado después con el desarrollo de un proceso industrial que permitía tanto el control de la temperatura como el de la humedad de la misma. [1] 12 MEMORIA I. Memoria Capítulo 1. Introducción Años más tarde se le fueron añadiendo mejoras a la maquina hasta llegar a lo que hoy en día es conocido como UTA controlada. Lo único que le faltaba al invento de Willis Carrier para tener una UTA era añadirle los filtros encargados de mantener la calidad del aire. Una vez se ha explicado de forma breve la historia del desarrollo y la construcción a través de los años de la UTA hay que centrarse en el objetivo de este proyecto, el control de las unidades de tratamiento de aire. Existen muchas empresas que ya comercializan unidades de tratamiento de aire en las que el usuario mediante un panel de control es capaz de decidir la temperatura, la humedad y ver la calidad del aire que le entra en su local. El control de estas unidades está ya presente dentro de las propias unidades de tratamiento de aire o en un panel que se coloca fuera de estas. Este control permite decidir la cantidad de aire que tiene que entrar por el ventilador (velocidad del ventilador), humedad del aire y tiene también la temperatura de dicho aire. 2. Motivación En 1902 Willis Carrier sentó las bases de la maquinaria de refrigeración moderna y al intentar aplicarla a los espacios habitados, se encontró con el problema del aumento de la humedad relativa del aire enfriado, y al estudiar cómo evitarlo, desarrolló el concepto de climatización de verano. Por aquella época un impresor neoyorquino tenía serias dificultades durante el proceso de impresión, que impedían el comportamiento normal del papel, obteniendo una calidad muy pobre debido a las variaciones de temperatura, calor y humedad. Carrier se puso a investigar con tenacidad 13 MEMORIA I. Memoria Capítulo 1. Introducción para resolver el problema: diseñó una máquina específica que controlaba la humedad por medio de tubos enfriados, dando lugar a la primera unidad de refrigeración de la historia. A partir de este momento el objetivo principal era mejorar el desarrollo del proceso industrial con máquinas que permitieran el control de la temperatura y la humedad de un local. A este climatizador se le han ido añadiendo componentes y mejoras hasta conseguir lo que hoy en día es la climatizadora dentro de una unidad de tratamiento de aire. Una vez construida la U.T.A. las empresas encargadas de comercializar la máquina le incluyen un control electrónico a través del cual el usuario puede decidir el modo de funcionamiento de la unidad. Como mejora del control significativa se introduce la conexión de este al PC lo que permite que desde solo una CPU pueda controlarse la calidad del aire de un complejo industrial o de hoteles y restaurantes donde se necesitan introducir diferentes parámetros para cada unidad dispuesta en cada habitación. 3. Objetivo El objetivo de este proyecto es el diseño del control de las unidades de tratamiento de aire. En primer lugar se diseñará la tarjeta que contenga el hardware necesario. En la tarjeta se montará el hardware común y el específico para cada aplicación según sea el caso. Este proyecto se centra en el control de climatizadores, por lo que sólo se describirán los elementos relativos al mismo. 14 MEMORIA I. Memoria Capítulo 1. Introducción En segundo lugar se elaborará el programa para el microprocesador de tarjeta. La explicación de cómo se llega a este objetivo se explicara en este proyecto dejando claro las fases a seguir hasta llegar a un control total de dichas unidades. 1. Planteamiento de las variables que van a poder ser modificadas por el usuario. 2. Diseño de la tarjeta de control que se va a implantar en las unidades de tratamiento de aire. 3. Programación e implantación de dicho control en los microprocesadores que forman parte del panel de control embebido en cada unidad. 4. Implantar y evaluar (mediante programas de simulación y al final mediante un prototipo) la estrategia de control diseñada para las unidades de tratamiento de aire. 4. Metodología La metodología que se va a seguir para poder cumplir el objetivo final es la siguiente: Mediante el estudio del sistema ha de ser decidido que variables es necesario controlar (consignas introducidas por el usuario) y con esto proporcionarle al control la información que necesita para funcionar. 15 MEMORIA I. Memoria Capítulo 1. Introducción Desarrollo del Hardware, construcción de las dos tarjetas: La de la parte del climatizador y la del resto del tratamiento de aire (calidad y humedad del aire) Desarrollo del Software que se implantará en los microprocesadores del hardware. Implantación y testeo del prototipo del control una vez introducido en una unidad de tratamiento de aire. 5. Recursos Para el desarrollo de este proyecto van a ser utilizadas diferentes herramientas. A continuación se especifican cuales son: Orcad 16®. Con la ayuda de este programa se diseña el circuito electrónico del control que se implantará en la tarjeta. Con las diferentes aplicaciones de esta herramienta se pueden generar todos los planos para poder fabricar la tarjeta, tanto el esquema electrónico como esquema del circuito impreso. MPLAB IDE®. Herramienta grafica para la programación y depuración del programa de control introducido en el microchip PIC de la tarjeta. Es un programa muy útil ya que se ejecuta en Windows y permite al programador encontrar y eliminar los errores que pueden producir fallos en el sistema si no se solucionan antes de implantarlo en las unidades de tratamiento de aire. VISUAL BASIC®. Programa grafico utilizado en este proyecto para el desarrollo de las comunicaciones de las unidades de tratamiento 16 MEMORIA I. Memoria Capítulo 1. Introducción de aire y el PC. Con él el usuario puede controlar todos los equipos a través del PC. 6. Contenidos En los siguientes capítulos se detallan los pasos que se han seguido para desarrollar este proyecto, empezando por explicar en qué consiste una unidad de tratamiento de aire y siguiendo con la descripción del hardware, software y los diferentes elementos utilizados en el diseño del control de la UTA. Al final del documento se adjuntan el estudio económico del proyecto, el código fuente, utilizado para la ejecución del mismo y las instrucciones de montaje. 17 MEMORIA I. Memoria Capítulo 2. Descripción del sistema Capítulo 2 Descripción del sistema Capítulo 2 Descripción del sistema 2. Daigu E n este capítulo se va a explicar tanto el funcionamiento como los elementos que forman la unidad de tratamiento de aire del que se quiere diseñar el control 1. Elementos de las unidades de tratamiento de aire En este apartado se van a explicar los diferentes elementos que componen la unidad de tratamiento de aire. 1.1. Ventilador de succión El ventilador de succión es el encargado de extraer del interior de la máquina el aire producido por la batería cuyo efecto es el inverso al deseado, de forma que éste es debidamente canalizado y expulsado al exterior. Como la presión de dentro de la maquina es más alta que la de fuera es posible expulsarlo a través del ventilador, si esto no fuera así el ventilador no serviría para nada. El aire expulsado será de baja temperatura cuando la máquina trabaje en función de bomba de calor y de alta temperatura cuando trabaje en función de refrigeración. 1.2. Servomotor bélimo joventa: El objetivo de este servomotor, es la apertura y cierre independiente de compuertas de entrada de aire del exterior para cumplir con las 18 MEMORIA I. Memoria Capítulo 2. Descripción del sistema renovaciones deseadas sustituyendo el aire contaminado del interior del habitáculo, o por el contrario la apertura y cierre de la compuerta encargada de la recirculación del aire de la habitación para su tratamiento en ciclo cerrado. En este proyecto se utilizan dos. Además los servos deben siempre abrir según la condición más restrictiva que puede venir por el potenciómetro de mínima apertura, por el controlador de la calidad del aire o por que la temperatura del aire exterior sea beneficiosa para la temperatura que se quiere en el interior del local. Aunque esto siempre lo decide el microprocesador y le manda la tensión correspondiente a los servomotores. 1.3. Medidor de calidad de aire Para conocer la calidad del aire se necesita este componente. Este dispositivo es un sensor que recoge las moléculas de carbono que hay en el aire. Estas moléculas tapan el sensor y así este puede producir una salida de 0-10V dependiendo de la cantidad de carbono que tenga el aire. Es un dispositivo que como se ve en la se coloca detrás del ventilador de succión ya que así permite al control abrir más o menos una u otra compuerta según el valor en voltios que reciba de dicho elemento. 1.4. Potenciómetro de mínima apertura Este dispositivo hace falta desde que la ley obligó que todos los locales deben renovar un 20% del aire y reciclar el resto bien filtrado procedente del local. Con este componente si el control se estropea siempre se mantiene abierta la compuerta del exterior y se pueda renovar el aire. 19 MEMORIA I. Memoria 1.5. Capítulo 2. Descripción del sistema Baterías de enfriamiento/calentamiento del climatizador Constituidas por tuberías dispuestas formando un serpentín, unidas mediante láminas. Son las encargadas del cambio de estado del fluido portador de energía mediante saltos entálpicos de gas a líquido y viceversa. Se utilizan dos baterías, de una de ellas extraemos la temperatura deseada para tratar el aire interno desechando el aire que contiene la temperatura producida por la batería anexa. 1.6. Electroválvula neumática de 2 vías Esta electroválvula neumática dispone de una entrada y una salida de manera que da paso a la batería de enfriamiento o calentamiento, de manera que en su estado inactivo mantiene la salida del compresor unida a la batería interna, por lo que la máquina trabaja al enfriamiento. y en su estado activo comunica la salida del compresor con la batería externa, de forma que la máquina trabaja como bomba de calor. 1.7. Presostato El presostato diferencial es el encargado de indicar el mal estado de los filtros. Cuando los filtros estén obstruidos debido a la suciedad contenida no permitirán que el aire pase a través de ellos con facilidad, creando una sobre presión que podrá ser medida por este presostato. El presostato tiene dos medidores uno a la entrada y otra a la salida del filtro y lo que hace es ver la diferencia de presión entre la entrada y la salida y guarda en el registro el valor que da el presostato con el que el control decide si han de cambiarse los filtros. 20 MEMORIA I. Memoria 1.8. Capítulo 2. Descripción del sistema Filtro de partículas: Este filtro está constituido de tela de aproximadamente 1mm de grosor y ubicado en primer lugar en la unidad de tratamiento de aire. Este es el encargado de retener las partículas de mayor grosor contenidas en el aire a tratar. 1.9. Filtro hepa: El objetivo de este filtro, constituido de celulosa es el encargado de atrapar las partículas de menor grosor contenidas en el aire. Se estima que retiene el 99% de las partículas contenidas en el aire a tratar. 1.10. Filtro de carbón activo: Este filtro es el encargado de retener las partículas que contienen carbono en el aire que se quiere tratar, de modo que retiene bacterias, virus y hongos generados en el aire interno eliminando así los olores derivados de la existencia de éstos. 1.11. Batería de humidificación y deshumidicacion Es la encargada de mantener el porcentaje de humedad deseado en la unidad de tratamiento de aire, normalmente para humidificar se usa una esponja húmeda debajo de la cual hay una bandeja para el agua sobrante de la esponja. La esponja está colocada detrás de los filtros y el aire pasa por ella para conseguir la humedad deseada aunque normalmente el rango de humedad del lugar es muy extenso y no hace falta la esponja. Para deshumidificar se utiliza la batería de frio ya que al enfriar se reseca el aire. 21 MEMORIA I. Memoria Capítulo 2. Descripción del sistema 1.12. Medidor de la humedad del aire Se necesitan dos uno para medir la humedad del aire de dentro de la máquina y otro para medir la del aire exterior. Esto es necesario porque si hay que humidificar el aire interior y el exterior tiene la humedad necesaria se abre más la compuerta y no se usa la esponja de humidificación y en el caso contrario igual. 1.13. Ventilador de impulsión Su objetivo es el de impulsar el aire tratado desde la batería correspondiente a través de los filtros expulsándolo al interior del habitáculo, de manera que la velocidad de éste es controlable y regulable respondiendo a las disposiciones exigidas por el usuario. 1.14. Difusores orientables: Su misión es la de adecuar la salida de aire al interior de la habitación orientándolo y repartiéndolo a gusto del usuario. 1.15. Equipo completo Con los componentes explicados en los subapartados anteriores está formada la máquina de tratamiento de aire tal y como se muestra en la Figura 2.1 22 MEMORIA I. Memoria Capítulo 2. Descripción del sistema Figura 2.1: Funcionamiento de la U.T.A. 23 MEMORIA I. Memoria Capítulo 2. Descripción del sistema 2. Funcionamiento de la unidad de tratamiento de aire El funcionamiento del conjunto de los elementos de la máquina será el siguiente: En primer lugar el aire entrará por la compuerta de entrada de aire del exterior que será abierta por el servomotor y entrará directamente a quedarse alojado en la unidad de tratamiento de aire. Debido a la ubicación de cada una de las baterías y al ventilador de succión y el de impulsión, el aire se repartirá equitativamente expulsando fuera de la máquina el aire con la temperatura no deseada, el cual será el calor cuando se trabaje como unidad enfriadora y el frío cuando se trabaje como calentador. Quedando el aire con la temperatura deseada dentro de la máquina para su posterior tratamiento. El tratamiento de este aire vendrá dado gracias al ventilador de impulsión, el cual arrastrará el aire a la unidad de tratamiento. La elección que batería funciona se realizará mediante las electroválvula, de forma que la salida del compresor alimenta a una u otra batería. Los filtros serán dispuestos siguiendo el siguiente orden lógico, en primer lugar el filtro de partículas, seguido del filtro hepa y por último el filtro de carbono. El tratamiento del aire en la U.T.A. será el siguiente: Las partículas de mayor tamaño serán atrapadas por el filtro de partículas dejando pasar únicamente las partículas inferiores a 1mm de grosor, las cuales serán atrapadas en el filtro hepa, del cual se estima un rendimiento del 99% de efectividad en la captación del resto de partículas de 24 MEMORIA I. Memoria Capítulo 2. Descripción del sistema pequeño tamaño, dejando pasar el aire limpio y sin impurezas en cuanto a ácaros, polvo, etc. Por último el aire atravesará el filtro de carbón activo, cuya misión principal es atrapar las partículas que contienen carbono, entre las que se encuentran los hongos, bacterias y virus, liberando así al aire a tratar de cualquier olor y sustancia que pudiera resultar perjudicial para la salud y el confort en el habitáculo. El estado de estos filtros vendrá controlado mediante un presostato ubicado delante del filtro de partículas, de forma que cuando cualquiera de los filtros resultara obstruido debido a las partículas retenidas impedirían el paso normal del aire y la presión en la parte delantera de los filtros subiría. De esta forma podemos indicar cuando estos filtros debieran ser sustituidos por otros nuevos. Seguidamente y en última posición en la unidad de tratamiento de aire, se controlará la humedad, manteniéndola en valores entre el 60% y el 80% a disposición y control del usuario. Esto será llevado a cabo mediante una batería de humidificación y deshumidificación que eliminará humedad cuando el valor esté por encima del deseado y humectará cuando el valor esté por debajo de los parámetros marcados, mediante resistencias para eliminar la humedad o una esponja húmeda para aumentarla. Una vez realizado este proceso el aire tratado será impulsado gracias al ventilador de impulsión a la velocidad elegida por el usuario, de manera que se cumpla que el aire cubra 2/3 de la habitación objeto del tratamiento para facilitar así la correcta renovación del aire interno del habitáculo. 25 MEMORIA I. Memoria Capítulo 2. Descripción del sistema La dirección del chorro de aire podrá ser controlada por el usuario gracias a unos difusores orientables ubicados en la boca de salida, de forma que el usuario sea quien disponga el ancho de difusión y el alcance de éste. Además de este uso la máquina debe tener en cuenta cuanto aire debe entrar del exterior y cuanto debe ser realimentado desde el local. La ley exige que se cambie el 20% del aire viciado por el del exterior aunque la cantidad de aire que quiera el usuario que entre del exterior podrá modificarlo por medio del control. Mediante un sensor de calidad de aire que mide las partículas de carbono que tiene el aire, se indicará los períodos en los que se abrirá la compuerta de aire exterior para su renovación (cuando detecte el mal estado del aire recirculado interno cerrará la compuerta de recirculación y abrirá la de renovación), dejando así continuamente un aire en buen estado, libre de contaminación, correctamente climatizado, filtrado y humectado en el interior de la habitación. Aunque la ley diga que se tiene que abrir un 20% si el control encuentra una condición más restrictiva hace caso de esta y si no la deja abierta un 20%. 3. Funcionamiento del control de la unidad de tratamiento de aire El funcionamiento del control se entiende de la siguiente manera: En primer lugar el control lee y registra la información introducida por el usuario. Dependiendo de lo introducido el control manda unas ordenes u otras, ya que existen los siguientes modos de funcionamiento: Automático, frío, calor y ventilación. 26 MEMORIA I. Memoria Capítulo 2. Descripción del sistema Según el modo de funcionamiento el control modifica la velocidad de los ventiladores de succión e impulsión. El aire entra dentro de la unidad a través de un filtro de protección del ventilador, y justo después de esto una NTC mide la temperatura del aire y se la manda al control, al mismo tiempo el sensor de calidad del aire envía al control un valor entre 0-10V dependiendo del tanto por ciento de carbono que tenga el aire para que según la medida el control determine la apertura de las compuertas. Quedando como mínimo la compuerta del exterior abierta un 20%, lo que se lleva a cabo con un potenciómetro de mínima apertura que es una manera de asegurarse de que aunque el control no funcionase el aire se renueva tal y como dice la ley. Después de pasar por las compuertas el aire pasa por la batería de calentamiento y la de enfriamiento. Según la temperatura que haya introducido el usuario y la temperatura del aire que entra en la máquina se abre una válvula u otra. Dependiendo de si el aire exterior tiene un valor de 27 MEMORIA I. Memoria Capítulo 2. Descripción del sistema temperatura más cercano a la demanda que el aire del interior se abre más la compuerta del exterior y se cierra más la de bypass. Como consecuencia de ello la apertura de la válvula es menor ya que se necesita calentar o enfriar menos. Si el aire del exterior no fuera beneficioso las compuertas se dejan según lo que el sensor de calidad indique ya que es más restrictivo la condición de buena calidad que menor gasto para conseguir la temperatura deseada. El aire pasa entonces por los filtros. Primero por el de partículas, después el Hepa y por último el de carbono. Delante del filtro de partículas hay una patilla del medidor de presión y a la salida del filtro de carbono otra. Con ellas se mide la presión y da un valor entre 0-10V que se introduce en el control. Si el valor en voltios es muy alto el control enciende un led para avisar al usuario de que se han de cambiar los filtros. Después el aire va a través de una resistencia y a continuación por una esponja húmeda. Según la humedad del aire y el valor introducido por el usuario el control pone en funcionamiento la resistencia o los difusores que humedecen la esponja. Como último paso antes de salir el aire al exterior se vuelve a medir su temperatura y se compara con la deseada si no es igual se apaga el ventilador de impulsión y da error de la máquina. Las conexiones entrada/salida de los componentes al control se muestra en la Figura 1 mostrando las entradas en verde y las salidas en rojo. 28 MEMORIA I. Memoria Capítulo 2. Descripción del sistema Figura 2.2: Conexionado de los componentes al control 29 MEMORIA I. Memoria Capítulo 4. Utilización del µP PIC16F877A Capítulo 3 Utilización del microprocesador Motorola MC68HC908LJ19 Capítulo 3 Utilización del microprocesador Motorola MC68HC908LJ12 3. Daigu E n este capítulo se va a explicar las características este microprocesador que se utilizan en la tarjeta que controla el climatizador de la unidad de tratamiento de aire. El equipo se controlará mediante el microcontrolador Motorola MC68HC908LJ12 de 8-bit, y cuya memoria de programa es de tipo flash, incorporándose en el equipo un conector de grabación, para permitir la grabación del programa con el microcontrolador ya montado. La elección de este microcontrolador fue debida a que tiene un bajo coste y un alto rendimiento, siendo su memoria y frecuencia adecuadas a los requisitos de la aplicación. Además se tuvieron en cuenta otras características propias que resultaban útiles para el sistema. 1. Características destacables. Frecuencia de bus interna máxima: - 8 MHz a tensión de operación 5 V. - 4 MHz a tensión de operación de 3,3 V 30 MEMORIA I. Memoria Capítulo 4. Utilización del µP PIC16F877A Entrada para cristal oscilador de 32 KHz con PLL (Phase Lock Loop) incorporado, que permite obtener hasta 32 MHz. 12 kbyes de memoria de usuario tipo FLASH. 512 bytes de memoria RAM. 2 timers de 16 bits. Reloj de tiempo real (RTC: Real time Clock) con reloj, calendario, alarma y funciones de cronógrafo. Módulo de comunicaciones serie (SCI) Pin de interrupción externa IRO con pull-up integrado. 32 pines de propósito general, pines de entrada/salida. Controlador para pantalla de cristal líquido (LCD: Liquid Crystal Display), con 4 terminales comunes y un máximo de 27 líneas. 6 canales para conversor analógico-digital (ADC) de l0 bits. Diseño de baja potencia (con modo espera y parada). Pin de reset (con pull-up integrado) y reset de encendido (POR: Power-on Reset). Características de protección del sistema: - Computer Operating Properly (COP) reset. 31 MEMORIA I. Memoria Capítulo 4. Utilización del µP PIC16F877A - Detección de bajo voltaje con reset o interrupción opcional. - Detección de código de operación ilegal con reset. - Detección de dirección ilegal con reset 64 pines en formato cuadrangular plano. En la Figura 3.1 se muestra la estructura general del MC68HC908LJI2. Figura 3.1: Diagrama de bloques del MC68HC908LJ12 32 MEMORIA I. Memoria Capítulo 4. Utilización del µP PIC16F877A 2. Asignación de pines Los pines disponibles microcontrolador se muestran en la Figura 3.2.La conexión en cada pin a los distintos dispositivos de la tarjeta se verá más adelante en el Capitulo 5: Descripción del hardware. Figura 3.2: Asignación de pines 33 MEMORIA I. Memoria Capítulo 4. Utilización del µP PIC16F877A 3. Alimentación Para lograr la máxima inmunidad al ruido posible se montan condensadores entre los pines de alimentación (Vop, Vss y Vooa). Dichos condensadores deben situarse 1o más próximo posible al microcontrolador. El montaje adoptado es el sugerido por el manual, según se muestra en la Figura 3.3. Figura 3.3: Bypass en la alimentación Además de los condensadores se montará un transil para proteger frente a ruidos. También se incluirán 2 parejas de diodos Schottky para proteger las entradas al microprocesador, así como un diodo zener de 4,3 V para que se detecte baja tensión y el microprocesador entre en modo parada. El supercap se incluye para poder mantener la hora en situación de parada (ver capitulo 5.13 Otros dispositivos necesarios). 34 MEMORIA I. Memoria Capítulo 4. Utilización del µP PIC16F877A Figura 3.4: Alimentación del microprocesador 4. Puertos Se dispone de 4 puertos de entrada/salida cada uno de ellos con 8 pines (0-7): puerto A, puerto B, puerto C y puerto D. Como se pudo ver en el esquema de asignación de pines (ver Figura 3.2) y en el diagrama de bloques (ver Figura 3.1) todas las líneas están compartidas con otras funciones (conversor A/D, comunicaciones…) Su uso se verá más adelante en Capitulo 5: Descripción del hardware. NOTA: Para más detalles acerca de las funciones de los pines consultar el manual del microcontrolador. 5. Mapa de memoria El microcontrolador dispone de 64 Kbytes de memoria, que incluyen: 12 Kbytes de memoria FLASH de usuario (donde irá ubicado el programa). 5l2 bytes de RAM. 35 MEMORIA I. Memoria Capítulo 4. Utilización del µP PIC16F877A 48 bytes de vectores definidos por usuario. 960 bytes de monitor ROM. 36 MEMORIA I. Memoria Capítulo 4. Utilización del µP PIC16F877A Figura 3.5: Mapa de memoria 37 MEMORIA I. Memoria Capítulo 4. Utilización del µP PIC16F877A 6. Vector de interrupción Como se vio en el apartado 5-Mapa de memoria. Las últimas posiciones de memoria están ocupadas por vectores de interrupción ordenados por prioridad. Los 2 últimos byes son los de reset como podemos ver en la Figura 3.6. Figura 3.6: Vectores de interrupción 38 MEMORIA I. Memoria Capítulo 4. Utilización del µP PIC16F877A Capítulo 4 Utilización del microprocesador PIC16F877A Capítulo 4 Utilización del microprocesador PIC16F877A 4. Daigu E n este capítulo se va a explicar las características del microprocesador que se utilizan en la tarjeta ampliación que controla la humedad, la presión y la calidad del aire de la unidad de tratamiento de aire. El equipo se controlará mediante el microcontrolador PIC 16F877A de 8bit, y cuya memoria de programa es de tipo flash, incorporándose en el equipo un conector de grabación, para permitir la grabación del programa con el microcontrolador ya montado. El PIC16F873A es el microprocesador que se ha utilizado para la unidad de tratamiento de aire, porque ofrece un alto desempeño computacional a un precio muy económico, con la adición de alta resistencia, con 8 canales de 10-bit A/D, un CCP y un ECCP (Enhanced CCP), una mejora de la memoria del programa Flash de 14 Kbytes y 368 bytes de memoria RAM. Al igual que todos los dispositivos de Microchip PIC16, el modelo utilizado en este proyecto, está disponible en la versión estándar o en la versión de bajo voltaje. Para el diseño de la unidad de tratamiento de aire se ha optado por el dispositivo estándar de memoria Flash, designada con una "F" en el número de pieza, con una gama de funcionamiento VDD de 3.0V a 5.0V, en vez del microprocesador de baja tensión, designado por "LF", cuyo 39 MEMORIA I. Memoria Capítulo 4. Utilización del µP PIC16F877A abanico de VDD es de 2.0V a 5.5V, ya que con el modelo estándar se cubren las características necesarias para el diseño. 1. Características destacables. Frecuencia de bus interna máxima: - 10 MHz a tensión de operación 5 V. - 4 MHz a tensión de operación de 2 V Entrada para cristal oscilador de 32 KHz con PLL (Phase Lock Loop) incorporado, que permite obtener hasta 32 MHz. 256 Bytes de EEPROM 14 Kbytes de memoria de usuario tipo FLASH. 368 Bytes de memoria RAM. 1 timer de 8 bits y 2 timers de 16 bits. Módulo de comunicaciones serie (SCI) y módulo de comunicaciones en paralelo. Pin de interrupción externa. 32 pines de propósito general, pines de entrada/salida. Controlador para pantalla de cristal líquido (LCD: Liquid Crystal Display). 40 MEMORIA I. Memoria Capítulo 4. Utilización del µP PIC16F877A 8 canales para conversor analógico-digital (ADC) de l0 bits. Diseño de baja potencia (con modo espera y parada). Pin de reset (con pull-up integrado) y reset de encendido (POR: Power-on Reset). Características de protección del sistema: - Computer Operating Properly (COP) reset. - Detección de bajo voltaje con reset o interrupción opcional. - Detección de código de operación ilegal con reset. - Detección de dirección ilegal con reset. - Protección de las E/S mediante diodos. 44 pines en formato cuadrangular plano. En la Figura 4.1 se muestra la estructura general del PIC16F877A. 41 MEMORIA I. Memoria Capítulo 4. Utilización del µP PIC16F877A Figura 4.1: Diagrama de bloques del PIC16F877A 42 MEMORIA I. Memoria Capítulo 4. Utilización del µP PIC16F877A 2. Asignación de pines Los pines disponibles microcontrolador se muestran en la Figura 4.2.La conexión en cada pin a los distintos dispositivos de la tarjeta se verá más adelante en el Capitulo 5: Descripción del hardware. Figura 4.2: Asignación de pines 43 MEMORIA I. Memoria Capítulo 4. Utilización del µP PIC16F877A 3. Alimentación Para lograr la máxima inmunidad al ruido posible se montan condensadores entre los pines de alimentación. Dichos condensadores deben situarse lo más próximo posible al microcontrolador. Se incluirán un diodo Schottky para proteger las entradas al microprocesador. Figura 4.3: Alimentación del microprocesador 4. Puertos La familia de los PIC16F8 disponen de dos puertos serie síncronos (capaces de SPI o I2C) y dos puertos serie asíncronos (USARTs con capacidad LIN) para expandir su conectividad. Se dispone de 5 puertos de entrada/salida. El puerto A de 6 bits y los otros 4 de 8 pines (0-7) cada uno puerto B, puerto C y puerto D y puerto E. Como se pudo ver en el esquema de asignación de pines (ver Figura 4.2). Todas las líneas están compartidas con otras funciones (conversor A/D, comunicaciones…) Su uso se verá más adelante en Capitulo 5: Descripción del hardware. 44 MEMORIA I. Memoria Capítulo 4. Utilización del µP PIC16F877A De los puertos A al D a través de su registro se configura el puerto como entrada o salida pero el puerto D funciona de manera diferente ya que tiene 3 pines que pueden configurarse de manera independiente como pines de entrada salida. 5. Mapa de memoria El microcontrolador dispone de 64 Kbytes de memoria, que incluyen: 256 Bytes de EEPROM 14 Kbytes de memoria de usuario tipo FLASH. 368 Bytes de memoria RAM. 45 MEMORIA I. Memoria Capítulo 4. Utilización del µP PIC16F877A Figura 4.4: Mapa de memoria 6. Vector de interrupción Como se vio en el apartado 5-Mapa de memoria. El vector 0000H es el vector de reset mientras que el vector 0004H es el de interrupción. 46 MEMORIA I. Memoria Capítulo 5. Descripción del Hardware Capítulo 5 Descripción del Hardware Capítulo 5 Descripción del Hardware 5. Daigu E n este capítulo se describe el diseño del hardware de las tarjetas para el control de las unidades de tratamiento de aire. 1. Introducción Además de los microprocesadores descritos en los epígrafes anteriores son necesarios los periféricos descritos en los siguientes apartados de este capítulo. Hay bastantes componentes que se utilizan en las dos tarjetas ya que son básicos para el correcto funcionamiento de la tarjeta. Además en el último epígrafe de este capítulo se van a explicar los dispositivos específicos de la tarjeta SA98 encargada de controlar la parte de la unidad que se encarga del tratamiento del aire y no la climatización. Pulsadores. Memoria EEPROM. (2 líneas) Comunicaciones serie. (3 líneas) Relees de salida Sensores de temperatura 47 MEMORIA I. Memoria Capítulo 5. Descripción del Hardware Conversor Digital/Analógico (D/A) Comunicación Free-cooling (una entrada y una salida) Pantalla de cristal liquido. Fuente de tensión. Oscilador. Referencia de tensión para el convertidor A/D. Otros dispositivos necesarios: - Regulador de tensión. - Transistores Darlington. - Amplificadores operacionales. - Supercap. - Diodos zener. - Diodos schottky. - Transiles. - Puentes de diodos. Las conexiones de estos elementos a los pines del microprocesador se resumen en la Figura 5.1. 48 MEMORIA I. Memoria Capítulo 5. Descripción del Hardware Figura 5.1: Conexiones de los pines 2. Pulsadores A cada uno de los pulsadores se le incorporará una resistencia de pullup de valor 100K (ver CÁLCULOS.). 49 MEMORIA I. Memoria Capítulo 5. Descripción del Hardware Figura 5.2: Pulsadores El equipo incorpora 8 pulsadores con las siguientes funciones: ON/OFF: Tiene la función de encendido y apagado del equipo. SUBIR: Permite incrementar la consigna, así como la hora programación y ajuste de reloj, y todos los demás parámetros. BAJAR: Permite disminuir la consigna, así como la hora programación y ajuste de reloj, y todos los demás parámetros. MODO: Sirve para cambiar el modo de funcionamiento entre frío, calor, ventilación, auto y humedad. SEL: Se emplea para activar y desactivar la programación, así como para moverse por los diferentes campos al realizar la programación de los arranques y paradas. PRG: Permite entrar en el modo de programación de arranques y paradas. COPY: Sirve para copiar la programación de un día a otro. CLK: Permite el acceso al ajuste del reloj en tiempo real (RTC) del que dispone el microprocesador. 50 MEMORIA I. Memoria Capítulo 5. Descripción del Hardware Para usos más complejos de los pulsadores, como pueden ser pulsaciones conjuntas, se puede usar el Manual del usuario. Se asignan a los pulsadores el puerto D del microprocesador (PTD [0…7]). 3. Memoria EEPROM Se dispondrá una memoria EEPROM de conexión serie mediante bus I2C para almacenamiento de los diferentes parámetros de los equipos, así como la programación semanal de arranques y paradas. El tipo de bus empleado (I2C) usa la misma línea para entrada y salida; esto la hace más lenta respecto a las del tipo microwiree (3 líneas), pero sigue siendo suficientemente eficaz en esta aplicación. Las ventajas es que solo requiere 2 líneas: Una para direcciones y datos, y otra para el reloj (clock). El modelo empleado es el NM24C02, cuya característica, así como sus diagramas de conexión y sus ciclos de operación pueden verse más adelante. Se empleará la memoria de 2K-bit ya que en esta aplicación no se requiere más espacio del proporcionado por esta memoria. Los parámetros que se guardarán en esta memoria son los siguientes: - Histéresis - Zona muerta - Límite de la temperatura de impulsión modo frio. - Margen del bloqueo parcial de la consigna. 51 MEMORIA I. Memoria Capítulo 5. Descripción del Hardware - Tiempo mínimo ON. - Tiempo mínimo OFF. - Parámetro del regulador Pi: Banda proporcional, tiempo de integración y tiempo de modulación. - Versión - Clave. - Tipo de control - Si el control es programable o no - Dirección - Programaciones horarias La forma de hacer las conexiones se muestra en la Figura 8 y se explica a continuación. Figura 5.3: Conexión de memoria EEPROM 52 MEMORIA I. Memoria Capítulo 5. Descripción del Hardware Se conectarán los terminales 5, 6 y 7 a las líneas PTB5 y PTB4 del puerto B y a laPTC2 del C. Por SDA (pin 5) se produce la entrada y salida de datos y SCL (pin 6) es la entrada del reloj. Aunque en principio sólo necesitamos 2 líneas para transmitir datos entre el dispositivo y el microprocesador, se añade una tercera línea que sirve para controlar la protección contra escritura (WP: write protection). Las 3 líneas llevan incorporadas las correspondientes resistencias de pull-up, de valor l00K como en el caso de los pulsadores". Los pines A0, A1, A2 forman la dirección del dispositivo, y como en este caso sólo hay uno, será la 0 y por tanto se conectaran todos a tierra. Los pines de tensión se conectarán uno a tierra (Vss) y otro a +5V (Vcc). Se incluirá un condensador de desacoplo de valor 100 nF, colocado entre la alimentación y tierra y lo más próximo posible al componente. Este condensador tiene como misión eliminar ruidos. 4. Comunicaciones serie Se incorpora una conexión RS-485 para poder conectar el controlador a un PLC o, como en este caso, a un ordenador mediante bus de comunicación serie. La conexión se realiza mediante el circuito MAX487 (ver Datasheet) que está diseñado para aplicaciones "half-duplex" y permite conectar hasta 128 equipos en el bus (frente a los 32 que permite el MAX485 y otros). Esto último puede resultar muy útil puesto que en una gran instalación, como pudiera ser un hotel, se alcanza fácilmente ese número de equipos entre unidades de tratamiento de aire, fan-coils y otras máquinas. 53 MEMORIA I. Memoria Capítulo 5. Descripción del Hardware El esquema de conexión se detalla en la Figura 5.3 y se explica a continuación. Figura 5.4: Comunicaciones El circuito se alimenta a Vcc = 5 V. Las resistencias de 10 K (R3 y Rl3) son resistencias de pull-up, mientras que las de 10 Ω (R8 y R9) se utilizan para limitar la corriente en caso de cortocircuito en la línea de comunicación. La resistencia restante (Rl2), de 120, se debe a un requerimiento de la norma RS-485, según el cual, en caso de que haya varios equipos conectados al bus, hay que ponerla tanto en el primero como en el último. En previsión de esto, y dado que se desconoce en qué posición será colocado el equipo, se pone un jumper (JP1) que permite incorporarla al montaje o no en función de las necesidades. Por último el elemento D3 es un transil y se emplea para proteger de ruidos. Se le asignarán las líneas PTB0, PTBI y PTB2 del puerto B. El protocolo empleado para las comunicaciones serie es el MODBUS modo RTU (ver Datasheet) con las siguientes características: 54 MEMORIA I. Memoria Capítulo 5. Descripción del Hardware Velocidad de comunicación: 9600 baudios. Formato de datos: - 8 bits - Sin paridad - 1 bit de stop Registros de 16 bits Usa un chequeo por redundancia cíclica: CRC (añade una serie de bits conforme a un algoritmo), según polinomio x15 + x13 + 1. Modificaciones respecto al protocolo MODBUS estándar: - La dirección de comunicación tendrá 8 bits, reservándose la dirección FF para mensajes de broadcast, pero existirá otro dato de 8 bits de identificador del equipo. - Las medidas se representarán en décimas de grado en 16 bits, en binario y complemento a 2. 5. Lectura de registros. Para la lectura de registros se utiliza el código de comando 03 con la siguiente estructura de mensaje: Número esclavo - Código (03) - Dirección ler registro (2 bytes) (00-XX) Número de registros a leer (2 bytes) (00, YY) - CRC 16 (2 bytes) 55 MEMORIA I. Memoria Capítulo 5. Descripción del Hardware La contestación de la tarjeta tiene la siguiente estructura de mensaje: Número esclavo - Código (03) - No de bytes de datos - Datos (2 bytes para cada registro) - CRCI6 (2 bytes). 6. Escritura de registros. Para la escritura de registros se utiliza el código de comando 06 con el siguiente formato: Número esclavo - Código (06) - Dirección del ler registro (00-XX) – Numero de registros a escribir (1) (l byte) (00-01) - Numero de bytes de datos (02) - Datos a escribir en los registros (AA-BB) - CRCI6 (2 bytes) La contestación de la tarjeta es un eco de la llamada. 7. Relés de salida. Bajo cualquier configuración se dispone de una salida mediante contacto de relé para MARCHA / PARO de la unidad de tratamiento de aire. En caso de que las salidas para las válvulas de frío y calor sean mediante contacto de relés para controlar sólo la activación/desactivación de las mismas, se dispone de otros 2 relés adicionales (uno por válvula), haciendo un total de 3 relés. En caso de que se empleen salidas analógicas se utilizará un conversor digital/analógico y no se montará ningún relé adicional al de marcha/paro. El cambio de configuración puede llevarse a cabo rápidamente mediante el uso de jumpers (JP3, JP4, JP5). 56 MEMORIA I. Memoria Capítulo 5. Descripción del Hardware El modelo de relé empleado es el OM-G5V- 1, cuyas características pueden verse el datasheet, donde se adjunta la fotocopia de su catálogo. Dado que la tensión lógica es distinta a la tensión de los relés, es necesario usar transistores. Al objeto de conseguir una intensidad de base reducida, se emplea una configuración tipo Darlington a través del circuito ULN-2803 descrito más adelante en Otros dispositivos necesarios. En cuanto a su conexión, se puede observar en la Figura 5.4 el esquema de montaje. Los terminales "1" se conectan a los circuitos ULN-2803 y los"2" a la tensión de relé, de 24 V. El relé 1 (RL1) es el de marcha/paro y va conectado a las bornes 1 y 2 (ver Plano Nº 20: Esquema de conexionado) que van al ventilador. El relé 2 (RL2) es el de la válvula de frío y mediante el jumper JP3 se puede conectar ésta al relé o bien a una de las salidas del conversor D/A (según el tipo de salida). El relé 3 (RL3) es el de la válvula de calor y el jumper JP4 permite alternar el tipo de salida. Por último el terminal común de las válvulas, a través del jumper JP5, se conectará a los relés, o bien a tierra en caso de usar el montaje con el conversor D/A. Figura 5.5: Relees de salida 57 MEMORIA I. Memoria Capítulo 5. Descripción del Hardware Se conectarán a las líneas PTA6, PTA5 y PTA4 a través del circuito ULN-2803. 8. Sensores de temperatura. El equipo dispone de 2 entradas de sondas de temperatura NTC remotas para la medida de la temperatura de retorno y de impulsión, realizándose las medidas en el convertidor A/D que incorpora el microprocesador y disponiéndose una tensión de referencia de 4Vcc. En la Figura 5.5 se muestra el montaje necesario. El terminal común se pone a tierra, mientras que cada una de las sondas se conectará a las líneas PTB6 y pTB7 del microprocesador a través de una resistencia de 100H (Rl8, R19). La misión de esta resistencia es limitar los posibles picos de corriente. R1 y R2 son las resistencias de pull-up que tienen el valor calculado en el apartado de CÁLCULOS. Como protección contra el ruido se emplean un condensador de 10 nF (C4, C5) y un transíl (D4, D6). Por último se montarán 2 diodos Schottky para cada línea con el objetivo de proteger la entrada al microprocesador. Por tanto se conectará uno entre +5V y la línea (D1, D2), que impedirá que se sobrepasen los 5,2V, y otro entre la línea y tierra (D5, D7), que impedirá que la tensión caiga por debajo de -0,2V. Figura 5.6: Acoplamiento de sondas de temperatura 58 MEMORIA I. Memoria Capítulo 5. Descripción del Hardware 9. Conversor digital-analógico (D/A). Cada una de las tarjetas tiene un convertidor digital analógico MAX500 aunque no están igual conectados al circuito ya que el de la tarjeta S98 utiliza las 4 salidas disponibles (para compuertas Free-Cooling) mientras que el de la tarjeta TX98 solo usa 2 salidas (para válvulas de frio y calor). Pero si que todas las salidas conectadas del convertidor están conectadas al circuito de la misma forma, mediante un amplificador seguidor de tensión (véase Otros dispositivos necesarios). En caso de las válvulas de frío y calor (tarjeta TX98) y el control de las compuertas que controlan el Free-Cooling (tarjeta S98) de salida analógica de 0-10 Vcc se incorporarán convertidores D/A de 8 bits, utilizándose el circuito MAX500 que dispone de 4 (ver Datasheet). En esta situación no es necesario añadir ningún relé adicional al de marcha / paro. Se alimentará a +15 V a través de VDD. Al ser la salida analógica de 0 a l0 V, la tensión de referencia (VREF) será l0 V para los 4 convertidores y la obtendremos por medio de un diodo Zener conectado a la alimentación de 15 V a través de R30. Mientras que VSS se conecta a la tierra analógica. AGND y DGND se conectan a la tierra analógica y a la digital respectivamente. 59 MEMORIA I. Memoria Capítulo 5. Descripción del Hardware Figura 5.7: Conversor analógico digital MAX 500 Se conecta al microprocesador utilizando 3 líneas: SDA es la línea para datos (a PTC6), SCL es la del reloj (a PTC5), y LOAD es la línea que inicia la transferencia de datos cuando está en nivel bajo (a PTC7). 10. Comunicación con free-cooling. Se dispone de una conexión a 2 hilos para poder interconectar este equipo con el equipo de control de free-cooling de mando serie. Figura 5.8: Comunicación con free-cooling Se colocan las inductancias L1 y L2 para evitar interferencias. 60 MEMORIA I. Memoria Capítulo 5. Descripción del Hardware Se le asignaran las líneas PTA1 para enviar (salida) y PTA2 para recibir (entrada). La comunicación se produce a través de microcortes en la tensión de alimentación entre las tarjetas. Para enviar se provoca que haya un consumo por la resistencia R20 al poner un “l” en PTA1, con lo que se genera una bajada de tensión en la tarjeta del free-cooling. Para recibir, el consumo se provoca en la tarjeta del free- cooling de la misma manera, y éste se traduce en una baja tensión en la tarjeta del termostato que al compararse en el amplificador operacional U5A genera un "1" en PTA2. Estos cortes de tensión no afectan al funcionamiento del equipo ya que son de muy corta duración (2 y 6 ms). La comunicación desde la tarjeta al free-cooling se realiza mandando el bytes de MANDO, que contiene la información de si el equipo se encuentra en modo frío o calor, y si hay demanda o no. El free-cooling responde devolviendo el byte de MANDO con cambios si va a actuar o sin modificaciones si no lo va a hacer. Un microcorte de 2 ms (provocado por un pulso de 2 ms en PTA1) se interpretará como un ”0”, mientras que uno de 6 ms se interpretará como un "1". Entre 2 bits habrá un intervalo de 6 ms" El procedimiento de comunicación es el siguiente: PTA1 envía señal Figura 5.9: PTA1 Envía señal 61 MEMORIA I. Memoria Capítulo 5. Descripción del Hardware PTA2 recibe señal Figura 5.10: PTA2 Recibe señal Al comienzo de cada comunicación se provocará un START, que se realiza mediante un pulso de 50 ms. START: Figura 5.11: Comienzo transmisión Transmisión del byte de mando: START - 0 - 1 - 8 bits de MANDO - Paridad - 1 – 0. El bit de paridad será "0" si el número de 1's del byte de MANDO es par y "l" en caso de que sea impar. . Ejemplo: MANDO: 01001100 62 MEMORIA I. Memoria Capítulo 5. Descripción del Hardware Figura 5.12: Ejemplo de funcionamiento del mando 11. Pantalla de cristal líquido. El cristal líquido (LCD: liquid cristal display) es un material llamado nemático que tiene la propiedad de efectuar un giro a la luz cuando se le aplica un campo eléctrico. Este material se coloca entre 2 polarizadores que están girados el uno con respecto al otro. Si el LCD no está polarizado, la luz que atraviesa el primer polarizador, no se gira de forma que no atraviesa el segundo polarizador y por tanto se rechaza. Si el LCD está polarizado, la luz que atraviesa el primer polarizador se gira y atraviesa el segundo y por tanto se absorbe, apareciendo el elemento en color negro. El microprocesador realiza la multiplexión, y en este caso se utilizarán 4 "backplanes" ó comunes (BP0 a BP3) y l9 "frontplanes" o líneas (FPl A FPl9), con lo que podemos emplear hasta 19x4 =76 segmentos. En la Figura 5.12 se muestran todos los segmentos disponibles para la pantalla. 63 MEMORIA I. Memoria Capítulo 5. Descripción del Hardware Figura 5.13: Display 12. Conector de programación. Se emplea para conectar el programador directamente a la tarjeta, de modo que podemos programar el microprocesador y hacer emulación con éste montado. Cada uno de los microprocesadores utilizados en este proyecto tiene un conector de programación independiente. El circuito de reset formado por diodo (D14), resistencia (R22) y condensador (C l2), sirve para tener un "0" inicial al dar tensión, aunque no sería necesario porque el microcontrolador incorpora un módulo de power-on reset que lleva a cabo la misma función. R28 sirve como resistencia de pull-up de la entrada IRQ del microprocesador. 64 MEMORIA I. Memoria Capítulo 5. Descripción del Hardware Figura 5.14: Conector de programación tarjeta TX98 Para la programación del µP de la tarjeta S98 se utiliza un conector conectado entre 0-5V que no necesita ningún circuito auxiliar Figura 5.14 Figura 5.15: Conector de programación de la tarjeta S98 En la Figura 5.16 se muestran las distintas condiciones para entrar en el modo monitor. Se utilizan los jumpers JP7 y JP8 para poder alternar entre "0"(0V) y "l"(5V) lógicos en PTC l, y para poner un "0" (conectar a tierra) en PTA2, respectivamente. 65 MEMORIA I. Memoria Capítulo 5. Descripción del Hardware Figura 5.16: Requerimientos y opciones para el modo monitor 66 MEMORIA I. Memoria 13. Capítulo 5. Descripción del Hardware Fuente de tensión. Las tensiones necesarias son: 15 V para el conversor D/A , los amplificadores operacionales asociados y los relees. 5V para el resto de elementos incluido el microcontrolador. En primer lugar se rectificará la tensión de alimentación que es alterna de 24V para obtener dicha tensión en continua. Esto se realiza mediante un puente de diodos (ver más adelante Otros dispositivos necesarios). A continuación se coloca un montaje C (C14) cuya misión es hacer de filtro. Los condensadores electrolíticos (C13 y C15) y el de tántalo (C16) también actúan como filtro para eliminar el rizado. Mediante el circuito LM7805 ver Capitulo 5: Regulador de tensión. Se obtiene la tensión de 5V. Es necesario este circuito para obtener los 5V ya que necesitamos una tensión muy estable pues va a ser la que alimente al microprocesador. Figura 5.17: Fuente de tensión de la tarjeta TX98 67 MEMORIA I. Memoria Capítulo 5. Descripción del Hardware Además se podrá obtener la tensión de 15 V, para el caso de que se opte por las salidas analógicas de las válvulas, por medio de un regulador de tensión. En la tarjeta S98 se utiliza una fuente de tensión con algunos matices más aunque con la misma función. La mayor diferencia es que en esta tarjeta hay componentes que se alimentan a 24V por lo es necesario tener ese valor de tensión en continua. El resto de la fuente de alimentación como se puede ver en la Figura 5.16 es igual que la de la tarjeta TX98. Figura 5.18: Fuente de alimentación de la tarjeta S98 14. Oscilador. Se utilizan dos osciladores uno para cada uno de los microprocesadores y cada uno montado en la tarjeta correspondiente. El oscilador del control de climatización suministra la frecuencia de referencia de reloj para el generador de frecuencia. El cristal empleado es de 32,768 KHz, y a partir frecuencia se pueden obtener otras de MHz (en nuestro caso 4 MHz) a través de un PLL. (Ver CÁLCULOS.). Por 68 MEMORIA I. Memoria Capítulo 5. Descripción del Hardware recomendaciones del manual del microprocesador el montaje será el de la Figura 5.17. Figura 5.19: Reloj con cristal de cuarzo para MC68HC908LJ12 El microprocesador usado en la tarjeta del tratamiento de aire es de 4MHz y en su montaje solo se necesitan los componentes de la Figura 5.18 porque el µP funciona a 4MHz y según las especificaciones ha de montarse así para la obtención de dicha frecuencia. Figura 5.20: Reloj de cuarzo para PIC16F877A 15. Referencia de tensión para el convertidor A/D. Se utilizará el circuito TL431 para fijar la tensión de referencia (VREF) del conversor A/D del microprocesador a 4 V solo necesario en la tarjeta TX98 ya que lo impone este µP. 69 MEMORIA I. Memoria Capítulo 5. Descripción del Hardware Para fijar la tensión de salida en el cátodo (terminal l), se emplea un divisor de tensión resistivo con R6 y R11, cuyos valores se obtienen en el apartado de CÁLCULOS. R5 es una resistencia de pull-up cuyo valor se calcula según la corriente de cátodo mínima en el epígrafe anteriormente citado. Además se monta el condensador C3 buscando la inmunidad al ruido. Figura 5.21: Circuito fijador de tensión del convertidor A/D del µP 16. Otros dispositivos necesarios. 16.1. Regulador de tensión. Se utilizará el circuito LM7805 para regular la tensión de alimentación procedente de la red a través de un transformador a 24V, obteniendo así los 5V necesarios para la alimentación del microprocesador y otros componentes. El circuito consta de 3 terminales: VIN, es la tensión de entrada requerid a para mantener la regulación. 70 MEMORIA I. Memoria Capítulo 5. Descripción del Hardware GND, es el terminal de tierra. VOUT, es la tensión de salida, que en este caso está fijada a 5V. 16.2. Transistores Darlington. Se empleará el circuito ULN-2803 que incorpora 8 montajes tipo Darlington (2 transistores "en cascada") y además los diodos y resistencias necesarios para que la salida por relé funcione correctamente. Para conocer los detalles constructivos del circuito ver Datasheet. Figura 5.22: Circuito ULN2803 Al terminal de entrada (IN) se conecta la línea procedente de la salida del microprocesador, mientras que la salida (OUT) se conecta al relé correspondiente. El terminal común (COM) se conecta a la tensión del relé, 15 V , y el GND a tierra. El circuito incorpora un diodo entre el colector de los transistores y el terminal común que queda en antiparalelo al relé. Su finalidad es limitar los picos de tensión que aparezcan en el transistor producidos por las características inductivas de la bobina del relé. De esta manera se reducen los posibles picos al valor de la tensión que cae en el diodo (≈ 0,7 V). 71 MEMORIA I. Memoria Capítulo 5. Descripción del Hardware 16.3. Amplificadores operacionales. Se utilizará el circuito TLC-2272 (ver ANEJO N'5-4), que incorpora 2 amplificadores operacionales. Se montarán 2 de estos circuitos ya que se necesitan 3 amplificadores: U6A y U6B se emplean como seguidores de tensión en las salidas conversor D/A hacia las válvulas. Tensiones de alimentación: VDD+ = 15V; VDD-/GND se pone a tierra. Figura 5.23: Amplificadores operacionales U5A se emplea como comparador de tensiones. La tensión del terminal de entrada está fijada por el divisor de tensión formado por R24 y R26 a 1,3 V, y por tanto mientras la tensión en el terminal se mantenga por encima de ese valor, aparecerán 0 V en la salida, lo que significa un "0" en PTA2. En el momento en que la tensión de la línea que comunica con el free-cooling baje suficientemente (para dar menos de 1,3V en V-), aparecerán 5 V en la salida por lo que se detectará como un “1” en PTA2. De esta manera se consigue llevar a la entrada PTA2 los bits transmitidos del free-cooling a la tarjeta. El zener D15 sirve para limitar la tensión de entrada de modo que no se sobrepasen los 5 V a los que está alimentado. 72 MEMORIA I. Memoria Capítulo 5. Descripción del Hardware Figura 5.24: Amplificador operacional USA 16.4. Supercap. C10 es un condensador de gran capacidad , 47 mF en este caso, que mantiene un cierto nivel de tensión cuando se corta la alimentación. De esta manera se puede conservar la hora cuando el microprocesador se ponga en modo parada al bajar de una cierta tensión umbral mínima (4,32V). 16.5. Diodos Zener. Este tipo de diodos se utiliza para fijar una tensión determinada en un punto cuando se hace pasar corriente por ellos a través de una resistencia. Se montarán un total de 5 : D16 de 10 V (para el conversor D/A), D18 de 6,8 V y D21 de l5 V (en la alimentación) y los 2 restantes (D11, DI5) de 4,3 V. 16.6. Diodos Schottky. Son un tipo especial de diodos que tienen una caída de tensión aproximadamente de 0,2 V, frente a los 0,7 V de los diodos convencionales. 73 MEMORIA I. Memoria Capítulo 5. Descripción del Hardware Se usan para asegurar que la tensión de un nudo se mantiene dentro de un cierto rango, sin sobrepasar un cierto valor máximo ni rebajar un cierto valor mínimo. De esta manera se consigue proteger un componente frente a cambios en la tensión de entrada que podrían dañarlo. En nuestro caso es importante proteger las entradas del microprocesador, ya que solamente aguantan una variación de ±0,5 V en la tensión de alimentación. Se montarán un total de 8: D1, D2, D5, D7, D9, Dl0, Dl2 y D13. 16.7. Transiles. Son elementos que tienen como misión proteger al equipo frente al ruido. En ocasiones se puede combinar su uso con condensadores de desacoplo. En total se montan 4 en la tarjeta de climatizador: D3, D4, D6 y D8. 16.8. Puente de diodos. Se empleará el puente de diodos D19 como rectificador de tensión. Los diodos elegidos aguantan una intensidad de 1A, suficiente para soportar la corriente que se determina como consumo normal en el apartado de CÁLCULOS. 17. Dispositivos necesarios en la tarjeta S98 En este apartado se explican los componentes más importantes para el tratamiento del aire, que son los siguientes: Potenciómetro de mínima apertura 74 MEMORIA I. Memoria Capítulo 5. Descripción del Hardware Servomotor 0-10V de apertura de puertas Controlador de humedad Medidor de calidad de aire Medidor de presión para control de filtros Interruptor Modulo de comunicaciones MC34064 17.1. Potenciómetro de mínima apertura Este componente está conectado entre 0-5V y tiene una salida que se conecta al microprocesador y le envía a este una señal de entre 0-10V indicándole cuanto se necesita que este abierta la compuerta del FreeCooling. Figura 5.25: Conexión de potenciómetro de mínima apertura 17.2. Servomotor de apertura de puertas Se utilizan dos servomotores uno para la apertura de la compuerta encargada de expulsar el aire procedente de la maquina al exterior y el otro 75 MEMORIA I. Memoria Capítulo 5. Descripción del Hardware tanto para la compuerta que deja pasar el aire del exterior (Free-cooling) y la compuerta que controla la cantidad de aire de retorno. Estos servos tienen una tensión de 0-15V y reciben del µP una tensión de 0-10V proporcional a cuanto se quiera tener abierta la compuerta. Por ejemplo si se quiere que la compuerta se abra al 40% el µP debe dar una tensión de 4V. Se ha de tener en cuenta que la cantidad de aire que se expulsa tiene que ser la misma que la de aire que se introduce por el FreeCooling. Figura 5.26: Servomotor para apertura de compuerta 17.3. Controlador de humedad Hay dos, uno para medir la humedad exterior y otro para la humedad interior (ambos se conectan igual aunque a registros diferentes del micro). Estos guardan en los registros un valor de 0-10V proveniente de cada uno de los medidores para que luego el control pueda mandar humidificar o deshumidificar el aire según lo quiera el usuario. 76 MEMORIA I. Memoria Capítulo 5. Descripción del Hardware Figura 5.27: Medidor de humedad interior Hay dos en la tarjeta. Uno para medir la humedad del interior y otro para medir la del exterior. 17.4. Medidor de calidad del aire Para esto se utiliza un componente que guarda la calidad del aire en el µP guardando un valor de tensión de 0-10V. Este componente es un sensor de iones que atrae las partículas de carbono del aire y según la cantidad de partículas manda una tensión u otra que se guarda en un registro del µP. Se utilizan resistencias del 1% porque se quiere la mayor precisión posible. Figura 5.28: Sensor de calidad de aire 17.5. Medidor de presión para control de filtros Para saber si los filtros están sucios o no se utiliza un presostato diferencial. Este instrumento se alimenta a 24V y da una salida de entre 010V, que se guarda en un registro del microprocesador. Cuando la salida 77 MEMORIA I. Memoria Capítulo 5. Descripción del Hardware tiene un valor cercano a los 10V se enciende un led para avisar al usuario de que tiene que cambiar los filtros. Figura 5.29: Conexión del presostato 17.6. Interruptor A cada interruptor se le incorporará una resistencia de pull-up de valor 100K (ver CÁLCULOS.). Figura 5.30: Interruptor 17.7. Modulo de comunicaciones Este componente es el encargado de recibir la información de la tarjeta TX98 para que todo funcione como debe de funcionar. Con él se mantiene la comunicación entre la tarjeta TX98 y la S98. 78 MEMORIA I. Memoria Capítulo 5. Descripción del Hardware Figura 5.31: Módulo de comunicaciones 17.8. MC34064 Es un circuito sensor de bajo voltaje diseñado específicamente para forzar un reset en el microprocesador. Funciona como detección d bajo voltaje si se pone con una resistencia de pull up. Si a esto le añadimos un condensador da un retraso programable cuando vuelve la corriente. Debe funcionar completamente con una corriente de entrada de 1V ya que funciona cuando hay fallo en el alimentador. La manera de conectar las patillas se especifica en el datasheet. Figura 5.32: MC34064 79 MEMORIA I. Memoria Capítulo 6. Descripción del Software Capítulo 6 Descripción del Software Capítulo 6 Descripción del Software 6. daigu E n este capítulo se detalla, el lenguaje utilizado para programar el control de la unidad de tratamiento de aire con las explicaciones pertinentes. 1. Introducción El programa del los microprocesadores está realizado en lenguaje ensamblador por 2 motivos principales: - Se consigue que ocupe una reducida cantidad de memoria. - Se dispone de una librería de subrutinas para este cada uno de los microprocesadores, ya que en cada uno de ellos está programado una parte diferente del programa de control de la unidad de tratamiento de aire. En la primera parte de los dos códigos se definen los registros, direcciones, datos y parámetros necesarios : Registros del microprocesador: puertos, timer, PLL, conversor A/D, reloj de tiempo real, pantalla LCD, protección de la memoria flash, detector de baja tensión y watch-dog. 80 MEMORIA I. Memoria Capítulo 6. Descripción del Software En el microprocesador usado para el control del climatizador se dan: Direcciones de la memoria EEPROM, con los parámetros de funcionamiento en primer lugar. Estos parámetros son: histéresis, zona muerta, temperatura límite de impulsión, margen de bloqueo de consigna, tiempos mínimos de encendido y apagado, banda proporcional, tiempo de integración, tiempo de modulación, versión, clave, tipo de control, si es programable o no, la dirección y las programaciones horarias. En el control de la unidad de tratamiento de aire los parámetros son: presión mínima, valor para el potenciómetro de mínima apertura, apertura de compuertas mínima. Datos de la memoria RAM: se definen 4 bytes de flags, el modo de funcionamiento, consigna, mando, salidas de válvulas, temperaturas, tipo de control, programable o no, parámetros de regulación, parámetros de programaciones y parámetros de comunicaciones. Registros de comunicaciones: - Registro 1: MSB Dirección, LSB Tipo de control. - Registro 2: MSB Modo, LSBMando. - Registro 3: Relés de salida. - Registro 4: Consigna. - Registro 5: Medida de la temperatura de retorno. 81 MEMORIA I. Memoria Capítulo 6. Descripción del Software - Registro 6: Medida de la temperatura de impulsión. - Registo 7: MSB Salida válvula frío, LSB Salida válvula calor. - Registros 8 a 14: Parámetros. - Registros 17 a 51 : Programaciones. Vectores de interrupción: reset, reloj de tiempo real, convertidor A/D, timer, baja tensión. Seguidamente comienza el programa propiamente dicho, del que se comentan a continuación las rutinas y subrutinas más relevantes. Su código completo puede consultarse en la parte IV de dicho documento. En la tarjeta de ampliación se realizan diferentes medidas (encargadas de controlar la calidad del aire) como la humedad, la presión del aire antes y después de los filtro y la calidad del aire para poder decidir cuánto se tienen que abrir cada una de los tres compuertas. La subrutina de inicialización y de autotest es la misma en las dos tarjetas por lo que solo la vamos a explicar una vez 2. Rutina de inicialización. Antes del programa principal tiene lugar esta rutina, en la que se inicializan los registros del microprocesador y las variables, se realiza el autotest según el caso, y se enciende el display. 82 MEMORIA I. Memoria Capítulo 6. Descripción del Software Los valores de las variables son los almacenados en la memoria EEPROM, salvo en caso de que aún no se haya utilizado, que se cargan unos valores por defecto. Para comprobar si la memoria es virgen se leen 2 posiciones consecutivas, que no deberían contener FF (es decir todo 1's) si la memoria ha sido ya usada. Se llevará a cabo un autotest del equipo si en el momento de dar tensión se mantiene pulsado el pulsador de FLECHA ARRIBA. Para más detalles acerca del autotest ver más adelante: apartado 3. Rutina de autotest. En caso de que no se haya realizado nunca un autotest en el equipo, aparecerán 3 segmentos horizontales al encenderse el display, con el resto de segmentos apagados. Esto nos permite saber si un equipo ha sido probado o no nada más encenderlo. A continuación se muestra un diagrama de flujo de esta rutina de inicialización. 83 MEMORIA I. Memoria Capítulo 6. Descripción del Software Figura 6.1: Diagrama de flujo 1: Inicialización 3. Rutina de autotest. Mediante esta rutina se pretende comprobar de una manera rápida el correcto funcionamiento de los pulsadores y del display. El procedimiento consiste en ir encendiendo unos determinados iconos en la pantalla según el pulsador que se active, de forma que quedan probados todos los segmentos una vez se ha actuado sobre todos los pulsadores. Para registrar que un pulsador ha sido ya comprobado se va poniendo un “l” en el byte VTEST para el bit correspondiente a cada 84 MEMORIA I. Memoria Capítulo 6. Descripción del Software pulsador. Cuando todos los bits sean "1", es decir VTEST= FF, se habrá concluido la prueba. También se incluye en esta rutina la prueba de la memoria EEPROM, la cual consiste en guardar ciertos datos en una determinada posición de la memoria, y posteriormente leer el contenido de esa posición para comprobar que coincide con el dato guardado. Para asegurarse de la efectividad de esta prueba los datos utilizados son $55 y $AA, que alternan 1's y 0's, con lo que es bastante improbable que puedan coincidir con los datos que había originariamente en la memoria antes de la prueba. De esta manera se comprueba el correcto funcionamiento de la escritura y lectura. Si el resultado de estas pruebas es satisfactorio el display se encenderá y comenzará el programa principal. En caso contrario, si se produce algún error, la pantalla se apagará. A continuación se muestra el diagrama de flujo completo de esta rutina. 85 MEMORIA I. Memoria Capítulo 6. Descripción del Software Figura 6.2: Diagrama de flujo 2: Autotest 86 MEMORIA I. Memoria Capítulo 6. Descripción del Software 4. Programa principal del control de climatización La parte correspondiente al programa principal se inicia en la etiqueta COMZO (comienzo). En primer lugar se comprueban los datos de entrada tales como las consignas. Seguidamente se ejecutan 2 subrutinas importantes que se explicarán más adelante en el apartado 5: Subrutinas destacables. y que son la de visualización en pantalla y la de vigilancia de pulsadores. Tras la toma de medidas pertinente, se debe establecer el modo de funcionamiento del equipo, es decir las acciones que tiene que llevar a cabo el control para tender a alcanzar la consigna fijada. Dichas acciones son las de arrancar el ventilador y abrir o cerrar las válvulas, y dependen de la consigna, el modo de funcionamiento demandado por el usuario (ventilación, frío, calor y auto), la temperatura de retorno y la temperatura de impulsión, principalmente. Después de evaluar cuáles tienen que ser las salidas, se transmiten éstas dando salidas por relé con los tiempos adecuados (calculados en la fase anterior) o salidas a convertidor D/A (calculadas por medio del algoritmo del PI). Al final del proceso se graban los datos en la memoria EEPROM y se vuelve al comienzo del programa. El diagrama de flujo del programa principal se muestra a continuación, y las subrutinas más relevantes empleadas en cada fase se describen en el apartado 5:Subrutinas destacables. 87 MEMORIA I. Memoria Capítulo 6. Descripción del Software Figura 6.3: Diagrama de flujo 3: Programa principal climatizador 88 MEMORIA I. Memoria Capítulo 6. Descripción del Software 5. Subrutinas destacables del la tarjeta TX98. 5.1. MEDIA. Hay dos subrutinas media que se emplean en cada tarjeta ya que las instrucciones de cada microprocesador son diferentes, las instrucciones no tienen ni el mismo nombre ni las mismas características aunque al final las dos sirven para lo mismo. La usada en la tarjeta TX98 sirve para calcular la media de los 8 últimos valores de temperatura registrados. Con esto conseguimos que la medida sea uniforme y no tenga saltos desmesurados debidos a posibles interferencias en la tensión, que no reflejarían la verdadera evolución de la temperatura, ya que ésta es una magnitud que no sufre cambios bruscos en condiciones ambientales normales. La que se utiliza en S98 calcula la media de los 4 últimos valores tanto de temperatura exterior como humedad interior y exterior o presión. 5.2. CALPI. Efectúa el cálculo de la salida según el control PI. El algoritmo utilizado es el siguiente: 89 MEMORIA I. Memoria 5.3. Capítulo 6. Descripción del Software DISPL. Es la subrutina de visualización, y por tanto efectúa la salida al display según los datos de las variables. Enciende los iconos que correspondan al modo de funcionamiento, la temperatura de retorno, la consigna y en caso de que el control sea programable, los de la hora, el día y la información sobre la programación. 5.4. VPULS. Es la subrutina de vigilancia de pulsadores. Su cometido es mirarlos y dependiendo del que esté pulsado realizar las acciones correspondientes. Se incorpora un retardo para filtrar el efecto de los rebotes y ruidos. 5.5. PRMODE. Se emplea al entrar en el modo de programación de parámetros para realizar la misma. Deben distinguirse los parámetros de tipo temperatura y los de tipo tiempo, ya que los primeros aumentan de 0,5 en 0,5 ºC (XX.X), es decir el último dígito representa décimas de grado, mientras que los de tiempo varían de 1 en 1 (XX XX). 5.6. WPER. Mira el periodo actual de programación, buscando hacia atrás el último intervalo programado y mira el día y la hora de inicio del siguiente periodo, buscando hacia delante. De esta manera se determina el funcionamiento que debería tener actualmente y cuando se producirá el siguiente cambio, poniendo la próxima programación en la alarma del RTC. 90 MEMORIA I. Memoria 5.7. Capítulo 6. Descripción del Software DIGI, DIG2 Y DIG3. Son subrutinas para visualizar los diferentes dígitos en el display. DIG1 realiza la escritura en display de los dígitos de la consigna. DIG2 y DIG3 se encargan de escribir el valor de la medida, y se requieren 2 bytes ya que se muestran también las décimas de grado. Mediante estas subrutinas se lleva a cabo la conversión del dato a código de 7 segmentos. 5.8. DPMH. Subrutina utilizada para la visualización de la medida o de la hora. 5.9. BTNDEC. Subrutina empleada para la conversión de binario de 16 bits a número decimal de 4 dígitos. 5.10. Memoria EEPROM: PROG y READ. La subrutina PROG graba en la posición de memoria EEPROM que se encuentra en la variable POSM el dato que está en ese momento en el acumulador. La subrutina READ lee el dato de la posición de memoria EEPROM que está en la variable POSM y lo deja en el acumulador. Esta subrutina también se utiliza en la programación de la tarjeta S98 aunque con las instrucciones del microprocesador usado en dicha tarjeta. 91 MEMORIA I. Memoria Capítulo 6. Descripción del Software 5.11. Interrupciones: RTC, INTAD, TIMER. RTC: interrupción del reloj de tiempo real. INTAD: interrupción del convertidor A/D. Si la medida que le llega ha variado más de 8 bits respecto a la anterior, se suma o se resta 8 a la medida anterior, dependiendo de si es un incremento o un decremento. De esta forma se evita la posibilidad de tomar lecturas de temperatura disparatadas, que no reflejarían la verdadera evolución de la temperatura. TIMER: Temporizador para distintas variables de tiempo utilizadas en el programa, como son la cuenta del tiempo 0 ó 1 en las transmisiones de datos, cuenta de los tiempos de modulación de los relés... Estas interrupciones también se usan en la programación de la tarjeta S98 puesto que hay un convertidor digital analógico y se necesita mantener las comunicaciones con la tarjeta del TX98. 5.12. Watch-dog (WDOG). Como indica la traducción del nombre, “perro guardián”, esta rutina se encarga de controlar que sólo se lee dentro de la zona del programa. El módulo Computer Operating Properly (COP) del microprocesador contiene un contador que está corriendo continuamente, y tal que genera un reset en caso de que se le permita llegar a un máximo (overflow). En determinados sitios del programa se efectúa un reset del contador, de manera que siempre que el programa discurra normalmente, el contador no podrá llegar al máximo. 92 MEMORIA I. Memoria Capítulo 6. Descripción del Software En el momento en que el stack pointer se saliese del código del programa, ya no se pasaría por las instrucciones de reset del contador, y por tanto sí llegaría a al máximo, con lo que se produciría un reset del microprocesador y así se entraría otra vez dentro de la zona del programa. El registro de control del COP está situado en la dirección $FFFF, superpuesto al byte alto del vector de reset. Escribiendo cualquier valor en dicha posición de memoria se pone a cero el contador y comienza una nueva cuenta. Al leer en la dirección $FFFF se devuelve el valor del byte bajo del vector de reset (que en nuestro caso contendrá $C0), lo que nos llevará al comienzo del programa. Para llevar a cabo la puesta a cero del contador se repite durante el programa el siguiente par de instrucciones: Carga el valor $FF en el acumulador Lleva el valor del acumulador a la variable 5.13. Tabla de temperaturas. A partir de la posición de memoria $E800 se sitúa la tabla de temperaturas para la NTC, cuyo cálculo puede consultarse en el documento CÁUCULOS en el apartado de software. Para construir la tabla en el programa se siguen los siguientes pasos: 1.- Multiplicar la columna de "H" por 2 (cada valor ocupa 2 posiciones de memoria). 2.- Sumarle el resultado a $E800 (dirección donde comienza la tabla). 93 MEMORIA I. Memoria Capítulo 6. Descripción del Software 3.- El resultado es la dirección de memoria en la que se debe almacenar el dato de la temperatura en hexadecimal. 6. Programa principal del la tarjeta S98 La parte correspondiente al programa principal se inicia en la etiqueta COMZO (comienzo). Al comienzo del programa principal la primera vez que se entre en este se pondrán unos valores por defecto (potenciómetro de mínima apertura). En el segundo paso se toman cuatro medidas para cada una de las siguientes variables: Temperatura exterior, humedad interior, humedad exterior y presión. Con estas medidas se ejecuta la subrutina media que se explicó en el apartado anterior. Lo siguiente es tomar una medida de la calidad del aire. Después de esto lo que habilita son las comunicaciones con la tarjeta TX98 con el propósito de recibir de esta los valores introducidos por el usuario. Se recepcionan dichos datos y para comprobar si estos son correctos se comprueba que estén dentro del rango establecido por el programador. Una vez que los datos recibidos son correctos se calcula el Free-Cooling para que el control decida la apertura de las compuertas. Si al calcular el Free-Cooling da que la apertura de la compuerta exterior es menor del 20% se activa el potenciómetro de mínima apertura. Después de esto se compara el valor de la presión de entrada y salida del filtro y si las dos son muy diferentes se enciende led de filtro sucio. Esto se hace ahí pero podría haberse hecho antes. Con los valores calculados se forma el dato de la siguiente manera: 94 MEMORIA I. Memoria 0-1- Capítulo 6. Descripción del Software MANDO (8 bits) -TEMP.EXTERIOR (11 bits) -PRESION(11 bits ) APERTURA COMPUERTA(8 bits)-0-1 Al final del proceso se graban los datos en la memoria EEPROM y se mandan los datos a través de la red de comunicaciones. Cuando esta comunicación es correcta se vuelve al principio del programa (tomar medidas). El diagrama de flujo del programa principal se muestra a continuación, y las subrutinas más relevantes empleadas y no explicadas anteriormente en se describen en el apartado 7:Subrutinas destacables de la tarjeta S98. 7. Subrutinas destacables de la tarjeta S98 En este apartado se explican las subrutinas más importantes que no se hayan explicado anteriormente en el apartado 5. 7.1. Tabla de calidad del aire A partir de lo recibido del sensor de calidad del aire (valor de 0-10V) mediante la tabla de calidad del aire se transforma este valor a hexadecimal que es como se guarda en memoria. El cálculo de la tabla puede consultarse en el documento CÁUCULOS en el apartado de software. La medida de la calidad del aire es una medida lineal. 0VCalidad del aire más alta. Corresponde en hexadecimal a 0X00 5VPeor calidad del aire. Corresponde en hexadecimal a 0XFF. 95 MEMORIA I. Memoria 7.2. Capítulo 6. Descripción del Software Tabla de humedad Con esta tabla lo que se quiere es pasar la humedad que está entre 0 y 100% a un valor hexadecimal para poder almacenarlo en memoria. 1V Corresponde al 0%de humedad en hexadecimal OX00 4V Corresponde al 100% de humedad en hexadecimal OXE8 El valor de humedad en la tabla está multiplicado por 10 antes de pasarlo a hexadecimal véase apartado de Cálculos. 96 MEMORIA I. Memoria Capítulo 6. Descripción del Software Figura 6.4: Diagrama de flujo del programa principal de la S98 97 MEMORIA I. Memoria Capítulo 7. Descripción del programa para PC Capítulo 7 Descripción del programa para el PC Capítulo 7 Descripción del programa para el PC 7. daigu E n este documento se ha descrito paso a paso el programa que se utiliza en el PC para comunicar este dispositivo con la unidad de tratamiento de aire. 1. Introducción El control de la unidad de tratamiento de aire ha sido realizado con comunicaciones, de manera que es posible conectarlo con un PC, en el cual se incorpora un programa de visualización y control. Este programa está realizado con Visual Basic, y ha sido diseñado para realizar la centralización de los diferentes equipos que pueden formar parte de una instalación. En los epígrafes que siguen se describe el funcionamiento del programa, centrándose en los aspectos relativos a las unidades de tratamiento de aire, que son el objeto del proyecto. 2. Pantalla principal. 2.1. Descripción general. En la pantalla principal aparecen varios recuadros, en los que se representa resumen del estado de funcionamiento de los distintos elementos de la instalación: 98 MEMORIA I. Memoria Capítulo 7. Descripción del programa para PC FANCOILS CLIMATIZADORES MÁQUINAS CALDERAS EXTRACTORES Mientras el programa se encuentre en esta pantalla, se estará llevando a cabo un "rastreo", es decir, intentos de comunicación con los distintos elementos que constituyen el sistema, para obtener la información acerca de los parámetros de funcionamiento de cada uno de ellos. 2.2. Botones disponibles. En la parte inferior derecha de la pantalla se dispone de 5 botones: MODIF. GENERAL: para modificar el estado de un grupo de máquinas y cambiar sus consignas, aunque también se puede hacer pinchando en la etiqueta de climatizadores. Es general porque se selecciona el rango de máquinas que se desea modificar, aunque si sólo se quiere modificar una máquina, se pone el mismo número de esa máquina en los 2 espacios. PROGR.: pasa a la pantalla de programaciones horarias (ver este capítulo apartado 4: Pantalla de programaciones horarias.). IMPRIMIR: realiza una impresión de la pantalla. 99 MEMORIA I. Memoria Capítulo 7. Descripción del programa para PC AYUDA: se accede al archivo de ayuda. CONFIG.: permite modificar la configuración del sistema, cambiando el número de elementos de cada tipo que componen la instalación. Además en la parte superior derecha se sitúa el botón SALIR, que como propio nombre indica permite finalizar la ejecución del programa. La programación arranques y paradas quedará inactiva mientras el programa no esté funcionando. 2.3. Información disponible. En la ventana UTA se visualiza el estado de hasta 8 equipos, Si en la instalación hubiese más de 8 equipos, a la derecha de este recuadro aparecerían unas flechas para poder moverse por los diferentes climatizadores de la instalación en grupos de 8 (l-8, 9-16,17-24...). Para cada unidad de tratamiento de aire se dispone de los siguientes datos en este orden: Nº: Identificación numérica de la unidad de tratamiento de aire. Nombre: Identificación alfanumérica de la unidad de tratamiento de aire. Puede ser modificada por el usuario. Para cambiar el nombre de una unidad de tratamiento de aire hay que hacerlo a través de CONFIG, introduciendo la clave que pide el programa, y accediendo seguidamente a CAMBIO NOMBRES. Marcha/paro: Indicador de si la unidad de tratamiento de aire está en marcha o no. Cuando se ordena la marcha a una unidad 100 MEMORIA I. Memoria Capítulo 7. Descripción del programa para PC de tratamiento de aire, primeramente se enciende el círculo correspondiente situado en la fila de la unidad de tratamiento de aire en color amarillo y posteriormente, cuando la orden llega a la unidad de tratamiento de aire y es confirmada por la misma se enciende el recuadro correspondiente en color rojo. Igualmente, haciendo click en el círculo se puede encender la unidad de tratamiento de aire, si estaba apagado, o apagar, si estaba encendido. Unidad de tratamiento de aire parado y sin orden de marcha Unidad de tratamiento de aire parado y con orden de marcha Unidad de tratamiento de aire en marcha Unidad de tratamiento de aire en marcha y con orden de parada Modo de funcionamiento: En la parte interior aparece el icono correspondiente al modo de funcionamiento deseado por el usuario, ventilador, frio, calor o auto. El color del recuadro exterior indica el estado de funcionamiento de la unidad de tratamiento de aire, Fondo rojo =Calor, Fondo azul = Frío, Fondo Gris =Ventilación, Fondo Blanco= No demanda. 101 MEMORIA I. Memoria Capítulo 7. Descripción del programa para PC Modo Ventilación seleccionado Modo Calor seleccionado Modo Frío seleccionado Modo Automático seleccionado Temp.: Temperatura medida en el retorno de la unidad de tratamiento de aire. Cons.: Temperatura de consigna seleccionada para la unidad de tratamiento de aire. Fallo de comunicación: El programa comunica con las la unidades de tratamiento de aire, periódicamente, encendiéndose la casilla del número de la unidad de tratamiento de aire con el que está comunicando, si existe cualquier fallo en la comunicación lo indicará en la columna y fila correspondientes mediante un círculo rojo. Si tras la lectura de una unidad de tratamiento de aire existiera una modificación de los estados de la unidad de tratamiento de aire ésta no será mostrada hasta la nueva lectura. No existe fallo en la comunicación Existe fallo en la comunicación 102 MEMORIA I. Memoria Capítulo 7. Descripción del programa para PC 3. Pantalla de climatizadores. 3.1. Descripción general. En esta pantalla pueden verse con más detalle las 8 unidades de tratamiento de aire que estuvieran seleccionadas en la pantalla principal antes de pinchar sobre el nombre de una de ellas. Cuando el programa se encuentra en esta pantalla el ordenador únicamente rastrea los datos y parámetros de las unidades de tratamiento de aire que están en pantalla. 3.2. Botones disponibles. Se dispone de los siguientes pulsadores: MARCHAPARO: para arrancar o parar las unidades de tratamiento de aire desde esta pantalla. FLECHAS: una hacia arriba y otra hacia abajo, que permiten cambiar la temperatura de consigna. PARAMETROS: Pulsando MODIFICAR e introduciendo la clave correcta en la pantalla que se abre al hacer clic en este botón, se puede cambiar los valores de la constante de la banda proporcional y el tiempo de integración. PANTALLA GENERAL: para volver a dicha pantalla. IMPRIMIR: realiza una impresión de la pantalla. AYUDA: se accede al archivo de ayuda correspondiente. 103 MEMORIA I. Memoria 3.3. Capítulo 7. Descripción del programa para PC Información disponible. La información que se proporciona sobre las unidades de tratamiento de aire es la siguiente: Nº : Identificación numérica de la unidad de tratamiento de aire. Nombre: Identificación alfanuménca de la unidad de tratamiento de aire. Consigna: Temperatura seleccionada por el usuario. Se puede modificar desde esta pantalla por medio de unas flechas hacia arriba y abajo. Temp. retorno: Temperatura medida en el retorno de la unidad de tratamiento de aire. Ap. valv. calor: Porcentaje de apertura de la válvula de calor. Ap. valv. frío: Porcentaje de apertura de la válvula de frío. Modo de funcionamiento: Se indica mediante el color de fondo de la representación esquemática de la unidad de tratamiento de aire. Fondo Amarillo = Calor, Fondo Azul= Frío, Fondo Blanco =Ventilación. Fallo de comunicación: si existe cualquier fallo en la comunicación se indicará mediante un recuadro rojo en la parte superior derecha de la unidad de tratamiento de aire en cuestión. 104 MEMORIA I. Memoria Capítulo 7. Descripción del programa para PC Pinchando sobre el nombre de una de las unidades de tratamiento de aire se accede a la pantalla individual de la misma. 4. Pantalla de la unidad de tratamiento de aire individual. 4.1. Descripción general. Esta pantalla consta de 3 partes a través de las cuales podemos ver información detallada no sólo del funcionamiento de la unidad de tratamiento de aire, sino también de sus parámetros: En la parte superior puede verse el mismo gráfico de la pantalla de unidades de tratamiento de aire, pero ampliado. En la parte derecha se muestra la lista de parámetros de la unidad de tratamiento de aire que podrán ser modificados siempre que dispongamos de la clave. Se incorpora en la parte izquierda una reproducción de la parte frontal del control, sobre la que podemos utilizar los pulsadores de ON/OFF, MODO, FLECHA ARRIBA y FLECHA ABAJO como si fueran los pulsadores reales del control. Cuando el programa se encuentra en esta pantalla el ordenador únicamente rastrea los datos y parámetros de la unidad de tratamiento de aire que está en pantalla. FALTAN PARAMETROS DE UTA. 105 MEMORIA I. Memoria 4.2. Capítulo 7. Descripción del programa para PC Botones disponibles. PULSADORES: para encender o apagar la unidad de tratamiento de aire, cambiar el modo de funcionamiento y aumentar o disminuir la consigna. PANTALLA GENERAL: para volver a dicha pantalla. ANTERIOR / SIGUIENTE: permite desplazarse a la anterior o a la siguiente unidad de tratamiento de aire según su número de identificación. IMPRIMIR: realiza una impresión de la pantalla. AYUDA: se accede al archivo de ayuda correspondiente a esta pantalla. MODIFICAR PARAMETROS: para cambiar los parámetros como la histéresis o la zona muerta, pero se requiere clave. 4.3. Información disponible. Se dispone en la parte superior de esta pantalla de la misma información descrita en Pantalla de la unidad de tratamiento de aire. Fallo de comunicación: El programa comunicará con la unidad de tratamiento de aire seleccionada para obtener su información. Si existiese cualquier fallo en la comunicación lo indicará mediante 106 MEMORIA I. Memoria Capítulo 7. Descripción del programa para PC un icono rectangular de color rojo que aparecerá encima del termostato. Display del control: Se dispone de la misma información que aparece en la pantalla LCD del control de la unidad de tratamiento de aire, es decir, modo de funcionamiento, consigna y temperatura de retorno. Parámetros: Se muestran los parámetros de temperatura, tiempo y control. 5. Pantalla de programaciones horarias. 5.1. Descripción general Se accede a esta pantalla pulsando el botón PROGR en la pantalla principal. En esta pantalla se puede controlar las programaciones de arranques, paradas, cambios de consigna, etc. para cada día de la semana. Se dispone de hasta 4 arranques y paradas, de los cuales los 2 primeros coinciden con los que aparecen en el control de la unidad de tratamiento de aire. Los 2 restantes sólo funcionarán cuando el ordenador esté encendido. 5.2. Botones disponibles. FLECIIAS: para aumentar o disminuir la consigna y las horas. COPIAR DIA: copia la programación del día anterior. PANTALLA GENERAL: para volver a dicha pantalla. 107 MEMORIA I. Memoria Capítulo 7. Descripción del programa para PC ANTERIOR / SIGUIENTE: permite desplazarse a la anterior o a la siguiente unidad de tratamiento de aire según su número de identificación. MODIFICACION: tras introducir la clave se permite cambiar los parámetros de la programación. ACTIVAR / DESACTIVAR PROGRAMACIÓN. IMPRIMIR: realiza una impresión de la pantalla. AYUDA: se accede al archivo de ayuda correspondiente a esta pantalla. 5.3. Funciones disponibles. Desde esta pantalla se pueden iniciar las siguientes operaciones: Activar o Desactivar la programación. La programación puede estar activada o desactivada, quedando indicado en esta pantalla. En el rótulo de fondo blanco se indica el estado de la programación, y en el rótulo del pulsador aparece la función que realizará al pulsarlo. Con la programación desactivada no se producen los arranques y paradas aunque estuvieran programados. Cuando el ordenador está apagado o el programa no está rodando, no se producirán los arranques y paradas programados, estando la programación desactivada. Modificar programación. 108 MEMORIA I. Memoria Capítulo 7. Descripción del programa para PC Pulsando el botón MODIFICACIÓN e introduciendo la clave se tiene acceso a modificar las horas de arranques, paradas, consignas, etc. Para ello se emplean los pulsadores subir/bajar que aparecen a la derecha de la casilla a modificar. Copiar programación de un día. Si los mismos datos de programación de un día se repiten en otros días de la semana, pueden ser copiados de la forma siguiente: Pulsar MODIFICACIÓN, introducir la clave, aparecerán los botones de COPIAR DIA debajo del rótulo de cada día de la semana. Se pulsa en el botón del día que se quiere programar y después en el rótulo del día cuyos datos de programación se quieren copiar. Copiar programación de un equipo. Se puede copiar la programación ya realizada de un equipo en el grupo de equipos que hay seleccionados. Marcando la casilla "Copiar" se abrirá otra que permite introducir el número de equipo cuyos datos de programación se quieren repetir. Programación por grupos de equipos. En lugar de programar uno a uno cada equipo, la mayoría de las veces se necesitará un conjunto de equipos con la misma programación semanal. Al entrar en la pantalla programación se da a elegir un grupo de equipos. Si dentro del rango que se ha elegido ya existen programaciones diferentes, aparecerán en la parte superior de la pantalla los números de 109 MEMORIA I. Memoria Capítulo 7. Descripción del programa para PC los equipos que tienen la misma programación y un rótulo indicando el resto del grupo que tiene programación distinta. Se puede recorrer todo el rango seleccionado mediante los botones ANTERIOR y SIGUIENTE. Imprimir Pantalla. Se puede obtener una impresión de la pantalla de programación pulsando el botón IMPRIMIR. NOTA: En cada una de las pantallas del programa se dispone de un botón de ayuda, que muestra la información correspondiente a la pantalla en la que nos encontremos, y otro de imprimir que permite hacer una impresión de pantalla. 110 MEMORIA I. Memoria Capítulo 8.Conclusiones Capítulo 8 Conclusiones Capítulo 8 Conclusiones 8. daigu E n este documento se ha descrito paso por paso el desarrollo y la implementación de un control para las unidades de tratamiento de aire. El modelado de las tarjetas de la máquina se ha realizado con ORCAD ha sido un trabajo que ha requerido bastante tiempo pero necesario para después imprimir estos circuitos cada uno en la tarjeta correspondiente. Además el programa nos permite imprimir cada uno de los planos requeridos para la impresión en la tarjeta y que se pueden ver más adelante en el apartado de planos. La programación de las funciones del control sobre la unidad de tratamiento de aire se ha realizado con dos microprocesadores diferentes uno para cada una de las tarjetas. Esta parte ha sido la más laboriosa de todo el proyecto puesto que se necesitan tener muchos factores en cuenta y los programas se han realizado en ensamblador. El lenguaje ensamblador tiene una ventaja y es que no ocupa casi espacio en la memoria el microprocesador con lo que nos permite utilizar microprocesadores más pequeños y baratos pero tiene de desventaja que este lenguaje es más costoso para el programador puesto que para la implementación de una instrucción simple en la vida real se necesitan muchas instrucciones en este lenguaje. Además ha de tenerse en cuenta que los dos microprocesadores utilizados son diferentes por lo que es necesario conocer mayor numero de instrucciones para una misma cosa porque aunque ambos se puedan 111 MEMORIA I. Memoria Capítulo 8.Conclusiones programar en ensamblador la manera de mover algo a memoria no se hace de la misma forma ha de verse la diferencia en los manuales de ambos microprocesadores. Todo este proyecto al final nos ha permitido tener una unidad de tratamiento de aire lista para probarla como prototipo e incluso lista para venderla ya que también se calcula más adelante un presupuesto que nos informa del precio al que saldría cada unidad si quisiéramos sacarla al mercado. 112 MEMORIA I. Memoria Capítulo 8. Futuros desarrollos Capítulo 9 Futuros desarrollos Capítulo 9 C Futuros desarrollos 9. daigu omo ha podido verse a lo largo de este documento, las posibilidades que abre la electrónica al mundo de la climatización y tratamiento de aire son inmensas. A este mismo aparato se le podrían añadir otros muchos sistemas para tratar el aire de manera diferente, ya que existen entornos en los que no se necesita un tratado en el que haya que quitarle partículas al aire sino también desinfectarlo. Para este propósito podría añadirse dentro de la misma máquina y no con pocas ni sencillas modificaciones el tratamiento del aire con ozono, algo para lo que ya existen máquinas independientes pero no inmersas en un modulo de climatización. Además en este proyecto se ha explicado la unidad de tratamiento de aire más simple con un numero de filtros reducidos, hay en situaciones (fabricas donde el aire este muy contaminado o piscinas) que estas unidades necesitaran un control de tratamiento de aire más sofisticado que el que se ha descrito en este documento. Otra mejora que se podría incluir en los futuros desarrollos es la utilización de una sola tarjeta con un solo microprocesador para el control de todos los elementos dentro de la unidad. Con esto se podrá conseguir una máquina más compacta y se le evitaría al programador tener que hacer una 113 MEMORIA I. Memoria rutina de Capítulo 8. Futuros desarrollos comunicaciones entre ambas tarjetas puesto que solo dispondremos de una. Aunque sobre esto se ha de hacer primero un estudio detallado puesto que se ha de ver si el coste con la reducción de espacio y el tiempo que se ahorra merece la pena o le va a merecer la pena al usuario porque al final la razón por la que se montan estas maquinas es para su venta por lo que se ha de conseguir una buena relación calidad precio 114 Bibliografia [1]. Wikipedia. “Aire acondicionado”. [2]. Wikipedia. “Air Handling unit”. [3]. Cesáreo Fernandez Martinez . “Estructura de ordenadores” 2º I.T.I.E.I. Universidad Pontificia Comillas (ICAI), Dep. de Electrónica y Automática, Madrid, 2008. [4]. Cesáreo Fernández Martínez . “Informática industrial” 2º I.T.I.E.I. Universidad Pontificia Comillas (ICAI), Dep. de Electrónica y Automática, Madrid, 2008. [5]. www.datasheetcatalog.com [5]. www.microchip.com/products/Devices.aspx?dDocName=en01024 [6]. www.freescale.com/files/microcontrollers [7]. Manual del usuario de visual basic de la pagina web: http://msdn.microsoft.com/es-es/library/aa468084.aspx 115 PARTE II: CÁLCULOS 116 MEMORIA II. Cálculos Capítulo 1. Cálculos de hardware Capítulo 1 Cálculos de hardware Capítulo 1 E Cálculos de Hardware 1. Daigu n este capítulo se explican el por qué de los valores de los componentes elegidos en el diseño del hardware de las unidades de tratamiento de aire. 1. Resistencias de pull-up de los pulsadores. Se calcula un valor máximo para las resistencias de pull-up determinado por las características de entrada del microprocesador (IIH y VIH) y que podemos obtener del manual. Con estos datos se elige la resistencia necesaria aplicando las ecuaciones 1.3 y 1.4 Figura 1.1: Resistencias de pull-up (1.1) (1.2) 117 MEMORIA II. Cálculos Capítulo 1. Cálculos de hardware (1.3) (1.4) Dentro de este límite se eligieron resistencias de 100 K para los pulsadores. Por tanto: R32→39 = 100 K . 2. Sondas de temperatura. Rango de temperaturas: -20 ºC a 80 ºC. Por tanto la máxima resistencia corresponderá a la temperatura de -20 ºC. Dicha resistencia máxima puede ser obtenida de la tabla que aparece en el catálogo de la NTC: -20 ºC → R = 99,04 K. Para aprovechar bien la escala nos interesa que para el mayor valor de la NTC la salida se aproxime lo más posible a los 4 V . Figura 1.2: Cálculo de la NTC Ahora se puede obtener la resistencia de pull-up, igualando la corriente que pasa por ambas resistencias véase ecuación 1.5: 118 MEMORIA II. Cálculos Capítulo 1. Cálculos de hardware (1.5) Resistencia comercial : 24,9K1% 3. Resistencias para el circuito TL43L. Figura 1.3: Resistencias de TL43L 3.1. Resistencias para fijar tensión de salida. La tensión de salida del conjunto sique la ecuación 1.6: (1.6) Según datos de catálogo (ver Datasheet): VREF= 2,5V, IREF =2 µA. Además V0=4V, que es la tensión que se quiere fijar como referencia VREFH. 119 MEMORIA II. Cálculos Capítulo 1. Cálculos de hardware Podemos despreciar la corriente IREF y por tanto utilizar la expresión simplificada para efectuar el cálculo véase ecuación 1.7: (1.7) (1.8) R6 = 2K → R11 = 1,2K 3.2. (1.9) Resistencia para suministrar la corriente de cátodo mínima R5 debe ser lo suficientemente pequeña para que la corriente de cátodo suministrada al TL431 sea ≥ lmA, y por tanto: (1.10) Dentro de este límite se eligió una resistencia de 220 Ω → R5 = 220 Ω 120 MEMORIA II. Cálculos Capítulo 1. Cálculos de hardware 4. Consumo. Los elementos de la tabla que tendrán un consumo apreciable, son los siguientes: Componente Consumo Microprocesador (MC68HC908LJI2) 18Ma Conversor D/A (MAX500) 10mA Memoria EEPROM (NM24C02) 2Ma Amplificadores operacionales 2,5x2=5mA (TLC2272) Circuito para comunicaciones 0,25mA (MAX4S7) VREF conversión A/D Regulador de tensión (LM7805) 3mA Pull-up’s 1mA Relees (OMG5V1) 6x2=12 mA Total 55,75mA Tabla 1.1: Consumo de componentes 121 MEMORIA II. Cálculos Capítulo 1. Cálculos de hardware NOTA: Se han tenido en cuenta los consumos de 2 relés y el conversor D/A, aunque en la práctica no se tendrán de forma simultánea nada más que 1 relé y el conversor D/A, o bien 2 relés (según sea el tipo de regulación de válvulas por el que se opte). Por tanto podemos considerar una IIN = 60 mA. 5. Condensadores del circuito de alimentación. Siguiendo los pasos indicados en el manual Voltage Regulators Handbook se obtiene: ω = 314,16 rad/s (1.11) (1.12) (1.13) (1.14) (1.15) (1.16) Del gráfico del manual se obtiene el siguiente valor: (1.17) 122 MEMORIA II. Cálculos Capítulo 1. Cálculos de hardware El valor obtenido con este cálculo es el mínimo necesario y teniendo en cuenta la posible degradación de los condensadores electrolíticos durante su vida se dispondrán condensadores de 220 µF. Por tanto: C14 = C16 = 220 µF. 123 MEMORIA II. Cálculos Capítulo 2. Cálculos de Software Capítulo 2 Cálculos de Software Capítulo 2 E Cálculos de Software 2. Daigu n este capítulo se explican los cálculos utilizados en la memoria en el apartado de desarrollo de software. 1. Frecuencia. El microprocesador dispone de un sintetizador de frecuencia, que a su vez incluye un PLL (Phase Locked Loop), para ajustar de modo fino la frecuencia de bus. Este ajuste se realiza por programación y los pasos a seguir para calcular los parámetros aparecen en el manual del microprocesador: 1. Elegir la frecuencia de bus deseada: En nuestro caso fBUS = 4 MHz. 2. Calcular la frecuencia del oscilador controlado por tensión (VCO) incluido en el PLL: (2.1) P es un parámetro que puede valer 0, 1, 2 ó 3. Para escoger la frecuencia más baja elegimos P = 0 → 3. Seleccionar una frecuencia de referencia para el PLL: 124 MEMORIA II. Cálculos Capítulo 2. Cálculos de Software En este caso el cristal de cuarzo tiene una frecuencia: fRCLK=32,768 KHz. Elegimos como divisor de la frecuencia de referencia: R = 1, porque se recomienda que fRCLK/R sea el máximo posible. 4. Calcular el parámetro N véase ecuación 1.19: (2.2) Como no ha salido un valor entero se ha redondeado el valor al entero siguiente, y posteriormente se ha pasado a hexadecimal. 5. Calcular y comprobar la validez de las frecuencias: (2.3) (2.4) Ambas frecuencias son razonablemente próximas al valor deseado. 6. Elegir el parámetro E según la Tabla 2.1: En nuestro caso E = 1 porque fVCLK=16,023 MHz. 125 MEMORIA II. Cálculos Capítulo 2. Cálculos de Software Rango de frecuencia (Hz) E 0<fVCLK<9830400 0 9830400≤fVCLK<19660800 1 19660800≤fVCLK<39321600 2 Tabla 2.1: Rango de frecuencias 7. Calcular el parámetro L siga ecuación 2.5: (2.5) 8. Calcular y comprobar la frecuencia media entre la mínima y máxima que puede alcanzar el PLL (fVRS): (2.6) Para que el funcionamiento sea correcto se debe cumplir: (2.7) 126 MEMORIA II. Cálculos Capítulo 2. Cálculos de Software Por tanto dicha condición se cumple. fVCLK fBUS fRCLK R N P E L 16MHz 4MHz 32,768KHz 1 1E9 0 1 D1 Tabla 2.2: Parámetros 2. NTC: Tabla de temperaturas. Con el valor de resistencia calculado anteriormente, la salida tendrá unos valores de tensión comprendidos entre 0 y 4V, y su valor exacto será: (2.8) Expresión en la que R es una función de la temperatura que viene dada en el catálogo de la NTC. Para pasar la tensión de salida a su correspondiente valor en hexadecimal aplicaremos la siguiente proporción, teniendo en cuenta que vamos a usar una resolución de 0,01 V, necesitaremos 400 posiciones de memoria (si 0 V→ 000, 4V→3FF) (2.9) 127 MEMORIA II. Cálculos Capítulo 2. Cálculos de Software En la Tabla 2.3 se muestran los resultados obtenidos en el proceso. T (ºC) R V H -20 FF38 99,04 3,995 03FD -15 FF6A 74,18 3,743 03BD -10 FF9C 56,10 3,463 0375 -5 FFCE 42,82 3,162 0328 0 0000 32,96 2,848 02D8 5 0032 25,58 2,534 0287 10 0064 20,00 2,227 0239 15 0096 15,76 1,938 01EF 20 00C8 12,51 1,672 01AB 25 00FA 10,00 1,433 016E 30 012C 8,048 1,221 0138 35 015E 6,518 1,037 0109 128 MEMORIA II. Cálculos Capítulo 2. Cálculos de Software T (ºC) R V H 40 0190 5,312 0,879 00E0 45 01C2 4,354 0,744 00BE 50 01F4 3,588 0,630 00A1 55 0226 2,974 0,533 0088 60 0258 2,478 0,453 0073 65 028ª 2,074 0,384 0062 70 02BC 1,745 0,327 0053 75 02EE 1,476 0,280 0047 80 0320 1,253 0,240 003D Tabla 2.3: Cálculo para la NTC 129 PARTE III: ESTUDIO ECONÓMICO 130 MEMORIA III. Estudio Económico Capítulo 1. Estudio Económico Capítulo 1 Estudio Económico Capítulo 1 Estudio Económico 1. Daigu H oy en día, gracias a la fuerte demanda por parte de la sociedad, cada día más exigente, el desarrollo de la tecnología es uno de los principales objetivos de las empresas. Más concretamente, es en el campo de la electrónica donde se está produciendo un crecimiento mayor. La evolución está teniendo un ritmo tan acelerado que el control de sistemas se ha convertido en una de las principales misiones. Actualmente, la sociedad reclama el control de cada vez más dispositivos o equipos para proporcionarles una vida laboral y social más fácil, confortable y segura. Un estudio económico del presente proyecto es necesario tanto para evaluar la rentabilidad del mismo antes de lanzarlo al mercado como para poderlo comercializar con un precio competente con respecto al resto de empresas y a la vez atractivo para los posibles clientes. El uso de un control electrónico en las unidades de tratamiento de aire, permite que el usuario pueda elegir la calidad y condiciones del aire dentro del local donde la maquina este situada. 131 PARTE IV: MANUAL DE USUARIO 132 MEMORIA III. Manual del usuario Capítulo 1. Características notables Capítulo 1 Características notables Capítulo 1 E Características notables 1. Daigu n este capítulo se explican el modo de funcionamiento de las unidades de tratamiento de aire y sus características más importantes. 1. Operación automática Las unidades de tratamiento de aire SA98 incluyen una función de control para selección automática frío/calor. Esto significa que su termostato ordenará automáticamente a su instalación de aire acondicionado su puesta en marcha en frío o calor o la parada de ésta, según se necesite, para mantener la temperatura de confort que Vd. seleccionó. Además también pone en marcha la máquina si el usuario necesita otras propiedades del aire diferentes. La máquina no se para hasta que la humedad o el nivel de oxigeno del aire no es el deseado. He aquí cómo funciona: Durante los períodos de actividad del acondicionador de aire es posible que se produzcan cambios en la temperatura exterior o incluso en la carga térmica del interior (por ejemplo más personas, gente que entra y sale del local, etc...) como consecuencia puede ser necesario dar calor en algún momento mientras que en otros será necesario dar frío. Para conseguirlo, el termostato mantendrá parado el acondicionador siempre que la temperatura interior esté situada en una zona de 1ºC por debajo o por encima de la 133 MEMORIA III. Manual del usuario Capítulo 1. Características notables temperatura que Vd. seleccionó. Esta banda (llamad a zona muerta) asegura que el acondicionador no esté cambiando de frío a calor o viceversa demasiado a menudo. Sí la temperatura baja más de 1ºC de la seleccionada el termostato hará funcionar al equipo en calor. Por el contrario, si subiese más de 1ºC de la seleccionada le hará trabajar en frío. 2. Pantalla simbólica La unidad de tratamiento de aire (SA98) dispone para su comodidad de una pantalla donde mediante símbolos podrá comprobar fácilmente el estado de selección y funcionamiento. Figura 1.1: Display para visualización 134 MEMORIA IV. Manual del usuario Capítulo 2. Programación de la UTA Capítulo 1 Programación de la unidad de tratamiento de aire Capítulo 2 E Programación de la unidad de tratamiento de aire 2. ÇDaigu n este capítulo se explican el modo de programar las unidades de tratamiento de aire. Solo es válido para los modelos que son programables, ya que no todos lo son. 1. Planifique su horario de utilización Antes de programar los períodos diarios de su unidad tómese un respiro y establezca las horas de servicio que necesita, pensando cuáles deberán ser los períodos de marcha, parada y/o reducción que le resulten más convenientes en su caso. 135 MEMORIA IV. Manual del usuario Capítulo 2. Programación de la UTA LUN MAR MIE JUE VIE SAB DOM ARRANQUE 1 MAÑANA PARADA 1 ARRANQUE 2 TARDE PARADA 2 Tabla 2.1: Planificación de horario 2. Puesta en hora y día de la unidad de tratamiento de aire 1. Pulsar en el orificio del lateral derecho de la unidad de tratamiento de aire con la punta de un lápiz. Los dígitos del reloj dejan de alternar con el valor de temperatura y empiezan a parpadear. 2. Pulsar flecha arriba o flecha abajo. Con la flecha arriba, la hora aumenta; con la flecha abajo, la hora disminuye. si se mantiene pulsado, el cambio es muy rápido. 3. Pulsar en el orificio del lateral derecho con la punta de un lápiz. La barra situada debajo del día actual parpadeará. 4. Flecha arriba: La barra cambia de izquierda a derecha. Flecha abajo: la barra cambia de derecha a izquierda. 136 MEMORIA IV. Manual del usuario Capítulo 2. Programación de la UTA 5. Pulsar en el orificio del lateral derecho con la punta de un lápiz. El día y la hora actual se aceptan por el termostato. 3. Introducción/ Modificación del programa horario introducción del programa horario de arranque, parada o reducción, que ya planificó en el apartado 2. Planifique su horario de utilización. 1. Pulse la tecla PRG para activar el modo de programación. Al acceder al modo de programación, las barras situadas debajo de los días de la semana indican los días que poseen alguna programación. 2. Pulse flecha arriba o abajo hasta llegar al día que desee programar. 3. Pulse SEL. Parpadeará alguno de los siguientes símbolos: Arranque 1 Parada 1 Arranque 2 Parada 2 4. Pulse arriba o abajo hasta que parpadee el símbolo del apartado anterior que desee programar. 5. Pulse SEL. Parpadeará la hora. 6. Pulsar arriba o abajo hasta llegar a la hora que desee de arranque, parada o reducción, que haya seleccionado en el punto 4. 7. Vuelva a pulsar SEL y parpadeará de nuevo el día de la semana. 137 MEMORIA IV. Manual del usuario Capítulo 2. Programación de la UTA Repita las operaciones descritas en los puntos 2 a 7 hasta que haya programado la unidad de tratamiento de aire según la tabla de planificación horaria que diseñó en el apartad o 1. Planifique su horario de utilización 8. Pulse PRG, el termostato acepta automáticamente los valores que se le hayan dado y no parpadea ningún símbolo en la pantalla, funcionando normalmente. 4. Copia del programa diario Si el programa de un día es el mismo que el del día anterior, copie dicha programación de la siguiente forma: 1. Pulse PRG. Parpadeará el día de la semana 1, 2, 3,...7. 2. Pulse flecha arriba o abajo hasta que llegue al día cuya programación horaria del día anterior se desee copiar. 3. Pulse COPY. El día que eligió en el punto 2 quedará programado, igual que el día anterior. NOTA: Si desea programar el siguiente día con los mismos parámetros, pulse flecha arriba y COPY, y así sucesivamente. 4. Pulse PRG, el termostato acepta automáticamente los valores que se le hayan dado y no parpadea ningún símbolo en la pantalla, funcionando normalmente. 138 MEMORIA IV. Manual del usuario Capítulo 2. Programación de la UTA 5. Anulación de la programación de un periodo Anulación de la programación de un arranque, parada o reducción: 1. Pulse PRG. Parpadeará el día de la semana 1, 2,3,...7. 2. Pulse flecha arriba o abajo hasta que llegue al día en el cual desee anular ese arranque, parada o reducción. 3. Pulse SEL, parpadeará uno de los siguientes símbolos: 4. Pulse flecha arriba o abajo hasta que parpadee el símbolo que desea anular. 5. Pulse ON-OFF y se anulará ese arranque, parada o reducción, mostrándose como confirmación en la pantalla de la hora la indicación -:. 6. Pulse PRG, el termostato acepta automáticamente los valores que se le hayan dado y no parpadea ningún símbolo en la pantalla, funcionando normalmente. 6. Anulación de la programación de un día 1. Pulse PRG. Parpadeará el día de la semana 1,2, 3,...7. 139 MEMORIA IV. Manual del usuario 2. Capítulo 2. Programación de la UTA Pulse flecha arriba o abajo hasta que llegue al día en el cual desee anular la programación. 3. Pulse ON-OFF y el segmento situado debajo de ese día de la semana se apagará, quedando anulada la programación de dicho día. 4. Pulse PRG, el termostato acepta automáticamente los valores que se le hayan dado y no parpadea ningún símbolo en la pantalla, funcionando normalmente. 7. Activación/Desactivación del programa horario Si existe alguna programación, aunque la programación horaria esté desactivada, aparecerá en el display el símbolo PRG. Si no existe ninguna programación horaria no aparecerá ningún símbolo en la pantalla. 1. Pulse SEL estando en modo de operación normal hasta que parpadee en la pantalla el símbolo PRG. 2. Pulse flecha arriba o abajo. El símbolo cambiará alternativamente 3. Pulse SEL hasta que ningún símbolo parpadee en la pantalla. 8. Saltarse temporalmente la programación horaria. 1. Override Estando en la pantalla encendidos el símbolo PRG ON y uno de los símbolos de parada, puede poner en funcionamiento acondicionador durante t hora y media procediendo como sigue: 140 el MEMORIA IV. Manual del usuario Capítulo 2. Programación de la UTA 1. Pulse ON-OFF y manténgalo pulsado hasta que el símbolo PRG ON parpadee. NOTA: Transcurrida la hora y media de funcionamiento en override, el termostato vuelve a funcionar con la programación que tenía establecida. 2. Standby Estando en la pantalla encendidos el símbolo PRG ON y uno de los símbolos de arranque, puede parar el acondicionador hasta la próxima orden de arranque programada pulsando ON-OFF y manteniéndolo pulsado hasta que el símbolo PRG ON parpadee. Pasados unos segundos el símbolo PRG ON dejará de parpadear. 9. Como recuperar la programación horaria durante un override o un standby Durante un periodo de override es posible recuperar la programación horaria nuevamente de la siguiente forma. 1. Pulse ON-OFF. El símbolo PRG ON dejará de parpadear y queda recuperada la programación horaria establecida en su momento. 141 MEMORIA IV. Manual del usuario Capítulo 3. Manejo de la UTA Capítulo 3 Manejo de la unidad de tratamiento de aire Capítulo 3 E Manejo de la unidad de tratamiento de aire 3. çDaigu n este capítulo se explican el modo de utilización las unidades de tratamiento de aire. 1. Puesta en marcha/parada de la unidad de tratamiento de aire. Cuando el termostato se encuentra en marcha pueden observarse en la pantalla la temperatura ambiente y el símbolo que representa el modo de funcionamiento. Pueden visualizarse además otros símbolos, dependiendo del modelo de termostato instalado y de las opciones que se encuentren seleccionadas. Para detener la unidad de tratamiento de aire: Pulsar la tecla ON-OFF, la pantalla pasará a mostrar únicamente la temperatura ambiente manteniéndose apagados los demás símbolos, así como también el acondicionador de aire. Para poner en marcha la unidad de tratamiento de aire: Pulsar la tecla ON-OFF. La pantalla mostrará los símbolos. 142 MEMORIA IV. Manual del usuario Capítulo 3. Manejo de la UTA 2. .Como bloquear/ desbloquear la unidad de tratamiento de aire La unidad dispone de una característica de bloqueo del teclado, que impide que personas no autorizadas modifiquen la selección de funciones o la programación horaria (sólo en los modelos programables) que se haya establecido. Esta alternativa resulta de especial utilidad si desean evitarse trastornos o consumos de energía innecesarios en lugares expuestos a acceso público. Para establecer el bloqueo / desbloqueo actúe de la siguiente forma: Partiendo de una temperatura de confort elegida por Vd., pulse la tecla MODO y manteniéndola pulsada pulse la tecla ABAJO, tras lo cual, el teclado quedará bloqueado. Al volver a efectuar esta misma operación el teclado quedará desbloqueado. 3. Limitación de elección de temperatura de confort Partiendo de una temperatura de confort elegida por Vd., pulse la tecla MODO y manteniéndola pulsada pulse la tecla ARRIBA, tras lo cual la temperatura de consigna sólo podrá variarse en +2ºC sobre la elegida. Al volver a efectuar esta misma operación la selección de consigna quedará libre. 143 MEMORIA IV. Manual del usuario Capítulo 3. Manejo de la UTA 4. Selección de la temperatura de confort Pulse la tecla flecha arriba si desea subir el valor de la temperatura de confort o flecha abajo si desea bajarla (por ejemplo: Si la temperatura seleccionada es 25ºC y desea bajar a 23ºC pulse dos veces la tecla ABAJO). 5. Selección de modo de funcionamiento En función de la configuración del termostato, pulsando la tecla MOD, su termostato puede seleccionar 4 formas diferentes de funcionamiento del acondicionador de aire: VENTILACION: El acondicionador ventilará continuamente el local sin demandar ni frío ni calor. FRÍO: El termostato ordenará al acondicionador producir frío, siempre que ello sea necesario para mantener el nivel de confort deseado. CALOR: El termostato ordenará al acondicionador producir calor, siempre que ello sea necesario para mantener el nivel de confort deseado. AUTOMÁTICO. El termostato ordenará al acondicionador producir frío o calor para conseguir la temperatura de confort elegida (ver apartado 1. Operación automática.) Transcurridos unos segundos sin efectuar ninguna pulsación, el termostato acepta automáticamente los valores que se le hayan dado, funcionando normalmente. 144 MEMORIA IV. Manual del usuario Capítulo 3. Manejo de la UTA 6. Comprobación del estado de la unidad de tratamiento de aire. Para conocer cuál es la selección actual del termostato y, por lo tanto, saber cuál es la temperatura de confort elegida, el modo de funcionamiento, y el estado de activación o desactivación del resto de funciones, se emplea la pantalla o display del propio termostato. 145 PARTE V: MANUAL DEL INSTALADOR 146 MEMORIA V. Manual del instalador Capítulo 1. Preparación Capítulo 1 Preparación E Capítulo 1 Preparación 1. çDaigu n este capítulo se va a explicar tanto las consideraciones generales, alimentación eléctrica, comprobación del contenido y la manipulación de la unidad de tratamiento de aire. ATENCIÓN Lea cuidadosamente todas estas instrucciones antes de comenzar a instalar el termostato 1. Introducción La gama de máquinas de tratamiento de aire de SISTENA S.A. está constituida por máquinas de bajo voltaje para ambiente interior, diseñados para su montaje en pared. Su función es la de mantener la temperatura y la calidad del aire de la vivienda o local controlando el funcionamiento de la calefacción, el sistema de aire acondicionado y la calidad del aire. 2. Consideraciones generales El seguimiento de estas instrucciones le asegurará la correcta instalación, puesta en marcha, y cobertura de la garantía que el fabricante otorga a la 147 MEMORIA V. Manual del instalador gama de productos Capítulo 1. Preparación de SISTENA S.A. Así podrá disfrutar del funcionamiento fiable y seguro de dichos termostatos, y de sus agradables prestaciones durante mucho tiempo. 3. Alimentación eléctrica El equipo necesita conectarse a una tensión de alimentación eléctrica de 24Vac para su correcto funcionamiento (terminales de conexión R y C). La unidad de tratamiento de aire no funcionará sin esas 2 conexiones. Manual de instalación. CUIDADO El voltaje de alimentación de 24 Vac sólo puede obtenerse a través de un transformador que cumpla las normas y códigos de seguridad nacionales. La utilización de una alimentación eléctrica inadecuada puede causar descargas eléctricas que dañen el termostato, e incluso daño o muerte a las personas. El fabricante no acepta ninguna responsabilidad por el uso incorrecto de su propio material o de otros que él no haya suministrado. 4. Comprobación del contenido Vd. habrá recibido la unidad de tratamiento de aire correctamente embalado. En el embalaje encontrará una tarjeta identificada con las palabras Lista de contenido. 148 MEMORIA V. Manual del instalador Capítulo 1. Preparación Compruebe que todo el material reseñado en esta lista se encuentra en el embalaje. SISTENA S.A. aplica a todos sus productos los más exigentes controles de calidad. No obstante, si faltase algún elemento, o bien si su estado no fuese el correcto, contacte con su distribuidor autorizado. Este atenderá inmediatamente su petición. 5. Manipulación del termostato La máquina se presenta en una caja de plástico compacta. No abra la caja de la unidad de tratamiento de aire en ningún caso. Su apertura es innecesaria, y le hará perder la garantía. La unidad es un elemento muy robusto, pero también es frágil. Manéjelo con cuidado. El fabricante no acepta reclamaciones por daños derivados de un manejo descuidado o negligente del aparato. 149 MEMORIA V. Manual del instalador Capítulo 2. Instalación Capítulo 2 Instalación E Capítulo 2 Instalación 2. çDaigu n este capítulo se va a explicar la manera en la que el técnico tiene que realizar la instalación de la unidad de tratamiento de aire. 1. Ubicación de la unidad de tratamiento de aire. El termostato se deberá situar en un lugar cuya temperatura sea representativa del ambiente general del lugar a climatizar. Se colocará sobre un tabique interior del recinto: - En la habitación o en el espacio más utilizado del recinto. - En una parte del tabique alejada de esquinas, molduras o tubos. - En un lugar alejado de la influencia de rejillas de impulsión del sistema de calefacción, aire acondicionado, o de renovación de aire. - La altura de montaje será de entre 1,4m y 1,8m. - El lugar de montaje no estará afectado por la incidencia directa de los rayos del sol, y estará alejado de cualquier foco de calor intenso. El termostato no deberá montarse: 150 MEMORIA V. Manual del instalador Capítulo 2. Instalación - Cerca de ventanas o puertas de acceso al exterior. - Sobre muros exteriores. - Expuesto a la luz solar, cerca de lámparas, cocinas u otras fuentes de calor que puedan provocar errores de lectura de temperatura. 2. Sustitución de una unidad de tratamiento de aire existente. CUIDADO Antes de iniciar las operaciones de sustitución de un termostato ya existente en la instalación, se deberá desconectar la alimentación eléctrica de la máquina. Puede existir más de una alimentación eléctrica que sea necesario desconectar. Hágalo para evitar posibles descargas eléctricas 1. Desconecte las alimentaciones eléctricas de la máquina. ATENCIÓN Compruebe que el viejo termostato se alimenta a 24 Vac. De no ser así no podrá ser sustituido directamente por el nuevo. En este caso no realice la sustitución y lea atentamente la hoja titulada Sustitución de termostato alimentado a otros voltajes, que encontrará en el embalaje del termostato. 2. Retire de la pared el termostato que va a sustituir. 151 MEMORIA V. Manual del instalador Capítulo 2. Instalación 3. Desconecte uno a uno los cables del termostato existente. 4. Identifique cada uno de los cables según su significado. 5. No permita que los cables se deslicen hacia el interior de la pared. 6. Elimine el viejo termostato. SISTENA S.A. le recomienda que lo recicle siempre que él lo sea posible. NOTA Algunos termostatos existentes contienen mercurio. Se trata de una sustancia peligrosa que se debe tratar con cuidado, y siempre de acuerdo a las normas y legislación nacionales. Nunca deberá arrojarse a la basura. 3. Montaje 1. Sitúe la base de montaje en el lugar elegido para la ubicación del termostato, y marque la posición de los taladros. 2. Haga ambos taladros utilizando una broca de 3mm y aloje en ellos los 2 tacos incluidos en el embalaje del termostato. 3. Atornille a la pared la base de montaje usando los 2 tornillos suministrados. 4. Efectúe la conexión eléctrica a las bornes del termostato, tal y como se indica en el Paso 4: CONEXIONADO ELÉCTRICO. 152 MEMORIA V. Manual del instalador Capítulo 2. Instalación CUIDADO Si las conexiones eléctricas no se realizan adecuadamente, el termostato no funcionará, o lo hará de manera incorrecta. 5. Inserte el termostato en la base de montaje, cuidando que su posición sea la adecuada. 6. Introduzca la longitud sobrante de los cables de conexión sobre el conducto de cables de la pared, y recoja el resto ocultándolo tras el panel trasero del termostato. 7. Conecte la máquina a la red eléctrica y continúe a partir del Paso 5: COMPROBACIÓN DE FUNCIONAMIENTO. 4. Conexionado eléctrico La base de montaje del termostato está equipada con 12 bornes enchufables, numeradas del 1 al 12. A- Seleccione el esquema que corresponda a su modelo de termostato (incluidos). ATENCIÓN Los esquemas incluidos representan una nomenclatura estándar de conexión. Es posible que en las máquinas se emplee una nomenclatura de identificación de conexiones distinta. En este caso utilice el esquema que más se aproxime e introduzca las modificaciones oportunas. 153 MEMORIA V. Manual del instalador Capítulo 2. Instalación B- Elimine únicamente el aislante de los hilos de conexión que vaya a utilizar. C- Emborne al conector cada uno de los hilos de conexión siguiendo el esquema seleccionado. Cuando lo haga evite que queden cables sueltos que puedan causar un cortocircuito. D- Vuelva al Paso 3: MONTAJE de estas instrucciones y complete el montaje. 5. Comprobación de funcionamiento. Al aplicar voltaje de alimentación (24 Vac entre terminales R y C) la unidad de tratamiento de aire efectúa una secuencia de auto-test, que consiste en mantener encendido todo el display durante 5 segundos. Al finalizar este lapso de tiempo, la máquina recupera el estado de funcionamiento que tenía en el instante anterior a su desconexión de la alimentación eléctrica. 1. Pulse el botón ON/OFF varias veces, y compruebe que el termostato pasa sucesivamente de situación de marcha a situación de parada y viceversa. En situación de parada el termostato mantiene iluminado únicamente el display de temperatura ambiente, mientras que en situación de marcha se indicará además el modo de funcionamiento y la temperatura de consigna. 2. Ponga el termostato en marcha pulsando el botón ON/OFF. 154 MEMORIA V. Manual del instalador Capítulo 2. Instalación 3. Accione alternativamente los pulsadores ARRIBA y ABAJO y compruebe que el indicador de temperatura deseada (consigna), aumenta y disminuye de valor respectivamente. Repita esta operación hasta que el display muestre la temperatura que Vd. Desea conseguir en el recinto. 4. Accione varias veces el pulsador de MODO, y compruebe que el icono que representa el modo de funcionamiento cambia en el siguiente orden: VENTILACIÓN FRÍO CALOR AUTO 5. Repita esta operación hasta establecer el modo de funcionamiento que desee. 6. Fin de la instalación 1. Recoja su herramienta y despeje el lugar de la instalación de cualquier material sobrante o residuo. 2. Enseñe al propietario del local el funcionamiento de la unidad de tratamiento de aire. 3. Entregue el manual de usuario siempre al propietario del local. 4. Indique al usuario donde se encuentra el número del servicio de asistencia técnica en la máquina, inscrito de manera visible e indeleble. 155 MEMORIA V. Manual del instalador Capítulo 2. Instalación 156 PARTE VI: CÓDIGO FUENTE 157 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 Capítulo 1 Código de la tarjeta TX98 Capítulo 1 E Código de la tarjeta TX98 1. Daigu n este capítulo se va a introducir el código en ensamblador utilizado a la hora de realizar el control de la parte de climatización de la unidad de tratamiento de aire. 1. Código fuente Este código nos permite controlar los siguientes elementos incorporados en la tarjeta: - Ventiladores (velocidad y modo) - Válvulas de frío y calor reguladas 0-10V - Conexión R5485 con PC - Temperatura de retorno y de impulsión. 158 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 HEADER 'CLIMATIZADOR' PAGELENGTH 3B ; CONTROL CLIMATIZADOR ;MICRO MOTOROLA MC68HC908LJ12 ;CONEXION CON TARJETA DE AMPLIACION ;FINAL DE ESCALA PRESION:100 PASCALES ;REGISTROS MICROPROCESADOR PTA: EQU 0 ;PUERTO A PTB: EQU 1 ;PUERTO B PTC: EQU 2 ;PUERTO C PTD: EQU 3 ;PUERTO D DDRA: EQU 4 ; REG.DIREC.PUERT A DDRB: EQU 5 ; REG.DIREC.PUERTO B DDRC: EQU 6 ; REG.DIREC.PUERTO C DDRD: EQU 7 ;REG.DIREC.PUERTO D SCC1: EQU $13 ;REG. CONTROL COM. SCC2: EQU $14 SCS1: EQU $16 SCDR: EQU $18 SCBR: EQU $19 CONFIG2: EQU $1D INTSCR: EQU $1E CONFIG1: EQU $1F T1SC: EQU $20 ;TIMER 1 T1MODH: EQU $23 T1MODL: EQU $24 PCTL: PBWCR: EQU $36 ;CONTROL PLL EQU $37 PMSH: EQU $38 PMSL: EQU $39 159 MEMORIA VI. Código fuente PMRS: EQU $3A PMDS: EQU $3B Capítulo 1. Código de la tarjeta TX98 ADSCR: EQU $3C ADRH: EQU $3D ;RESUL.CONV. (MSB) ADRL: EQU $3E ; RESUL. CONV. (LSB) ADCLK: ;CONVA/D EQU $3F RTCCR1: EQU $42 ;REAL TIME CLOCK RTCCR2: EQU $43 RTCSR: EQU $44 ALMR: EQU $45 ;RTC:MIN. ALARMA ALHR: EQU $46 ;RTC:HORAS ALARMA MINR: EQU $48 ;RTC:MINUTOS HRR: DOWR: CHRR: EQU $49 ;RTC:HORAS EQU $4D ;RTC:DIA DE SEMANA EQU $4E LCDCLK: EQU $4F LCDCR: ;CONTROL LCD EQU $51 LCDDAT: EQU $52 ;DATOS LCD FLBPR: EQU $FE09 ;PROTE.MEM. FLASH LVISR: WDOG: EQU $FE0F ;DETEC.BAJATENSION EQU $FFFF ;WATCH-DOG ;DIRECCIONES MEMORIA EEPROM AP00: EQU 0 ;PARAM:HISTERESIS AP01: EQU 1 ;ZONA MUERTA AP02: EQU 2 ;LIM TEMP.IMPUL FRIO AP03: EQU 3 ;MARGEN BLOQ CONSIG AP04: EQU 4 ;DIFERENCIAL FRIO(F-C) AP05: EQU 5 ;RESERVA AP06: EQU 6 ;CONSIG. PRESION (PA) AP07: EQU 8 ;TIEMPO MINIMO ON 160 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 AP08: EQU 9 ;TIEMPO MINIMO OFF AP09: EQU $A AP10: EQU $B ;0- VALV.,1-NO. VALV. AP11: EQU $C ;BANDA PROPORCIONAL AP12: EQU $D ;T.INTEGR.(SEGS./REP) AP13: EQU $E ;T.MODULAC. (SEGS.) AP14: EQU $F ;BAND PROP CNTROL PRES AP15: EQU $10 ;VERSION AP16: EQU $11 ;CLAVE ;RESERVA ACONF1: EQU $12 ;TIPO DE CONTROL ACONF2: EQU $13 ;PROGRAMAB. O NO ADIR: APARO: EQU $14 EQU $20 AMOM1: EQU $26 AMOP1: ;DIRECCION ;PROGRAM.HORARIA EQU $28 AMOM2: EQU $2A AMOP2: EQU $2C AMOR1: EQU $2E ATUM1: ATUP1: ATUM2: EQU $30 EQU $32 EQU $34 ATUP2: EQU $36 ATUR1: EQU $38 AWEM1: EQU $3A AWEP1: EQU $3C AWEM2: EQU $3E AWEP2: EQU $40 AWER1: EQU $42 ATHM1: ATHP1: EQU $44 EQU $46 161 MEMORIA VI. Código fuente ATHM2: EQU $48 ATHP2: EQU $4A ATHR1: EQU $4C Capítulo 1. Código de la tarjeta TX98 AFRM1: EQU $4E AFRP1: EQU $50 AFRM2: EQU $52 AFRP2: EQU $54 AFRR1: EQU $56 ASAM1: EQU $58 ASAP1: EQU $5A ASAM2: EQU $5C ASAP2: EQU $5E ASAR1: EQU $60 ASUM1: EQU $62 ASUP1: ASUM2: EQU $64 EQU $66 ASUP2: EQU $68 ASUR1: EQU $6A ADATA: EQU $80 AGHORA: EQU $90 ADATAC: EQU $A0 ORG $60 ;DATOS MEMORIA RAM FLAGS1: DS 1 ;BIT0: FLAG PULSADO. START-STOP,MOD.Y FLECHAS ;BIT1: FLAG CAMBIO DE MODO ;BIT2: FLAG CAMBIO DE CONSIGNA ;BIT3: FLAG CAMB. FRIO-CALOR O ALREVES ;BIT4: FLAG MEDIDA EN DISPLAY ;BIT5: FLAG BLOQUEO CONSIGNA 162 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 ;BIT6: FLAG PROGRAM- PROGRAMANDO:1 ;BIT7: FLAG PROGRAM ACTIV:1,NO ACTIV:0 FLAGS2: DS 1 ;BIT0: FLAG CAMBIO RAPIDO DE HORA ;BIT1: FLAG INTERMITENCIA PROGRAM ;BIT2: FLAG INTERMITENCIA HORA ;BIT3: FLAG INTERMITENCIA DIA ;BIT4: FLAG INTERMITENCIA PERIODO ;BIT5: FLAG MOD PROGRAM PARAMETROS ;BIT6: FLAG TEMPERATURA/HORA EN DISPLAY 0-TEMP.,1-HORA ;BIT7: FLAG GRABACION EN EEPROM FLAGS3: DS 1 ;BIT0: FLAG PARADA ;BIT1: FLAG PARADA PROGRAMADA ;BIT2: FIMIN - FLAG MINUTOS RTC ;BIT3: FAD - FLAG CONVERSIONES A/D ;BIT4: FAJC - FLAG AJUSTE RELOJ ;BIT5: YANEWE - FLAG NUEVO ERROR ;BIT6: NEWR - FLAG NUEVA RECEPCION ;BIT7: FLTR - FLAG TRANSMISION FLAGS4: DS 1 ;BIT0: FLPER - FLAG NUEV PER PROGRAM ;BIT1: FLNEG - FLAG CAMBIO ERROR NEGA. ;BIT2: FAJC - FLAG AJUSTE RELOJ ;BIT3: FLAG PARADA REMOTA ;BIT4: FLAG RESPUEST TARJETA AUXILIAR ;BIT5: FLAG FALLO COM.TARJETA AUXILIAR ;BIT6: FLAG ERROR PRESION NEGATIVO ;BIT7: FLAG CALCULO VELOCIDAD MODO: DS 1 ;MODO FUNCIONA. 163 MEMORIA VI. Código fuente ; 00000001 - VENTILACION ; 00000010 - FRIO ; 00000100 - CALOR ; 00001000 - AUTO CONSIG: DS 2 ;CONSIGNA CMAX: DS 2 ;CONSIGNA MAXIMA CMIN: DS 2 ;CONSIGNA MINIMA MANDO: Capítulo 1. Código de la tarjeta TX98 DS 1 ;PALAB. MANDO ;BIT0: MARCHA:0 - PARADO:1 ;BITS 1 Y 2: ; 2 1 ; 0 0 - NO PETICION ; 0 1 - FRIO ; 1 0 - CALOR ;BITS 3 Y 4: NUMERO DE ETAPAS ;BIT5: RESERVA (SIEMPRE 0) ;BIT6: VENTILADOR ;BIT7: FILTRO SUCIO RELE: DS 1 ;BIT6: MARCHA/PARO(VENTILADOR) ;BIT5: VALVULA FRIO ;BIT4: VALVULA CALOR OUTF: DS 1 ;SALIDA VALVULA FRIO OUTC: DS 1 ;SALIDA VALVULA CALOR OUT: OUTA: DS 1 DS 1 TRET: DS 2 ;TEMP DE RETORNO TIMP: DS 2 ;TEMP DE IMPULSION VEL: DS 1 ;SAL VEL. VENTILADOR AN0: DS $10 ;MED ANALOG RETOR 164 MEMORIA VI. Código fuente AN1: DS $10 ANM: DS 2 ANMR: Capítulo 1. Código de la tarjeta TX98 ;MED ANALOG IMPUL DS 2 ANMI: DS 2 ANAUX: CHAN: DS 2 DS 1 ;CANAL DE MEDIDA CONF1: DS 1 ;TIPO DE CONTROL ;0 - ANALOGICO 2 TUBOS ;1 - ANALOGICO 4 TUBOS ;2 - RELES 2 TUBOS ;3 - RELES 4 TUBOS CONF2: DS 1 ;0-NO PROGRA.,1-PROGR. MSEG: DS 1 DSEG: DS 1 TINT: DS 1 ;T. DE VALIDACION NET: DS 1 ;N. DE ETAPAS CALCU. HISTEP: DS ZM: 1 ;HISTERESIS DS 1 ;ZONA MUERTA TLIMF: DS 2 DIFET: ;MIN.TEMP.IMPUL.FRIO DS 1 VCOMP: TDON: DS 4 DS 1 TDOFF: DS 1 ;TIEMPO MINIMO ON ;TIEMPO MINIMO OFF BP: DS 1 ;BANDA PROPORCIONAL TI: DS 1 ;TIEMPO INTEGRACION TREL: BPP: DS 1 ;T. MOD.(DECIMAS SEG.) DS 1;BAND PROP CNTROL PRESION CONSP: DS 2 TRONF: DS 1 TROFF: DS 1 ;CONSIGNA PRESION ;TIEMPO RELE ON FRIO ;T. RELE OFF FRIO 165 MEMORIA VI. Código fuente TRONC: DS 1 ;T RELE ON CALOR TROFC: DS 1 ;T RELE OFF CALOR TCONF: DS 1 Capítulo 1. Código de la tarjeta TX98 TCOFF: DS 1 TCONC: DS 1 TCOFC: DS 1 TVENT: DS 1 ERROR: DS 2 RESUL: DS 3 PRMIN: DS 1 PRHORA: DS 1 PRDIA: DS PRPER: DS 1 MIN: ;PROXPROGRAM:MIN ;PROX PROGRAM:H 1 ;PROX PROGRAM:DIA ;PROX PROGRAM:PERI DS 1 HORA: DS 1 DIA: DS 1 ;DIA PER: DS 1 ;PERIODO MINP: HORAP: DS 1 DS ;MIN PROGRAMACION 1 ;HORA PROGRAM DIAP: DS 1 ;DIA PROGRAMACION PERP: DS 1 ;PERIODO PROGRAM DATO: DS 4 CRINT: DS FLPR: ;MED. PARAM DISPLAY 1 DS 1 ;CRONO INTERMITEN. ;DIAS PROGRAMADOS ;BIT0: LUNES ;BIT1: MARTES ;BIT2: MIERCOLES ;BIT3: JUEVES ;BIT4: VIERNES ;BIT5: SABADO 166 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 ;BIT6: DOMINGO POSM: DS 1 CHECK: BIN: DS IBUF: ;DIREC. MEM. EEPROM CODE: 1 1 DS 1 CODERR: DS 1 DS 1 CRONO: ;CODIGO DS 1 NDATW: DS 1 DIG: DS 1 NDAT: DS 4 SEGD: ;INDICE BUFFER RECEP. DIRDAT: DS DS 2 DECIM: DS 1 DS 1 DAT1R: DS 1 DAT2R: DS 1 TRAP: DS 1 DAT3R: DS 1 NAD: DS 1 DAT4R: DS 1 MEDD: GHORA: VTEST: DS 2 ERRDIR: DS 1 DS ERRCRC: DS 1 DS 1 TSAT: DS 2 AERR: DS 2 ERRX: DS 2 ROI: TRY: ;ERROR DS 1 TSTOP: ;ERROR ANTERIOR DS 1 DS 1 TSEND: DS 1 FLIM: DS 1 FNOI: DS 1 TNOI: DS 1 FCACT: DS 1 DS 1 MANDFA: DS TSEG: DS 1 FMOD: TANS: DS 1 MEM: DS DS 6 TIMEFC: DS 1 DATOR: DS 1 NMED: OUTFA: DS 1 FFILT: OUTCA: DS 1 ERRPRM: DS 1 PRDT: DIR: CRC: DS 1 FNEG: DS 3 DS 1 DS 2 DS 1 DS 1 DS 1 MODOA: ;DIREC. COM 1 1 DATOFC: DS 1 TOI: ;ERROR DE CRC MANDOF: DS 1 DS 1 ERR: OI: 1 ;ERROR DE DIRECC. DS 1 ;REGISTROS COMUNICACIONES ;CHEQ REDUND CICLICA REG1: 167 DS 2 ;MSB:DIREC,LSB:TIP CONTR MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 REG2: DS 2 ;MSB:MODO,LSB:MANDO REG26: DS 2 ;PARADA 1 MARTES REG3: DS 2 ;LSB:RELES REG27: DS 2 ;MARCHA 2 MARTES ;BIT6: MARCHA/PARO(VENTILADOR) REG28: DS 2 ;PARADA 2 MARTES ;BIT5: VALVULA FRIO REG29: DS 2 ;RESERVA ;BIT4: VALVULA CALOR REG30: DS 2 ;MARCHA 1 MIERCOLE REG4: DS 2 REG31: DS 2 ;PARADA 1 MIERCOLES REG5: DS 2 ;MEDIDA DE TEMP RETOR. REG32: DS 2 ;MARCHA 2 MIERCOLE REG6: DS 2 ;MEDIDA DE TEMP IMPUL REG33: DS 2 ;PARADA 2 MIERCOLES REG7: DS 2 ;MEDIDA DE TEMP EXT REG34: DS 2 ;RESERVA REG8: DS 2 ;MEDIDA DE PRESION REG35: DS 2 ;MARCHA 1 JUEVES REG9: DS 2 ;LSB:APERTU.COMPUER REG36: DS 2 ;PARADA 1 JUEVES REG10: DS 2 ;SAL VAL-MSB:FRIO LSB:CAL REG37: DS 2 ;MARCHA 2 JUEVES REG11: DS 2 ;MSB:HISTER,LSB:Z. MUERT REG38: DS 2 ;PARADA 2 JUEVES REG12: DS 2 ;MSB:LIM.T.IMP.LSB:MARG BLOQ.CONS. REG39: DS 2 ;RESERVA REG40: DS 2 ;MARCHA 1 VIERNES REG41: DS 2 ;PARADA 1 VIERNES ;CONSIGNA REG13: DS 2 ;MSB:DIF.ET,LSB:RESR REG14: DS 2 ;CONSIGNA PRESION REG42: DS 2 ;MARCHA 2 VIERNES REG15: DS 2 ;MSB:T MINON,LSB:T MINOFF REG43: DS 2 ;PARADA 2 VIERNES REG16: DS 2 ;MSB:RESE,LSB:MOD.VALV. REG44: DS 2 ;RESERVA REG17: DS 2 ;MSB:B PROP,LSB:T INTEG. REG45: DS 2 ;MARCHA 1 SABADO REG18: DS 2 P.CONT.PR. REG46: DS 2 ;PARADA 1 SABADO REG47: DS 2 ;MARCHA 2 SABADO REG48: DS 2 ;PARADA 2 SABADO REG49: DS ;RESERVA ;MSB:T.MOD.REL,LSB:B REG19: DS 2 ;MSB:VERSION ;REG PROGRAM:MSB-HH (H),LSB-MM (MIN) REG20: DS 2 ;MARCHA 1 LUNES REG21: DS 2 ;PARADA 1 LUNES REG22: DS 2 ;MARCHA 2 LUNES REG23: DS 2 ;PARADA 2 LUNES REG24: DS ;RESERVA 2 REG25: DS 2 ;MARCHA 1 MARTES 2 REG50: DS 2 ;MARCHA 1 DOMINGO REG51: DS 2 ;PARADA 1 DOMINGO REG52: DS 2 ;MARCHA 2 DOMINGO REG53: DS 2 ;PARADA 2 DOMINGO REG54: DS 2 ;RESERVA ;VECTORES INTERRUPCION 168 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 ORG $FFFE LDHX #0 DW START ;RESET MOV #$66,CONFIG2 ;INICIALIZ REG ORG $FFDA MOV #$42,CONFIG1 DW RTC ;RELOJ TIEMPO REAL MOV #1,PCTL ORG $FFDC MOV #$80,PBWCR DW INTAD ;CONVERTIDOR A/D MOV #1,PMSH ORG $FFE2 MOV #$E9,PMSL DW RECEP ;RECEPCION SERIE MOV #$D1,PMRS ORG $FFF0 MOV #1,PMDS DW TIMER ;INTERRUP TIMER MOV #$21,PCTL ORG $FFF8 NOP DW SLEEP ;INTERR LOW VOLTAGE MOV #$31,PCTL ;QUITAR EMULACI ;PROGRAMA MOV #2,INTSCR ORG $C000 START: NSTART: MOV #$F2,DDRA LDHX #$260 MOV #$3D,DDRB TXS MOV #$FF,DDRC MOV #0,DDRD BCLR 4,PTA MOV #$40,SCC1 BITS,NO PARIRIDAD ;SAL DESACTIVADAS ;PER.COM.,8 MOV #$B1,SCBR BCLR 5,PTA BCLR 6,PTA BCLR 1,PTA MOV #$44,T1SC MOV #0,T1MODH ;9600 BAUDIOS BCLR 3,SCC2 ;NO PERMI TRANSM BSET 2,SCC2 ;PERMI RECEPCION BSET 5,SCC2 ;PERMI INTERR RECEP BCLR 2,PTB ;PERMI RECEPCION LDA #0 MOV #$7D,T1MODL STA FLBPR MOV #$64,ADSCR LDA #0 MOV #$74,ADCLK STA LVISR MOV #0,RTCCR1 MOV #$B0,POSM MOV #0,RTCCR2 JSR READ MOV #$11,LCDCLK ;EMUL:15* CMP #$FF MOV #$8F,LCDCR 169 ;MEMORIA VIRGEN? MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 BNE YAPROG ;NO LDA #0 MOV #$B1,POSM JSR IPROG JSR READ JSR IPROG CMP #$FF JSR PROG BNE YAPROG MOV #AMOM1,POSM MOV #$B2,POSM LDX #0 JSR READ MPRGD2: LDA #$AA CMP #$FF JSR IPROG BNE YAPROG INCX MOV #0,POSM;SI,GRABA VAL X DEFEC CPX #$46 LDX #0 BNE MPRGD2 MPRGD1: LDA DEFVAL,X LDX #0 JSR IPROG MOV #ADATA,POSM INCX MPRGD3: LDA DEFDAT,X CPX #$15 JSR IPROG BNE MPRGD1 MOV #AGHORA,POSM INCX MOV #0,NAD CPX #$C MOV #0,NET BNE MPRGD3 MOV #0,CRONO MOV #$B0,POSM MOV #0,GHORA LDA #0 MOV #0,TSAT JSR IPROG MOV #0,CHAN JSR IPROG MOV #0,OUT JSR PROG MOV #0,OUTA YAPROG: MOV #0,RELE ;INICIA VAR MOV #0,AERR MOV #0,MSEG MOV #0,AERR+1 MOV #0,DSEG MOV #0,ROI MOV #0,MANDO MOV #0,TCONF MOV #0,CRINT MOV #0,TRONF 170 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 MOV #0,VEL STA FNOI MOV #$FF,TCOFF STA TNOI MOV #$FF,TROFF STA FFILT MOV #0,TCONC STA MODOA MOV #0,TRONC STA $5C MOV #$FF,TCOFC STA $5D MOV #$FF,TROFC STA $5E MOV #$14,TVENT STA $5F MOV #0,OUTFA JSR INDAC MOV #0,OUTCA BCLR 6,PTC MOV #0,TOI JSR DACLK LDA #3 JSR DACLK STA TIMEFC LDA #0 LDA #0 JSR SDDAC STA MANDOF JSR INDAC STA TSTOP BSET 6,PTC STA FLIM JSR DACLK BCLR 6,PTC BNE WAITI JSR DACLK NOED: LDA #0 MOV #ADATA,POSM LDX #0 JSR SDDAC MREADI: JSR READ ;LEE VAL D EEPROM BSET 7,PTC STA FLAGS1,X CLI INC POSM ;ENABLE INTERRUPCIONES LDA CHECK INCX CBEQA #$AA,NOED CPX #$C MOV #$AA,CHECK BNE MREADI FINPRG: MOV #2,TINT LDA MODO JSR DELON ;ENCENDER DISPLAY WAITI: AND #$F JSR RWDOG ;WATCH-DOG BNE MOKI LDA TINT MOV #8,MODO 171 MEMORIA VI. Código fuente MOKI: Capítulo 1. Código de la tarjeta TX98 MOV #0,MANDO LDA VERS LDA FLAGS1 STA REG19 AND #$E0 MOV #ADIR,POSM STA FLAGS1 JSR READ MOV #0,FLAGS2 STA DIR LDA FLAGS3 STA REG1 AND #$B MOV #ACONF1,POSM ORA #8 JSR READ STA FLAGS3 STA CONF1 BSET 7,FLAGS4 STA REG1+1 JSR RPAR JSR IREAD MOV #AP03,POSM STA CONF2 JSR READ LDA DOWR STA REG12+1 BNE NTHORA LDA #0 LDA HRR STA REG13+1 BNE NTHORA STA REG16 LDA MINR BNE NTHORA LDA #$FF MOV #AGHORA,POSM JSR PROG JSR READ MOV #0,VTEST STA DOWR BSET 4,LCDDAT+3 JSR IREAD BSET 4,LCDDAT+4 STA HRR BSET 0,LCDDAT+5 JSR IREAD BSET 1,LCDDAT+5 STA MINR BSET 0,VTEST NTHORA: BRCLR 5,PTD,ATEST ;TEST? WFPUP: JMP NATEST ;NO ATEST: JSR RWDOG BRCLR 5,PTD,WFPUP JSR RWDOG ;SI,TEST MOV #$14,TSAT JSR DELD WTPULS: JSR RWDOG MOV #$F0,POSM LDA TSAT 172 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 BNE GOONAT JMP PTCLK ;SI JMP NATEST NPTCLK: JMP WFTP GOONAT: BRSET 6,PTD,NPTDWN PTDOWN: LDX #$40 ;PULSAD FLECHA ABAJO? MPTDWN: BRSET 6,PTD,NPT1 ;CONF PUL BRA PTDOWN ;SI JSR DELB NPTDWN: BRSET 0,PTD,NPTV ;PULS ON/OFF? BRA YAPTD NPT1: BRSET 1,PTD,NPTMOD ;PULS MOD? YAPTD: JMP PTMODO ;SI BSET 1,VTEST NPTSEL: BRSET 3,PTD,NPTPRG ;PULS PRG? JSR DELAY ;SI WTPD: NPTPRG: BRSET 7,PTD,NPTCOP ;PULS COPY? JMP WTPULS PTVENT: LDX #$40 NPTCOP: BRSET 4,PTD,NPTCLK ;PULS CLK? MPTV: ;RETARDO REBOTES BRSET 0,PTD,NPT2 PTMODO: LDX #$40 JMP WTPULS MPTM: JSR DELD JSR DELB MOV #$EF,LCDDAT+3 BRA YAPTM NPT3: MOV #$C,LCDDAT+5 YAPTM: JMP WTPULS JSR DELD BSET 2,VTEST MOV #$14,TSAT JSR DELAY MOV #$EF,LCDDAT+1 JSR RWDOG MOV #$EF,LCDDAT+2 173 ;CONF PULS ;RETARDO REBOTES DBNZX MPTM MOV #$EF,LCDDAT+4 ;PULS MOD BRSET 1,PTD,NPT3 MOV #$14,TSAT WTPV: ;CONF PULS JMP WTPULS BRA YAPTV YAPTV: ;PULS ON/OFF BRCLR 0,PTD,WTPV DBNZX MPTV NPT2: JSR RWDOG BRCLR 6,PTD,WTPD JMP PTCOPY ;SI JSR DELB JSR DELD MOV #$E0,LCDDAT+7 ;SI JMP PTPRG BRA WTPULS MOV #$14,TSAT NPTMOD: BRSET 2,PTD,NPTSEL ;PULS SEL? JMP PTSEL ;RETARDO REBOTES DBNZX MPTDWN JMP PTVENT ;SI NPTV: ;PULS FLEC ABAJO MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 MOV #$F0,LCDDAT+5 BSET 4,LCDDAT+1 MOV #$FE,LCDDAT+6 BSET 4,LCDDAT+2 MOV #$E,LCDDAT+7 BSET 0,LCDDAT+6 MOV #$C0,LCDDAT+9 BSET 0,LCDDAT+7 BSET 3,VTEST BSET 0,LCDDAT+8 JSR DELAY BSET 5,LCDDAT+9 WTPM: JSR RWDOG BSET 4,VTEST BRCLR 1,PTD,WTPM JSR DELAY JMP WTPULS WTPS: PTSEL: LDX #$40 MPTS: BRSET 2,PTD,NPT4 JSR DELB ;PULSADOR SEL BRCLR 2,PTD,WTPS ;CONF PULS JMP WTPULS ;RETARDO REBOTES DBNZX MPTS BRA YAPTS NPT4: YAPTS: JSR RWDOG PTPRG: LDX #$40 MPTP: BRSET 3,PTD,NPT5 JSR DELB JMP WTPULS ;PULSADOR PRG ;RETARDO REBOTES DBNZX MPTP JSR DELD BRA YAPTP MOV #$14,TSAT NPT5: BSET 4,LCDDAT YAPTP: MOV #$14,TSAT JMP WTPULS JSR DELD BRA YAPTC MOV #$E0,LCDDAT NPT6: MOV #$17,LCDDAT+9 YAPTC: JMP WTPULS JSR DELD BSET 5,VTEST MOV #$14,TSAT JSR DELAY MOV #$EE,LCDDAT+8 WTPP: JSR RWDOG BSET 6,VTEST BRCLR 3,PTD,WTPP JSR DELAY JMP WTPULS PTCOPY: LDX #$40 MPTC: WTPC: ;PULSADOR COPY BRSET 7,PTD,NPT6 JSR DELB ;CONF PULS JSR RWDOG BRCLR 7,PTD,WTPC ;CONF PULS JMP WTPULS ;RETARDO REBOTES DBNZX MPTC 174 PTCLK: LDX #$40 ;PULSADOR CLK MPTCL: BRSET 4,PTD,NPT7 ;CONF PULS MEMORIA VI. Código fuente JSR DELB Capítulo 1. Código de la tarjeta TX98 ;RETARDO REBOTES JSR READ DBNZX MPTCL CMP #$55 BRA YAPTCL BNE ERRORT NPT7: JMP WTPULS LDA #$AA YAPTCL: JSR DELD JSR PROG MOV #$14,TSAT JSR READ BSET 4,LCDDAT+8 CMP #$AA BSET 7,VTEST BEQ NERR JSR DELAY WTPCL: ERRORT: JSR RWDOG JSR RWDOG JSR DELD BRCLR 4,PTD,WTPCL WFTP: BRA ERRORT LDA VTEST NERR: JSR RWDOG AND #$F MOV #2,TINT CBEQA #$F,OKPULS JSR DELON ;ENCENDER DISPLAY JMP WTPULS WFDOK: OKPULS: MOV #$E0,POSM JSR RWDOG LDA TINT LDA #$55 BNE WFDOK JSR PROG JSR DELD MOV #$64,ADSCR JSR RWDOG MOV #0,CONF2 LDA NAD MOV #0,FLAGS1 CMP #8 MOV #0,FLAGS2 BNE WTEXT MOV #0,FLAGS3 LDX #$10 MOV #8,MODO JSR MEDIA MOV #0,CONSIG LDA ANM+1 MOV #$DC,CONSIG+1 CMP #$FF MOV #$F0,POSM BNE SIREMT LDA #0 LDA ANM JSR PROG CMP #3 WTEXT: BRSET 7,FLAGS3,NOREMT BNE SIREMT 175 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 BSET 7,FLAGS3 BSET 7,FLAGS3 NOREMT: MOV #$64,ADSCR WADIT: WTINT: JSR RWDOG LDA PTA AND #$8F LDA NAD ORA #$40 CMP #8 STA PTA BNE WADIT JSR DELAY LDX #0 JSR DELAY JSR MEDIA LDA PTA SIREMT: JSR GTRET AND #$8F LDA TRET+1 ORA #$30 SUB #$14 STA PTA STA MEDD+1 JSR DELAY LDA TRET JSR DELAY SBC #0 MOV #$14,TSAT STA MEDD JMP WTEXT LDHX #0 NATEST: JSR DELD ;APAGAR DISPLAY JSR DISPL MOV #$F0,POSM BRSET 0,PTD,WTINT JSR READ CMP #0 BEQ COMZO ;NO BEQ TESTOK JSR WPER ;SI,VR PERI ACTU Y PROX BSET 6,LCDDAT+1 COMZO: CLI BSET 6,LCDDAT+2 MOV #$11,LCDCLK ;EMULACION:15 BSET 2,LCDDAT+6 MOV #$8F,LCDCR BSET 2,LCDDAT+7 MOV #$74,ADCLK MOV #2,TINT LDA CONF2 WNOKT: JSR RWDOG BEQ NORTC LDA TINT MOV #$80,RTCCR1 BNE WNOKT MOV #$10,RTCCR2 TESTOK: LDA CONF2 CMP #0 NORTC: ;TERMOST PROGRAM? LDA CONSIG CMP #2 176 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 BCS COK COK: CMAXOK: LDA CMIN MOV #ADATAC,POSM CMP #2 JSR READ BCC CHCMIN STA MODO LDA CMIN+1 JSR IREAD SUB #$96 STA CONSIG LDA CMIN JSR IREAD SBC #0 STA CONSIG+1 BCC CMINOK LDA CMAX ;COMPROB CONS CHCMIN: MOV #0,CMIN CMP #2 MOV #$96,CMIN+1 BCC CHCMAX CMINOK: LDA CONSIG+1 LDA CMAX+1 SUB CMAX+1 SUB #$2C LDA CONSIG LDA CMAX SBC CMAX SBC #1 BCS NOECMX BCS CMAXOK LDA CONSIG+1 CHCMAX: MOV #1,CMAX CMP CMAX+1 MOV #$2C,CMAX+1 BNE ERCONS LDA CONSIG LDA CONSIG CMP CMAX CMP CMIN BNE ERCONS BEQ NOECMN NOECMX: LDA CMIN+1 ERCONS: BRCLR 5,FLAGS1,CHCCON SUB CONSIG+1 LDA CMIN+1 LDA CMIN ADD #$14 SBC CONSIG STA CONSIG+1 BCS NOECMN LDA CMIN LDA CONSIG+1 ADC #0 CMP CMIN+1 STA CONSIG BNE ERCONS BRA NOECMN 177 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 CHCCON: MOV #0,CONSIG MOV #ADATA+4,POSM MOV #$DC,CONSIG+1 JSR READ NOECMN: LDA CONF1 STA MODO CBEQA #1,CMODOA AND #$F CBEQA #3,CMODOA BNE MOK LDA MODO MOV #8,MODO AND #7 MOK: LDA MODO BNE MOK STA REG2 MOV #ADATA+4,POSM JSR DISPL JSR READ JSR VPULS STA MODO JSR TRANS AND #7 LDX #$40 BNE MOK MSTOP: ;SAL A DISPLAY ;MIRAR PULSADORES BRCLR 2,PTA,NSTOP MOV #1,MODO JSR DELB BRA MOK DBNZX MSTOP CMODOA: LDA MODO BRSET 3,FLAGS4,YASTOP AND #$F BSET 3,FLAGS4 BNE MOK MOV #APARO,POSM LDA FLAGS3 AND #1 MOV #APARO,POSM JSR PROG JSR READ BRSET 0,FLAGS3,YASTOP AND #1 BSET 0,FLAGS3 ORA FLAGS3 BRA YASTOP STA FLAGS3 NSTOP: BRCLR 3,FLAGS4,YASTOP BCLR 3,FLAGS4 LDA #$A YASTOP: LDA NAD STA TSTOP CMP #8 LDA FLAGS3 BEQ YAMED AND #$FE JMP COMZO STA FLAGS3 YAMED: 178 LDX #0 ; MEDIA TEMP.RETO MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 JSR MEDIA JSR MEDIA JSR GTRET ;TOMA TEMP SEG TABLA LDHX ANM LDA TRET+1 LDA TABLAC,X ;TOM TEMP TABLA SUB #5 STA TIMP STA TRET+1 ;RESTAR MED GRADO INCX LDA TRET LDA TABLAC,X SBC #0 STA TIMP+1 STA TRET LDA TIMP+1 LDHX #0 SUB #5 LDA TRET STA TIMP+1 ;RESTAR MED GRADO CBEQA #3,AVSTOP LDA TIMP CMP #$FF SBC #0 BNE OKS STA TIMP LDA TRET+1 LDHX #0 CMP #$80 BRSET 4,FLAGS1,DTIMP BCC OKS MOV TRET,MEDD AVSTOP: BSET 0,FLAGS3 ;ROTA SON RETO MOV TRET+1,MEDD+1 OKS: BRA DTRET LDX #$10 DTIMP: ; MEDIA TEMP.IMPUL LDA NMED BNE NDTIMP NDTEXT: CMP #2 MOV TIMP,MEDD BNE NDPRES MOV TIMP+1,MEDD+1 LDA REG8 BRA DTRET STA MEDD NDTIMP: CMP #1 LDA REG8+1 BNE NDTEXT STA MEDD+1 LDA REG7 BRA DTRET STA MEDD NDPRES: CMP #3 LDA REG7+1 BNE NDAP STA MEDD+1 LDA REG9+1 BRA DTRET STA PRDT+2 179 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 MOV #0,PRDT+1 LDA TRET MOV #$FF,BIN STA REG5 JSR MULDIV LDA TRET+1 MOV #0,MEDD STA REG5+1 MOV RESUL+2,MEDD+1 LDA TIMP BRA DTRET STA REG6 NDAP: MOV VEL,PRDT+2 LDA TIMP+1 MOV #0,PRDT+1 STA REG6+1 MOV #$FF,BIN LDA OUTF JSR MULDIV STA REG10 MOV #0,MEDD LDA OUTC MOV RESUL+2,MEDD+1 STA REG10+1 DTRET: LDA RELE BRCLR 0,FLAGS3,MON STA REG3+1 BSET 0,MANDO LDA CONSIG BCLR 6,MANDO STA REG4 BRA MOFF LDA CONSIG+1 MON: STA REG4+1 MOFF: BCLR 0,MANDO BSET 6,MANDO BCLR 5,MANDO BRCLR 3,MODO,NMAUT BSET 2,MANDO JMP MAUTO MOV CONSIG,VCOMP NMAUT: ;MODO AUTO BRSET 2,MODO,MCAL ;CALOR MOV CONSIG+1,VCOMP+1 BRSET 1,MODO,MFRIO ;MODO FRIO LDA TRET+1 LDA MANDO SUB VCOMP+1 ;MOD VENTI AND #$41 LDA TRET STA MANDO SBC VCOMP JMP FINET BCS WETC MCAL: LDA MANDO JMP NOET AND #$41 WETC: STA MANDO LDA VCOMP+1 SUB HISTEP 180 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 STA VCOMP+1 LDA TRET+1 LDA VCOMP SUB VCOMP+1 SBC #0 LDA TRET STA VCOMP SBC VCOMP LDA TRET+1 BCC WET SUB VCOMP+1 JMP NOET LDA TRET WET: LDA VCOMP+1 SBC VCOMP ADD HISTEP BCS ET1 STA VCOMP+1 JMP FINET LDA VCOMP MFRIO: MOV CONSIG,VCOMP ADC #0 MOV CONSIG+1,VCOMP+1 AUTFR: STA VCOMP BRCLR 2,MANDO,NOIET LDA TRET+1 BCLR 3,MANDO NOIET: SUB VCOMP+1 BCLR 2,MANDO LDA TRET BSET 1,MANDO SBC VCOMP MOV VCOMP,VCOMP+2 BCC WET1 MOV VCOMP+1,VCOMP+3 LDA MANDO AND #$18 BEQ NOET SBC VCOMP JMP ET1 BCS ET1 WET1: LDA VCOMP+3 LDA VCOMP+1 ADD DIFET ADD HISTEP STA VCOMP+1 STA VCOMP+1 LDA VCOMP+2 LDA VCOMP ADC #0 ADC #0 STA VCOMP STA VCOMP LDA TRET+1 LDA TRET+1 SUB VCOMP+1 SUB VCOMP+1 LDA TRET LDA TRET 181 MEMORIA VI. Código fuente SBC VCOMP ADD CONSIG+1 BCC ET2 STA VCOMP+1 LDA MANDO LDA CONSIG AND #$18 ADC #0 BEQ ET1 STA VCOMP BRA FINET LDA TRET+1 NOET: ET1: Capítulo 1. Código de la tarjeta TX98 BCLR 3,MANDO SUB VCOMP+1 BCLR 4,MANDO LDA TRET BRA FINET SBC VCOMP BSET 3,MANDO BCC WAUTFR BCLR 4,MANDO JMP MCAL BRA FINET ET2: WAUTFR: JMP AUTFR BCLR 3,MANDO FINET: BSET 4,MANDO NOCV: BRA FINET MAUTO: BRCLR 0,FLAGS3,CVEL MOV #0,VEL BSET 7,FLAGS4 LDA #0 JMP YAVEL LDA ZM CVEL: ASRA BRCLR 7,FLAGS4,DELTAV BCLR 7,FLAGS4 LDA CONSP+1 SUB REG8+1 RORA STA ERROR+1 STA BIN+1 STA PRDT+2 LDA BIN LDA CONSP LSRA SBC REG8 LDA BIN+1 STA ERROR RORA STA PRDT+1 STA VEL LDA CONSP BRA YAVEL LSRA DELTAV: LDA CONSP+1 STA BIN SUB REG8+1 LDA CONSP+1 STA PRDT+2 182 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 PSHA COM PRDT+1 LDA CONSP COM PRDT+2 SBC REG8 LDA PRDT+2 STA PRDT+1 ADD #1 PSHA STA PRDT+2 LDA PRDT+2 LDA PRDT+1 SUB ERROR+1 ADC #0 STA PRDT+2 STA PRDT+1 LDA PRDT+1 EPOS: MOV BPP,BIN SBC ERROR JSR MULDIV STA PRDT+1 LDA RESUL PULA BNE MAXRES STA ERROR LDA RESUL+1 PULA BEQ RESOK STA ERROR+1 MAXRES: MOV #$FF,RESUL+2 BCLR 6,FLAGS4 RESOK: BRSET 6,FLAGS4,RESVEL BRCLR 7,PRDT+1,EPOS LDA VEL BSET 6,FLAGS4 ADD RESUL+2 STA VEL BCC YAVEL BNE NASKFC MOV #$FF,VEL LDA #3 BRA YAVEL STA TIMEFC RESVEL: LDA VEL JSR ASKFC SUB RESUL+2 NASKFC: LDA MANDO STA VEL STA REG2+1 BCC YAVEL BRCLR 0,FLAGS3,CLON MOV #0,VEL MOV #0,VEL YAVEL: LDA TINT BSET 7,FLAGS4 BNE NASKFC JVENT: JMP VENTIL ;PARADO LDA TIMEFC CLON: BRSET 5,FLAGS3,NEWE 183 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 BRA JVENT NEWE: LDA TRET+1 ;NO LDA MANDO SUB CONSIG+1 AND #$18 STA ERR+1 BNE NOIFOI LDA TRET LDA #$FF SBC CONSIG STA FNOI STA ERR NOIFOI: BCLR 5,FLAGS3 ;NUEVO ERROR BRCLR 7,ERR,SIFR BRSET 0,MODO,JVENT BRA SILIMF BRCLR 3,MODO,NAUTO FLIMF: LDA #$FF JMP AUTO NAUTO: CFRIO: ;HALLAR ERROR STA FLIM BRSET 2,MODO,CCAL SILIMF: MOV #0,OUTF ;TEMP RETO<CON MOV #0,OUTC ;MODO FRIO MOV #0,OUT ;***************** LDA TIMP+1 MOV #0,OUTA ;************* SUB TLIMF+1 MOV #0,OUTC LDA TIMP MOV #0,OI SBC TLIMF ;TEMP. IMPUL < LIM? BRA VENTIL BCS FLIMF ;SI SIFR: JSR CALPI ;TEMP.MAYOR:CALCULAR SALIDA LDA #0 MOV OUT,OUTF STA FLIM BRA VENTIL CCAL: MOV #0,OUTC ;TEMP RETOR>CONS MOV #0,OUTF ;MODO CALOR MOV #0,OUT LDA #0 MOV #0,OUTA STA FLIM MOV #0,OI LDA CONSIG+1 BRA VENTIL SUB TRET+1 SICAL: JSR CALPI ;TEMP.<:CALC SAL STA ERR+1 BSET 3,MANDO LDA CONSIG MOV OUT,OUTC SBC TRET BRA VENTIL STA ERR ;HALLAR ERROR AUTO: BRCLR 7,ERR,SICAL LDA TRET+1 ;MODO AUTO SUB CONSIG+1 184 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 LDA TRET SUB TLIMF+1 SBC CONSIG LDA TIMP BCS JCCAL ;TEMP.RETOR < CONSIG SBC TLIMF LDA MODOA BCC SIOUTF BNE JCFR MOV #0,OUTF BSET 3,FLAGS1 MOV #0,OUT LDA #$FF SIOUTF: LDA CONF2 STA MODOA JCFR: BEQ CTOV JMP CFRIO ;TEMP.RETO>CONSIG JCCAL: ;CONTR PROGRAM? ;NO BRCLR 7,FLAGS1,CTOV ;PROGR ACTIV? LDA MODOA BRCLR 0,FLAGS4,NONEWP ;SI BEQ CCAL BCLR 0,FLAGS4 BSET 3,FLAGS1 JSR NEXTPR ;MIRA PROX PROGRAM LDA #0 NONEWP: LDA PER STA MODOA CBEQA #1,ARRPR ;PERIOD 1 MARCHA BRA CCAL CBEQA #3,ARRPR ;PERIOD 2 MARCHA VENTIL: JSR DISPL CBEQA #2,STOPPR ;PERIOD 1 PARA JSR VPULS CBEQA #4,STOPPR ;PERIOD 2 PARA JSR TRANS BRA CTOV LDA TIMP+1 ARRPR: BCLR 0,FLAGS3 BRA WOUTC BCLR 1,FLAGS3 WOUTFA: LDA OUTFA BRA CTOV BNE CHANGE STOPPR: BSET 0,FLAGS3 WOUTC: BSET 1,FLAGS3 CTOV: LDA OUTC BEQ WOUTCA BRCLR 0,FLAGS1,OUTPUT LDA OUTCA JMP COMZO BEQ CHANGE OUTPUT: LDA OUTF BRA NCHG BEQ WOUTFA WOUTCA: LDA OUTCA LDA OUTFA BEQ NCHG BEQ CHANGE CHANGE: NOP 185 MEMORIA VI. Código fuente ; Capítulo 1. Código de la tarjeta TX98 MOV #0,OUTA NCHG: JMP ORELE ;SALIDAS POR RELE MOV OUTF,OUTFA NORELE: BRCLR 0,FLAGS3,YAODA MOV OUTC,OUTCA MOV #0,OUTF BRCLR 0,FLAGS3,SIVENT MOV #0,OUTC WVENT: MOV #0,RELE YAODA: D/A BRA NOVENT JSR DACLK BRCLR 0,MODO,NOMV JSR DACLK NOVENT: MOV #0,OUTF ;MOD VENTI LDA CONF1 MOV #0,OUTC BNE DUALO MOV #0,OUT BRSET 2,MODO,DUALO BCLR 5,RELE LDA OUTF BCLR 4,RELE BRA NDUAL LDA TSTOP BEQ SIOUT JMP WGRAB SIOUT: ;SAL A CONVER BCLR 6,PTC SIVENT: BSET 6,RELE NOMV: JSR INDAC DUALO: LDA OUTC NDUAL: JSR SDDAC ;SAL DE CALOR JSR INDAC LDA CONF1 BSET 6,PTC CMP #2 JSR DACLK BCS NORELE BCLR 6,PTC JSR DACLK LDA OUTF ORELE: ;SALIDA DE FRIO LDA MANDO AND #$18 JSR SDDAC BEQ NOORL BSET 7,PTC BRCLR 0,FLAGS3,YAORL LDA PTA NOORL: AND #$8F MOV #0,OUTF MOV #0,OUTC ORA RELE YAORL: BRCLR 3,MODO,NOZM AND #$FD LDA OUTF STA PTA BEQ ZMC JMP WGRAB LDA ZM 186 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 LSRA ADC TRET ADD CONSIG+1 STA BIN STA BIN+1 LDA CONSIG+1 LDA #0 SUB BIN+1 ADC CONSIG LDA CONSIG STA BIN SBC BIN LDA TRET+1 BCC NOZM SUB BIN+1 MOV #0,OUTC LDA TRET NOZM: LDA FMOD SBC BIN BEQ SIMOD BCC NOZM LDA OUTF MOV #0,OUTF BNE FNMOD BRA NOZM MOV #0,TRONF ZMC: LDA OUTC MOV #$FF,TROFF BEQ NOZM BCLR 5,RELE LDA ZM BRA WNMODC LSRA FNMOD: LDA #$FF ADD TRET+1 STA TRONF STA BIN+1 STA TROFC LDA #0 LDA #0 STA TROFF BRA YANMOD STA TRONC CNMOD: MOV #$FF,TRONC BSET 5,RELE MOV #0,TROFC BCLR 4,RELE BSET 4,RELE BRA YANMOD BRA YANMOD WNMODC: LDA OUTC SIMOD: LDA OUTF BNE CNMOD TAX MOV #0,TRONC LDA TREL MOV #$FF,TROFC MUL BCLR 4,RELE PSHA 187 ;SALIDAS POR RELE MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 TXA TXA PSHA PSHA PULH PULH LDA #$FF LDA #$FF TAX TAX PULA PULA DIV DIV STA TCONF ;TIEMPO ON FRIO STA TCONC LDA TREL LDA TREL SUB TCONF SUB TCONC STA TCOFF ;TIEMPO OFF FRIO ;TIEMPO ON CALOR STA TCOFC ;T OFF CALOR LDA OUTC YANMOD: LDHX #0 TAX LDA CONF1 LDA TREL CMP #2 MUL BNE DUALR PSHA BRSET 2,MODO,CALR SICALR: BSET 5,RELE BRSET 5,RELE,SIFRR DUALR: LDA PTA BCLR 4,RELE AND #$8F BRA DUALR ORA RELE SIFRR: BSET 4,RELE AND #$FD BRA DUALR CALR: STA PTA BRSET 4,RELE,SICALR WGRAB: BCLR 5,RELE BRSET 7,FLAGS2,GRBM JMP COMZO BRA DUALR GRBM: BCLR 7,FLAGS2 JSR STORE ;GRABA DATO EEPROM LDA AN0,X JMP COMZO ADC AN0+2,X MEDIA: LDA AN0+1,X ; MED TEMP STA ANM ADD AN0+3,X LDA AN0+5,X STA ANM+1 ADD ANM+1 188 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 STA ANM+1 LDA AN0+9,X LDA AN0+4,X ADD ANM+1 ADC ANM STA ANM+1 STA ANM LDA AN0+8,X LDA AN0+7,X ADC ANM ADD ANM+1 STA ANM STA ANM+1 LDA AN0+$B,X LDA AN0+6,X ADD ANM+1 ADC ANM STA ANM+1 STA ANM LDA AN0+$A,X ADC ANM ROR ANM+1 STA ANM ASR ANM LDA AN0+$D,X ROR ANM+1 ADD ANM+1 ASR ANM STA ANM+1 ROR ANM+1 LDA AN0+$C,X ASL ANM+1 ADC ANM ROL ANM STA ANM RTS LDA AN0+$F,X GTRET: LDHX ANM ADD ANM+1 LDA TABLAC,X STA ANM+1 STA TRET LDA AN0+$E,X INCX ADC ANM LDA TABLAC,X STA ANM STA TRET+1 ASR ANM RTS CALPI: LDA ERR+1 ;CALCULO SAL PI STA ERRX SUB AERR+1 MOV ERR,AERR STA ERRX+1 MOV ERR+1,AERR+1 LDA ERR LDA OUT SBC AERR BNE NIP 189 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 JMP INPROP NIP: BEQ WINT BRCLR 3,FLAGS1,SCALC JMP INPROP JMP INPROP SCALC: WINT: LDA FNOI LDA ERR AND #$F0 BNE NOINT BEQ SIINT LDA TNOI NOINT: MOV #0,OI BNE NOINT LDA FNOI LDA TI BEQ YAINT BEQ NOINT ;TI=0,NO INTEGR LDA #0 LDA TOI STA FNOI LDA #5 TAX STA TNOI LDA ERR+1 BRA YAINT DIV SIINT: ASL ERR+1 STA OI ROL ERR PSHH ASL ERR+1 PULA ROL ERR STA ERR ASL ERR+1 LDHX #0 ROL ERR BRCLR 7,ERR,NOIOI ASL ERR+1 INC OI ROL ERR NOIOI: LDA OI LDA ERR AND #$F CMP TI ADD ROI BCS SIDIV STA ROI MOV #$F,OI LSR OI BRA YAINT LSR OI SIDIV: LDA ERR LSR OI PSHA LSR OI PULH BRCLR 4,ROI,YAINT LDA TI INC OI 190 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 LDA ROI LDA ERRX AND #$F ADC #0 STA ROI STA ERRX YAINT: BRSET 7,ERRX,NOSAT1 BCLR 1,FLAGS4 LDA ERRX BRCLR 7,ERRX,NONEGE BEQ NOSAT1 COM ERRX+1 ;PARTE PROPOR NEG SISAT: JMP SATU COM ERRX NOSAT1: LDA ERRX+1 LDA ERRX+1 ADD OI ADD #1 STA ERRX+1 STA ERRX+1 LDA ERRX MOV #$FF,OUT ADC #0 BRA NOINCO STA ERRX NOSAT2: LDA PRDT BSET 1,FLAGS4 CMP BP NONEGE: LDA #$64 BCC SISAT TAX LDA PRDT LDA ERRX+1 PSHA MUL PULH STA PRDT+1 LDA BP TXA TAX STA PRDT LDA PRDT+1 LDA #$64 DIV TAX STA OUT LDA ERRX PSHH MUL PULA ADD PRDT STA PRDT STA PRDT LDHX #0 TXA BRCLR 7,PRDT,NOINCO ADC #0 INC OUT BEQ NOSAT2 NOINCO: BRSET 1,FLAGS4,SUBO 191 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 CLC INPROP: BCLR 3,FLAGS1 LDA OUT LDA #$64 ADD OUTA TAX BCC NSATU LDA ERR+1 JMP SATU MUL NSATU: STA OUTA STA PRDT+1 STA OUT TXA ;SI OUT=0 HACER OUT=KPxERR STA PRDT LDA OUT LDA #$64 BNE FCALPI TAX LDA ERR STA OUT MUL PSHH ADD PRDT PULA STA PRDT STA PRDT TXA LDHX #0 ADC #0 BRCLR 7,PRDT,NOINO BEQ NOSATX INC OUT MOV #$FF,OUT NOINO: BRA NOINO FCALPI: RTS NOSATX: LDA PRDT SATU: MOV OUT,OUTA LDA BP CMP BP LDX #$FF BCS NOSATO MUL JMP SISAT PSHX NOSATO: LDA PRDT PULH PSHA LDX #$64 PULH DIV LDA BP CMP AERR+1 TAX BCC NCAERR LDA PRDT+1 STA AERR+1 DIV MOV #0,AERR 192 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 NCAERR: LDHX #0 SATD: LDA #$FF BRA NSATD JMP NSATU SUBO: LDA #0 MDIA10: ASLA CLC STA POSM LDA OUTA ASLA SUB OUT ASLA BCS SATD ADD POSM NSATD: STA OUTA ADD #AMOM1 STA OUT STA POSM RTS RTS DELON: LDX #0 ;ENCENDER DISPLAY BRSET 0,FLAGS3,WPPR LDA #$FF BRA NOPARD BRA MDELD DELD: LDX #0 WPPR: ;BORRAR DISPLAY BRCLR 1,FLAGS3,NODV BRA NOPARD LDA #0 NODV: MDELD: STA LCDDAT,X BCLR 4,LCDDAT+3 SIPARD: BRSET 5,FLAGS2,NOPARD INCX BRSET 2,FLAGS4,NOPARD CPX #$A BRSET 6,FLAGS1,NOPARD BNE MDELD MOV #0,LCDDAT+8 ;PARADO RTS MOV #0,LCDDAT+3 DISPL: JSR RWDOG ;SUB. DISPLAY BCLR 4,LCDDAT+4 MOV #0,LCDDAT+4 FDAL1: LDA LCDDAT+9 LDA LCDDAT+5 AND #$C0 AND #$F0 STA LCDDAT+9 STA LCDDAT+5 MOV #0,LCDDAT+8 NODAL: JSR DPMH ;DISPLAY MED/H BCLR 0,LCDDAT+6 LDA LCDDAT+7 BCLR 4,LCDDAT+2 AND #$E BCLR 4,LCDDAT+1 STA LCDDAT+7 MOV #0,LCDDAT 193 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 RTS NOPARD: BRCLR 5,FLAGS2,SDM BCLR 4,LCDDAT+3 BRSET 5,FLAGS2,WDGRC ;PROG PARA BCLR 4,LCDDAT+4 LDA CONF2 ;CONTROL PROGRAM? BCLR 7,LCDDAT+7 BNE VENNP ;SI LDA LCDDAT+5 MOV #0,LCDDAT+8 AND #$F0 MOV #$10,LCDDAT+3 STA LCDDAT+5 MOV #0,LCDDAT+4 BRA YADM LDA LCDDAT+5 SDM: BRCLR 0,MODO,DMODO ;M VENT? BSET 4,LCDDAT+3 AND #$F0 ;SI STA LCDDAT+5 BCLR 4,LCDDAT+4 VENNP: BRA NODAL LDA LCDDAT+3 STA LCDDAT+7 AND #$10 JSR DPMH STA LCDDAT+3 JMP DPER MOV #0,LCDDAT+4 DMODO: LDA LCDDAT+5 BCLR 4,LCDDAT+3 ;DISPLAY M. BCLR 7,LCDDAT+7 AND #$F0 WDGRC: BRCLR 5,FLAGS2,SIGRC1 STA LCDDAT+5 BCLR 2,LCDDAT+5 LDA LCDDAT+7 BRA NOGRC1 AND #$1F SIGRC1: BSET 2,LCDDAT+5 NOGRC1: BRCLR 1,MODO,NODF STA LCDDAT+5 LDA LCDDAT+5 ;MODO FRIO BCLR 4,LCDDAT+4 AND #$F4 LDA CONF2 STA LCDDAT+5 BNE YADM BSET 4,LCDDAT+4 BCLR 7,LCDDAT+7 BRA YADM BRA YADM NODF: BRCLR 3,MODO,NODA BSET 1,LCDDAT+5 NODA: ;MODO AUTO BRSET 0,MODO,YADM LDA LCDDAT+5 ;MODO CALOR LDA LCDDAT+5 AND #$F5 AND #$F6 STA LCDDAT+5 194 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 BCLR 4,LCDDAT+4 JSR DIG1 BSET 0,LCDDAT+5 INC SEGD YADM: BRCLR 5,FLAGS2,SIGRC2 ;ESCRIBIR CONSIGNA LDA DECIM+2 BCLR 2,LCDDAT+5 JSR DIG1 BRA NOGRC2 FDAL2: JSR DPMH SIGRC2: BSET 2,LCDDAT+5 LDA CONF2 NOGRC2: MOV CONSIG,BIN BNE DENER MOV CONSIG+1,BIN+1 ;ESCRIB MED/H JMP FDAL1 JSR BINDEC DENER: BSET 5,LCDDAT+7 MOV #3,SEGD BCLR 6,LCDDAT+7 LDA DECIM+1 BCLR 7,LCDDAT+7 DPER: BRCLR 1,FLAGS2,NOIP BRA NODPER LDA CRINT DPERP: BEQ NOIP NODIP: BRA SIDPER BCLR 3,LCDDAT+8 NODPER: MOV #$89,BIN BRA DPPA NOIP: LDA PERP ;DISPLAY PROGRAM BRA YADPER LDA FLPR SIDPER: BRCLR 4,FLAGS2,NOIPER BEQ NODIP LDA CRINT NIOV1: BSET 3,LCDDAT+8 DPPA: BRCLR 7,FLAGS1,NODPA BNE NODPER NOIPER: BRSET 6,FLAGS1,DPERPI BRCLR 1,FLAGS2,NOIPA LDA PER LDA CRINT BRA YADP BNE NODPA NOIPA: DPERPI: LDA PERP BSET 7,LCDDAT+8 ;PROGR ACTIV YADP: BRA WDPER CMP #1 BNE NOP1 NODPA: BCLR 7,LCDDAT+8 BSET 2,LCDDAT+8 WDPER: BRSET 6,FLAGS1,DPERP MOV #$8D,BIN BRCLR 7,FLAGS1,NODPER LDA PER BRA YADPER ;DISPLAY PERIODO NOP1: BNE NOIPER CMP #2 BNE NOP2 195 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 BSET 6,LCDDAT+8 NOP2: CMP #3 MOV #$C9,BIN BNE NOP3 BRA YADPER BSET 1,LCDDAT+8 MOV #$8B,BIN MID3: BSET 5,LCDDAT+9 BRA YADPER MID4: BSET 0,LCDDAT+6 MID5: BSET 0,LCDDAT+7 NOP3: CMP #4 BNE NODPER BSET 0,LCDDAT+8 BSET 5,LCDDAT+8 BRA FDDIA MOV #$A9,BIN IDIA: YADPER: LDA LCDDAT+8 BRCLR 3,FLAGS2,NIDIA ; PROGRAM LDA CRINT AND BIN BEQ NIDIA STA LCDDAT+8 LDA DIAP BRSET 6,FLAGS1,IDIA ;PROGRAM? BNE NID1 ;INTERMITENC Nº DE DIA NIDIA: BSET 4,LCDDAT+1 ;NO,Nº ENCEN BCLR 4,LCDDAT+1 MID1: BSET 4,LCDDAT+2 BRA MID1 MID2: BSET 4,LCDDAT NID1: CMP #1 BRA MID2 BNE NID2 NID2: CMP #2 BSET 4,LCDDAT+1 BNE NID3 BCLR 4,LCDDAT+2 BSET 4,LCDDAT+1 BSET 4,LCDDAT+2 NID4: CMP #4 BCLR 4,LCDDAT BNE NID5 BRA MID3 BSET 4,LCDDAT+1 NID3: CMP #3 BSET 4,LCDDAT+2 BNE NID4 BSET 4,LCDDAT BSET 4,LCDDAT+1 BSET 5,LCDDAT+9 BSET 4,LCDDAT+2 BCLR 0,LCDDAT+6 BSET 4,LCDDAT BRA MID5 BCLR 5,LCDDAT+9 NID5: BRA MID4 CMP #5 BNE NID6 196 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 BSET 4,LCDDAT+1 BSET 5,LCDDAT+9 BSET 4,LCDDAT+2 BSET 0,LCDDAT+6 BSET 4,LCDDAT BCLR 0,LCDDAT+7 BSET 0,LCDDAT+8 MOV #$E8,BIN+1 BRA FDDIA BSET 6,LCDDAT NID6: BSET 4,LCDDAT+1 BRA YADDIA BSET 4,LCDDAT+2 NDIA2: CMP #2 BSET 4,LCDDAT BNE NDIA3 BSET 5,LCDDAT+9 MOV #$3F,BIN BSET 0,LCDDAT+6 MOV #$E8,BIN+1 BSET 0,LCDDAT+7 BSET 5,LCDDAT BCLR 0,LCDDAT+8 BRA YADDIA FDDIA: BRSET 6,FLAGS1,DBARP ; EN PROGRAM? NDIA3: BNE NDIA4 BRCLR 3,FLAGS2,NDIA0 MOV #$1F,BIN LDA CRINT MOV #$F8,BIN+1 BEQ NDIA0 BSET 4,LCDDAT+9 MOV #$1F,BIN BRA YADDIA MOV #$E8,BIN+1 NDIA4: BRA YADDIA NDIA0: LDA DOWR BARRA DEL DIA CMP #3 CMP #4 BNE NDIA5 ;NO,DISPLAY MOV #$1F,BIN BNE NDIA1 MOV #$EC,BIN+1 MOV #$9F,BIN BSET 2,LCDDAT+9 MOV #$E8,BIN+1 BRA YADDIA NDIA5: BSET 7,LCDDAT BNE NDIA6 BRA YADDIA NDIA1: CMP #5 MOV #$1F,BIN CMP #1 BNE NDIA2 MOV #$EA,BIN+1 MOV #$5F,BIN BSET 1,LCDDAT+9 BRA YADDIA 197 MEMORIA VI. Código fuente NDIA6: Capítulo 1. Código de la tarjeta TX98 MOV #$1F,BIN BRA WDIA5P MOV #$E9,BIN+1 NDIA4P: BCLR 4,LCDDAT+9 BSET 0,LCDDAT+9 WDIA5P: LSRA YADDIA: LDA LCDDAT BCC NDIA5P AND BIN BSET 2,LCDDAT+9 STA LCDDAT BRA WDIA6P LDA LCDDAT+9 NDIA5P: BCLR 2,LCDDAT+9 AND BIN+1 WDIA6P: LSRA STA LCDDAT+9 BCC NDIA6P RTS BSET 1,LCDDAT+9 DBARP: LDA FLPR PROGRAMACION LSRA ;EN BRA WDIA7P NDIA6P: BCLR 1,LCDDAT+9 ;DISPLAY DIAS PROGRAM WDIA7P: LSRA BCC NDIA1P BCC NDIA7P BSET 7,LCDDAT BSET 0,LCDDAT+9 BRA WDIA2P RTS NDIA1P: BCLR 7,LCDDAT NDIA7P: BCLR 0,LCDDAT+9 WDIA2P: LSRA RTS BCC NDIA2P VPULS: BSET 6,LCDDAT JSR RWDOG BRSET 5,PTD,NPUP BRA WDIA3P JMP PUP NDIA2P: BCLR 6,LCDDAT NPUP: WDIA3P: LSRA ;VIGILANCIA PULS ;PULS ARRIBA? ;SI BRSET 6,PTD,NPDWN ;PULS ABAJ? JMP PDOWN ;SI BCC NDIA3P NPDWN: BRSET 0,PTD,NPSTSP ;PULS START-STOP? BSET 5,LCDDAT BRA WDIA4P JMP PSTRSP ;SI NDIA3P: BCLR 5,LCDDAT NPSTSP: BRSET 1,PTD,NPMOD ;PULSMOD? WDIA4P: LSRA JMP PMODO ;SI BCC NDIA4P NPMOD: BSET 4,LCDDAT+9 LDA CONF2 ;CONTR PROGRAM? BEQ NPULS 198 ;NO MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 BRSET 2,PTD,NPSEL ;PULSADOR SEL? CBEQA #1,FPAU JMP PSEL CBEQA #3,FPAU NPSEL: ;SI BRSET 3,PTD,NPPRG ;PULS PRG? JMP PPRG NPPRG: BCLR 0,FLAGS2 ;SI BCLR 1,FLAGS2 BRSET 7,PTD,NPCOPY ;PUL COPY? JMP PCOPY FPAU: ;SI NOPRA1: BRCLR 2,FLAGS2,NOHR1 NPCOPY: BRSET 4,PTD,NPULS ;P CLOCK? JMP PCLK NPULS: PUP: JMP FUP MOV #5,TRAP ;T PA CAMB RAPID ;SI BRSET 6,FLAGS1,INCHRP RTS MIHR: BRSET 6,FLAGS1,SIPUP ;PULARRIBA MOV #$A,TINT LDA #$3B ;NO,AUMENTAR HORA BRSET 2,FLAGS4,SIPUP CMP MINR BRSET 0,MODO,NOPUP BEQ FMINU BRCLR 0,FLAGS3,SIPUP INC MINR BRSET 1,FLAGS3,SIPUP BRA MCHRA NOPUP: SIPUP: MPUP: RTS ;PARADO FMINU: LDX #$40 MOV #0,MINR LDA #$17 BRSET 5,PTD,NP1 ;CONFIR PULS JSR DELB CMP HRR ;RETAR REBOTE Y RUIDO BEQ FHRU DBNZX MPUP INC HRR BRA YAPUP BRA MCHRA NP1: RTS YAPUP: ;PROGRAM? FHRU: BRCLR 1,FLAGS2,NOPRA1 MCHRA: MOV #0,HRR JSR DISPL LDA FLAGS1 LDA TRAP EOR #$80 BEQ URAP1S ;CAM PROGRAM ACTIV STA FLAGS1 JSR DELAY BRCLR 7,FLAGS1,FCHPAU BRA URAP1 JSR WPER URAP1S: JSR DELAYS JMP FUP URAP1: BRCLR 5,PTD,MIHR ;SIG PUL ARRIB? FCHPAU: BCLR 1,FLAGS3 RTS LDA PER ;NO INCHRP: LDA MINP 199 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 CMP #$AA CMP DOWR BNE SIIHRP BEQ FDIAU LDA #0 INC DOWR STA HORAP JMP FUP STA MINP FDIAU: BRA MCHRAP JMP FUP SIIHRP: MOV #$A,TINT INC MINP MOV #0,DOWR INDIAP: INC DIAP ;AUMEN DIA PROGRA ;AUMENTA H PROGRAM LDA #7 LDA #$3C CMP DIAP CMP MINP BNE RHORA1 BNE MCHRAP MOV #0,DIAP MOV #0,MINP BRA RHORA1 INC HORAP NODIA1: BRCLR 4,FLAGS2,NOPER1 LDA #$18 INC PERP ;AUMENT PERIO PROGRA CMP HORAP LDA #5 BNE MCHRAP CMP PERP MOV #0,HORAP BNE RHORA1 MCHRAP: JSR DISPL MOV #1,PERP LDA TRAP RHORA1: JSR RHORAP ;LEER H PERIOD BEQ URAP2S JMP FUP JSR DELAY NOPER1: BSET 0,FLAGS1 BRA URAP2 BRSET 2,FLAGS1,NOGCU URAP2S: JSR DELAYS BSET 2,FLAGS1 URAP2: BRCLR 5,PTD,SIIHRP ;SIGUE PULSADO ARRIB? JSR PRGHR NOGCU: MOV CONSIG,DATO ;NO,GRABAR HORA LDA CONSIG+1 RTS NOHR1: MOV CONSIG+1,DATO+1 SUB CMAX+1 BRCLR 3,FLAGS2,NODIA1 BRSET 6,FLAGS1,INDIAP LDA #6 LDA CONSIG ;PROGRAM? SBC CMAX ;NO,AUMENTAR DIA BCS SIUPC 200 ;CONSIG > MAXIMO? MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 MOV CMAX+1,CONSIG+1 ;SI,NO + STA FLAGS1 MOV CMAX,CONSIG BRCLR 7,FLAGS1,FCHPAD BRA FUP JSR WPER SIUPC: LDA CONSIG+1 ;AUMEN CONSIG JMP FDOWN ADD #$A FCHPAD: BCLR 1,FLAGS3 STA CONSIG+1 LDA PER LDA CONSIG CBEQA #1,FPAD ADC #0 CBEQA #3,FPAD STA CONSIG BCLR 0,FLAGS2 MOV #2,TOI BCLR 1,FLAGS2 FUP: MOV #$A,TINT FPAD: JSR DELAY WUP: NOPRA2: BRCLR 2,FLAGS2,NOHR2 JSR DISPL MOV #5,TRAP ;T PA CAMB RAPID H BRCLR 5,PTD,WUP BRSET 6,FLAGS1,DECHRP ;PROGRAM? RTS PDOWN: MDHR: LDX #$40 ;PULS ABAJO NP2: MOV #$A,TINT LDA #0 MPDOWN: BRSET 6,PTD,NP2 ;CONFI PUL JSR DELB JMP FDOWN CMP MINR ;RETAR REBOTE Y RUIDO BEQ FMIND DBNZX MPDOWN DEC MINR BRA YAPDWN BRA MCHRB RTS FMIND: YAPDWN: BRSET 6,FLAGS1,SIPDWN MOV #$3B,MINR LDA #0 BRSET 2,FLAGS4,SIPDWN CMP HRR BRSET 0,MODO,NOPDWN BEQ FHRD BRCLR 0,FLAGS3,SIPDWN DEC HRR BRSET 1,FLAGS3,SIPDWN BRA MCHRB NOPDWN: RTS FHRD: SIPDWN: BRCLR 1,FLAGS2,NOPRA2 MCHRB: MOV #$17,HRR JSR DISPL LDA FLAGS1 LDA TRAP EOR #$80 ;CAM PROGRAM ACTIV BEQ DRAP1S 201 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 JSR DELAY DRAP2: BRCLR 6,PTD,SIDHRP ;SIGUE PULSADO ABAJO? BRA DRAP1 JSR PRGHR DRAP1S: JSR DELAYS DRAP1: BRCLR 6,PTD,MDHR PULSADO FLECHA ABAJO? RTS ;NO,GRABAR HORA RTS ;SIGUE NOHR2: ;NO BRCLR 3,FLAGS2,NODIA2 BRSET 6,FLAGS1,DEDIAP ;PROGRAMACION? DECHRP: LDA MINP LDA #0 CMP #$AA ;NO,DISMINUIR DIA CMP DOWR BNE SIDHRP BEQ FDIAD LDA #0 DEC DOWR STA HORAP JMP FDOWN STA MINP FDIAD: BRA MCHRBP MOV #6,DOWR JMP FDOWN SIDHRP: MOV #$A,TINT DEDIAP: DEC DIAP DEC MINP ;DISMINUIR H PROGRAM LDA #$FF LDA #$FF CMP DIAP CMP MINP BNE RHORA2 BNE MCHRBP MOV #6,DIAP MOV #$3B,MINP BRA RHORA2 DEC HORAP NODIA2: BRCLR 4,FLAGS2,NOPER2 LDA #$FF DEC PERP ;DISMINUI PERIO PROGRA CMP HORAP LDA #0 BNE MCHRBP CMP PERP MOV #$17,HORAP BNE RHORA2 MCHRBP: JSR DISPL MOV #4,PERP LDA TRAP RHORA2: JSR RHORAP ;LEE H D PERIOD BEQ DRAP2S JMP FDOWN JSR DELAY NOPER2: BSET 0,FLAGS1 BRA DRAP2 BRSET 2,FLAGS1,NOGCD DRAP2S: JSR DELAYS 202 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 BSET 2,FLAGS1 NOGCD: YASTSP: BRCLR 4,FLAGS1,NOFMED MOV CONSIG+1,DATO+1 BCLR 4,FLAGS1 MOV CONSIG,DATO MOV TRET,MEDD;PON RETO DISPLAY LDA CMIN+1 MOV TRET+1,MEDD+1 SUB CONSIG+1 BRA WSTRSP LDA CMIN NOFMED: BRSET 6,FLAGS1,SELSTP ;PROGR? SBC CONSIG BCS SIDWC BSET 0,FLAGS1 ;CONSIGNA < MIN? LDX #$40 MOV CMIN+1,CONSIG+1 ;SI,NO DISMINUIR MOO: JSR DELB MOV CMIN,CONSIG DBNZX MOO BRA FDOWN SIDWC: BSET 0,FLAGS3 LDA CONSIG+1 ;DISMIN CONS BRA FSTRSP SUB #$A SIOO: STA CONSIG+1 STA FLAGS3 ;NO,ON/OFF SBC #0 BRA FSTRSP STA CONSIG SELSTP: BRCLR 2,FLAGS2,NOHR3 MOV #2,TOI LDA #0 MOV #$A,TINT STA MINP JSR DISPL JSR NULLP BRCLR 6,PTD,WDOWN JSR WPER RTS BRA FSTRSP PSTRSP: LDX #$40 ;PULS START-STOP NOHR3: MPSTSP: BRSET 0,PTD,NP3 ;CONFI PULS JSR DELB BRCLR 3,FLAGS2,NODIA3 LDA #$AA ;ANULA PROGRAM DE DIA ;RETAR REBOTE Y RUIDO STA HORAP DBNZX MPSTSP STA MINP BRA YASTSP NP3: ;HORA INI PROGRAM-00:00 STA HORAP JSR DELAY WDOWN: LDA FLAGS3 EOR #1 LDA CONSIG FDOWN: BRCLR 2,PTA,SIOO JSR NULLD RTS JSR WPER 203 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 BRA FSTRSP LDA TOI NODIA3: BRCLR 4,FLAGS2,FSTRSP STA DATO+3 LDA #$AA ;ANUL PROGRAM D PERIO BRA FMODO STA HORAP SIPM: LDA MODO STA MINP MOV OI,DATO+1 JSR NULLP MOV OUTA,DATO+2 JSR WPER MOV TOI,DATO+3 FSTRSP: MOV #$A,TINT BRCLR 4,FLAGS1,CHMODO JSR DELAY LDA NMED WSTRSP: JSR DISPL CMP #4 BRCLR 0,PTD,WSTRSP BNE INMED RTS LDA #0 PMODO:BRSET 6,FLAGS1,NP4;PUL MOD, PRG STA NMED LDX #$60 MMODO: BRA FPMOD BRSET 1,PTD,NP4 ;CONFIR PUL JSR DELB INMED: ;RETAR REBOTE Y RUIDO STA NMED DBNZX MMODO BRA FPMOD BRA YAPMOD NP4: INCA CHMODO: MOV #0,OI RTS MOV #0,OUTA YAPMOD: BSET 0,FLAGS1 MOV #$A,TOI BRSET 1,FLAGS1,NOGM BSET 3,FLAGS1 BSET 1,FLAGS1 ASL MODO ;CAMB MOD FUNCIONA NOGM: BRCLR 0,FLAGS3,SIPM LDA CONF1 BRSET 1,FLAGS3,SIPM CBEQA #1,SIMA LDA MODO CBEQA #3,SIMA STA DATO BRCLR 3,MODO,FMODO LDA OI BRA MODO1 STA DATO+1 SIMA: LDA OUTA MODO1: MOV #1,MODO STA DATO+2 FMODO: MOV #$A,TINT 204 BRCLR 4,MODO,FMODO MEMORIA VI. Código fuente FPMOD: WMODO: Capítulo 1. Código de la tarjeta TX98 JSR DELAY STA NMED JSR DISPL MOV TIMP,MEDD BRCLR 0,PTD,WPRGM ;PULSADOR START-STOP? MOV TIMP+1,MEDD+1 ;PONER TEMP.IMPULSION EN DISPLAY BRCLR 6,PTD,WDMED ;PULS ABAJO? WPMED: JSR DISPL BRCLR 5,PTD,WBLKP ;PULS ARRIBA? BRCLR 6,PTD,WPMED BRCLR 1,PTD,WMODO BRCLR 1,PTD,WPMED RTS RTS WPRGM: LDX #$20 WBLKP: MWPRGM: JSR DELAY ;PUL START-STOP BRSET 0,FLAGS3,FBLKP LDX #$40 JSR RWDOG ;WATCH-DOG MWBLKP: JSR DELB ;PULS ARRIBA BRSET 0,PTD,WMODO BRSET 5,PTD,WMODO BRSET 1,PTD,WMODO BRSET 1,PTD,WMODO DBNZX MWPRGM DBNZX MWBLKP MOV DATO,MODO MOV DATO,MODO MOV DATO+1,OI MOV DATO+1,OI MOV DATO+2,OUTA MOV DATO+2,OUTA MOV DATO+3,TOI MOV DATO+3,TOI JMP PRMODE ;PROGRAM PARAM LDA FLAGS1 WDMED: LDX #$40 MWDMED: JSR DELB EOR #$20 ;PULS ABAJO STA FLAGS1;CAMB FLAG BLOQ CONS BRSET 6,PTD,WMODO BRSET 5,FLAGS1,BLKA BRSET 1,PTD,WMODO MOV #1,CMAX ;QUITA BLOQU CONS DBNZX MWDMED MOV #$2C,CMAX+1 MOV DATO,MODO MOV #0,CMIN MOV DATO+1,OI MOV #$96,CMIN+1 MOV DATO+2,OUTA JMP FBLKP MOV DATO+3,TOI BLKA: MOV #AP03,POSM ;PON BLOQ CONSIG BSET 4,FLAGS1 JSR READ LDA #0 205 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 STA DATO STA CMAX+1 LDA CONSIG+1 LDA CONSIG ADD DATO ADC #0 BRA FSEL STA CMAX NOPRA3: BSET 1,FLAGS2 ;SELECCION ACTIVACION PROGRAMACION LDA CONSIG+1 BRA FSEL SUB DATO WSTP: STA CMIN+1 BRCLR 3,FLAGS2,NODIA4 LDA CONSIG BCLR 3,FLAGS2 ;FIN SELECCION DIA SBC #0 BSET 4,FLAGS2 ;SELECCION PERIODO STA CMIN FBLKP: BRA FSEL JSR DISPL NODIA4: BCLR 4,FLAGS2 ;FIN SELEC PERIO BRCLR 5,PTD,FBLKP BSET 2,FLAGS2 ;SELECCION HORA BRCLR 1,PTD,FBLKP BRA FSEL RTS PSEL: SIHR: BRCLR 0,FLAGS3,WPSEL ;PULS SEL FSEL: BRCLR 6,FLAGS1,NP5 WSEL: LDX #$40 JSR DISPL BRCLR 2,PTD,WSEL MPSEL: BRSET 2,PTD,NP5 ;CONFIRMACION PULSADOR NP5: MOV #$A,TINT JSR DELAY BRSET 0,MODO,NP5 JSR DELB BCLR 2,FLAGS2 ;FIN SELEC HORA BSET 3,FLAGS2 ;SELECCION DIA BRSET 1,FLAGS3,WPSEL WPSEL: BRSET 2,FLAGS2,SIHR ;PROGRA RTS ;RETAR REBOTE Y RUIDO PPRG: BRSET 0,FLAGS2,NP6;PUL PROGRA DBNZX MPSEL BRSET 1,FLAGS2,NP6 BRA YAPSEL LDX #$40 RTS MPPRG: BRSET 3,PTD,NP6 ;CONFIRMACION PULS YAPSEL: BRSET 6,FLAGS1,WSTP JSR DELB BRCLR 1,FLAGS2,NOPRA3 ;RETAR REBOTE Y RUIDO DBNZX MPPRG BCLR 1,FLAGS2 ;FIN SELECCION ACTIVACION PROGRAMACION BRA YAPPRG 206 MEMORIA VI. Código fuente NP6: Capítulo 1. Código de la tarjeta TX98 RTS YAPPRG: BRSET 6,FLAGS1,FPROG BSET 6,FLAGS1 ;ENTRAR PROGRAM LDA DIAP BSET 6,FLAGS2 CMP #$FF BSET 3,FLAGS2 BNE NODP1 LDA DOWR MOV #6,DIAP STA DIAP NODP1: LDA PER STA DATO+1 BNE SIDPP LDA #1 LDA #1 STA PERP SIDPP: STA PERP MCOPY: JSR RHORAP JSR RHORAP INC DIAP BRA FPRG LDA DIAP FPROG: JSR WPER ;FIN PROGRAM CMP #7 LDA FLAGS2 BNE NODP2 AND #$A0 MOV #0,DIAP STA FLAGS2 NODP2: BCLR 6,FLAGS1 FPRG: MOV #$14,TINT WPRG: LDA DIAP CMP #$FF JSR DISPL BNE NODP3 BRCLR 3,PTD,WPRG MOV #6,DIAP RTS PCOPY: NODP3: BRCLR 6,FLAGS1,NP7 ;PULS COPY INC PERP LDA PERP LDX #$40 CMP #6 MPCOPY: BRSET 7,PTD,NP7 JSR DELB JSR PRGHR DEC DIAP JSR DELAY NP7: LDA PERP ;CONF PULS BNE MCOPY ;RETAR REBOTE Y RUIDO LDA DATO+1 DBNZX MPCOPY STA PERP BRA YAPCPY INC DIAP RTS LDA DIAP YAPCPY: DEC DIAP CMP #7 207 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 BNE NODP4 NODP4: MOV #0,DIAP JSR WPER JSR WPER MOV #$10,TINT FCLK: JSR RHORAP JSR DELAY JSR DELAY WCOPY: WCLK: JSR DISPL JSR DISPL BRCLR 4,PTD,WCLK BRCLR 7,PTD,WCOPY RTS RTS PRMODE: JSR STORE ;MOD PRG PARAM PCLK: BRSET 0,FLAGS2,NP8 ;PUL AJUS REL BCLR 4,FLAGS1 BRSET 1,FLAGS2,NP8 BSET 5,FLAGS2 BRSET 6,FLAGS1,NP8 MOV #AP15,POSM BRSET 0,MODO,NP8 LDA VERS LDX #$40 JSR PROG MPCLK: BRSET 4,PTD,NP8 JSR DELB NP8: MOV #$14,TINT ;CONFIR PUL MOV #AP16,POSM ;RETAR REBOTE Y RUIDO LDA #0 DBNZX MPCLK JSR PROG BRA YAPCLK MOV #0,CONSIG RTS MOV #0,CONSIG+1 YAPCLK: BRSET 2,FLAGS2,AJCLKD MOV #0,POSM BRSET 3,FLAGS2,FAJCLK JSR READ BSET 2,FLAGS2 ;AJUSTE HORA STA DATO+1 BSET 6,FLAGS2 MOV #0,DATO BSET 2,FLAGS4 BCLR 6,FLAGS2 BRA FCLK WPRMOD: JSR DISPL AJCLKD: BCLR 2,FLAGS2 ;AJUSTE DIA BRCLR 0,PTD,WPRMOD BSET 3,FLAGS2 BRCLR 1,PTD,WPRMOD BRA FCLK DISPP1: JSR DISPL FAJCLK: BCLR 3,FLAGS2 ;FIN AJUST RELOJ BRCLR 5,PTD,PUPPR1 ;PULS ARRIBA BCLR 6,FLAGS2 BRCLR 6,PTD,PDWNP1 ;PULS ABAJO BCLR 2,FLAGS4 BRCLR 1,PTD,PMODP1 ;PULS MODO 208 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 BRSET 0,PTD,DISPP1 MSTP1: LDX #$40 BRSET 0,PTD,DISPP1 ;PULSADOR START-STOP LDA POSM JSR DELB CBEQA #2,DWN1 DBNZX MSTP1 LDA DATO+1 ;DISMINU PARA TEMP JMP FINPR ;FIN PROGRAM PARAM SUB #5 PUPPR1: LDX #$40 ;PULS ARRIBA STA DATO+1 MUPPR1: BRSET 5,PTD,DISPP1 LDA POSM JSR DELB CMP #3 DBNZX MUPPR1 BNE DWN5 LDA POSM LDA DATO+1 CBEQA #2,UP1 SUB #5 LDA DATO+1 ;AUMENT PARA TEMP STA DATO+1 ADD #5 BRA DWN5 STA DATO+1 DWN1: DEC DATO+1 LDA POSM DWN5: JSR DELAY CMP #3 WDWNP1: JSR DISPL BNE UP5 BRCLR 6,PTD,WDWNP1 LDA DATO+1 JDPP1: ADD #5 PMODP1: LDX #$40 STA DATO+1 MMODP1: BRSET 1,PTD,JDPP1 BRA UP5 JMP DISPP1 ;PULS MOD JSR DELB UP1: INC DATO+1 DBNZX MMODP1 UP5: JSR DELAY LDA DATO+1 ;GRABA PARAM TEMP WUPPR1: JSR DISPL JSR IPROG BRCLR 5,PTD,WUPPR1 LDA CONSIG+1 BRA DISPP1 ADD #$A PDWNP1: LDX #$40 ;PULS ABAJO STA CONSIG+1 MDWNP1: BRSET 6,PTD,DISPP1 LDA POSM JSR DELB CBEQA #6,FDPP1 DBNZX MDWNP1 JSR READ 209 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 STA DATO+1 JSR DELAY WMODP1: JSR DISPL STA DATO+1 BRCLR 1,PTD,WMODP1 LDA DATO JMP DISPP1 ADC #0 FDPP1: JSR READ STA DATO STA DATO JSR DELAY JSR IREAD WUPPRC: JSR DISPL STA DATO+1 BRCLR 5,PTD,WUPPRC JSR DELAY BRA DISPPC WFDPPC: JSR DISPL PDWNPC: LDX #$40 BRCLR 1,PTD,WFDPPC ;PULS ABAJO MDWNPC: BRSET 6,PTD,DISPPC DISPPC: JSR DISPL JSR DELB BRCLR 5,PTD,PUPPRC ;PULS ARRIBA DBNZX MDWNPC BRCLR 6,PTD,PDWNPC ;PULS ABAJO LDA DATO+1 ;DISMINU PARA TEMP BRCLR 1,PTD,PMODPC ;PULS MOD SUB #1 BRSET 0,PTD,DISPPC STA DATO+1 LDX #$40 LDA DATO MSTPC: ;PULSADOR START-STOP BRSET 0,PTD,DISPPC SBC #0 JSR DELB STA DATO DBNZX MSTPC JSR DELAY JMP FINPR ;FIN PROGRAM PARAM PUPPRC: LDX #$40 WDWNPC: JSR DISPL ;PULS ARRIBA BRCLR 6,PTD,WDWNPC MUPPRC: BRSET 5,PTD,DISPPC BRA DISPPC JSR DELB PMODPC: LDX #$40 DBNZX MUPPRC MMODPC: BRSET 1,PTD,DISPPC LDA DATO+1 ;+ PARAM TEMP JSR DELB ADD #1 DBNZX MMODPC JSR IPROG DEC POSM LDA DATO+1 LDA DATO ;GRABAR PARAM TEMP JSR IPROG 210 ;PULS MOD MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 LDA CONSIG+1 INC MIN ADD #$A JSR DELAY STA CONSIG+1 JSR READ ;AUMENTAR PARAM T NOIVER: JSR DISPL ;FIN PARAM TEMP BRSET 5,PTD,DISPP2 STA MIN JSR DELAY MOV #0,HORA BRA MIPT1 BSET 6,FLAGS2 PDWNP2: LDX #$40 JSR DELAY MDWNP2: BRSET 6,PTD,DISPP2 WFDPP1: JSR DISPL ;PULS ABAJO JSR DELB BRCLR 1,PTD,WFDPP1 DBNZX MDWNP2 DISPP2: JSR DISPL MDPT1: LDA POSM BRCLR 5,PTD,PUPPR2 ;PULS ARRIBA CBEQA #$10,NODVER BRCLR 6,PTD,PDWNP2 ;PULS ABAJO DEC MIN BRCLR 1,PTD,PMODP2 ;PULS MOD JSR DELAY BRSET 0,PTD,DISPP2 LDX #$40 MSTP2: ;DISMINUPARAM T NODVER: JSR DISPL ;PULSADOR START-STOP BRSET 6,PTD,DISPP2 BRSET 0,PTD,DISPP2 JSR DELAY JSR DELB BRA MDPT1 DBNZX MSTP2 PMODP2: LDX #$40 JMP FINPR ;FIN PROGRAM PARAM MMODP2: BRSET 1,PTD,DISPP2 PUPPR2: LDX #$40 ;PULS ARRIBA ;PULS MOD JSR DELB MUPPR2: BRSET 5,PTD,DISPP2 DBNZX MMODP2 JSR DELB LDA POSM DBNZX MUPPR2 CBEQA #AP16,WKEY MIPT1: LDA POSM LDA MIN ;GRABAR PARAM T CMP #$10 JSR IPROG BEQ NOIVER LDA CONSIG+1 ADD #$A STA MIN STA CONSIG+1 JSR DELAY JSR READ WMODP2: JSR DISPL 211 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 BRCLR 1,PTD,WMODP2 MSTP3: JMP DISPP2 WKEY: JSR DELB LDA MIN DBNZX MSTP3 CBEQA #$D,FDPP2 ;CLAV CORREC BRA FINPR JMP FINPR ;NO,FIN PROGRAM FDPP2: BRSET 0,PTD,DISPP3 ;FIN PROGRAM PARAM PUPPR3: LDX #$40 JSR IREAD ;PULS ARRIBA MUPPR3: BRSET 5,PTD,DISPP3 STA MIN JSR DELB MOV #1,CONSIG DBNZX MUPPR3 MOV #$F4,CONSIG+1 INC MIN WFDPP2: JSR DISPL ;AUMENTAR CONF JSR DELAY BRCLR 1,PTD,WFDPP2 WUPPR3: JSR DISPL DISPP3: JSR DISPL BRCLR 5,PTD,WUPPR3 BRCLR 5,PTD,PUPPR3 ;PULS ARRIBA BRA DISPP3 BRCLR 6,PTD,PDWNP3 ;PULS ABAJO PDWNP3: LDX #$40 BRCLR 1,PTD,PMODP3 ;PULS MOD MDWNP3: BRSET 6,PTD,DISPP3 BRSET 0,PTD,DISPP3 LDX #$40 ;PULS ABAJO JSR DELB ;PULSADOR START-STOP DBNZX MDWNP3 CBEQA #$BC,FINPR DEC MIN JSR IREAD ;DISMINUIR CONF JSR DELAY STA MIN WDWNP3: JSR DISPL LDA CONSIG+1 BRCLR 6,PTD,WDWNP3 ADD #$64 BRA DISPP3 STA CONSIG+1 PMODP3: LDX #$40 ;PULS MOD LDA CONSIG MMODP3: BRSET 1,PTD,DISPP3 ADC #0 JSR DELB STA CONSIG DBNZX MMODP3 WMODP3: JSR DISPL LDA MIN JSR PROG BRCLR 1,PTD,WMODP3 ;GRABAR CONF BRA DISPP3 LDA CONSIG+1 FINPR: 212 BCLR 5,FLAGS2 ;FIN PROG PARAM MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 LDHX #$260 JSR PROG TXS RTS LDHX #0 NULLD: JMP FINPRG NULLP: PSHA BSR WDIAP PSHA PULA BSR WHORAP JSR IPROG PULA JSR IPROG JSR IPROG JSR IPROG JSR IPROG JSR READ JSR IPROG STA HORAP JSR IPROG JSR IREAD JSR IPROG STA MINP JSR IPROG RTS JSR IPROG PRGHR: BSR WHORAP ;GRAB H PROGRA JSR PROG LDA HORAP RTS JSR IPROG RHORAP: BSR WHORAP;LEE H PROGRAM LDA MINP JSR PROG ASLA RTS ASLA WHORAP: BSR WDIAP ADD DATO LDA PERP ADD POSM DECA STA POSM ASLA RTS ADD POSM WPER: JSR RWDOG STA POSM MOV #0,DATO ;VER PERIO ACTUAL RTS MOV #0,DATO+1 WDIAP: MOV #AMOM1,POSM MOV #0,DATO+3 LDA DIAP MOV #0,PER ASLA LDA DOWR STA DATO STA DIA 213 ;TOMA DIA SEMAN MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 JSR MDIA10 BRA MRPER1 MRPER1: JSR READ ;LEER PROGRAM WPERM1: CMP DATO CMP #$AA BEQ NOPPR BLO NOPPR ;NO HAY PROGRAM BEQ WMIN1 CMP HRR GRBP1: STA DATO BLO WPERM1 JSR IREAD BNE NOPPR STA DATO+1 JSR IREAD GRPER: LDA PER CMP MINR STA DATO+2 BLS WPERM2 MOV #$FF,DATO+3 DEC POSM DEC POSM NOPPR: LDA PER BRA NOPPR CMP #4 WPERM2: DEC POSM BEQ WFPER1 JSR READ INC POSM CMP DATO INC POSM BLO NOPPR INC PER BNE GRBP1 WMIN1: PSHA LDA DOWR JSR IREAD MCPER: CBEQA #0,FWEEK CMP DATO+1 DECA BHI GRBP2 BRA NFWEEK PULA FWEEK: LDA #6 DEC POSM NFWEEK: STA DIA BRA NOPPR GRBP2: ;VE PROGRA DIA ANTE MOV #0,PER STA DATO+1 JSR MDIA10 PULA MRPER2: JSR READ STA DATO CMP #$AA BRA GRPER BEQ NOPD WFPER1: LDA DATO+3 CMP DATO BNE RCPER BHI WPERM3 214 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 BNE NOPD MOV #$FF,DATO+3 JSR IREAD DEC POSM CMP DATO+1 BRA NOPD BHS WPERM4 WPERM4: STA DATO+1 DEC POSM NOPD: DEC POSM LDA PER JSR READ CMP #4 STA DATO BEQ WFPER2 INC POSM INC POSM BRA GRPND INC POSM WFPER2: LDA DATO+3 INC PER BNE RCPER BRA MRPER2 LDA DIA WPERM3: STA DATO CMP DOWR JSR IREAD BNE MCPER STA DATO+1 MOV #$FF,DATO+2 GRPND: LDA PER RCPER: LDA DATO+2 STA DATO+2 STA PER INC PER BHI WPERM5 NEXTPR: JSR RWDOG BNE NONPR MOV #$17,DATO ;VE PROX PROGRA JSR IREAD MOV #$3B,DATO+1 CMP MINR MOV #0,DATO+3 BHS WPERM6 MOV #0,PRPER DEC POSM LDA DOWR ;TOMA DIA SEMAN NONPR: LDA PRPER STA DIA CMP #4 JSR MDIA10 BEQ WFPER3 MRPER3: JSR READ ;LEER PROGRAM INC POSM CMP #$AA BEQ NONPR INC POSM ;NO HAY PROGRAM INC PRPER CMP HRR BRA MRPER3 215 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 WPERM5: CMP DATO JSR IREAD BHI NONPR CMP DATO+1 BEQ WMIN2 BLO GRBP4 GRBP3: STA DATO PULA JSR IREAD DEC POSM STA DATO+1 BRA NONPR GRNPER: LDA PRPER GRBP4: STA DATO+1 STA DATO+2 PULA MOV #$FF,DATO+3 STA DATO DEC POSM BRA GRNPER BRA NONPR WFPER3: LDA DATO+3 WPERM6: DEC POSM BNE RCPERP JSR READ LDA DOWR ;VE PROGRAM DIA SIG CMP DATO MCPERP: CBEQA #6,PWEEK BHI NONPR INCA BNE GRBP3 BRA NPWEEK WMIN2: PSHA NPWEEK: STA DIA PWEEK: LDA #0 NOPDD: LDA PRPER MOV #0,PRPER CMP #4 JSR MDIA10 BEQ WFPER4 MRPER4: JSR READ INC POSM CMP #$AA INC POSM BEQ NOPDD INC PRPER CMP DATO BRA MRPER4 BLO WPERM7 WPERM7: STA DATO BNE NOPDD JSR IREAD JSR IREAD STA DATO+1 CMP DATO+1 GRPNDD: LDA PRPER BLS WPERM8 STA DATO+2 DEC POSM MOV #$FF,DATO+3 216 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 DEC POSM LDA DIA BRA NOPDD STA PRDIA WPERM8: STA DATO+1 JSR MDIA10 DEC POSM ADD PRPER JSR READ ADD PRPER STA DATO DECA INC POSM DECA BRA GRPNDD STA POSM WFPER4: LDA DATO+3 JSR READ BNE RCPERP STA ALHR ;PONER PROX PROGRAM. N ALARMA RTC LDA DIA JSR IREAD CMP DOWR STA ALMR BNE MCPERP MOV #0,FLPR MOV #$FF,DATO+2 MOV #AMOM1,POSM RCPERP: LDA DATO+2 STA PRPER INC PRPER MWPOD: LDX #0 MWPRD: JSR READ CMP #$AA BNE SIPRD BEQ MWPOD INC POSM MIPOSM: INC POSM INCX INCX CPX #$A CPX #$A BNE MWPRD BNE MIPOSM CLC LDA POSM BRA NOPRD CBEQA #$6C,FWPRD SIPRD: NOPRD: SEC BRA MWPOD ROR FLPR FWPRD: LDA POSM LSR FLPR RTS CBEQA #$6C,FWPRD STORE:MOV#ADATA,POSM; GUARDA EN EEPROM CPX #$A LDX #0 217 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 MSTORE: LDA FLAGS1,X LDA DATAD3,X JSR IPROG AND #$E INCX STA DIG CPX #$C LDA SEGD BNE MSTORE TAX MOV #ADATAC,POSM LDA LCDDAT,X LDA MODO AND #$F1 JSR IPROG ORA DIG LDA CONSIG STA LCDDAT,X JSR IPROG PULA LDA CONSIG+1 TAX JSR PROG LDA DATAD3,X RTS AND #$F0 DIG1: TAX ;ESCRITURA EN DISPLAY DIGITOS CONSIGNA STA DIG LDA SEGD LDA DATAD1,X ;DATO EN A MDIG: TAX STA DIG DECX LDA SEGD LDA LCDDAT,X TAX AND #$F LDA LCDDAT,X ORA DIG AND #$10 STA LCDDAT,X ORA DIG RTS STA LCDDAT,X DPMH: RTS BNE SIDT1 DIG2: TAX ;ESCR.EN DISPLAY 2 DIGITOS MSB MEDIDA JMP NODT SIDT1: LDA DATAD2,X ;DATO EN A ;SI ;NO BRSET 6,FLAGS2,SIDT2 ;T DISPLAY? JMP NODT BRA MDIG ;NO SIDT2: BRCLR 5,FLAGS2,SIDT3 ;SI,PRG PRM? DIG3: PSHA ;ESCR.EN DISPLAY 2 DIGITOS LSB MEDIDA TAX LDA CONF2 ;CONTR PROGRAM? JMP DPART ;DATO EN A SIDT3: 218 ;SI BRSET 6,FLAGS1,DHP ;PROGRAM? MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 BRCLR 2,FLAGS2,NDBLKH INC SEGD BRCLR 5,PTD,NDBLKH LDA #$A BRCLR 6,PTD,NDBLKH JSR DIG2 LDA CRINT DPMIN: BSET 7,LCDDAT+9 BEQ NDBLKH BRSET 6,FLAGS1,DMP ;PROGRAM? JMP DPBLK MOV #0,BIN ;NO NDBLKH: MOV #0,BIN ;NO MOV MINR,BIN+1 MOV HRR,BIN+1 BRA DPMN BRA DPHR DHP: DMP: BRCLR 2,FLAGS2,NDBLK LDA MINP CBEQA #$AA,DPNOM BRCLR 5,PTD,NDBLK MOV #0,BIN BRCLR 6,PTD,NDBLK MOV MINP,BIN+1 LDA CRINT DPMN: JSR BINDEC BEQ NDBLK MOV #6,SEGD JMP DPBLK LDA DECIM+2 NDBLK: LDA HORAP JSR DIG3 ;ESCRIBIR MIN CBEQA #$AA,DPNOH INC SEGD MOV #0,BIN LDA DECIM+3 MOV HORAP,BIN+1 JSR DIG3 DPHR: JSR BINDEC JMP FDPMH MOV #1,SEGD DPNOM: MOV #6,SEGD LDA DECIM+2 LDA #$F JSR DIG2 JSR DIG3 ;ESCRIBIR H INC SEGD INC SEGD LDA DECIM+3 LDA #$F JSR DIG2 JSR DIG3 BRA DPMIN JMP FDPMH DPNOH: MOV #1,SEGD DPART: MOV HORA,BIN LDA #$A MOV MIN,BIN+1 JSR DIG2 JSR BINDEC 219 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 MOV #1,SEGD AND #$F1 LDA DECIM STA LCDDAT+7 JSR DIG2 RTS INC SEGD NODT: BRSET 5,FLAGS2,DPARM ;PROGRA PARAM? LDA DECIM+1 LDA MEDD JSR DIG2 CBEQA #3,FMED BCLR 7,LCDDAT+9 CMP #$FF BCLR 6,LCDDAT+9 BNE NFMED MOV #6,SEGD LDA MEDD+1 LDA DECIM+2 CMP #$80 JSR DIG3 BCS FMED INC SEGD NFMED: LDA DECIM+3 MOV MEDD+1,BIN+1 JSR DIG3 BRA YADPM RTS DPBLK: MOV MEDD,BIN ;NO,MED N DPLY FMED: LDA LCDDAT+1 MOV #$A,DECIM+1 MOV #$A,DECIM+2 AND #$10 MOV #$F,DECIM+3 STA LCDDAT+1 BRA DFMED LDA LCDDAT+2 DPARM: AND #$10 BRCLR 6,FLAGS2,SIDPM BRA DPART STA LCDDAT+2 SIDPM: BCLR 7,LCDDAT+9 LDA DATO PSHA BCLR 6,LCDDAT+9 LDA DATO+1 LDA LCDDAT+5 PSHA AND #$F LDA POSM STA LCDDAT+5 CMP #2 LDA LCDDAT+6 BNE NMUL10 AND #1 JSR MUL10 STA LCDDAT+6 NMUL10: MOV DATO,BIN LDA LCDDAT+7 220 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 MOV DATO+1,BIN+1 FDPMH: PULA BSET 6,LCDDAT+9 RTS STA DATO+1 DOMED: BSET 6,LCDDAT+6 PULA BSET 5,LCDDAT+6 STA DATO LDA NMED YADPM: JSR BINDEC CBEQA #2,NDS1 DFMED: MOV #1,SEGD BSET 4,LCDDAT+6 LDA DECIM+1 BRA SDS1 JSR DIG2 NDS1: INC SEGD SDS1: BCLR 4,LCDDAT+6 LDA NMED LDA DECIM+2 CMP #3 JSR DIG2 BCC NDS2 BCLR 7,LCDDAT+9 BSET 2,LCDDAT+7 MOV #6,SEGD BRA SDS2 LDA DECIM+3 NDS2: JSR DIG3 SDS2: BCLR 2,LCDDAT+7 LDA NMED BRCLR 4,FLAGS1,SDTRI CMP #4 LDA NMED BNE NDS3 BNE DOMED BSET 1,LCDDAT+7 SDTRI: LDA LCDDAT+6 BCLR 7,LCDDAT+6 AND #$F BRA SDS3 STA LCDDAT+6 NDS3: LDA LCDDAT+7 BCLR 1,LCDDAT+7 BSET 7,LCDDAT+6 AND #$F3 SDS3: LDA NMED STA LCDDAT+7 CBEQA #2,SDS4 BRCLR 4,FLAGS1,NODI CMP #4 BRSET 5,FLAGS2,NODI BNE NDS4 BSET 1,LCDDAT+7 SDS4: BRA FDPMH NODI: BSET 3,LCDDAT+7 BRA YDS4 BCLR 1,LCDDAT+7 NDS4: 221 BCLR 3,LCDDAT+7 MEMORIA VI. Código fuente YDS4: Capítulo 1. Código de la tarjeta TX98 LDA NMED JSR IREAD CMP #3 STA CONSP+1 BCS FDPMH STA REG14+1 BCLR 6,LCDDAT+9 MOV #AP07,POSM RTS JSR READ RPAR: MOV #0,POSM STA TDON JSR READ STA REG15 STA HISTEP JSR IREAD STA REG11 STA TDOFF JSR IREAD STA REG15+1 STA ZM LDA #0 STA REG11+1 STA REG16 JSR IREAD MOV #AP10,POSM STA DATO+1 JSR READ STA REG12 STA FMOD MOV #0,DATO STA REG16+1 JSR MUL10 MOV #AP11,POSM MOV DATO,TLIMF JSR READ MOV DATO+1,TLIMF+1 STA BP JSR IREAD STA REG17 STA REG12+1 JSR IREAD JSR IREAD STA TI STA DIFET STA REG17+1 STA REG13 JSR IREAD LDA #0 STA REG18 STA REG13+1 TAX MOV #AP06,POSM LDA #$A JSR READ MUL STA CONSP STA TREL STA REG14 JSR IREAD 222 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 STA BPP BSET 7,CODE ;CODIGO INCORRECTO STA REG18+1 LDA #1 LDA VERS STA CODERR STA REG19 JMP TRERR RTS CODEOK: LDA DIRDAT TRANS: JSR RWDOG TRANSMISION SERIE ;RUTINA BEQ SIEDIR CMP #$38 BRSET 6,FLAGS3,SITR ;HA HABIDO RECEPCION DE DATOS? RTS SITR: BCS DIROK SIEDIR: BSET 7,CODE ;ERROR DIREC DAT ;NO BCLR 6,FLAGS3 LDA #2 ;SI MOV #0,IBUF STA CODERR LDA #$FF JMP TRERR DIROK: STA CRC LDA FFILT BEQ NOFST STA CRC+1 LDA ERRCRC ;ERROR DE CRC? LDA REG2+1 BEQ NOECRC ;NO ORA #$80 BRA SIFST LDA #0 STA ERRCRC NOFST: ;SI LDA REG2+1 AND #$7F RTS SIFST: NOECRC: JSR DELAY STA REG2+1 BCLR 5,SCC2 ;QUITA INTERRU RECEP JSR TRINIT BCLR 2,SCC2 ;NO PERM RECEPCIO LDA CODE BSET 3,SCC2 ;PERM TRANSMISION CBEQA #$10,SIWR LDA SCS1 LDA NDAT BSET 2,PTB ;PON ENABLE TRANSMI ASLA JSR DELAY STA SCDR LDA CODE JSR CRCCAL WAIT0: CBEQA #4,CODEOK ;LECTURA REG ;TRANSMITIR Nº BYTES JSR RWDOG BRCLR 7,SCS1,WAIT0 CBEQA #$10,CODEOK LDA DIRDAT 223 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 DECA BRCLR 7,SCS1,WAIT4 ASLA LDA #0 TAX STA SCDR MTRDAT: LDA REG1,X STA SCDR JSR CRCCAL ;TRANSM PRIME BYTE WAIT5: JSR CRCCAL WAIT1: JSR RWDOG BRCLR 7,SCS1,WAIT5 JSR RWDOG LDA NDATW BRCLR 7,SCS1,WAIT1 STA SCDR INCX JSR CRCCAL LDA REG1,X STA SCDR WAIT6: ;TRANSMI SEGUN BYTE BRCLR 7,SCS1,WAIT6 JSR CRCCAL WAIT2: JSR RWDOG BRA TRCRC JSR RWDOG TRERR: JSR TRINIT BRCLR 7,SCS1,WAIT2 LDA CODERR INCX STA SCDR LDA NDAT JSR CRCCAL DECA WAIT7: STA NDAT ;FINAL TRANSMI DATS? JSR RWDOG BRCLR 7,SCS1,WAIT7 BNE MTRDAT ;NO,SEGUIR TRCRC: LDHX #0 LDA CRC+1 STA SCDR JMP TRCRC ;SI,TRANSMITIR CRC SIWR: LDA #0 WAIT8: ;ESCRITURA ;TRANSMITIR CRC JSR RWDOG BRCLR 7,SCS1,WAIT8 STA SCDR LDA CRC JSR CRCCAL STA SCDR WAIT3: ;TRANSMIT COD ERROR JSR RWDOG WAIT9: JSR RWDOG BRCLR 7,SCS1,WAIT3 BRCLR 7,SCS1,WAIT9 LDA DIRDAT JSR DELAY STA SCDR BCLR 2,PTB ;QUIT ENABLE TRANSM ;TRANSM DIREC DATO JSR CRCCAL WAIT4: JSR DELAY JSR RWDOG BCLR 3,SCC2 ;NO PERM TRANSMI 224 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 BSET 2,SCC2 ;PERMISO RECEP STA MODO BSET 5,SCC2 ;ENAB INTERRUP RECEP BSET 3,FLAGS1 LDA #$FF LDA REG2+1 STA CRC AND #1 STA CRC+1 STA BIN LDA CODE LDA MANDO CBEQA #$10,YAWR AND #$FE RTS ORA BIN YAWR: LDA DIRDAT STA MANDO DECA BRCLR 0,MANDO,ONORD ASLA BSET 0,FLAGS3 TAX BRA OFFORD LDA DAT1R ONORD: STA REG1,X OFFORD: JSR STORE INCX FWR: BCLR 0,FLAGS3 RTS LDA DAT2R NCHMOD: CMP #4 STA REG1,X BNE NCHCON LDA NDATW LDA REG4 DECA STA CONSIG BEQ FWR LDA REG4+1 INCX STA CONSIG+1 LDA DAT3R JSR STORE STA REG1,X NCHREG: RTS INCX NCHCON: CMP #9 LDA DAT4R BCS NCHREG STA REG1,X CMP #$10 LDA DIRDAT BCC NCHPAR CMP #2 CMP #$D BNE NCHMOD BEQ NCHREG LDA REG2 SUB #9 225 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 ASLA BRCLR 7,SCS1,WAITB STA POSM RTS LDA DIRDAT MUL10: ASL DATO+1 DECA LDA DATO+1 ASLA STA BIN+1 TAX ROL DATO LDA REG1,X LDA DATO JSR IPROG STA BIN INCX ASL DATO+1 LDA REG1,X ROL DATO JSR IPROG ASL DATO+1 INCX ROL DATO LDA REG1,X LDA DATO+1 JSR IPROG ADD BIN+1 INCX STA DATO+1 LDA REG1,X LDA DATO JSR PROG ADC BIN JSR RPAR STA DATO RTS RTS NCHPAR: NOP ;CAM PROGRAM MULDIV: MOV #0,PRDT RTS ASL PRDT+2 TRINIT: LDA DIR STA SCDR ;INI TRANSM ROL PRDT+1 ;TRANSMITIR DIREC ROL PRDT JSR CRCCAL WAITA: ASL PRDT+2 JSR RWDOG ROL PRDT+1 BRCLR 7,SCS1,WAITA ROL PRDT LDA CODE LDA PRDT+2 STA SCDR ;TRANS CODIGO STA MEM+5 JSR CRCCAL WAITB: LDA PRDT+1 JSR RWDOG STA MEM+4 226 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 LDA PRDT ADD MEM+5 STA MEM+3 STA PRDT+2 ASL PRDT+2 LDA PRDT+1 ROL PRDT+1 ADC MEM+4 ROL PRDT STA PRDT+1 ASL PRDT+2 LDA PRDT ROL PRDT+1 ADC MEM+3 ROL PRDT STA PRDT ASL PRDT+2 LDA #0 ROL PRDT+1 STA RESUL ROL PRDT STA RESUL+1 LDA PRDT+2 STA RESUL+2 STA MEM+2 LDX #$11 LDA PRDT+1 CMPD: LDA PRDT STA MEM+1 CMP BIN LDA PRDT BCC COC1 STA MEM ASL RESUL+2 ASL PRDT+2 ROL RESUL+1 ROL PRDT+1 ROL RESUL ROL PRDT BRA YACOC LDA PRDT+2 COC1: SEC ADD MEM+2 ROL RESUL+2 STA PRDT+2 ROL RESUL+1 LDA PRDT+1 ROL RESUL ADC MEM+1 LDA PRDT STA PRDT+1 SUB BIN LDA PRDT STA PRDT ADC MEM YACOC: DECX STA PRDT ASL PRDT+2 LDA PRDT+2 ROL PRDT+1 227 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 ROL PRDT SBC #3 BCS WFINDI STA BIN CPX #0 BCS YADIG1 BEQ FINDI INC DECIM BRA CMPD BRA MDIG1 WFINDI: CPX #0 YADIG1: LDA BIN+1 BNE COC1 FINDI: ADD #$E8 RTS STA BIN+1 BINDEC: MOV #0,DECIM ;PASA BIN EN BIN Y BIN+1 MOV #0,DECIM+1 LDA BIN ADC #3 ;A 4 DIG DECI STA BIN MOV #0,DECIM+2 ;EN DECIM,DECIM+1,DECIM+2 Y DECIM+3 MDIG2: LDA BIN+1 LDA #0 SUB #$64 STA FNEG STA BIN+1 BRCLR 7,BIN,MDIG1 LDA BIN COM BIN+1 SBC #0 COM BIN STA BIN LDA BIN+1 BCS YADIG2 ADD #1 INC DECIM+1 STA BIN+1 BRA MDIG2 LDA BIN YADIG2: LDA BIN+1 ADC #0 ADD #$64 STA BIN STA BIN+1 MDIG3: LDA #$FF SUB #$A STA FNEG MDIG1: LDA BIN+1 STA BIN+1 LDA BIN+1 SUB #$E8 BCS YADIG3 STA BIN+1 INC DECIM+2 LDA BIN BRA MDIG3 YADIG3: LDA BIN+1 228 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 ADD #$A MOV CONSIG+1,DATOFC STA DECIM+3 JSR SDATO LDA FNEG MOV TRET,DATOFC BEQ FINBD ASL DATOFC MOV #$A,DECIM+1 ASL DATOFC FINBD: RTS ASL DATOFC ASKFC: LDX #$10 ASL DATOFC MWAFC: BRCLR 2,PTA,SAFCR ASL DATOFC JSR DELB LDX #3 DBNZX MWAFC JSR MSD JMP NASFCR MOV TRET+1,DATOFC SAFCR: LDA MANDO JSR SDATO STA MANDFA MOV VEL,DATOFC JSR STTR JSR SDATO ;ENVIA DAT A FREE-COOL JSR SEND0I ;CODIGO:0-1 JSR SENDF JSR SEND1I BCLR 5,FLAGS4 ;RESP FREE-COOLING MOV MANDO,DATOFC LDX #2 LDA FLIM MRFC1: JSR RDATO BEQ NOLIM DBNZX MRFC1 BCLR 3,DATOFC BRCLR 5,FLAGS4,SIAFC BCLR 4,DATOFC NOLIM: JNOAFC: JMP NOAFC JSR SDATO SIAFC: LDA DATOR MOV CONSIG,DATOFC AND #3 ASL DATOFC CMP #1 ASL DATOFC BNE JNOAFC ASL DATOFC LDX #8 ASL DATOFC MRFC2: JSR RDATO ;RECI MAND ASL DATOFC DBNZX MRFC2 LDX #3 BRSET 5,FLAGS4,JNOAFC JSR MSD LDA DATOR 229 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 STA MANDO MRFC6: JSR RDATO AND #$80 DBNZX MRFC6 BEQ NOFS LDA DATOR LDA #$FF STA DECIM+3 BRA SIFS LDX #8 NOFS: SIFS: LDA #0 MRFC7: JSR RDATO ;REC APER COMPUE STA FFILT DBNZX MRFC7 LDX #3 MRFC3: JSR RDATO LDA DATOR ;RECIB TEMP.EXT STA REG9+1 DBNZX MRFC3 MOV #0,DECIM+1 BRSET 2,DATOR,TEXTN ASL DECIM+3 LDA DATOR ROL DECIM+2 AND #7 ASL DECIM+3 STA REG7 ROL DECIM+2 BRA TEXTP ASL DECIM+3 TEXTN: LDA DATOR ROL DECIM+2 ORA #$F8 LDA DECIM+3 STA REG7 STA MEM+3 TEXTP: LDX #8 ;x2 ;x4 ;x8 LDA DECIM+2 MRFC4: JSR RDATO STA MEM+2 DBNZX MRFC4 ASL DECIM+3 LDA DATOR ROL DECIM+2 STA REG7+1 LDA DECIM+3 LDX #3 STA MEM+1 MRFC5: JSR RDATO ;RECI PRESION ;x16 LDA DECIM+2 DBNZX MRFC5 STA MEM LDA DATOR ASL DECIM+3 AND #3 ROL DECIM+2 STA DECIM+2 ASL DECIM+3 LDX #8 ROL DECIM+2 230 ;x32 MEMORIA VI. Código fuente ROL DECIM+1 Capítulo 1. Código de la tarjeta TX98 ;x64 STA DECIM+1 ASL DECIM+3 LSR DECIM+1 ROL DECIM+2 ROR DECIM+2 ROL DECIM+1 ;x128 LSR DECIM+1 ASL DECIM+3 ROR DECIM+2 ROL DECIM+2 LDA DECIM+1 ROL DECIM+1 ;x256 STA REG8 ASL DECIM+3 LDA DECIM+2 ROL DECIM+2 STA REG8+1 ROL DECIM+1 ;x512 LDA MANDO ASL DECIM+3 AND #$18 ROL DECIM+2 CBEQA #$18,NOAFC ROL DECIM+1 ;x1024 CBEQA #8,INMP LDA DECIM+3 GMF: LDA MANDO SUB MEM+3 STA MANDOF STA DECIM+3 BRA WFACT LDA DECIM+2 INMP: LDA MANDOF SBC MEM+2 AND #$18 STA DECIM+2 BNE GMF LDA DECIM+1 MOV #2,TOI SBC #0 BRA GMF STA DECIM+1 NOAFC: BSET 5,FLAGS4 LDA DECIM+3 WFACT: LDA FLIM SUB MEM+1 BNE NOACTF STA DECIM+3 LDA MANDO LDA DECIM+2 CMP MANDFA SBC MEM BEQ NOACTF STA DECIM+2 LDA #$FF LDA DECIM+1 STA FCACT SBC #0 RTS 231 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 NOACTF: LDA #0 MSD: STA FCACT ASL DATOFC BCC S0D NASFCR: RTS JSR SEND1I STTR:MOV#$64,TSEND ;TRANSM50 MSEG.ON BRA S1D BSR SEND S0D: JSR SEND0I BSR TSP S1D: DBNZX MSD JSR RWDOG ;WATCH-DOG RTS RTS TSP: RDATO: MOV #$C,TSEND WSP: MOV #$64,TSEG ;RECEP UN BIT WDATO1: BRSET 2,PTA,YADAT1 ;3* LDA TSEND LDA TSEG BNE WSP BNE WDATO1 RTS BRA NODATO SENDF: BSR SEND1I SEND0: MOV #4,TSEND YADAT1: MOV #0,TANS BSET 4,FLAGS4 BRA SEND SEND1: MOV #$C,TSEND SEND: BSET 1,PTA WSEND: MOV #$64,TSEG WDATO2: BRCLR 2,PTA,YADAT2 ;3* LDA TSEG LDA TSEND BNE WDATO2 BNE WSEND BRA NODATO BCLR 1,PTA YADAT2: BCLR 4,FLAGS4 JSR RWDOG ;WATCH-DOG LDA #1 RTS CMP TANS SEND0I: BSR SEND0 BCC WDATO1 BSR TSP LDA #8 RTS CMP TANS SND1I2: BSR SEND1I ROL DATOR SEND1I: BSR SEND1 RTS BSR TSP NODATO: JSR RWDOG ;NO RECEP RTS SDATO: BSET 5,FLAGS4 ;ERROR LDX #8 RTS 232 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 CRCCAL: PSHA BSR PRDAT ;ENVIAR DATO EN A PSHX BSR STPI2C ;STOP EOR CRC+1 JSR DELAY ;RETARDO STA CRC+1 LDA ERRPRM LDX #8 BNE MPROGM MCRC: LSR CRC BSET 4,PTC ROR CRC+1 PULA BCC NOCAR PULX LDA #$A0 RTS EOR CRC IREAD: INC POSM STA CRC READ: PSHA LDA #1 JSR RWDOG EOR CRC+1 MREADM: LDA #0 STA CRC+1 NOCAR: ;LECT MEM EEPROM STA ERRPRM DBNZX MCRC PULA PULX PSHX PULA BSR SENDAD ;ENVIAR DIRECPOSM RTS BSR STRI2C ;START IPROG: BSR PROG LDA #$A1 INC POSM BSR PRDAT ;ENVIA DIREC DEVICE RTS JSR DATAR ;TOMAR DATO EN A PROG: PSHX ;ESCRIT MEM EEPROM BSR STPI2C ;STOP PSHA PULX BCLR 4,PTC PSHA JSR RWDOG ;WATCH-DOG LDA ERRPRM MPROGM: LDA #0 BNE MREADM STA ERRPRM PULA BSR SENDAD ;ENVIAR DIREC POSM RTS PULA SENDAD: BSR STRI2C ;START PSHA LDA #$A0 233 MEMORIA VI. Código fuente BSR PRDAT Capítulo 1. Código de la tarjeta TX98 ;DIREC DEVICE BSET 4,PTB LDA POSM BSR PRDAT JSR DRWDOG ;ENVIAR DIREC BRCLR 5,PTB,NACKEP RTS JSR DRWDOG STRI2C: BSET 5,PTB ;START BUS I2C BRCLR 5,PTB,NACKEP JSR DELI2C JSR DRWDOG BSET 4,PTB BRCLR 5,PTB,NACKEP JSR DELI2C JSR DRWDOG BCLR 5,PTB BRCLR 5,PTB,NACKEP JSR DELI2C JSR DRWDOG BCLR 4,PTB BRCLR 5,PTB,NACKEP JSR DELI2C JSR DRWDOG RTS LDA #$FF STPI2C: BCLR 5,PTB ;STOP BUS I2C STA ERRPRM JSR DELI2C NACKEP: BCLR 4,PTB BSET 4,PTB BSET 5,DDRB JSR DELI2C JSR DELI2C BSET 5,PTB RTS JSR DELI2C DATAR: I2C RTS PRDAT: LDX #8 MPROG: ASLA LDX #8 ;ENVIA DATO BUS I2C MREAD: JSR DELI2C BCLR 5,PTB BRSET 5,PTB,DATA1 BRA DAT0 BSET 5,PTB DAT0: BSR MEMCLK JSR DELI2C BSET 4,PTB BCS DAT1 DAT1: BCLR 5,DDRB ;LEER DATO BUS CLC BRA DATA0 DBNZX MPROG BCLR 5,DDRB ;ACKNOWLEDGE DATA1: SEC DATA0: ROLA BCLR 4,PTB JSR DELI2C 234 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 DBNZX MREAD NOP BSET 5,DDRB NOP BSET 5,PTB NOP BSR MEMCLK NOP RTS NOP MEMCLK: JSR DELI2C ;CLOCK BUS I2C BCLR 5,PTC BSET 4,PTB NOP JSR DELI2C NOP BCLR 4,PTB NOP JSR DELI2C NOP RTS NOP INDAC: BSET 7,PTC RTS NOP SDDAC: LDX #8 NOP MSDA: ASLA NOP BCS DAD1 NOP BCLR 6,PTC NOP BRA DAD0 BSET 5,PTC DAD1: BSET 6,PTC NOP DAD0: JSR DACLK NOP DBNZX MSDA NOP BCLR 6,PTC NOP NOP NOP NOP BSET 6,PTC NOP NOP NOP NOP NOP NOP BCLR 7,PTC NOP NOP NOP NOP BCLR 6,PTC NOP 235 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 NOP DELB: NOP PSHX LDX #0 RTS MDELB: DACLK: ;RETARDO BASE NOP ;CLOCK CONVER D/A BSR DELI2C DBNZX MDELB NOP PULX NOP RTS NOP DELI2C: NOP NOP NOP BSET 5,PTC NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP BCLR 5,PTC NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP RTS NOP DELAYS: PSHX ;RETARDO BUS I2C RTS LDX #$10 DRWDOG: BSR DELI2C BRA MDEL RWDOG: DELAY: PSHX STA WDOG LDX #$40 MDEL: LDA #$FF RTS BSR DELB RTC: PSHA ;INTERR REAL T CLOCK DBNZX MDEL LDA RTCSR PULX LDA ALHR RTS BRSET 7,FLAGS1,SIPRA1 236 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 JMP FIRTC BNE NOINH2 SIPRA1: LDA PER MOV #0,ALMR BNE SIPRA2 LDA HRR JMP FIRTC INCA SIPRA2: LDA PRDIA CMP #$18 CBEQ DOWR,SIPRA3 BNE NOIND2 JMP FIRTC MOV #0,ALHR SIPRA3: BRSET 2,FLAGS3,IMIN BRA YAIAL2 BSET 2,FLAGS3 ;INTERR ALARM NOIND2: STA ALHR LDA MINR BRA YAIAL2 INCA NOINH2: STA ALMR CMP #$3C YAIAL2: BSET 0,FLAGS4 ;FLAG PARA VER NUEVO PERIODO BNE NOINH1 FIRTC: MOV #0,ALMR PULA RTI LDA HRR INTAD: PSHA ;INTERRUPCION CONVERTIDOR A/D INCA CMP #$18 PSHH BNE NOIND1 PSHX MOV #0,ALHR LDA CHAN BRA YAIAL1 BNE ADTIMP NOIND1: STA ALHR LDX #$D BRA YAIAL1 MDSI: NOINH1: STA ALMR YAIAL1: MOV PRPER,PER NUEVO PERIODO INCX STA AN0,X BRA FIRTC IMIN: LDA AN0,X INCX ;PONER DECX BCLR 2,FLAGS3 DECX LDA MINR DECX INCA BPL MDSI CMP #$3C 237 ;SONDA TEMP RETOR MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 BRSET 3,FLAGS3,NFAD1 STA AN0 LDA ADRH BRA OKMSI LDA ADRL MENORI: LDA ANAUX+1 ;NUEV MED < JMP FINAD NFAD1: SUB #$F8 BCLR 3,FLAGS3 LDA ANAUX LDA ADRH SBC #$FF AND #3 BCC OKMSI ;DIFERENCIA < D 8 STA AN0 LDA AN0+3 ;DIFERENCIA >D 8 LDA ADRL SUB #8 STA AN0+1 STA AN0+1 LDA NAD LDA AN0+2 CMP #8 SBC #0 BNE OKMSI STA AN0 ;RESTAR 8 A MED ANTE LDA AN0+1 OKMSI: BRA FINAD SUB AN0+3 ADTIMP: LDX #$D ;SOND TEMP IMPUL STA ANAUX+1 MDSE: LDA AN1,X LDA AN0 INCX SBC AN0+2 INCX STA ANAUX STA AN1,X BCS MENORI ;NUEV MED MENOR DECX LDA ANAUX+1 ;NUEVA MED MAYOR DECX SUB #8 DECX LDA ANAUX BPL MDSE SBC #0 BRSET 3,FLAGS3,NFAD2 BCS OKMSI ;DIFERENCIA < DE 8 LDA ADRH LDA AN0+3 ;DIFERENCIA >DE 8 LDA ADRL ;SUMAR 8 A MED ANTER JMP FINAD ADD #8 STA AN0+1 NFAD2: BCLR 3,FLAGS3 LDA AN0+2 LDA ADRH ADC #0 AND #3 238 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 STA AN1 LDA AN1+3 LDA ADRL SUB #8 STA AN1+1 STA AN1+1 LDA NAD LDA AN1+2 CMP #8 SBC #0 BNE FINAD STA AN1 LDA AN1+1 FINAD: ;DIFERENCIA > DE 8 ;RESTAR 8 A MED ANTE LDA NAD SUB AN1+3 CMP #8 STA ANAUX+1 BEQ FINADT LDA AN1 INC NAD SBC AN1+2 FINADT: BCLR 6,ADSCR ;QUITA INTER A/D STA ANAUX PULX BCS MENORE ;NUEVA MED ES < PULH LDA ANAUX+1 ;NUEVA MED ES > PULA SUB #8 RTI LDA ANAUX TIMER: SBC #0 BCS FINAD ;DIFERENCIA <DE 8 LDA AN1+3 ;DIFERENCIA >DE 8 ADD #8 PSHA ;INTERR TIMER LDA TSEG BEQ NTSEG DEC TSEG ;DECREMENTA T SEG ;SUMAR 8 A MED ANTER NTSEG: STA AN1+1 LDA TSEND BEQ NTSEND LDA AN1+2 DEC TSEND ;DECREMENT T ENVI BIT ADC #0 NTSEND: BRCLR 4,FLAGS4,NTANS STA AN1 INC TANS ;INCREMENT T BIT RESP BRA FINAD NTANS: MENORE: LDA ANAUX+1;NUEV MED ES < INC MSEG LDA MSEG SUB #$F8 CBEQA #$C8,NFIT1 LDA ANAUX JMP FINIT SBC #$FF NFIT1: MOV #0,MSEG BCC FINAD ;DIFERENCIA < DE 8 239 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 INC DSEG BEQ WCTONC BRSET 0,FLAGS3,NODTS MOV TCOFC,TROFC BRSET 0,MODO,NODTS BCLR 4,RELE ;QUITAR RELE CALOR LDA FMOD BRA NODTS BNE NODTS DTROFC: LDA TROFC LDA TRONF BEQ WCTOFC BEQ DTROFF DEC TROFC DEC TRONF LDA TROFC LDA TRONF BNE NODTS BNE WTRC WCTONC: LDA TCONC WCTOFF: LDA TCOFF BEQ WCTOFC BEQ WCTONF MOV TCONC,TRONC MOV TCOFF,TROFF BSET 4,RELE ;ACTUAR RELE CALOR BCLR 5,RELE ;QUITAR RELE FRIO NODTS: BRA WTRC LDA DSEG CMP #5 DTROFF: LDA TROFF BNE NCRINT BEQ WCTOFF COM CRINT DEC TROFF BSET 3,FLAGS3 LDA TROFF LDA CHAN BNE WTRC BEQ NADR1 WCTONF: LDA TCONF MOV #0,CHAN BEQ WCTOFF MOV #$64,ADSCR ;PONER INTS.A/D SONDA TEMP.RET. MOV TCONF,TRONF JMP FINIT BSET 5,RELE ;ACTUAR RELE FRIO WTRC: NADR1: LDA TRONC MOV #1,CHAN MOV #$65,ADSCR ;PONER INTS.A/D SONDA TEMP.IMP. BEQ DTROFC DEC TRONC JMP FINIT LDA TRONC NCRINT: CMP #$A BNE NODTS BCC NFIT2 WCTOFC: LDA TCOFC 240 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 JMP FINIT BCLR 6,FLAGS1 NFIT2: MOV #0,DSEG LDA FLAGS2 COM CRINT AND #$E0 BSET 3,FLAGS3 STA FLAGS2 LDA CHAN BSET 7,FLAGS2 BEQ NADR2 BCLR 2,FLAGS4 MOV #0,CHAN NTINT: MOV #$64,ADSCR ;PONER INTS.A/D SONDA TEMP.RET. BEQ NDTV DEC TVENT BRA SADREM NADR2: LDA TVENT NDTV: MOV #1,CHAN LDA CRONO CMP #5 MOV #$65,ADSCR ;PONER INTS.A/D SONDA TEMP.IMP. BCS NCHCR SADREM: INC CRONO MOV #0,CRONO BSET 5,FLAGS3 BRSET 5,FLAGS2,NCHCR LDA TDON BRSET 6,FLAGS1,NCHCR BEQ NTDON BRSET 2,FLAGS2,NCHCR DEC TDON NTDON: BRSET 3,FLAGS2,NCHCR ;DECREMENTAR TDON LDA CONF2 LDA TDOFF BEQ NTDOFF BEQ NODTIM DEC TDOFF ;DECREMENTAR TDOFF BRSET 6,FLAGS2,NODTIM BSET 6,FLAGS2 NTDOFF: LDA TIMEFC BRA NCHCR BEQ NDFC DECA NODTIM: BCLR 6,FLAGS2 STA TIMEFC NCHCR: NDFC: BEQ NDTRAP LDA TINT DEC TRAP BEQ NTINT DEC TINT LDA TRAP NDTRAP: INC GHORA ;DECREMENTAR TINT BNE NTINT LDA GHORA BCLR 0,FLAGS1 CMP #$3C BNE NGHORA 241 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 MOV #0,GHORA PULA LDA POSM RTI PSHA RECEP: PSHA ;INTERR RECEPSERIE MOV #AGHORA,POSM LDA SCS1 LDA DOWR LDA SCDR JSR IPROG PSHA LDA HRR LDA IBUF JSR IPROG BNE NODR0 ;NO LDA MINR PULA JSR PROG CMP DIR PULA BEQ SIREC STA POSM INITR: NGHORA: LDA TSAT ;PRIMER DATO? LDA #0 STA IBUF BEQ NDTSAT LDA #$FF DEC TSAT STA CRC NDTSAT: LDA TOI STA CRC+1 BEQ NDTOI JMP FINR DEC TOI NDTOI: ;TOMAR DATO SIREC: LDA TSTOP JSR CRCCAL MOV #1,IBUF BEQ NDTSTP JMP FINR DECA NODR0: STA TSTOP CMP #1 ;SEGUNDO DATO? BNE NODR1 ;NO NDTSTP: LDA TNOI PULA BEQ NDTNOI STA CODE DECA JSR CRCCAL STA TNOI MOV #2,IBUF NDTNOI: NOP FINIT: ;SI,GUARDAR COD JMP FINR LDA T1SC NODR1: CMP #2 ;TERCER DATO? AND #$7F BNE NODR2 ;NO STA T1SC PULA 242 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 CMP #0 BNE NODR5 ;NO BNE INITR LDA CODE JSR CRCCAL CMP #$10 MOV #3,IBUF BEQ DATR6 JMP FINR PULA NODR2: CMP #3 ;CUARTO DATO? BEQ INITR PULA STA NDAT DE DATOS CMP #0 BEQ INITR STA DIRDAT ;SI,GUARDAR EN DIRECCION DATO ;NO,GUARDAR NUMERO WCRC1: JSR CRCCAL WCRC2: MOV #$C,IBUF JMP FINR JSR CRCCAL DATR6: PULA MOV #4,IBUF CMP #0 JMP FINR BEQ INITR CMP #4 ;SI CMP #0 BNE NODR3 ;NO NODR3: ;SI,ESCRITURA? ;QUINTO DATO? STA NDATW BNE NODR4 JSR CRCCAL PULA MOV #6,IBUF CMP #0 JMP FINR BNE INITR NODR5: CMP #6 ;SEPTIMO DATO? JSR CRCCAL BNE NODR6 ;NO MOV #5,IBUF PULA JMP FINR CMP #0 NODR4: CMP #5 ;SEXTO DATO? BNE NINITR NODR6: JMP INITR CMP #7 ;OCTAVO DATO? BNE NODR7 ;NO NINITR: STA NDAT PULA JSR CRCCAL STA DAT1R ;SI,GUARDA 1DAT RECIB MOV #7,IBUF JSR CRCCAL JMP FINR LDA NDAT 243 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 DECA MOV #9,IBUF STA NDAT BRA FINR MOV #8,IBUF NODR8: JMP FINR NODR7: CMP #9 ;DECIMO DATO? BNE NODR9 ;NO CMP #8 ;NOVENO DATO? PULA BNE NODR8 ;NO STA DAT3R ;SI,GUARDAR TERCER DATO RECIBIDO PULA JSR CRCCAL STA DAT2R ;SI,GUARDA 2 DAT RECIB MOV #$A,IBUF JSR CRCCAL BRA FINR LDA NDAT NODR9: DECA CMP #$A BNE NODRA ;NO STA NDAT PULA BEQ WCRC2 STA DAT4R ;SI,GUARDA 4DAT RECIB BEQ NECRC1 ;SI JMP WCRC1 LDA #$FF NODRA: CMP #$C STA ERRCRC ;NO,ERROR CRC BNE NODRC NECRC1: MOV #$D,IBUF PULA CMP CRC+1 NODRC: ;UNDECIMO DATO? BRA FINR ;CRC CORRECTO? PULA STA ERRCRC CMP CRC NECRC2: BSET 6,FLAGS3 ;FIN RECEP DAT BEQ NECRC2 FINR: PULA LDA #$FF SLEEP: NOP RTI LDA LVISR ;INTERRUPCION BAJA TENSION AND #$80 BEQ WAKE LDA LVISR ORA #$10 STA LVISR 244 RTI MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 BCLR 7,LCDCR ;DISABLE LCD MOV #0,T1SC ;DISABLE TIMER MOV #$FF,DDRA ;TODOS LOS PUERTOS SALIDAS MOV #$FF,DDRB ;*****MENOS PTA EN EMULACION MOV #$FF,DDRC MOV #$FF,DDRD ; STOP WAKE: ;MODO STOP LDA LVISR ORA #$10 STA LVISR MOV #0,CHECK LDHX #$260 TXS LDHX #0 JMP NSTART VERS: DB 1 DEFVAL: DB 5,$A,$F,$14,$14,0,1,$2C,$1E,$1E DB 0,0,$1E,$78,5,$64,0,0,0,0,0 DEFDAT: DB 0,0,0,0,1,0,$DC,1,$2C,0,$96,0 ;DATOS DISPLAY DIGITOS CONSIGNA ;A=$A - L=$B - H=$C DATAD1: DB $AF,$A0,$6D,$E9,$E2,$CB,$CF DB $A1,$EF,$EB,$E7,$E,$E6 ;DATOS DISPLAY 2 PRIMEROS DIGITOS MEDIDA ;-=$A - d=$B - r=$C - C=$D DATAD2: DB $AF,$A0,$CB,$E9,$E4,$6D,$6F DB $A8,$EF,$ED,$40,$E3,$42,3 ;DATOS DISPLAY 2 SEGUNDOS DIGITOS MEDIDA ;A=$A - b=$B - C=$C - d=$D - Y=$E - -=$F DATAD3: DB $FA,$A,$BC,$9E,$4E,$D6,$F6,$8A 245 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 DB $FE,$DE,$EE,$76,$F0,$3E,$5E,4 ORG $E800 TABLAC: DW $03E7,$03E7,$03E7,$03E7,$03E7,$03E7,$03E7,$03E7 DW $03E7,$03E7,$03E7,$03E7,$03E7,$03E7,$03E7,$03E7 DW $03E7,$03E7,$03E7,$03E7,$03E7,$03E7,$03E7,$03E7 DW $03E7,$03E7,$03E7,$03E7,$03E7,$03E7,$03E7,$03E7 DW $03E7,$03E7,$03E7,$03E7,$03E7,$03E0,$03D8,$03D0 DW $03C8,$03C0,$03B8,$03B0,$03A8,$03A0,$0398,$0390 DW $0388,$0380,$0378,$0370,$0368,$0360,$0358,$0350 DW $0348,$0340,$0338,$0330,$0328,$0320,$0318,$0310 DW $030C,$0308,$0300,$02FC,$02F8,$02F4,$02F0,$02EC DW $02E8,$02E4,$02E0,$02DC,$02D8,$02D4,$02D0,$02CC DW $02C8,$02C4,$02C0,$02BC,$02B8,$02B4,$02B0,$02AD DW $02AA,$02A7,$02A4,$02A1,$029D,$029A,$0297,$0294 DW $0290,$028D,$028A,$0288,$0285,$0282,$027F,$027C DW $0279,$0276,$0273,$0270,$026D,$026A,$0267,$0264 DW $0261,$025E,$025B,$0258,$0255,$0250,$024D,$024A DW $0247,$0245,$0243,$0241,$023E,$023C,$023A,$0238 DW $0236,$0234,$0232,$0230,$022E,$022C,$022A,$0228 DW $0226,$0224,$0222,$0220,$021E,$021C,$021A,$0218 DW $0216,$0214,$0212,$0210,$020E,$020C,$020A,$0208 DW $0206,$0204,$0202,$0200,$01FE,$01FC,$01FA,$01F8 DW $01F6,$01F4,$01F2,$01F0,$01EE,$01EC,$01EA,$01E8 DW $01E6,$01E4,$01E2,$01E0,$01DE,$01DC,$01DA,$01D8 DW $01D6,$01D4,$01D2,$01D1,$01CF,$01CE,$01CD,$01CB DW $01CA,$01C9,$01C7,$01C6,$01C5,$01C3,$01C2,$01C0 DW $01BE,$01BC,$01BA,$01B9,$01B7,$01B5,$01B3,$01B1 DW $01AF,$01AE,$01AD,$01AB,$01AA,$01A9,$01A7,$01A6 DW $01A5,$01A3,$01A2,$01A1,$019F,$019E,$019D,$019B DW $019A,$0199,$0197,$0196,$0195,$0193,$0192,$0191 246 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 DW $0190,$018F,$018E,$018D,$018B,$018A,$0189,$0187 DW $0186,$0185,$0184,$0183,$0182,$0181,$017F,$017E DW $017D,$017B,$017A,$0179,$0177,$0176,$0175,$0174 DW $0173,$0172,$0171,$016F,$016E,$016D,$016B,$016A DW $0169,$0167,$0166,$0165,$0164,$0163,$0162,$0161 DW $015F,$015E,$015C,$015B,$015A,$0159,$0158,$0157 DW $0156,$0155,$0154,$0153,$0152,$0151,$014F,$014E DW $014D,$014C,$014B,$014A,$0149,$0148,$0147,$0146 DW $0145,$0144,$0143,$0142,$0141,$013F,$013E,$013D DW $013C,$013B,$013A,$0139,$0138,$0137,$0136,$0135 DW $0134,$0133,$0132,$0131,$012F,$012E,$012D,$012C DW $012B,$012A,$0129,$0128,$0127,$0126,$0125,$0124 DW $0123,$0122,$0121,$0120,$0120,$011F,$011E,$011D DW $011C,$011B,$011A,$0119,$0118,$0117,$0116,$0115 DW $0114,$0113,$0112,$0111,$0110,$0110,$010F,$010E DW $010D,$010C,$010B,$010A,$0109,$0108,$0108,$0107 DW $0106,$0105,$0104,$0103,$0102,$0101,$0100,$0100 DW $00FF,$00FE,$00FD,$00FC,$00FB,$00FA,$00F9,$00F8 DW $00F8,$00F7,$00F6,$00F5,$00F4,$00F4,$00F3,$00F2 DW $00F1,$00F0,$00F0,$00EF,$00EE,$00ED,$00EC,$00EC DW $00EB,$00EA,$00E9,$00E8,$00E8,$00E7,$00E6,$00E5 DW $00E4,$00E4,$00E3,$00E2,$00E1,$00E0,$00E0,$00DF DW $00DE,$00DD,$00DC,$00DC,$00DB,$00DA,$00D9,$00D8 DW $00D8,$00D7,$00D6,$00D5,$00D4,$00D4,$00D3,$00D2 DW $00D1,$00D0,$00D0,$00CF,$00CE,$00CD,$00CC,$00CC DW $00CB,$00CA,$00C9,$00C8,$00C8,$00C7,$00C6,$00C5 DW $00C4,$00C4,$00C3,$00C2,$00C1,$00C0,$00C0,$00BF DW $00BE,$00BD,$00BC,$00BC,$00BB,$00BA,$00B9,$00B8 DW $00B8,$00B7,$00B6,$00B5,$00B4,$00B4,$00B3,$00B2 DW $00B1,$00B0,$00B0,$00AF,$00AE,$00AD,$00AC,$00AC 247 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 DW $00AB,$00AA,$00A9,$00A8,$00A8,$00A7,$00A6,$00A6 DW $00A5,$00A4,$00A4,$00A3,$00A2,$00A2,$00A1,$00A0 DW $00A0,$009F,$009E,$009E,$009D,$009C,$009C,$009B DW $009A,$009A,$0099,$0098,$0098,$0097,$0096,$0096 DW $0095,$0094,$0094,$0093,$0092,$0092,$0091,$0090 DW $0090,$008F,$008E,$008E,$008D,$008C,$008C,$008B DW $008A,$008A,$0089,$0088,$0088,$0087,$0086,$0086 DW $0085,$0084,$0084,$0083,$0082,$0082,$0081,$0080 DW $0080,$007F,$007E,$007E,$007D,$007C,$007C,$007B DW $007A,$007A,$0079,$0078,$0078,$0077,$0076,$0076 DW $0075,$0074,$0074,$0073,$0072,$0072,$0071,$0070 DW $0070,$006F,$006E,$006E,$006D,$006C,$006C,$006B DW $006A,$006A,$0069,$0068,$0068,$0067,$0066,$0066 DW $0065,$0064,$0064,$0063,$0062,$0062,$0061,$0060 DW $0060,$005F,$005E,$005E,$005D,$005C,$005C,$005B DW $005A,$005A,$0059,$0059,$0058,$0058,$0057,$0057 DW $0056,$0056,$0055,$0054,$0054,$0053,$0052,$0052 DW $0051,$0050,$0050,$004F,$004E,$004E,$004D,$004C DW $004C,$004B,$004A,$004A,$0049,$0049,$0048,$0048 DW $0047,$0046,$0046,$0045,$0044,$0044,$0043,$0042 DW $0042,$0041,$0040,$0040,$003F,$003E,$003E,$003D DW $003C,$003C,$003B,$003A,$003A,$0039,$0039,$0038 DW $0038,$0037,$0036,$0036,$0035,$0034,$0034,$0033 DW $0032,$0032,$0031,$0030,$0030,$002F,$002E,$002E DW $002D,$002C,$002C,$002B,$002A,$002A,$0029,$0028 DW $0028,$0027,$0026,$0026,$0025,$0024,$0024,$0023 DW $0022,$0022,$0021,$0020,$0020,$001F,$001E,$001E DW $001D,$001C,$001C,$001B,$001A,$001A,$0019,$0018 DW $0018,$0017,$0016,$0016,$0015,$0014,$0014,$0013 DW $0012,$0012,$0011,$0010,$0010,$000F,$000E,$000E 248 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 DW $000D,$000C,$000C,$000B,$000A,$000A,$0009,$0009 DW $0008,$0008,$0007,$0007,$0006,$0006,$0005,$0005 DW $0004,$0004,$0003,$0003,$0002,$0002,$0001,$0001 DW $0000,$0000,$FFFF,$FFFF,$FFFE,$FFFE,$FFFD,$FFFD DW $FFFC,$FFFC,$FFFB,$FFFB,$FFFA,$FFFA,$FFF9,$FFF9 DW $FFF8,$FFF8,$FFF7,$FFF7,$FFF6,$FFF6,$FFF5,$FFF5 DW $FFF4,$FFF4,$FFF3,$FFF3,$FFF2,$FFF2,$FFF1,$FFF0 DW $FFF0,$FFEF,$FFEE,$FFEE,$FFED,$FFEC,$FFEC,$FFEB DW $FFEA,$FFEA,$FFE9,$FFE8,$FFE8,$FFE7,$FFE6,$FFE6 DW $FFE5,$FFE4,$FFE4,$FFE3,$FFE2,$FFE2,$FFE1,$FFE0 DW $FFE0,$FFDF,$FFDE,$FFDE,$FFDD,$FFDC,$FFDC,$FFDB DW $FFDA,$FFDA,$FFD9,$FFD8,$FFD8,$FFD7,$FFD6,$FFD6 DW $FFD5,$FFD4,$FFD4,$FFD3,$FFD2,$FFD2,$FFD1,$FFD0 DW $FFD0,$FFCF,$FFCE,$FFCE,$FFCD,$FFCC,$FFCC,$FFCB DW $FFCA,$FFCA,$FFC9,$FFC8,$FFC8,$FFC7,$FFC6,$FFC6 DW $FFC5,$FFC4,$FFC4,$FFC3,$FFC2,$FFC2,$FFC1,$FFC0 DW $FFC0,$FFBF,$FFBE,$FFBE,$FFBD,$FFBC,$FFBC,$FFBB DW $FFBA,$FFBA,$FFB9,$FFB8,$FFB8,$FFB7,$FFB6,$FFB6 DW $FFB5,$FFB4,$FFB4,$FFB3,$FFB2,$FFB2,$FFB1,$FFB0 DW $FFB0,$FFAF,$FFAE,$FFAE,$FFAD,$FFAC,$FFAC,$FFAB DW $FFAA,$FFAA,$FFA9,$FFA8,$FFA8,$FFA7,$FFA6,$FFA6 DW $FFA5,$FFA4,$FFA4,$FFA3,$FFA2,$FFA2,$FFA1,$FFA0 DW $FFA0,$FF9F,$FF9E,$FF9E,$FF9D,$FF9C,$FF9C,$FF9B DW $FF9A,$FF9A,$FF99,$FF98,$FF98,$FF97,$FF96,$FF96 DW $FF95,$FF94,$FF94,$FF93,$FF92,$FF92,$FF91,$FF90 DW $FF90,$FF8F,$FF8E,$FF8E,$FF8D,$FF8C,$FF8C,$FF8B DW $FF8A,$FF8A,$FF89,$FF88,$FF88,$FF87,$FF86,$FF86 DW $FF85,$FF84,$FF84,$FF83,$FF82,$FF82,$FF81,$FF80 DW $FF80,$FF7F,$FF7E,$FF7E,$FF7D,$FF7C,$FF7C,$FF7B DW $FF7A,$FF7A,$FF79,$FF78,$FF78,$FF77,$FF76,$FF76 249 MEMORIA VI. Código fuente Capítulo 1. Código de la tarjeta TX98 DW $FF75,$FF74,$FF74,$FF73,$FF72,$FF71,$FF70,$FF70 DW $FF6F,$FF6E,$FF6D,$FF6C,$FF6C,$FF6B,$FF6A,$FF69 DW $FF68,$FF68,$FF67,$FF66,$FF65,$FF64,$FF64,$FF63 DW $FF62,$FF61,$FF60,$FF60,$FF5F,$FF5E,$FF5D,$FF5C DW $FF5C,$FF5B,$FF5A,$FF59,$FF58,$FF58,$FF57,$FF56 DW $FF55,$FF54,$FF54,$FF53,$FF52,$FF51,$FF50,$FF50 DW $FF4F,$FF4E,$FF4D,$FF4C,$FF4C,$FF4B,$FF4A,$FF49 DW $FF48,$FF48,$FF47,$FF46,$FF45,$FF44,$FF44,$FF43 DW $FF42,$FF41,$FF40,$FF40,$FF3F,$FF3E,$FF3D,$FF3C DW $FF3C,$FF3B,$FF3A,$FF39,$FF38,$FF38,$FF37,$FF36 END 250 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 Capítulo 2 Código de la tarjeta SA98 Capítulo 2 E Código fuente de la tarjeta SA98 2. daigu n este capítulo se va a introducir el código en ensamblador utilizado a la hora de realizar el control de la parte que controla la unidad de tratamiento de aire. 1. Código fuente Este código nos permite controlar los siguientes elementos incorporados en la tarjeta: - Servomotores de las compuertas 0-10V - Presostato diferencial (3) para la comprobación de la suciedad de los filtros - Sensor de calidad de aire - Potenciómetro de mínima apertura - Control de humedad del aire 251 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 TITLE 'CONTROL UTA' LIST N=62, P=PIC16F877A ;PROGRAM PARA S98A - TARJETA DE AMPLIACION PARA CONTROL DE UTA ;COMUNICACIONES CON CONTROL DE CLIMATIZADORES TX98 ;MICROPROCESADOR PIC16F877A #INCLUDE <P16F877A.INC> .UDATA ;*********************************VARIABLES********************************* ;**********************************BANK 0*********************************** ORG 0x20 MDAN0: RES 8 ;MEDIDA ANALOGICA CANAL 0 MDAN1: RES 8 ;MEDIDA ANALOGICA CANAL 1 MDAN2: RES 8 ;MEDIDA ANALOGICA CANAL 2 MDAN3: RES 8 ;MEDIDA ANALOGICA CANAL 3 MDAN4: RES 8 ;MEDIDA ANALOGICA CANAL 4 MDAN5: RES 8 ;MEDIDA ANALOGICA CANAL 5 MDAN6: RES 8 ;MEDIDA ANALOGICA CANAL 6 MDAN7: RES 8 ;MEDIDA ANALOGICA CANAL 7 MDAUX: RES ;MEDIDA ANALOGICA AUXILIAR INTERRUPCION CONVERTIDOR NAD: 2 RES 1 MEDM: ;NUMERO MEDIDAS ANALOGICAS RES 2 ;MEDIA DE 4 MEDIDAS ANALOGICAS MEDEXT: RES 2 ;MEDIDA SONDA TEMPERATURA EXTERIOR TIME: RES 3 ;CUENTA TIEMPOS PARA EL TIMER DEL: RES 1 ;VARIABLE PARA RETARDO TSEG: RES 1 ;TIEMPO DE SEGURIDAD PARA COMUNICACIONES TREC: RES 1 ;TIEMPO DE RECEPCION PARA LOS BITS DEL DATO RECIBIDO DATOR: RES 6 ;DATO RECIBIDO EN COMUNICACIONES DAOUTA: RES 1 DAOUTB: RES 1 ;SAL POR CONV DIG-ANALOG CANAL A:DATO CALC PARA EL SISTEM D F-C ;SALIDA POR CONVERTIDOR DIGITAL-ANALOGICO CANAL B 252 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 DAOUTC: RES VARIADOR 1 ;SAL X CONVR DIG-ANALOG CANAL C :DAT RECIB D VEL VENTI PA DAOUTD: RES 1 ;SALIDA POR CONVERTIDOR DIG-ANALOG CANAL D DATODA: RES 1 ;DATO ENVIADO AL CONVERTIDOR DIG-ANALOG TDA: D/A RES 1 FILSUC: RES ;INTERVALO DE T Q TRANSCURRE ENTR ACTUALIZA D SAL DEL CONVER 1 ;SEÑAL DE FILTRO SUCIO:0-NO SEÑAL DE FILTRO SUCIO,0xFF-FILTRO SUCIO TNCOM: RES 1 WAUX: ;TIEMPO DE NO COMUNICACIONES ENTRE TX98 Y S98A RES 1 STAUX: RES ;WORKING REGISTER AUXILIAR 1 ;STATUS REGISTER AUXILIAR PCLAX1: RES 1 ;PCLATH AUXILIAR (INTERRUPCION) PCLAX2: RES 1 ;PCLATH AUXILIAR PCLAX3: RES 1 ;PCLATH AUXILIAR ;***************TOTAL BANK 0 - 96 BYTES (VARIABLES - 96 BYTES)************** ;**********************************BANK 1*********************************** ORG 0xA0 POS1: RES 2 POS2: RES 2 VAL1: RES 2 VAL2: RES 2 MULT1: RES 2 ;MULTIPLICADOR MULT2: RES 2 ;MULTIPLICANDO RESMUL: RES 3 MULAUX: RES ;RESUL D MULTI DE 10 BITS X 10 BITS (RESUL EN 3 BYTES) 3 MANDO: RES 1 CLIMATIZA CONSIG: RES ;MANDO D FUNCIONAM:CALCULA Y RECIB DSD EL CONTROL D 2 ;CONSIG:SELECCIONADA Y RECIB DSD EL CONTROL DE CLIMATIZADOR MEDRET: RES 2 ;MEDIDA TEMP D RETOR:MEDID Y RECIB DSD L CNTROL D CLIMATIZADOR MDHUMI: RES 2 ;MEDIDA HUMEDAD INTERIOR MDHUME: RES 2 ;MEDIDA HUMEDAD EXTERIOR MDCALD: RES 1 ;MEDIDA CALIDAD DEL AIRE 253 MEMORIA VI. Código fuente MDPRES: RES 2 MPMINA: RES ENTINT: RES Capítulo 2. Código de la tarjeta SA98 ;MEDIDA DE LA PRESION (ENVIAR A CONTROL DE CLIMATIZADORES) 1 ;MEDIDA POTENCIOMETRO DE MINIMA APERTURA 1 ;ENTALPIA AIRE INTERIOR ENTEXT: RES 1 ;ENTALPIA AIRE EXTERIOR NETAP: RES ;NUMERO DE ETAPAS (RECIBIDO EN LA VARIABLE MANDO) 1 FFUNC: RES 1 ;FLAG FUNCIONAMIENTO (CONFIGURACION EN MICROSWITCH) ;BIT 0: MODO MAQUINA (0)/MODO AUTOTEST (1) ;BIT 1: FREE-COOLING TEMPERATURA (0)/FREE-COOLING ENTALPIA (1) ;BIT 2: POT MIN APERT NO CONECT (0)/POTENCIOMETRO DE MIN APERT CONECT (1) ;BIT 3: FCOM: RES 1 ;FLAG PA COMUN CN CNTROL CUAND S98A TNGA LS DATS PA CALC F-C ;BIT 0: PONER A 1 CUANDO SE HAYA COGIDO UNA COMUNICACION CORRECTA ;BIT 1: PONER A 1 CUAND SE CALC LAS ENTALPIAS CN LS DATS Y LS MEDIDAS ANALOG FC: RES 1 ;FLAG DE FREE-COOLING:FC=0->NO FREE-COOLING,FC=0xFF->SI ;***************TOTAL BANK 1 - 80 BYTES (VARIABLES - 37 BYTES)************** ;**********************************CODIGO*********************************** .CODE ORG 0 GOTO START ORG 4 GOTO INTER ORG 5 ;***********************************PAGE 0********************************** ;INICIALIZACION REGISTROS Y VARIABLES START: CLRF INTCON CLRF STATUS CALL DELAY ;RETARDO COMIENZO MOVF PCLATH,0 MOVWF PCLAX2 254 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 BCF PCLATH,4 BSF PCLATH,3 CALL INICIA ;INI MICRO (REG, PUERT Y VAR)TOMA CONFIG DL MICROSWITCH MOVF PCLAX2,0 MOVWF PCLATH ;*********************FUNCIONAMIENTO NORMAL / AUTOTEST********************** BSF STATUS,5 BTFSS FFUNC,0 GOTO FUNNOR ;FUNCIONAMIENTO NORMAL ;**************************AUTOTEST (MICROSWITCH nº1 ON)********************** MOVLW 0xC0 ;PERMISO INTERRUPCIONES MOVWF INTCON BSF PIE1,1 CLRF STATUS AUTT1: CLRWDT MOVLW 4 ; TOMAN 4 MEDIDAS ANALOG PARA COMPROBACION EN AUTOTEST SUBWF NAD,0 BTFSS STATUS,0 GOTO AUTT1 CLRF INTCON MOVF PCLATH,0 MOVWF PCLAX2 BSF PCLATH,3 BSF PCLATH,4 CALL MAUTES ;SUBRUTINA DE AUTOTEST MOVF PCLAX2,0 MOVWF PCLATH FINAUT: CLRWDT GOTO FINAUT 255 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 ;********FUNCIONAMIENTO NORMAL RUN (MICROSWITCH nº1OFF)***************** FUNNOR: MOVLW 0xC0 MOVWF INTCON BSF PIE1,1 ;HABILITA INTERRUPCIONES ;HABILITA INTERRUPCION DEL TIMER2 CLRF STATUS ;COMIENZO PROGRAMA COMZO: CLRWDT MOVLW 4 ;SE TOMAN 4 MEDIDAS ANALOGICAS SUBWF NAD,0 BTFSS STATUS,0 GOTO COMZO MOVLW 4 SUBWF NAD,0 BTFSC STATUS,2 GOTO TMA CLRF NAD ;SEGURIDAD -> SI NAD NO ES IGUAL A 4 -> TOMAR 4 MEDIDAS NUEVAS GOTO COMZO ;******************************MEDIDAS ANALOGICAS**************************** TMA: CLRWDT ;TEMPERATURA AIRE EXTERIOR CLRF INTCON MOVF PCLATH,0 MOVWF PCLAX2 BCF PCLATH,4 BSF PCLATH,3 CALL TMEXT MOVF PCLAX2,0 MOVWF PCLATH MOVLW 0xC0 256 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 MOVWF INTCON CALL GETCOM ;HUMEDAD AIRE INTERIOR (O DE RETORNO) CLRF INTCON MOVF PCLATH,0 MOVWF PCLAX2 BCF PCLATH,4 BSF PCLATH,3 CALL THUMI MOVF PCLAX2,0 MOVWF PCLATH MOVLW 0xC0 MOVWF INTCON CALL GETCOM ;HUMEDAD AIRE EXTERIOR CLRF INTCON MOVF PCLATH,0 MOVWF PCLAX2 BCF PCLATH,4 BSF PCLATH,3 CALL THUME MOVF PCLAX2,0 MOVWF PCLATH MOVLW 0xC0 MOVWF INTCON CALL GETCOM ;CALIDAD DEL AIRE (AIRE INTERIOR O DE RETORNO) CLRF INTCON MOVF PCLATH,0 257 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 MOVWF PCLAX2 BCF PCLATH,4 BSF PCLATH,3 CALL TCALD MOVF PCLAX2,0 MOVWF PCLATH MOVLW 0xC0 MOVWF INTCON CALL GETCOM ;PRESION CLRF INTCON MOVF PCLATH,0 MOVWF PCLAX2 BCF PCLATH,4 BSF PCLATH,3 CALL TPRES MOVF PCLAX2,0 MOVWF PCLATH MOVLW 0xC0 MOVWF INTCON CALL GETCOM ;POT D MINIA APERTURA DE COMPUERTAS D SISTEM D F-C CLRF INTCON MOVF PCLATH,0 MOVWF PCLAX2 BCF PCLATH,4 BSF PCLATH,3 CALL TPMINA MOVF PCLAX2,0 258 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 MOVWF PCLATH MOVLW 0xC0 MOVWF INTCON CALL GETCOM ;RESERVA-1 ;RESERVA-2 ;SEGURIDADES DE MEDIDAS ANALOGICAS Y VARIABLES DE FUNCIONAMIENTO CLRF INTCON MOVF PCLATH,0 MOVWF PCLAX2 BCF PCLATH,4 BSF PCLATH,3 CALL SEGMV MOVF PCLAX2,0 MOVWF PCLATH MOVLW 0xC0 MOVWF INTCON CALL GETCOM ;CALCULO DE LA ENTALPIA (ENTALPIA AIRE INTERIOR Y ENTALPIA AIRE EXTERIOR) CLRF INTCON MOVF PCLATH,0 MOVWF PCLAX2 BCF PCLATH,4 BSF PCLATH,3 CALL CENTAL MOVF PCLAX2,0 MOVWF PCLATH MOVLW 0xC0 MOVWF INTCON 259 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 CALL GETCOM ;***********************************SEÑALES DIGITALES************************** ;SEÑAL DIGITAL-1 (SEÑAL DE FILTRO SUCIO) SENFS1: CLRWDT BTFSC PORTB,0 GOTO SENFS2 CALL DELAY BTFSC PORTB,0 GOTO SENFS1 CLRF FILSUC ;NO HAY SEÑAL DE FILTRO SUCIO (FILTRO LIMPIO) (FILSUC=0) GOTO SENFS3 SENFS2: CALL DELAY BTFSS PORTB,0 GOTO SENFS1 MOVLW 0xFF MOVWF FILSUC ;HAY SEÑAL DE FILTRO SUCIO (FILTRO SUCIO) (FILSUC=0xFF) SENFS3: CALL GETCOM ;SEÑAL DIGITAL-2 ;SEÑAL DIGITAL-3 ;*********** ************************HACER SALIDAS************************** ;SALIDAS POR CONVERTIDOR DIGITAL/ANALOGICO MAX500 MOVF TDA,1 BTFSS STATUS,2 GOTO HSALR ;CADA 10 SEG ENVIAR DATOS DE LOS 4 CANALES A LA VEZ AL CONVER. D/A MOVF TNCOM,1 BTFSS STATUS,2 GOTO DARSAL ;SI NO FALLO DE COMU -> PONR SAL CALCULADAS X EL CALC DL F-C CLRF DAOUTC ;SI FALLO DE COMU -> PNER SAL DL VARIADOR D FREC DL VENTI A 0 CLRF DAOUTD 260 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 BSF STATUS,5 CLRF FC ;SIN COMUNICACIONES NO HAY FREE-COOLING BTFSC FFUNC,2 ;COMPROBA SI CONFIGU CN POT DE MIN APERTURA Y VR CAL D AIRE GOTO NCOMSP ;SI HAY POTENCIOMETRO DE MINIMA APERTURA MOVF MDCALD,1 BTFSS STATUS,2 GOTO SCD1 CLRF STATUS ;NO HAY POTENCIOMETRO DE MINIMA APERTURA CLRF DAOUTA ;SAL AL SISTEM DE F-C SIN POT D MIN APERTURA -> SAL=0 CLRF DAOUTB GOTO DARSAL SCD1: MOVF MDCALD,0 BCF STATUS,5 MOVWF DAOUTA MOVWF DAOUTB GOTO DARSAL NCOMSP: MOVF MDCALD,0 SUBWF MPMINA,0 BTFSS STATUS,0 GOTO SCD1 MOVF MPMINA,0 ;SAL A SISTEM DE F-C CON POT DE MIN APERTURA -> SAL=MPMINA BCF STATUS,5 MOVWF DAOUTA MOVWF DAOUTB DARSAL: CLRF INTCON MOVF PCLATH,0 MOVWF PCLAX2 BSF PCLATH,3 BCF PCLATH,4 261 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 CALL CONVDA ;HACER SAL AL CONVERT DIG-ANALOG MAX500 MOVF PCLAX2,0 MOVWF PCLATH MOVLW 0xC0 MOVWF INTCON MOVLW 0x0A ;INI LOS 10 SEG PARA EL PROX ENVIO AL CONVERT DIG-ANALOG MOVWF TDA CALL GETCOM ;SALIDAS POR RELES HSALR: CLRWDT ;RELE DE FIN DE CARRERA (K1 - PORTD,1) CALL RFINCA ;RELE DE ALARMA (K2 - PORTD,0) CALL GETCOM GOTO COMZO RFINCA: CLRWDT ;SUBRUTINA PARA EL RELE DE FIN DE CARRERA DEL F-C CLRF STATUS BTFSS PORTD,1 GOTO RFINC1 ;RELE DE FIN DE CARRERA ACTUALMENTE DESACTIVADO MOVLW 0xE0 ;RELE DE FIN DE CARRERA ACTUALMENTE ACTIVADO SUBWF DAOUTA,0 BTFSS STATUS,0 GOTO ACTK2 ACTK1: BSF PORTD,1 ;ACTIVAR RELE DE FIN DE CARRERA:COMPUERTA CERRADA RETURN ACTK2: BCF PORTD,1 ;DESACTIVAR RELE DE FIN DE CARRERA:COMPUERTA ABIERTA RETURN RFINC1: MOVLW 0xF0 SUBWF DAOUTA,0 262 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 BTFSS STATUS,0 GOTO ACTK2 GOTO ACTK1 ;** * ***SUBRUTINA DE COMUNICACIONES CON CONTROL DE CLIMATIZADORES TX98******* ;SUBRUTINA DE COM CON CONTROL DE CLIMATIZADORES TX98:CONTROL MAESTRO GETCOM: CLRWDT ;RECEPCION DE BITS DEL CONTROL CLRF STATUS BTFSC PORTC,7 GOTO FGETC ;PARA COMENZAR A COGER EL DATO LA LINEA DEBE ESTAR EN ESTADO BAJO YA QUE SI ESTÁ EN ESTADO ALTO PUEDE SER UNA COMUNICACION EMPEZADA MOVLW 0x46 MOVWF TSEG STA1: ;TIEMPO DE SEGURIDAD PARA COGER LA SEÑAL DE START (35 MSEG) CLRWDT BTFSC PORTC,7 GOTO DATST1 MOVF TSEG,1 BTFSS STATUS,2 GOTO STA1 GOTO FGETC ;CUMPLIDO EL T DE SEGURIDAD PA COGER START Y NO RECIB SEÑAL DATST1: MOVLW 0x78 MOVWF TSEG ;TIEMPO DE SEGURIDAD PARA LA DURACION DEL START (60 MSEG) - EL START DEL DATO DURA 50 MSEG (NUNCA MAS DE 60 MSEG) DATST2: CLRWDT BTFSS PORTC,7 GOTO DATRE1 ;SE HA RECIBIDO EL START CORRECT->COMIENZA LA RECEP DL DATO MOVF TSEG,1 BTFSS STATUS,2 GOTO DATST2 GOTO FGETC ;SE HA TIRADO MUCHO TIEMPO CON SEÑAL DE START DATRE1: MOVLW 0x28 ;SI LO RECIBIDO ESTA ENTRE 40 Y 60 MSEG SE TRATA DE UN START (SI NO PUEDE SER UNA COMUNICACION QUE SE HA COGIDO EMPEZADA) 263 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 SUBWF TSEG,0 BTFSC STATUS,0 GOTO FGETC CLRF DATOR ;START RECIBIDO CORRECT-> INICIALIZAR DATO A RECIBIR (DATOR) CLRF DATOR+1 CLRF DATOR+2 CLRF DATOR+3 CLRF DATOR+4 CLRF DATOR+5 MOVLW 0x2A ;42 BITS->0-1-MANDO 8-CONS 11-TEMP RETOR 11-SAL VEL.VENT.8-1-0 MOVWF MEDM DATRE2: CALL RDATO ;SUBRUTINA DE RECEPCION DE 1 BIT MOVF DEL,1 BTFSS STATUS,2 GOTO FGETC ;COMU ERRONEA (DEL=0xFF) AL IR A TOMAR UN BIT DEL DATO DECFSZ MEDM,1 ;RECEPC CORREC D UN BIT DL DATO(1 BIT MENS Q TOMAR -> MEDM-1) GOTO DATRE2 ;AUN NO HAN TOMADO LS 42 BITS->TOMA OTRO BIT CN SUBRU RDATO ROTAR1: BCF STATUS,0 RRF DATOR,1 ;YA TOMADO LOS 42 BITS DL DAT ENVIADO X EL CONTROL D TX98 ;ROTAR EL DATO A DCHA XQ EN RDATO SE HA GIRADO A IZQUIERDA RRF DATOR+1,1 RRF DATOR+2,1 RRF DATOR+3,1 RRF DATOR+4,1 RRF DATOR+5,1 GOTO FINCG RDATO: CLRWDT CLRF DEL MOVLW 0x14 ;COMPROB DATO RECIB Y TOMA DATS INCLUIDO N DICHO DATO RECIB ;SUBRUTINA DE RECEPCION DE 1 BIT ;INICIALIZAR ERROR EN RECEPCION DE 1 BIT ;TIEMPO DE SEGURIDAD PARA LA RECEPCION DE 1 BIT (10 MSEG) MOVWF TSEG 264 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 RECT1: CLRWDT BTFSC PORTC,7 GOTO RECT2 MOVF TSEG,1 BTFSS STATUS,2 GOTO RECT1 GOTO FERRN RECT2: MOVLW 0x14 ;TIEMPO DE SEGURIDAD PARA LA RECEPCION DE 1 BIT (10 MSEG) MOVWF TSEG CLRF TREC ;TIEMPO EN ESTADO ALTO (TIEMPO DE BIT) PARA VER UN '0' O UN '1' RECT3: CLRWDT BTFSS PORTC,7 GOTO RECT4 MOVF TSEG,1 BTFSS STATUS,2 GOTO RECT3 FERRN: MOVLW 0xFF MOVWF DEL ERRONEA ;SE HA CUMPLIDO EL TIEMPO DE SEGURIDAD -> COMUNICACION RETURN RECT4: MOVLW 2 SUBWF TREC,0 BTFSS STATUS,0 GOTO FERRN ;EL SUPUESTO BIT QUE SE HA TOMADO DURA MENOS DE 1 MSEG PUEDE SER UN RUIDO EN LAS COMUNICACIONES -> TERMINAR COMUNICACION MOVLW 8 ;8 - 4MSEG SUBWF TREC,0 ;4 - 2 MSEG - BIT RECIBIDO: 0 BTFSC STATUS,0 ;0x0C - 6 MSEG - BIT RECIBIDO: 1 GOTO SDATR BCF DATOR+5,0 265 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 GOTO ROTIZ SDATR: BSF DATOR+5,0 ROTIZ: RLF DATOR+5,1 ;ROTAR A IZQ EL DATO COMPLETO PARA TOMAR EL SIG BIT RLF DATOR+4,1 RLF DATOR+3,1 RLF DATOR+2,1 RLF DATOR+1,1 RLF DATOR,1 RETURN ;COMPROBACION DE LOS BITS DE INICIO (0-1) Y DE LOS BITS DE FINAL DE DATO (1-0) FINCG: CLRWDT ;COMPROBAR DATO RECIB (BITS DE SEGU Y COMPROBACI D DATS RECIB) BTFSC DATOR+5,0 GOTO FGETC ;COMPROBACION DE LOS BITS DE INICIO Y FINAL (0-1-DATO-1-0) ;COMUNICACION ERRONEA BTFSS DATOR+5,1 GOTO FGETC ;COMUNICACION ERRONEA BTFSS DATOR,0 GOTO FGETC ;COMUNICACION ERRONEA BTFSC DATOR,1 GOTO FGETC ;COMUNICACION ERRONEA ;COMPROBACIONES DATOS RECIBIDOS (MANDO, DATO PARA EL VARIADOR DE FRECUENCIA DEL VENTILADOR, MEDIDA TEMPERATURA DE RETORNO Y CONSIGNA) MOVF DATOR+1,0 ;TOMAR VARIABLES CONTENIDAS EN EL DATO RECIBIDO BSF STATUS,5 MOVWF POS1 ;POS1-MANDO BCF STATUS,5 CALL ROTDAT CALL ROTDAT MOVF DATOR+5,0 BSF STATUS,5 MOVWF POS2 ;POS2-DAOUTC 266 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 BCF STATUS,5 MOVLW 7 ;VAL1-MEDRET (2 BYTES) ANDWF DATOR+3,0 BSF STATUS,5 MOVWF VAL1 BCF STATUS,5 MOVF DATOR+4,0 BSF STATUS,5 MOVWF VAL1+1 BCF STATUS,5 CALL ROTDAT CALL ROTDAT CALL ROTDAT MOVLW 7 ANDWF DATOR+2,0 ;VAL2-CONSIG (2 BYTES) BSF STATUS,5 MOVWF VAL2 BCF STATUS,5 MOVF DATOR+3,0 BSF STATUS,5 MOVWF VAL2+1 MOVF VAL2,1 ;COMPROB CONSIG VAL2-RANG CONSIG: ENTRE 15ºC 0x96- 30ºC-0x12C BTFSS STATUS,2 GOTO SEGCON MOVLW 0x96 SUBWF VAL2+1,0 BTFSS STATUS,0 GOTO FGETC ;CONS FUERA D RANG-COMU ERRONEA(NOVALOR CONTNIDO N L DAT) GOTO QSEGR 267 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 SEGCON: MOVLW 2 SUBWF VAL2,0 BTFSC STATUS,0 GOTO FGETC ; CONS FUERA D RANG-COMU ERRONEA(NOVALOR CONTNIDO N L DAT) MOVLW 0x2D SUBWF VAL2+1,0 BTFSC STATUS,0 GOTO FGETC ; CONS FUERA D RANG-COMU ERRONEA(NOVALOR CONTNIDO N L DAT) QSEGR: MOVLW 2 ;CONSIGNA CORRECTA - COMPROBAR AHORA LA MEDIDA DE TMPERATURA DE RETORNO (MEDRET) - RANGO: ENTRE 0ºC(0x00) Y 50ºC(0x1F4) SUBWF VAL1,0 BTFSC STATUS,0 GOTO FGETC ; CONS FUERA D RANG-COMU ERRONEA(NOVALOR CONTNIDO N L DAT) MOVF VAL1,1 BTFSC STATUS,2 GOTO CONTD MOVLW 0xF5 SUBWF VAL1+1,0 BTFSC STATUS,0 GOTO FGETC ; CONS FUERA D RANG-COMU ERRONEA(NOVALOR CONTNIDO N L DAT) CONTD: CLRWDT ;TEMPERATURA DE RETORNO CORRECTA BTFSC POS1,5 GOTO FGETC ;EL BIT 5 DE MANDO SIEMPRE ES 0 BTFSS POS1,1 GOTO CONTD1 BTFSC POS1,2 GOTO FGETC ;LOS BITS 1 Y 2 DE MANDO NO PUEDEN SER 1 LOS DOS A LA VEZ CONTD1: BCF STATUS,5 ;COMUNICACION CORRECTA - TOMAR DATOS CORRECTOS MOVLW 0x3C MOVWF TNCOM ;INICIALIZAR T PARA DAR FALLO DE COMUNICACIONES (60 SEG) 268 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 BSF STATUS,5 MOVF POS1,0 ;TO DATOS RECIB CORREC-TOMAR LOS DATOS EN LAS VAR D FUNCIONA MOVWF MANDO MOVF VAL1,0 MOVWF MEDRET MOVF VAL1+1,0 MOVWF MEDRET+1 MOVF VAL2,0 MOVWF CONSIG MOVF VAL2+1,0 MOVWF CONSIG+1 BCF STATUS,0 ;MEDRET MULTIPLICADA X 10,LA NECESI MULTIPLI X 5->DIVIDO/2 RRF MEDRET,1 RRF MEDRET+1,1 BCF STATUS,0 ;CONSIG MULTIPLICADA X 10 Y LA NECESITO MULTIPLI X5->DIVIDO/2 RRF CONSIG,1 RRF CONSIG+1,1 MOVLW 0x18 ;TOMAR Nº DE ETAPAS DE FRIO DEMANDADAS X CONTROL MAESTRO ANDWF MANDO,0 MOVWF NETAP BCF STATUS,0 RRF NETAP,1 RRF NETAP,1 RRF NETAP,1 BSF FCOM,0 ; TOMADO LOS1º DATOS -> AHORA CALCULAR LA ENTALPIA MOVLW 3 SUBWF FCOM,0 BTFSS STATUS,2 GOTO FGETC 269 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 MOVF POS2,0 BCF STATUS,5 MOVWF DAOUTC ;DATO A ENVIAR AL VARIADOR DE FRECUENCIA DEL VENTILADOR (CANAL C Y CANAL D DEL CONVERTIDOR DIGITAL-ANALOGICO MAX500) MOVWF DAOUTD GOTO CALNM ROTDAT: RRF DATOR,1 ;ROTAR EL DATO RECIBIDO EN COMUNICACIONES RRF DATOR+1,1 RRF DATOR+2,1 RRF DATOR+3,1 RRF DATOR+4,1 RRF DATOR+5,1 RETURN ;CALCULAR F-C, CALCULAR EL NUEVO MANDO Y ENVIAR A CONTROL DE CLIMATIZADORES CALNM: BSF STATUS,5 BTFSC MANDO,0 GOTO ENVMM ;CONTROL MAESTRO APAGADO - COMPUERTA A MINIMO (SIN POTENCIOMETRO O CON POTENCIOMETRO) -> ENVIAR MISMO MANDO BTFSS MANDO,1 ;CONTROL MAESTRO ENCENDIDO GOTO ENVMM ;CONTROL MAESTRO SIN PETICION DE FRIO (CALOR O NO PETICION DE ETAPAS) - COMPUERTA A MINIMO -> ENVIAR MISMO MANDO MOVF NETAP,1 BTFSC STATUS,2 GOTO ENVMM ;NO HAY DEMANDA DE ETAPAS (NETAP=0) EN MODO FRIO EN CONTROL MAESTRO - COMPUERTA A MINIMO -> ENVIAR MISMO MANDO CLRF STATUS CLRF INTCON ;SI HAY DEMANDA DE ETAPAS N MODO FRIO->COMPROBAR Nº D ETAPAS, COMPROBAR POSIBILIDAD D F-C Y EN CASO SI CALCULAR APERTURA D COMPUERTA MOVF PCLATH,0 MOVWF PCLAX2 270 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 BCF PCLATH,4 BSF PCLATH,3 CALL QFCOOL ;CALCULO DE FREE-COOLING MOVF PCLAX2,0 MOVWF PCLATH MOVLW 0xC0 MOVWF INTCON GOTO ENVCON ENVMM: CLRWDT ;NO F-C-ENVIAR MISM MANDO Q SE HA RECIB Y CRRAR CMPUERTS A MIN CLRF FC ;NO F-C (CONTROL APAGADO, NO EN MODO FRIO, NO PETICION D ETAPAS...) BTFSC FFUNC,2 ;COMPROBAR SI CONFIGU CON POT D MIN APERTURA Y VER CAL AIRE GOTO SIPOT1 ;SI HAY POTENCIOMETRO DE MINIMA APERTURA MOVF MDCALD,1 BTFSS STATUS,2 GOTO SCD2 CLRF STATUS CLRF DAOUTA ;NO HAY POTENCIOMETRO DE MINIMA APERTURA ;SAL AL SISTEM D F-C SIN POT D MIN APERTURA -> SALIDA=0 CLRF DAOUTB GOTO ENVCON SCD2: MOVF MDCALD,0 BCF STATUS,5 MOVWF DAOUTA MOVWF DAOUTB GOTO ENVCON SIPOT1: MOVF MDCALD,0 SUBWF MPMINA,0 BTFSS STATUS,0 GOTO SCD2 271 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 MOVF MPMINA,0 ;SAL AL SISTEM D F-C CON POT D MINAPERTURA -> SAL=MPMINA BCF STATUS,5 MOVWF DAOUTA MOVWF DAOUTB ENVCON: CALL CONDAT ;CONSTRUIR DATO A ENVIAR (DATOR - 40 BITS) -> 0-1MANDO(8)-TEMP.EXTERIOR(11)-PRESION(11)-APERTURA COMPUERTA(8) CALL ENVDAT FGETC: CLRWDT ;ENVIAR DATO A CONTROL DE CLIMATIZADORES ;NO HA HABIDO COMUNI -TERMINAR SUBRUTINA D COMUNI CLRF STATUS RETURN ;CONSTRUCCION DEL DATO A RESPONDER AL CONTROL DE CLIMATIZADORES (0-1-MANDO(8)TEMP.EXTERIOR(11)-PRESION(11)-APERTURA COMPUERTA(8)) CONDAT: CLRWDT CLRF STATUS MOVF FILSUC,1 ;MODIFICAR BIT DE FILTRO SUCIO EN LA VARIABLE MANDO BTFSS STATUS,2 GOTO COND1 BSF STATUS,5 BCF MANDO,7 ;NO HAY SEÑAL DE FILTRO SUCIO (FILSUC=0) GOTO COND2 COND1: BSF STATUS,5 BSF MANDO,7 ;HAY SEÑAL DE FILTRO SUCIO (FILSUC=0xFF) COND2: BCF STATUS,5 BCF DATOR+4,1 BSF DATOR+4,0 CALL ROTCON ;DESPLAZO 8 BITS A LA IZQ PA METER LA VAR MANDO EN DATOR CALL ROTCON CALL ROTCON CALL ROTCON 272 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 CALL ROTCON CALL ROTCON CALL ROTCON CALL ROTCON BSF STATUS,5 MOVF MANDO,0 BCF STATUS,5 MOVWF DATOR+4 CALL ROTCON ;DESPLAZO 11 BITS A LA IZQ PA METER LA VAR MEDEXT EN DATOR CALL ROTCON CALL ROTCON CALL ROTCON CALL ROTCON CALL ROTCON CALL ROTCON CALL ROTCON CALL ROTCON CALL ROTCON CALL ROTCON MOVF MEDEXT,0 ;MULTIPL MEDEXT X2 XQ SE ENVIA MULTIPL X10 Y ESTA MULTIPLX5 MOVWF MEDM MOVF MEDEXT+1,0 MOVWF MEDM+1 BCF STATUS,0 RLF MEDM+1,1 RLF MEDM,1 MOVF MEDM+1,0 MOVWF DATOR+4 MOVLW 7 273 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 ANDWF MEDM,0 IORWF DATOR+3,1 CLRWDT CALL ROTCON ;DESPLAZO 11 BITS A LA IZQ PA METER LA VAR MDPRES EN DATOR CALL ROTCON CALL ROTCON CALL ROTCON CALL ROTCON CALL ROTCON CALL ROTCON CALL ROTCON CALL ROTCON CALL ROTCON CALL ROTCON BSF STATUS,5 MOVF MDPRES+1,0 BCF STATUS,5 MOVWF DATOR+4 BSF STATUS,5 MOVLW 7 ANDWF MDPRES,0 BCF STATUS,5 IORWF DATOR+3,1 CALL ROTCON ;DESPLAZO 8 BITS A LA IZQ PA METER LA VAR DAOUTA EN DATOR CALL ROTCON CALL ROTCON CALL ROTCON CALL ROTCON CALL ROTCON 274 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 CALL ROTCON CALL ROTCON MOVF DAOUTA,0 MOVWF DATOR+4 RETURN ROTCON: BCF STATUS,0 RLF DATOR+4,1 ;ROTAR DATO QUE SE ESTA CONSTRUYENDO RLF DATOR+3,1 RLF DATOR+2,1 RLF DATOR+1,1 RLF DATOR,1 RETURN ;SUBRUTINA DE ENVIO DE BITS DEL DATO AL CONTROL D CLIMATIZADORES(ENVIO DE 40 BITS) ENVDAT: CLRWDT CALL DELAY ;RETARDO ANTES DE RESPUESTA MOVLW 0x28 ;SUBRUTINA DE ENVIO DE LOS BITS DE DATOC MOVWF DEL ;NUMERO DE BITS QUE SE ENVIAN - 40 BITS SDAT2: BTFSC DATOR,7 GOTO SDATL SDATC: MOVLW 4 ;BIT '0' - 2 MSEG GOTO SDATM SDATL: MOVLW 0x0C ;BIT '1' - 6 MSEG SDATM: MOVWF TSEG CALL SENVD CALL ROTCON ;ENVIO DE 1 BIT Y TIEMPO ENTRE DATOS ;ROTAR DATOR PARA ENVIAR OTRO BIT DEL DATO DECFSZ DEL,1 GOTO SDAT2 RETURN 275 MEMORIA VI. Código fuente SENVD: BSF PORTC,6 Capítulo 2. Código de la tarjeta SA98 ;ENVIO DE 1 BIT NENVX: CLRWDT MOVF TSEG,1 BTFSS STATUS,2 GOTO NENVX STENTS: BCF PORTC,6 MOVLW 0x0C ;TIEMPO ENTRE DATOS - 6 MSEG MOVWF TSEG SDATED: CLRWDT MOVF TSEG,1 BTFSS STATUS,2 GOTO SDATED RETURN ;***************************************************************************** ;SUBRUTINA DE RETARDO (APROXIMADAMENTE 5 MSEG) DELAY: CLRF DEL MDEL: CLRWDT CALL DELB DECFSZ DEL,1 GOTO MDEL RETURN DELB: NOP NOP NOP NOP NOP NOP NOP NOP 276 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 NOP NOP NOP NOP NOP RETURN ;INTERRUPCIONES INTER: MOVWF WAUX ;GUARDA N MEM WORK REG(WREG),STATUS REG(STATUS) Y PCLATH SWAPF STATUS,0 CLRF STATUS MOVWF STAUX SWAPF PCLATH,0 MOVWF PCLAX1 CLRF PCLATH BTFSC PIR1,6 ;COMPROBAR SI LA INTERR CAUSADA ES POR TIMER2 O CONV A/D GOTO INTAD ;INTERRUPCION CONVERTIDOR A/D BTFSC PIR1,1 GOTO TIMER ;INTERRUPCION TIMER2 FINTER: SWAPF PCLAX1,0 MOVWF PCLATH SWAPF STAUX,0 ;RECUPERO WORK REG (WREG), STATUS REG (STATUS) Y PCLATH MOVWF STATUS SWAPF WAUX,1 SWAPF WAUX,0 RETFIE ;FINAL DE LA INTERRUPCION ;SUBRUTINA INTERRUPCION TIMER2 TIMER: BCF PIR1,1 ;DESHABILITAR INTERR TIMER2 - INTERR CADA 0.5 MSEG MOVF TSEG,1 BTFSS STATUS,2 277 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 DECF TSEG,1 ;TIEMPO DE SEGURIDAD EN COMUNICACIONES INCF TREC,1 ;TIEMPO DE RECEPCION DEL BIT DE COMUNICACIONES INCF TIME,1 MOVLW 0x64 SUBWF TIME,0 BTFSS STATUS,0 GOTO FINTER CLRF TIME ;0.5 MSEG x 100(0x64) = 50 MSEG BSF STATUS,5 BSF PIE1,6 ;HABILITAR INTERRUPCION DEL CONVERTIDOR A/D - CADA 50 MSEG CLRF STATUS BSF ADCON0,2 ;ARRANCAR UNA CONVERSION DEL CONVERTIDOR A/D INCF TIME+1,1 MOVLW 4 SUBWF TIME+1,0 BTFSS STATUS,0 GOTO FINTER CLRF TIME+1 ;50 MSEG x 4(4) = 200 MSEG BSF STATUS,5 BTFSC FFUNC,0 GOTO ENLAUT ;EN AUTOTEST - LED RUN ENCENDIDO SIN PARPADEO BCF STATUS,5 BTFSS PORTD,2 ;EN FUNCIONA NORMAL - PARPADEO LED RUN CADA 200 MSEG GOTO LEDR ENLAUT: BCF STATUS,5 BCF PORTD,2 GOTO T1SEG LEDR: BSF PORTD,2 278 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 T1SEG: INCF TIME+2,1 MOVLW 5 SUBWF TIME+2,0 BTFSS STATUS,0 GOTO FINTER CLRF TIME+2 ;0.2 SEG x 5(5) = 1 SEG MOVF TDA,1 ;CUENTA EL T PARA REALIZAR SAL AL CONV DIG-ANALOG MAX500 BTFSS STATUS,2 DECF TDA,1 MOVF TNCOM,1 ;CUENTA EL TIEMPO PARA ERROR DE COMUNICACIONES BTFSS STATUS,2 DECF TNCOM,1 GOTO FINTER ;SUBRUTINA INTERRUPCION CONVERTIDOR ANALOGICO/DIGITAL INTAD: BTFSC ADCON0,5 ;CANAL CONVERTIDOR ANALOGICO DIGITAL GOTO QCAN2 BTFSC ADCON0,4 GOTO QCAN1 BTFSC ADCON0,3 GOTO CAN1 ;CANAL 1 GOTO CAN0 ;CANAL 0 QCAN1: BTFSC ADCON0,3 GOTO CAN3 ;CANAL 3 GOTO CAN2 ;CANAL 2 QCAN2: BTFSC ADCON0,4 GOTO QCAN3 BTFSC ADCON0,3 GOTO CAN5 ;CANAL 5 GOTO CAN4 ;CANAL 4 279 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 QCAN3: BTFSC ADCON0,3 GOTO CAN7 ;CANAL 7 GOTO CAN6 ;CANAL 6 ;MEDIDA ANALOGICA - CANAL 0 DEL CONVERTIDOR ANALOGICO DIGITAL CAN0: CLRWDT ;CANAL 0 MOVF MDAN0+5,0 ;TOMA DATO NUEVO D ULTI CONVER DL CANAL ANALOG DIG SELEC MOVWF MDAN0+7 MOVF MDAN0+4,0 MOVWF MDAN0+6 MOVF MDAN0+3,0 MOVWF MDAN0+5 MOVF MDAN0+2,0 MOVWF MDAN0+4 MOVF MDAN0+1,0 MOVWF MDAN0+3 MOVF MDAN0,0 MOVWF MDAN0+2 BSF STATUS,5 MOVF ADRESL,0 BCF STATUS,5 MOVWF MDAN0+1 MOVF ADRESH,0 MOVWF MDAN0 MOVLW 4 ;TOMA 4 MEDIDAS SEG SIN SEGURIDAD AL INI DL SOFTWARE SUBWF NAD,0 BTFSS STATUS,0 GOTO PONC1 MOVF MDAN0+2,0 ;SEGURIDAD EN LAS MEDIDAS TOMADAS DL CONV SUBWF MDAN0,0 280 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 BTFSS STATUS,2 GOTO C0NIG1 MOVF MDAN0+3,0 SUBWF MDAN0+1,0 BTFSS STATUS,2 GOTO C0NIG2 GOTO PONC1 C0NIG1: MOVF MDAN0+2,0 SUBWF MDAN0,0 BTFSS STATUS,0 GOTO C0RM1 C0SM1: MOVLW 3 SUBWF MDAN0,0 BTFSS STATUS,2 GOTO C0SM2 MOVLW 0xF7 SUBWF MDAN0+1,0 BTFSC STATUS,0 GOTO PONC1 C0SM2: MOVF MDAN0+2,0 MOVWF MDAUX MOVLW 8 ADDWF MDAN0+3,0 MOVWF MDAUX+1 BTFSC STATUS,0 INCF MDAUX,1 GOTO C0IG1 C0NIG2: MOVF MDAN0+3,0 SUBWF MDAN0+1,0 281 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 BTFSC STATUS,0 GOTO C0SM1 C0RM1: MOVF MDAN0,1 BTFSS STATUS,2 GOTO C0RM2 MOVLW 8 SUBWF MDAN0+1,0 BTFSS STATUS,0 GOTO PONC1 C0RM2: MOVF MDAN0+2,0 MOVWF MDAUX MOVLW 8 SUBWF MDAN0+3,0 MOVWF MDAUX+1 BTFSS STATUS,0 DECF MDAUX,1 GOTO C0IG2 C0IG1: MOVF MDAUX,0 SUBWF MDAN0,0 BTFSS STATUS,2 GOTO C0IG3 MOVF MDAUX+1,0 SUBWF MDAN0+1,0 BTFSS STATUS,2 GOTO C0IG4 GOTO PONC1 C0IG3: MOVF MDAUX,0 SUBWF MDAN0,0 BTFSS STATUS,0 282 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 GOTO PONC1 GOTO C0VL1 C0IG4: MOVF MDAUX+1,0 SUBWF MDAN0+1,0 BTFSS STATUS,0 GOTO PONC1 C0VL1: MOVF MDAUX,0 MOVWF MDAN0 MOVF MDAUX+1,0 MOVWF MDAN0+1 GOTO PONC1 C0IG2: MOVF MDAUX,0 SUBWF MDAN0,0 BTFSS STATUS,2 GOTO C0IG5 MOVF MDAUX+1,0 SUBWF MDAN0+1,0 BTFSS STATUS,2 GOTO C0IG6 GOTO PONC1 C0IG5: MOVF MDAUX,0 SUBWF MDAN0,0 BTFSS STATUS,0 GOTO C0VL1 GOTO PONC1 C0IG6: MOVF MDAUX+1,0 SUBWF MDAN0+1,0 BTFSS STATUS,0 GOTO C0VL1 283 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 PONC1: BSF ADCON0,3 ;PONER CANAL 1 BCF ADCON0,4 BCF ADCON0,5 GOTO RETAD ;MEDIDA ANALOGICA - CANAL 1 DEL CONVERTIDOR ANALOGICO DIGITAL CAN1: CLRWDT ;CANAL 1 MOVF MDAN1+5,0 ;TOMA DATO NUEVO D LA ULTI CONV DL CANAL ANALOG DIG SELEC MOVWF MDAN1+7 MOVF MDAN1+4,0 MOVWF MDAN1+6 MOVF MDAN1+3,0 MOVWF MDAN1+5 MOVF MDAN1+2,0 MOVWF MDAN1+4 MOVF MDAN1+1,0 MOVWF MDAN1+3 MOVF MDAN1,0 MOVWF MDAN1+2 BSF STATUS,5 MOVF ADRESL,0 BCF STATUS,5 MOVWF MDAN1+1 MOVF ADRESH,0 MOVWF MDAN1 MOVLW 4 ;TOMA 4 MEDIDAS SEGUIDAS SIN SEGURIDAD AL INI DL SOFTWARE SUBWF NAD,0 BTFSS STATUS,0 GOTO PONC2 MOVF MDAN1+2,0 ;SEGURIDAD EN LAS MEDIDAS 284 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 SUBWF MDAN1,0 BTFSS STATUS,2 GOTO C1NIG1 MOVF MDAN1+3,0 SUBWF MDAN1+1,0 BTFSS STATUS,2 GOTO C1NIG2 GOTO PONC2 C1NIG1: MOVF MDAN1+2,0 SUBWF MDAN1,0 BTFSS STATUS,0 GOTO C1RM1 C1SM1: MOVLW 3 SUBWF MDAN1,0 BTFSS STATUS,2 GOTO C1SM2 MOVLW 0xF7 SUBWF MDAN1+1,0 BTFSC STATUS,0 GOTO PONC2 C1SM2: MOVF MDAN1+2,0 MOVWF MDAUX MOVLW 8 ADDWF MDAN1+3,0 MOVWF MDAUX+1 BTFSC STATUS,0 INCF MDAUX,1 GOTO C1IG1 C1NIG2: MOVF MDAN1+3,0 285 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 SUBWF MDAN1+1,0 BTFSC STATUS,0 GOTO C1SM1 C1RM1: MOVF MDAN1,1 BTFSS STATUS,2 GOTO C1RM2 MOVLW 8 SUBWF MDAN1+1,0 BTFSS STATUS,0 GOTO PONC2 C1RM2: MOVF MDAN1+2,0 MOVWF MDAUX MOVLW 8 SUBWF MDAN1+3,0 MOVWF MDAUX+1 BTFSS STATUS,0 DECF MDAUX,1 GOTO C1IG2 C1IG1: MOVF MDAUX,0 SUBWF MDAN1,0 BTFSS STATUS,2 GOTO C1IG3 MOVF MDAUX+1,0 SUBWF MDAN1+1,0 BTFSS STATUS,2 GOTO C1IG4 GOTO PONC2 C1IG3: MOVF MDAUX,0 SUBWF MDAN1,0 286 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 BTFSS STATUS,0 GOTO PONC2 GOTO C1VL1 C1IG4: MOVF MDAUX+1,0 SUBWF MDAN1+1,0 BTFSS STATUS,0 GOTO PONC2 C1VL1: MOVF MDAUX,0 MOVWF MDAN1 MOVF MDAUX+1,0 MOVWF MDAN1+1 GOTO PONC2 C1IG2: MOVF MDAUX,0 SUBWF MDAN1,0 BTFSS STATUS,2 GOTO C1IG5 MOVF MDAUX+1,0 SUBWF MDAN1+1,0 BTFSS STATUS,2 GOTO C1IG6 GOTO PONC2 C1IG5: MOVF MDAUX,0 SUBWF MDAN1,0 BTFSS STATUS,0 GOTO C1VL1 GOTO PONC2 C1IG6: MOVF MDAUX+1,0 SUBWF MDAN1+1,0 BTFSS STATUS,0 287 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 GOTO C1VL1 PONC2: BCF ADCON0,3 ;PONER CANAL 2 BSF ADCON0,4 BCF ADCON0,5 GOTO RETAD ;MEDIDA ANALOGICA - CANAL 2 DEL CONVERTIDOR ANALOGICO DIGITAL CAN2: CLRWDT ;CANAL 2 MOVF MDAN2+5,0 ;TOMAR UN DATO NUEVO DE LA ULTI CONV DL CANAL ANALOGICO DIGITAL SELECCIONADO MOVWF MDAN2+7 MOVF MDAN2+4,0 MOVWF MDAN2+6 MOVF MDAN2+3,0 MOVWF MDAN2+5 MOVF MDAN2+2,0 MOVWF MDAN2+4 MOVF MDAN2+1,0 MOVWF MDAN2+3 MOVF MDAN2,0 MOVWF MDAN2+2 BSF STATUS,5 MOVF ADRESL,0 BCF STATUS,5 MOVWF MDAN2+1 MOVF ADRESH,0 MOVWF MDAN2 MOVLW 4 ;TOMAR 4 MEDIDAS SEGSIN SEGURIDAD AL INI DL SOFTWARE SUBWF NAD,0 BTFSS STATUS,0 GOTO PONC3 288 MEMORIA VI. Código fuente MOVF MDAN2+2,0 Capítulo 2. Código de la tarjeta SA98 ;SEGURIDAD EN LAS MEDIDAS SUBWF MDAN2,0 BTFSS STATUS,2 GOTO C2NIG1 MOVF MDAN2+3,0 SUBWF MDAN2+1,0 BTFSS STATUS,2 GOTO C2NIG2 GOTO PONC3 C2NIG1: MOVF MDAN2+2,0 SUBWF MDAN2,0 BTFSS STATUS,0 GOTO C2RM1 C2SM1: MOVLW 3 SUBWF MDAN2,0 BTFSS STATUS,2 GOTO C2SM2 MOVLW 0xF7 SUBWF MDAN2+1,0 BTFSC STATUS,0 GOTO PONC3 C2SM2: MOVF MDAN2+2,0 MOVWF MDAUX MOVLW 8 ADDWF MDAN2+3,0 MOVWF MDAUX+1 BTFSC STATUS,0 INCF MDAUX,1 GOTO C2IG1 289 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 C2NIG2: MOVF MDAN2+3,0 SUBWF MDAN2+1,0 BTFSC STATUS,0 GOTO C2SM1 C2RM1: MOVF MDAN2,1 BTFSS STATUS,2 GOTO C2RM2 MOVLW 8 SUBWF MDAN2+1,0 BTFSS STATUS,0 GOTO PONC3 C2RM2: MOVF MDAN2+2,0 MOVWF MDAUX MOVLW 8 SUBWF MDAN2+3,0 MOVWF MDAUX+1 BTFSS STATUS,0 DECF MDAUX,1 GOTO C2IG2 C2IG1: MOVF MDAUX,0 SUBWF MDAN2,0 BTFSS STATUS,2 GOTO C2IG3 MOVF MDAUX+1,0 SUBWF MDAN2+1,0 BTFSS STATUS,2 GOTO C2IG4 GOTO PONC3 C2IG3: MOVF MDAUX,0 290 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 SUBWF MDAN2,0 BTFSS STATUS,0 GOTO PONC3 GOTO C2VL1 C2IG4: MOVF MDAUX+1,0 SUBWF MDAN2+1,0 BTFSS STATUS,0 GOTO PONC3 C2VL1: MOVF MDAUX,0 MOVWF MDAN2 MOVF MDAUX+1,0 MOVWF MDAN2+1 GOTO PONC3 C2IG2: MOVF MDAUX,0 SUBWF MDAN2,0 BTFSS STATUS,2 GOTO C2IG5 MOVF MDAUX+1,0 SUBWF MDAN2+1,0 BTFSS STATUS,2 GOTO C2IG6 GOTO PONC3 C2IG5: MOVF MDAUX,0 SUBWF MDAN2,0 BTFSS STATUS,0 GOTO C2VL1 GOTO PONC3 C2IG6: MOVF MDAUX+1,0 SUBWF MDAN2+1,0 291 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 BTFSS STATUS,0 GOTO C2VL1 PONC3: BSF ADCON0,3 ;PONER CANAL 3 BSF ADCON0,4 BCF ADCON0,5 GOTO RETAD ;MEDIDA ANALOGICA - CANAL 3 DEL CONVERTIDOR ANALOGICO DIGITAL CAN3: CLRWDT ;CANAL 3 MOVF MDAN3+5,0 ;TOMA DATO NUEVO D ULTI CONV DL CANAL ANALOG DIG SELEC MOVWF MDAN3+7 MOVF MDAN3+4,0 MOVWF MDAN3+6 MOVF MDAN3+3,0 MOVWF MDAN3+5 MOVF MDAN3+2,0 MOVWF MDAN3+4 MOVF MDAN3+1,0 MOVWF MDAN3+3 MOVF MDAN3,0 MOVWF MDAN3+2 BSF STATUS,5 MOVF ADRESL,0 BCF STATUS,5 MOVWF MDAN3+1 MOVF ADRESH,0 MOVWF MDAN3 MOVLW 4 ;TOMAR 4 MEDIDAS SEG SIN SEGURIDAD AL INI DEL SOFTWARE SUBWF NAD,0 BTFSS STATUS,0 292 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 GOTO PONC4 MOVF MDAN3+2,0 ;SEGUN LS MED SUBWF MDAN3,0 BTFSS STATUS,2 GOTO C3NIG1 MOVF MDAN3+3,0 SUBWF MDAN3+1,0 BTFSS STATUS,2 GOTO C3NIG2 GOTO PONC4 C3NIG1: MOVF MDAN3+2,0 SUBWF MDAN3,0 BTFSS STATUS,0 GOTO C3RM1 C3SM1: MOVLW 3 SUBWF MDAN3,0 BTFSS STATUS,2 GOTO C3SM2 MOVLW 0xF7 SUBWF MDAN3+1,0 BTFSC STATUS,0 GOTO PONC4 C3SM2: MOVF MDAN3+2,0 MOVWF MDAUX MOVLW 8 ADDWF MDAN3+3,0 MOVWF MDAUX+1 BTFSC STATUS,0 INCF MDAUX,1 293 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 GOTO C3IG1 C3NIG2: MOVF MDAN3+3,0 SUBWF MDAN3+1,0 BTFSC STATUS,0 GOTO C3SM1 C3RM1: MOVF MDAN3,1 BTFSS STATUS,2 GOTO C3RM2 MOVLW 8 SUBWF MDAN3+1,0 BTFSS STATUS,0 GOTO PONC4 C3RM2: MOVF MDAN3+2,0 MOVWF MDAUX MOVLW 8 SUBWF MDAN3+3,0 MOVWF MDAUX+1 BTFSS STATUS,0 DECF MDAUX,1 GOTO C3IG2 C3IG1: MOVF MDAUX,0 SUBWF MDAN3,0 BTFSS STATUS,2 GOTO C3IG3 MOVF MDAUX+1,0 SUBWF MDAN3+1,0 BTFSS STATUS,2 GOTO C3IG4 GOTO PONC4 294 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 C3IG3: MOVF MDAUX,0 SUBWF MDAN3,0 BTFSS STATUS,0 GOTO PONC4 GOTO C3VL1 C3IG4: MOVF MDAUX+1,0 SUBWF MDAN3+1,0 BTFSS STATUS,0 GOTO PONC4 C3VL1: MOVF MDAUX,0 MOVWF MDAN3 MOVF MDAUX+1,0 MOVWF MDAN3+1 GOTO PONC4 C3IG2: MOVF MDAUX,0 SUBWF MDAN3,0 BTFSS STATUS,2 GOTO C3IG5 MOVF MDAUX+1,0 SUBWF MDAN3+1,0 BTFSS STATUS,2 GOTO C3IG6 GOTO PONC4 C3IG5: MOVF MDAUX,0 SUBWF MDAN3,0 BTFSS STATUS,0 GOTO C3VL1 GOTO PONC4 C3IG6: MOVF MDAUX+1,0 295 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 SUBWF MDAN3+1,0 BTFSS STATUS,0 GOTO C3VL1 PONC4: BCF ADCON0,3 ;PONER CANAL 4 BCF ADCON0,4 BSF ADCON0,5 GOTO RETAD ;MEDIDA ANALOGICA - CANAL 4 DEL CONVERTIDOR ANALOGICO DIGITAL CAN4: CLRWDT ;CANAL 4 MOVF MDAN4+5,0 ;TOMA DATO NUEVO D LA ULTI CONV DL CANAL ANALOG DIG SELEC MOVWF MDAN4+7 MOVF MDAN4+4,0 MOVWF MDAN4+6 MOVF MDAN4+3,0 MOVWF MDAN4+5 MOVF MDAN4+2,0 MOVWF MDAN4+4 MOVF MDAN4+1,0 MOVWF MDAN4+3 MOVF MDAN4,0 MOVWF MDAN4+2 BSF STATUS,5 MOVF ADRESL,0 BCF STATUS,5 MOVWF MDAN4+1 MOVF ADRESH,0 MOVWF MDAN4 MOVLW 4 ;TOMAR 4 MEDIDAS SEG SIN SEGURIDAD AL INI DL SOFTWARE SUBWF NAD,0 296 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 BTFSS STATUS,0 GOTO PONC5 MOVF MDAN4+2,0 ;SEGURIDAD EN LAS MEDIDAS SUBWF MDAN4,0 BTFSS STATUS,2 GOTO C4NIG1 MOVF MDAN4+3,0 SUBWF MDAN4+1,0 BTFSS STATUS,2 GOTO C4NIG2 GOTO PONC5 C4NIG1: MOVF MDAN4+2,0 SUBWF MDAN4,0 BTFSS STATUS,0 GOTO C4RM1 C4SM1: MOVLW 3 SUBWF MDAN4,0 BTFSS STATUS,2 GOTO C4SM2 MOVLW 0xF7 SUBWF MDAN4+1,0 BTFSC STATUS,0 GOTO PONC5 C4SM2: MOVF MDAN4+2,0 MOVWF MDAUX MOVLW 8 ADDWF MDAN4+3,0 MOVWF MDAUX+1 BTFSC STATUS,0 INCF MDAUX,1 297 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 GOTO C4IG1 C4NIG2: MOVF MDAN4+3,0 SUBWF MDAN4+1,0 BTFSC STATUS,0 GOTO C4SM1 C4RM1: MOVF MDAN4,1 BTFSS STATUS,2 GOTO C4RM2 MOVLW 8 SUBWF MDAN4+1,0 BTFSS STATUS,0 GOTO PONC5 C4RM2: MOVF MDAN4+2,0 MOVWF MDAUX MOVLW 8 SUBWF MDAN4+3,0 MOVWF MDAUX+1 BTFSS STATUS,0 DECF MDAUX,1 GOTO C4IG2 C4IG1: MOVF MDAUX,0 SUBWF MDAN4,0 BTFSS STATUS,2 GOTO C4IG3 MOVF MDAUX+1,0 SUBWF MDAN4+1,0 BTFSS STATUS,2 GOTO C4IG4 GOTO PONC5 298 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 C4IG3: MOVF MDAUX,0 SUBWF MDAN4,0 BTFSS STATUS,0 GOTO PONC5 GOTO C4VL1 C4IG4: MOVF MDAUX+1,0 SUBWF MDAN4+1,0 BTFSS STATUS,0 GOTO PONC5 C4VL1: MOVF MDAUX,0 MOVWF MDAN4 MOVF MDAUX+1,0 MOVWF MDAN4+1 GOTO PONC5 C4IG2: MOVF MDAUX,0 SUBWF MDAN4,0 BTFSS STATUS,2 GOTO C4IG5 MOVF MDAUX+1,0 SUBWF MDAN4+1,0 BTFSS STATUS,2 GOTO C4IG6 GOTO PONC5 C4IG5: MOVF MDAUX,0 SUBWF MDAN4,0 BTFSS STATUS,0 GOTO C4VL1 GOTO PONC5 C4IG6: MOVF MDAUX+1,0 299 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 SUBWF MDAN4+1,0 BTFSS STATUS,0 GOTO C4VL1 PONC5: BSF ADCON0,3 ;PONER CANAL 5 BCF ADCON0,4 BSF ADCON0,5 GOTO RETAD ;MEDIDA ANALOGICA - CANAL 5 DEL CONVERTIDOR ANALOGICO DIGITAL CAN5: CLRWDT ;CANAL 5 MOVF MDAN5+5,0 ;TOMA DATO NUEVO D LA ULTI CONV DL CANAL ANALOG DIG SELEC MOVWF MDAN5+7 MOVF MDAN5+4,0 MOVWF MDAN5+6 MOVF MDAN5+3,0 MOVWF MDAN5+5 MOVF MDAN5+2,0 MOVWF MDAN5+4 MOVF MDAN5+1,0 MOVWF MDAN5+3 MOVF MDAN5,0 MOVWF MDAN5+2 BSF STATUS,5 MOVF ADRESL,0 BCF STATUS,5 MOVWF MDAN5+1 MOVF ADRESH,0 MOVWF MDAN5 MOVLW 4 ;TOMAR 4 MEDIDAS SEG SIN SEGURIDAD AL INI DL SOFTWARE SUBWF NAD,0 300 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 BTFSS STATUS,0 GOTO PONC6 MOVF MDAN5+2,0 ;SEGURIDAD EN LAS MEDIDAS SUBWF MDAN5,0 BTFSS STATUS,2 GOTO C5NIG1 MOVF MDAN5+3,0 SUBWF MDAN5+1,0 BTFSS STATUS,2 GOTO C5NIG2 GOTO PONC6 C5NIG1: MOVF MDAN5+2,0 SUBWF MDAN5,0 BTFSS STATUS,0 GOTO C5RM1 C5SM1: MOVLW 3 SUBWF MDAN5,0 BTFSS STATUS,2 GOTO C5SM2 MOVLW 0xF7 SUBWF MDAN5+1,0 BTFSC STATUS,0 GOTO PONC6 C5SM2: MOVF MDAN5+2,0 MOVWF MDAUX MOVLW 8 ADDWF MDAN5+3,0 MOVWF MDAUX+1 BTFSC STATUS,0 301 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 INCF MDAUX,1 GOTO C5IG1 C5NIG2: MOVF MDAN5+3,0 SUBWF MDAN5+1,0 BTFSC STATUS,0 GOTO C5SM1 C5RM1: MOVF MDAN5,1 BTFSS STATUS,2 GOTO C5RM2 MOVLW 8 SUBWF MDAN5+1,0 BTFSS STATUS,0 GOTO PONC6 C5RM2: MOVF MDAN5+2,0 MOVWF MDAUX MOVLW 8 SUBWF MDAN5+3,0 MOVWF MDAUX+1 BTFSS STATUS,0 DECF MDAUX,1 GOTO C5IG2 C5IG1: MOVF MDAUX,0 SUBWF MDAN5,0 BTFSS STATUS,2 GOTO C5IG3 MOVF MDAUX+1,0 SUBWF MDAN5+1,0 BTFSS STATUS,2 GOTO C5IG4 302 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 GOTO PONC6 C5IG3: MOVF MDAUX,0 SUBWF MDAN5,0 BTFSS STATUS,0 GOTO PONC6 GOTO C5VL1 C5IG4: MOVF MDAUX+1,0 SUBWF MDAN5+1,0 BTFSS STATUS,0 GOTO PONC6 C5VL1: MOVF MDAUX,0 MOVWF MDAN5 MOVF MDAUX+1,0 MOVWF MDAN5+1 GOTO PONC6 C5IG2: MOVF MDAUX,0 SUBWF MDAN5,0 BTFSS STATUS,2 GOTO C5IG5 MOVF MDAUX+1,0 SUBWF MDAN5+1,0 BTFSS STATUS,2 GOTO C5IG6 GOTO PONC6 C5IG5: MOVF MDAUX,0 SUBWF MDAN5,0 BTFSS STATUS,0 GOTO C5VL1 GOTO PONC6 303 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 C5IG6: MOVF MDAUX+1,0 SUBWF MDAN5+1,0 BTFSS STATUS,0 GOTO C5VL1 PONC6: BCF ADCON0,3 ;PONER CANAL 6 BSF ADCON0,4 BSF ADCON0,5 GOTO RETAD ;MEDIDA ANALOGICA - CANAL 6 DEL CONVERTIDOR ANALOGICO DIGITAL CAN6: CLRWDT ;CANAL 6 MOVF MDAN6+5,0 ;TOMA DATO NUEVO D LA ULTI CONV DL CANAL ANALOG DIG SELEC MOVWF MDAN6+7 MOVF MDAN6+4,0 MOVWF MDAN6+6 MOVF MDAN6+3,0 MOVWF MDAN6+5 MOVF MDAN6+2,0 MOVWF MDAN6+4 MOVF MDAN6+1,0 MOVWF MDAN6+3 MOVF MDAN6,0 MOVWF MDAN6+2 BSF STATUS,5 MOVF ADRESL,0 BCF STATUS,5 MOVWF MDAN6+1 MOVF ADRESH,0 MOVWF MDAN6 MOVLW 4 ;TOMAR 4 MEDIDAS SEG SIN SEGURIDAD AL INI DL SOFTWARE 304 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 SUBWF NAD,0 BTFSS STATUS,0 GOTO PONC7 MOVF MDAN6+2,0 ;SEGURIDAD EN LAS MEDIDAS SUBWF MDAN6,0 BTFSS STATUS,2 GOTO C6NIG1 MOVF MDAN6+3,0 SUBWF MDAN6+1,0 BTFSS STATUS,2 GOTO C6NIG2 GOTO PONC7 C6NIG1: MOVF MDAN6+2,0 SUBWF MDAN6,0 BTFSS STATUS,0 GOTO C6RM1 C6SM1: MOVLW 3 SUBWF MDAN6,0 BTFSS STATUS,2 GOTO C6SM2 MOVLW 0xF7 SUBWF MDAN6+1,0 BTFSC STATUS,0 GOTO PONC7 C6SM2: MOVF MDAN6+2,0 MOVWF MDAUX MOVLW 8 ADDWF MDAN6+3,0 MOVWF MDAUX+1 305 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 BTFSC STATUS,0 INCF MDAUX,1 GOTO C6IG1 C6NIG2: MOVF MDAN6+3,0 SUBWF MDAN6+1,0 BTFSC STATUS,0 GOTO C6SM1 C6RM1: MOVF MDAN6,1 BTFSS STATUS,2 GOTO C6RM2 MOVLW 8 SUBWF MDAN6+1,0 BTFSS STATUS,0 GOTO PONC7 C6RM2: MOVF MDAN6+2,0 MOVWF MDAUX MOVLW 8 SUBWF MDAN6+3,0 MOVWF MDAUX+1 BTFSS STATUS,0 DECF MDAUX,1 GOTO C6IG2 C6IG1: MOVF MDAUX,0 SUBWF MDAN6,0 BTFSS STATUS,2 GOTO C6IG3 MOVF MDAUX+1,0 SUBWF MDAN6+1,0 BTFSS STATUS,2 306 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 GOTO C6IG4 GOTO PONC7 C6IG3: MOVF MDAUX,0 SUBWF MDAN6,0 BTFSS STATUS,0 GOTO PONC7 GOTO C6VL1 C6IG4: MOVF MDAUX+1,0 SUBWF MDAN6+1,0 BTFSS STATUS,0 GOTO PONC7 C6VL1: MOVF MDAUX,0 MOVWF MDAN6 MOVF MDAUX+1,0 MOVWF MDAN6+1 GOTO PONC7 C6IG2: MOVF MDAUX,0 SUBWF MDAN6,0 BTFSS STATUS,2 GOTO C6IG5 MOVF MDAUX+1,0 SUBWF MDAN6+1,0 BTFSS STATUS,2 GOTO C6IG6 GOTO PONC7 C6IG5: MOVF MDAUX,0 SUBWF MDAN6,0 BTFSS STATUS,0 GOTO C6VL1 307 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 GOTO PONC7 C6IG6: MOVF MDAUX+1,0 SUBWF MDAN6+1,0 BTFSS STATUS,0 GOTO C6VL1 PONC7: BSF ADCON0,3 ;PONER CANAL 7 BSF ADCON0,4 BSF ADCON0,5 GOTO RETAD ;MEDIDA ANALOGICA - CANAL 7 DEL CONVERTIDOR ANALOGICO DIGITAL CAN7: CLRWDT ;CANAL 7 MOVF MDAN7+5,0 ;TOMA DATO NUEV DE LA ULTI CONV DL CANAL ANALOG DIG SELEC MOVWF MDAN7+7 MOVF MDAN7+4,0 MOVWF MDAN7+6 MOVF MDAN7+3,0 MOVWF MDAN7+5 MOVF MDAN7+2,0 MOVWF MDAN7+4 MOVF MDAN7+1,0 MOVWF MDAN7+3 MOVF MDAN7,0 MOVWF MDAN7+2 BSF STATUS,5 MOVF ADRESL,0 BCF STATUS,5 MOVWF MDAN7+1 MOVF ADRESH,0 MOVWF MDAN7 308 MEMORIA VI. Código fuente MOVLW 4 Capítulo 2. Código de la tarjeta SA98 ;TOMAR 4 MEDIDAS SEG SIN SEGURIDAD AL INI DL SOFTWARE SUBWF NAD,0 BTFSS STATUS,0 GOTO INNAD MOVF MDAN7+2,0 ;SEGURIDAD EN LAS MEDIDAS SUBWF MDAN7,0 BTFSS STATUS,2 GOTO C7NIG1 MOVF MDAN7+3,0 SUBWF MDAN7+1,0 BTFSS STATUS,2 GOTO C7NIG2 GOTO PONC0 C7NIG1: MOVF MDAN7+2,0 SUBWF MDAN7,0 BTFSS STATUS,0 GOTO C7RM1 C7SM1: MOVLW 3 SUBWF MDAN7,0 BTFSS STATUS,2 GOTO C7SM2 MOVLW 0xF7 SUBWF MDAN7+1,0 BTFSC STATUS,0 GOTO PONC0 C7SM2: MOVF MDAN7+2,0 MOVWF MDAUX MOVLW 8 ADDWF MDAN7+3,0 309 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 MOVWF MDAUX+1 BTFSC STATUS,0 INCF MDAUX,1 GOTO C7IG1 C7NIG2: MOVF MDAN7+3,0 SUBWF MDAN7+1,0 BTFSC STATUS,0 GOTO C7SM1 C7RM1: MOVF MDAN7,1 BTFSS STATUS,2 GOTO C7RM2 MOVLW 8 SUBWF MDAN7+1,0 BTFSS STATUS,0 GOTO PONC0 C7RM2: MOVF MDAN7+2,0 MOVWF MDAUX MOVLW 8 SUBWF MDAN7+3,0 MOVWF MDAUX+1 BTFSS STATUS,0 DECF MDAUX,1 GOTO C7IG2 C7IG1: MOVF MDAUX,0 SUBWF MDAN7,0 BTFSS STATUS,2 GOTO C7IG3 MOVF MDAUX+1,0 SUBWF MDAN7+1,0 310 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 BTFSS STATUS,2 GOTO C7IG4 GOTO PONC0 C7IG3: MOVF MDAUX,0 SUBWF MDAN7,0 BTFSS STATUS,0 GOTO PONC0 GOTO C7VL1 C7IG4: MOVF MDAUX+1,0 SUBWF MDAN7+1,0 BTFSS STATUS,0 GOTO PONC0 C7VL1: MOVF MDAUX,0 MOVWF MDAN7 MOVF MDAUX+1,0 MOVWF MDAN7+1 GOTO PONC0 C7IG2: MOVF MDAUX,0 SUBWF MDAN7,0 BTFSS STATUS,2 GOTO C7IG5 MOVF MDAUX+1,0 SUBWF MDAN7+1,0 BTFSS STATUS,2 GOTO C7IG6 GOTO PONC0 C7IG5: MOVF MDAUX,0 SUBWF MDAN7,0 BTFSS STATUS,0 311 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 GOTO C7VL1 GOTO PONC0 C7IG6: MOVF MDAUX+1,0 SUBWF MDAN7+1,0 BTFSS STATUS,0 GOTO C7VL1 GOTO PONC0 INNAD: INCF NAD,1 PONC0: BCF ADCON0,3 ;PONER CANAL 0 BCF ADCON0,4 BCF ADCON0,5 RETAD: BCF PIR1,6 ;FLAG DL CONV A/D=0 BSF STATUS,5 BCF PIE1,6 ;DESHABILITO INTER DL CONV A/D GOTO FINTER ORG 0x800 ;INICIALIZACION MICROPROCESADOR INICIA: CLRWDT ;INI REGISTROS DEL MICRO CLRF PIR1 CLRF PIR2 MOVLW 0x41 MOVWF ADCON0 MOVLW 0x54 MOVWF T2CON BSF STATUS,5 MOVLW 0xAF MOVWF OPTION_REG CLRF PIE1 312 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 CLRF PIE2 MOVLW 0x80 MOVWF ADCON1 MOVLW 0x28 MOVWF PR2 MOVLW 7 MOVWF CMCON ;INI PUERTOS DL MICRO MOVLW 0x2F MOVWF TRISA MOVLW 7 MOVWF TRISB MOVLW 0x80 MOVWF TRISC MOVLW 0xF0 MOVWF TRISD MOVLW 7 MOVWF TRISE CLRF STATUS MOVLW 0 MOVWF PORTA MOVLW 0 MOVWF PORTB MOVLW 0 MOVWF PORTC MOVLW 4 MOVWF PORTD MOVLW 0 MOVWF PORTE 313 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 ;INI VAR RAM CLRF NAD CLRF TIME CLRF TIME+1 CLRF TIME+2 CLRF TSEG CLRF TREC MOVLW 0x3C MOVWF TNCOM ;AL INI NO ERROR D COMU-COMPROBAR COMU PASA 1 MIN DSD L INI CLRF FILSUC ;AL INICIO NO HAY SEÑAL DE FILTRO SUCIO MOVLW 0x0A ;INICIALIZACION DEL CONV DIG-ANALOG MAX500 MOVWF TDA ;ENVIA 1º DATOS AL CONV DSPUES DE 10 SEG DSDE EL INI DL FUNCIONA CLRF DAOUTA ;CANAL A - 0.0 V CLRF DAOUTB ;CANAL B - 0.0 V CLRF DAOUTC ;CANAL C - 0.0 V CLRF DAOUTD ;CANAL D - 0.0 V CALL CONVDA ;SUBRUTINA PARA HACER LA SALIDA AL CONVERTIDOR D/A ;VER CONFIGURACION DEL MICROSWITCH SW1 BSF STATUS,5 CLRF FC ;AL INICIO NO HAY FREE-COOLING CLRF FCOM ;COGER Y CALCULAR TODOS LOS DATOS NECESARIOS ANTES DE RESPONDER EN LAS COMUNICACIONES CON EL TX98 CLRF FFUNC CLRF STATUS CONF1: CLRWDT ;MICROSWITCH nº1 - MOD FUNCIONA NORMAL/MODO AUTOTEST BTFSS PORTD,4 GOTO CONF2 CALL DELDAF BTFSS PORTD,4 GOTO CONF1 314 MEMORIA VI. Código fuente GOTO CONF3 Capítulo 2. Código de la tarjeta SA98 ;MICROSWITCH nº1 OFF - MOD FUNCIONA NORMAL (FFUNC,0=0) CONF2: CALL DELDAF BTFSC PORTD,4 GOTO CONF1 BSF STATUS,5 ;MICROSWITCH nº1 ON - MODO AUTOTEST (FFUNC,0=1) BSF FFUNC,0 CLRF STATUS CONF3: CLRWDT ;MICROSWITCH nº2 - FREE-COOLING TEMP/F-C ENTALPIA BTFSS PORTD,5 GOTO CONF4 CALL DELDAF BTFSS PORTD,5 GOTO CONF3 GOTO CONF5 ;MICROSWITCH nº2 OFF - FREE-COOLING TEMP (FFUNC,1=0) CONF4: CALL DELDAF BTFSC PORTD,5 GOTO CONF3 BSF STATUS,5 ;MICROSWITCH nº2 ON - F-C ENTALPIA (FFUNC,1=1) BSF FFUNC,1 CLRF STATUS CONF5: CLRWDT ;MICROSWITCH nº3 - CONEXION POT DE MIN APERTURA BTFSS PORTD,6 GOTO CONF6 CALL DELDAF BTFSS PORTD,6 GOTO CONF5 GOTO CONF7 ;MICROSWITCH nº3 OFF-POT DE MIN APERTURA NO CONECT (FFUNC,2=0) CONF6: CALL DELDAF BTFSC PORTD,6 315 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 GOTO CONF5 BSF STATUS,5 ;MICROSWITCH nº3 ON - POT DE MIN APERTURA CONEC (FFUNC,2=1) BSF FFUNC,2 CONF7: CLRWDT BTFSS PORTD,7 GOTO CONF8 CALL DELDAF BTFSS PORTD,7 GOTO CONF7 GOTO CONF9 ;MICROSWITCH nº4 OFF - - (FFUNC,3=0) CONF8: CALL DELDAF BTFSC PORTD,7 GOTO CONF7 BSF STATUS,5 ;MICROSWITCH nº4 ON - - (FFUNC,3=1) BSF FFUNC,3 CONF9: CLRF STATUS RETURN ;SUBRUTINAS MEDIDAS ANALOGICAS ;SUBRUTINA CALCULO MEDIDA SONDA TEMPERATURA EXTERIOR (CANAL 0 DEL CONVA/D) TMEXT: CLRWDT ;CALCULAR LA MEDIA D LS 4 MEDIDAS ANALOG TOMADAS DL CONV A/D CLRF MEDM ;INICIALIZAR MEDIA DE LAS MEDIDAS (MEDM=0) CLRF MEDM+1 MOVF MDAN0+2,0 ;SUMAR LAS 4 MEDIDAS ANALOGICAS ADDWF MDAN0,0 MOVWF MEDM MOVF MDAN0+3,0 ADDWF MDAN0+1,0 MOVWF MEDM+1 BTFSC STATUS,0 316 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 INCF MEDM,1 MOVF MDAN0+4,0 ADDWF MEDM,1 MOVF MDAN0+5,0 ADDWF MEDM+1,1 BTFSC STATUS,0 INCF MEDM,1 MOVF MDAN0+6,0 ADDWF MEDM,1 MOVF MDAN0+7,0 ADDWF MEDM+1,1 BTFSC STATUS,0 INCF MEDM,1 BCF STATUS,0 ;SE DIVIDE LA SUMA DE LAS 4 MEDIDAS PARA MEDIA (MEDM) RRF MEDM,1 RRF MEDM+1,1 BCF STATUS,0 RRF MEDM,1 RRF MEDM+1,1 MOVF MEDM,0 ;SE OBTIENE POS1 (POS1 Y POS1+1) BSF STATUS,5 MOVWF POS1 BCF STATUS,5 MOVF MEDM+1,0 BSF STATUS,5 MOVWF POS1+1 BCF STATUS,0 ;DIVID /4 XQ LS VALORES VAN D 0x000 A 0x3FF Y LA TABLA D 0x00 A 0xFF RRF POS1,1 RRF POS1+1,1 317 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 BCF STATUS,0 RRF POS1,1 RRF POS1+1,1 BCF POS1+1,0 MOVLW 0xFC SUBWF POS1+1,0 BTFSC STATUS,0 GOTO PVEXT MOVF PCLATH,0 ;OBTIENEN LS VAL VAL1 Y VAL2 D TABLA PAOBTENER VAL INTERPOL MOVWF PCLAX3 MOVLW HIGH TABLAE MOVWF PCLATH MOVF POS1+1,0 CALL TABLAE MOVWF VAL1 INCF POS1+1,1 MOVLW HIGH TABLAE MOVWF PCLATH MOVF POS1+1,0 CALL TABLAE MOVWF VAL1+1 INCF POS1+1,1 MOVLW HIGH TABLAE MOVWF PCLATH MOVF POS1+1,0 CALL TABLAE MOVWF VAL2 INCF POS1+1,1 MOVLW HIGH TABLAE 318 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 MOVWF PCLATH MOVF POS1+1,0 CALL TABLAE MOVWF VAL2+1 MOVF PCLAX3,0 MOVWF PCLATH GOTO MULME PVEXT: MOVLW 3 ;SE OBTIENEN LOS VALORES VAL1 Y VAL2 MINIMOS PARA OBTENER EL VALOR INTERPOLADO (NO POR TABLA) MOVWF VAL1 ;+ POS EN TABLA -> MINTEMP SONDA TEMP EXT-> -20ºC (0x39C) MOVWF VAL2 MOVLW 0x9C MOVWF VAL1+1 MOVWF VAL2+1 GOTO IGVE MULME: CLRWDT MOVF POS1,0 ;SE CALCULA POS2 MOVWF POS2 MOVLW 1 SUBWF POS1+1,0 MOVWF POS2+1 BCF STATUS,0 RLF POS2+1,1 RLF POS2,1 BCF STATUS,0 RLF POS2+1,1 RLF POS2,1 BCF STATUS,5 MOVF MEDM+1,0 ; INTERPOLA:MEDIDA=((POS2-MEDM)*(VAL1-VAL2)/4)+VAL2 BSF STATUS,5 319 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 SUBWF POS2+1,0 MOVWF POS1+1 MOVF VAL2+1,0 SUBWF VAL1+1,0 MOVWF POS2+1 CLRF MULT1 ;MULTI 2 VAL D 10 BITS MAX (MULT1 Y MULT2)-RESUL 3 BYTES RESMUL MOVF POS1+1,0 MOVWF MULT1+1 CLRF MULT2 MOVF POS2+1,0 MOVWF MULT2+1 MOVF PCLATH,0 MOVWF PCLAX3 BSF PCLATH,4 BCF PCLATH,3 CALL MULT ;SUBRUTINA DE MULTIPLICACION MOVF PCLAX3,0 MOVWF PCLATH BCF STATUS,0 RRF RESMUL,1 RRF RESMUL+1,1 RRF RESMUL+2,1 BCF STATUS,0 RRF RESMUL,1 RRF RESMUL+1,1 RRF RESMUL+2,1 BCF STATUS,0 RRF RESMUL,1 RRF RESMUL+1,1 320 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 RRF RESMUL+2,1 MOVF RESMUL+2,0 ADDWF VAL2+1,1 BTFSS STATUS,0 GOTO IGVE MOVLW 3 SUBWF VAL2,0 BTFSC STATUS,0 GOTO NSETV INCF VAL2,1 GOTO IGVE NSETV: CLRF VAL2 IGVE: MOVF VAL2,0 BCF STATUS,5 MOVWF MEDEXT ;MEDIDA TEMP EXT N HEXADECIMAL BSF STATUS,5 MOVF VAL2+1,0 BCF STATUS,5 MOVWF MEDEXT+1 RETURN ;SUBRUTINA CALCULO MEDIDA HUMEDAD INTERIOR (CANAL 1 DEL CONVERTIDOR A/D) THUMI: CLRWDT CLRF MEDM ;INICIALIZAR MEDIA DE LAS MEDIDAS (MEDM=0) CLRF MEDM+1 MOVF MDAN1+2,0 ;SUMAR LAS 4 MEDIDAS ANALOGICAS ADDWF MDAN1,0 MOVWF MEDM MOVF MDAN1+3,0 ADDWF MDAN1+1,0 321 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 MOVWF MEDM+1 BTFSC STATUS,0 INCF MEDM,1 MOVF MDAN1+4,0 ADDWF MEDM,1 MOVF MDAN1+5,0 ADDWF MEDM+1,1 BTFSC STATUS,0 INCF MEDM,1 MOVF MDAN1+6,0 ADDWF MEDM,1 MOVF MDAN1+7,0 ADDWF MEDM+1,1 BTFSC STATUS,0 INCF MEDM,1 BCF STATUS,0 ;DIVIDE SUMA DE LAS 4 MED ANALOG/4 PARA LA MEDIA (MEDM) RRF MEDM,1 RRF MEDM+1,1 BCF STATUS,0 RRF MEDM,1 RRF MEDM+1,1 MOVF MEDM,0 ;SE OBTIENE POS1 (POS1 Y POS1+1) BSF STATUS,5 MOVWF POS1 BCF STATUS,5 MOVF MEDM+1,0 BSF STATUS,5 MOVWF POS1+1 BCF STATUS,0 ;DIVIDE/4 XQ LOS VAL VAN D 0x000 A 0x3FF Y LA TABLA D 0x00 A 0xFF 322 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 RRF POS1,1 RRF POS1+1,1 BCF STATUS,0 RRF POS1,1 RRF POS1+1,1 BCF POS1+1,0 ;XQ N LS POS PAR ESTAN LS BYTES ALTOS D LS DATS CONTNIDS N TABLA MOVLW 0xFC SUBWF POS1+1,0 BTFSC STATUS,0 GOTO PVHUMI MOVF PCLATH,0 ;OBTIENEN VAL VAL1 Y VAL2 D TABLA PARA OBTENER VAL INTERPOL MOVWF PCLAX3 MOVLW HIGH TABLAH MOVWF PCLATH MOVF POS1+1,0 CALL TABLAH MOVWF VAL1 INCF POS1+1,1 MOVLW HIGH TABLAH MOVWF PCLATH MOVF POS1+1,0 CALL TABLAH MOVWF VAL1+1 INCF POS1+1,1 MOVLW HIGH TABLAH MOVWF PCLATH MOVF POS1+1,0 CALL TABLAH MOVWF VAL2 323 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 INCF POS1+1,1 MOVLW HIGH TABLAH MOVWF PCLATH MOVF POS1+1,0 CALL TABLAH MOVWF VAL2+1 MOVF PCLAX3,0 MOVWF PCLATH GOTO MULMHI PVHUMI: MOVLW 3 ; OBTIENEN LOS VALORES VAL1 Y VAL2 MINIMOS PARA OBTENER EL VALOR INTERPOLADO (NO POR TABLA) MOVWF VAL1 ;MAYOR POSICION EN LA TABLA -> MAXIMA HUMEDAD -> 100% (0x3E8 -> 1000dec) EL VALOR DE LA HUMEDAD VIENE MULTIPLICADO POR 10 MOVWF VAL2 MOVLW 0xE8 MOVWF VAL1+1 MOVWF VAL2+1 GOTO IGVHI MULMHI: CLRWDT MOVLW 3 SUBWF POS1+1,1 BCF STATUS,0 RLF POS1+1,1 RLF POS1,1 BCF STATUS,0 RLF POS1+1,1 RLF POS1,1 MOVF POS1+1,0 ; MEDIDA=((MEDM-POS1)*(VAL2-VAL1)/4)+VAL1 BCF STATUS,5 SUBWF MEDM+1,0 324 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 BSF STATUS,5 MOVWF POS1+1 MOVF VAL1+1,0 SUBWF VAL2+1,0 MOVWF POS2+1 CLRF MULT1;MULTI D 2 VALD 10 BITS MAX (MULT1 Y MULT2)RESUL N 3 BYTES RESMUL MOVF POS1+1,0 MOVWF MULT1+1 CLRF MULT2 MOVF POS2+1,0 MOVWF MULT2+1 MOVF PCLATH,0 MOVWF PCLAX3 BSF PCLATH,4 BCF PCLATH,3 CALL MULT ;SUBRUTINA DE MULTIPLICACION MOVF PCLAX3,0 MOVWF PCLATH BCF STATUS,0 RRF RESMUL,1 RRF RESMUL+1,1 RRF RESMUL+2,1 BCF STATUS,0 RRF RESMUL,1 RRF RESMUL+1,1 RRF RESMUL+2,1 BCF STATUS,0 RRF RESMUL,1 RRF RESMUL+1,1 325 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 RRF RESMUL+2,1 MOVF RESMUL+2,0 ADDWF VAL1+1,1 BTFSC STATUS,0 INCF VAL1,1 IGVHI: MOVF VAL1,0 MOVWF MDHUMI ;MEDIDA HUMEDAD D AIR INTER O DL D RETORNO N HEXADEC MOVF VAL1+1,0 MOVWF MDHUMI+1 CLRF STATUS RETURN ;SUBRUTINA CALCULO MEDIDA HUMEDAD EXTERIOR (CANAL 2 DEL CONVERTIDOR A/D) THUME: CLRWDT CLRF MEDM ;INICIALIZAR MEDIA DE LAS MEDIDAS (MEDM=0) CLRF MEDM+1 MOVF MDAN2+2,0 ;SUMAR LAS 4 MEDIDAS ANALOGICAS ADDWF MDAN2,0 MOVWF MEDM MOVF MDAN2+3,0 ADDWF MDAN2+1,0 MOVWF MEDM+1 BTFSC STATUS,0 INCF MEDM,1 MOVF MDAN2+4,0 ADDWF MEDM,1 MOVF MDAN2+5,0 ADDWF MEDM+1,1 BTFSC STATUS,0 INCF MEDM,1 326 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 MOVF MDAN2+6,0 ADDWF MEDM,1 MOVF MDAN2+7,0 ADDWF MEDM+1,1 BTFSC STATUS,0 INCF MEDM,1 BCF STATUS,0 ;SE DIVID LA SUM D 4 MEDIDAS ANALOG/ 4 PARA LA MEDIA (MEDM) RRF MEDM,1 RRF MEDM+1,1 BCF STATUS,0 RRF MEDM,1 RRF MEDM+1,1 MOVF MEDM,0 ;SE OBTIENE POS1 (POS1 Y POS1+1) BSF STATUS,5 MOVWF POS1 BCF STATUS,5 MOVF MEDM+1,0 BSF STATUS,5 MOVWF POS1+1 BCF STATUS,0 ;DIVIDE/4 XQ LOS VAL VAN D 0x000 A 0x3FF Y LA TABLA D 0x00 A 0xFF RRF POS1,1 RRF POS1+1,1 BCF STATUS,0 RRF POS1,1 RRF POS1+1,1 BCF POS1+1,0 ;XQ N LS POS PARES ESTAN LO BYTES ALTOS DE LOS DATOS N TABLA MOVLW 0xFC SUBWF POS1+1,0 BTFSC STATUS,0 327 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 GOTO PVHUME MOVF PCLATH,0 ;OBTIENEN LS VAL VAL1 Y VAL2 D TABLA PA OBTENER VAL INTERPOL MOVWF PCLAX3 MOVLW HIGH TABLAH MOVWF PCLATH MOVF POS1+1,0 CALL TABLAH MOVWF VAL1 INCF POS1+1,1 MOVLW HIGH TABLAH MOVWF PCLATH MOVF POS1+1,0 CALL TABLAH MOVWF VAL1+1 INCF POS1+1,1 MOVLW HIGH TABLAH MOVWF PCLATH MOVF POS1+1,0 CALL TABLAH MOVWF VAL2 INCF POS1+1,1 MOVLW HIGH TABLAH MOVWF PCLATH MOVF POS1+1,0 CALL TABLAH MOVWF VAL2+1 MOVF PCLAX3,0 MOVWF PCLATH GOTO MULMHE 328 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 PVHUME: MOVLW 3 ;SE OBTIENEN LOS VALORES VAL1 Y VAL2 MINIMOS PARA OBTENER EL VALOR INTERPOLADO (NO POR TABLA) MOVWF VAL1 ;MAYOR POSICION EN LA TABLA -> MAXIMA HUMEDAD -> 100% (0x3E8 -> 1000dec) EL VALOR DE LA HUMEDAD VIENE MULTIPLICADO POR 10 MOVWF VAL2 MOVLW 0xE8 MOVWF VAL1+1 MOVWF VAL2+1 GOTO IGVHE MULMHE: CLRWDT MOVLW 3 SUBWF POS1+1,1 BCF STATUS,0 RLF POS1+1,1 RLF POS1,1 BCF STATUS,0 RLF POS1+1,1 RLF POS1,1 MOVF POS1+1,0 ; MEDIDA=((MEDM-POS1)*(VAL2-VAL1)/4)+VAL1 BCF STATUS,5 SUBWF MEDM+1,0 BSF STATUS,5 MOVWF POS1+1 MOVF VAL1+1,0 SUBWF VAL2+1,0 MOVWF POS2+1 CLRF MULT1 ;MULTI D 2 VAL D 10 BITS MAX(MULT1 Y MULT2)–RESUL 3 BYTES RESMUL MOVF POS1+1,0 MOVWF MULT1+1 CLRF MULT2 329 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 MOVF POS2+1,0 MOVWF MULT2+1 MOVF PCLATH,0 MOVWF PCLAX3 BSF PCLATH,4 BCF PCLATH,3 CALL MULT ;SUBRUTINA DE MULTIPLICACION MOVF PCLAX3,0 MOVWF PCLATH BCF STATUS,0 RRF RESMUL,1 RRF RESMUL+1,1 RRF RESMUL+2,1 BCF STATUS,0 RRF RESMUL,1 RRF RESMUL+1,1 RRF RESMUL+2,1 BCF STATUS,0 RRF RESMUL,1 RRF RESMUL+1,1 RRF RESMUL+2,1 MOVF RESMUL+2,0 ADDWF VAL1+1,1 BTFSC STATUS,0 INCF VAL1,1 IGVHE: MOVF VAL1,0 MOVWF MDHUME ;MEDIDA HUMEDAD DEL AIRE EXTERIOR EN HEXADECIMAL MOVF VAL1+1,0 MOVWF MDHUME+1 330 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 CLRF STATUS RETURN ;SUBR CALIDAD AIRE:CH3 DL CONV A/D TCALD: CLRWDT CLRF MEDM CLRF MEDM+1 MOVF MDAN3+2,0 ADDWF MDAN3,0 MOVWF MEDM MOVF MDAN3+3,0 ADDWF MDAN3+1,0 MOVWF MEDM+1 BTFSC STATUS,0 INCF MEDM,1 MOVF MDAN3+4,0 ADDWF MEDM,1 MOVF MDAN3+5,0 ADDWF MEDM+1,1 BTFSC STATUS,0 INCF MEDM,1 MOVF MDAN3+6,0 ADDWF MEDM,1 MOVF MDAN3+7,0 ADDWF MEDM+1,1 BTFSC STATUS,0 INCF MEDM,1 BCF STATUS,0 RRF MEDM,1 RRF MEDM+1,1 331 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 BCF STATUS,0 RRF MEDM,1 RRF MEDM+1,1 BCF STATUS,0 RRF MEDM,1 RRF MEDM+1,1 BCF STATUS,0 RRF MEDM,1 RRF MEDM+1,1 MOVLW 0xFF SUBWF MEDM+1,0 BTFSC STATUS,0 GOTO PVCALD MOVF PCLATH,0 MOVWF PCLAX3 MOVLW HIGH TABLAC MOVWF PCLATH MOVF MEDM+1,0 CALL TABLAC BSF STATUS,5 MOVWF MDCALD CLRF STATUS RETURN PVCALD: BSF STATUS,5 MOVLW 0xFF MOVWF MDCALD CLRF STATUS RETURN ;SUB CALCULO D PRESION (CH4 CONV A/D) 332 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 TPRES: CLRWDT ;CALCULAR LA MEDIA DE LAS 4 MEDIDAS ANALOGICAS TOMADAS DEL CONVERTIDOR A/D CLRF MEDM ;INICIALIZAR MEDIA DE LAS MEDIDAS (MEDM=0) CLRF MEDM+1 MOVF MDAN4+2,0 ;SUMAR LAS 4 MEDIDAS ANALOGICAS ADDWF MDAN4,0 MOVWF MEDM MOVF MDAN4+3,0 ADDWF MDAN4+1,0 MOVWF MEDM+1 BTFSC STATUS,0 INCF MEDM,1 MOVF MDAN4+4,0 ADDWF MEDM,1 MOVF MDAN4+5,0 ADDWF MEDM+1,1 BTFSC STATUS,0 INCF MEDM,1 MOVF MDAN4+6,0 ADDWF MEDM,1 MOVF MDAN4+7,0 ADDWF MEDM+1,1 BTFSC STATUS,0 INCF MEDM,1 BCF STATUS,0 ;DIVIDE SUMA DE LAS 4 MEDIDAS ANALOG /4 PARA MEDIA (MEDM) RRF MEDM,1 RRF MEDM+1,1 BCF STATUS,0 RRF MEDM,1 RRF MEDM+1,1 333 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 MOVF MEDM,0 ;MEDIDA PRESION EN HEXADECIMAL BSF STATUS,5 MOVWF MDPRES BCF STATUS,5 MOVF MEDM+1,0 BSF STATUS,5 MOVWF MDPRES+1 CLRF STATUS RETURN ;SUBRUTINA CALCULO MEDIDA POT DE MIN APERTURA (CH 5 CONV A/D) TPMINA: CLRWDT CLRF MEDM ;CALCULAR MEDIA D LS 4 MEDIDAS ANALOG DL CONV A/DPMINA ;INI MEDIA DE LAS MEDIDAS (MEDM=0) CLRF MEDM+1 MOVF MDAN5+2,0 ;SUMAR LAS 4 MEDIDAS ANALOGICAS ADDWF MDAN5,0 MOVWF MEDM MOVF MDAN5+3,0 ADDWF MDAN5+1,0 MOVWF MEDM+1 BTFSC STATUS,0 INCF MEDM,1 MOVF MDAN5+4,0 ADDWF MEDM,1 MOVF MDAN5+5,0 ADDWF MEDM+1,1 BTFSC STATUS,0 INCF MEDM,1 MOVF MDAN5+6,0 ADDWF MEDM,1 334 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 MOVF MDAN5+7,0 ADDWF MEDM+1,1 BTFSC STATUS,0 INCF MEDM,1 BCF STATUS,0 ; DIVIDE SUMA DE LAS 4 MEDIDAS ANALOG/4 PARA LA MEDIA(MEDM) RRF MEDM,1 RRF MEDM+1,1 BCF STATUS,0 RRF MEDM,1 RRF MEDM+1,1 BCF STATUS,0 ; DIVID/2 ->MEDIDA N 8 BITS:MAX MED ANALOG MPMINA=0x1FF - 2.5V RRF MEDM,1 RRF MEDM+1,1 MOVF MEDM,1 BTFSS STATUS,2 GOTO MAXPOT MOVF MEDM+1,0 BSF STATUS,5 MOVWF MPMINA CLRF STATUS RETURN MAXPOT: BSF STATUS,5 MOVLW 0xFF MOVWF MPMINA CLRF STATUS RETURN ;SUBRUTINA CALCULO ENTALPIA - ENTALPIA AIRE INTERIOR Y ENTALPIA AIRE EXTERIOR MINIMA ENTALPIA=10KJ/Kg Y MAXIMA ENTALPIA=70KJ/Kg CENTAL: CLRWDT BSF STATUS,5 ;ENTALPIA DEL AIRE INTERIOR O DE RETORNO 335 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 BTFSS FCOM,0 GOTO FENTP MOVF MEDRET,0 MOVWF POS1 MOVF MEDRET+1,0 MOVWF POS1+1 ;MEDIDA TEMP DE RETORNO MULTIPLICADA X5(EN POS1) MOVF MDHUMI,0 MOVWF POS2 MOVF MDHUMI+1,0 ;MED HUMEDAD AIRE INTERIOR MULTIPLICADA X10(EN POS2) MOVWF POS2+1 CALL CENTC ;CALCULO ENTALPIA DEL AIRE INTERIOR O DE RETORNO (ENTINT) MOVF MEDM,0 BSF STATUS,5 MOVWF ENTINT CLRF STATUS ;ENTALPIA DEL AIRE EXTERIOR MOVF MEDEXT,0 BSF STATUS,5 MOVWF POS1 BCF STATUS,5 MOVF MEDEXT+1,0 BSF STATUS,5 MOVWF POS1+1 ;MEDIDA TEMP EXT MULTIPLICADA X5 (EN POS1) MOVF MDHUME,0 MOVWF POS2 MOVF MDHUME+1,0 ;MEDIDA HUMEDAD AIRE EXT MULTIPLICADA X10 (EN POS2) MOVWF POS2+1 CALL CENTC ;CALCULO DE LA ENTALPIA DEL AIRE EXT (ENTEXT) MOVF MEDM,0 BSF STATUS,5 336 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 MOVWF ENTEXT BSF FCOM,1 ;SE HA CALCULADO LA ENTALPIA Y SE HAN TOMADO TODAS LAS MEDIDAS ANALOGICAS NECESARIAS PARA CALCULAR FREE-COOLING FENTP: CLRF STATUS RETURN CENTC: CLRWDT ;CALCULO ENTALPIA TENIENDO LA TEMP (N POS1) Y HUMEDAD (N POS2) CLRF STATUS CLRF MEDM ;INICIO -> ENTALPIA=0 BSF STATUS,5 MOVLW 3 SUBWF POS1,0 BCF STATUS,5 BTFSC STATUS,2 RETURN ;TEMP NEGATIVA -> ENTALPIA=0 CLRF DEL ;TEMP POSITIVA - INDICE=0 -> CALCULAR ENTALPIA CENT2: MOVLW HIGH TABCF1 MOVWF PCLATH ;TOMAR COEFICIENTES DE TABLA (C1 Y C2) ;COEFICIENTE 1 (VAL1) MOVF DEL,0 CALL TABCF1 BSF STATUS,5 MOVWF VAL1+1 CLRF VAL1 CLRF STATUS RLF DEL,1 MOVLW HIGH TABCF2 ;COEFICIENTE 2 (VAL2) MOVWF PCLATH MOVF DEL,0 CALL TABCF2 BSF STATUS,5 MOVWF VAL2 337 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 BCF STATUS,5 MOVLW HIGH TABCF2 MOVWF PCLATH INCF DEL,0 CALL TABCF2 BSF STATUS,5 MOVWF VAL2+1 CLRF STATUS RRF DEL,1 BSF STATUS,5 MOVF POS1,0 ;MULTI DE TEMP x C1 (LA TEMP DEBE ESTAR MULTIPLICADAX10) MOVWF MULT1 MOVF POS1+1,0 MOVWF MULT1+1 BCF STATUS,0 RLF VAL1+1,1 RLF VAL1,1 MOVF VAL1,0 MOVWF MULT2 MOVF VAL1+1,0 MOVWF MULT2+1 MOVF PCLATH,0 MOVWF PCLAX3 BSF PCLATH,4 BCF PCLATH,3 CALL MULT ;SUBRUTINA DE MULTIPLICACION (RESULTADO EN RESMUL) MOVF PCLAX3,0 MOVWF PCLATH MOVF RESMUL,1 338 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 BTFSS STATUS,2 GOTO INCIND ;RESULTADO POSITIVO (RESULTADO > COEFICIENTE 2) MOVF VAL2,0 SUBWF RESMUL+1,1 BTFSS STATUS,2 GOTO QRES1 MOVF VAL2+1,0 SUBWF RESMUL+2,1 BTFSC STATUS,2 GOTO SACR1 ;RESULTADO = COEFICIENTE 2 QRES1: BTFSC STATUS,0 GOTO INCIND ;RESULTADO POSITIVO (RESULTADO > COEFICIENTE 2) SACR1: MOVF RESMUL+2,0 ;RESUL NEG(C2 > RESUL) -> RESUL (EN VAL2)=C2 - RESUL SUBWF VAL2+1,1 BTFSS STATUS,0 DECF VAL2,1 MOVF RESMUL+1,0 SUBWF VAL2,1 BCF STATUS,0 ;RESULTADO = RESULTADO/16 RRF VAL2,1 RRF VAL2+1,1 BCF STATUS,0 RRF VAL2,1 RRF VAL2+1,1 BCF STATUS,0 RRF VAL2,1 RRF VAL2+1,1 BCF STATUS,0 RRF VAL2,1 339 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 RRF VAL2+1,1 MOVF VAL2,0 ;¿HUMEDAD>RESULTADO? SUBWF POS2,0 BTFSS STATUS,2 GOTO QHUMR MOVF VAL2+1,0 SUBWF POS2+1,0 BTFSC STATUS,2 GOTO FINENT QHUMR: BTFSC STATUS,0 GOTO INCIND ;HUMEDAD > RESULTADO FINENT: CLRF STATUS MOVLW 0x0A ;RESULTADO > HUMEDAD ;ENTALPIA = INDICE (DEL) + 10 KJ/Kg (0x0A) ADDWF DEL,0 MOVWF MEDM RETURN INCIND: BCF STATUS,5 ;INCREMENTAR INDICE MOVLW 0x3C SUBWF DEL,0 BTFSC STATUS,0 GOTO NOINC INCF DEL,1 GOTO CENT2 NOINC: MOVLW 0x46 ;MAXIMA ENTALPIA = 70 KJ/Kg (0x46) MOVWF MEDM RETURN ;TABLA COEFICIENTE 1 PARA EL CALCULO DE LA ENTALPIA TABCF1: ADDWF PCL,1 DT 0xEB,0xE5,0xDE,0xD2,0xCD,0xC8,0xC3,0xBE 340 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 DT 0xBA,0xB6,0xB2,0xAD,0xAA,0xA6,0xA3,0xA0 DT 0x9B,0x98,0x95,0x92,0x8E,0x8B,0x8A,0x86 DT 0x83,0x82,0x80,0x7F,0x7E,0x7E,0x7D,0x7B DT 0x79,0x77,0x76,0x74,0x72,0x71,0x70,0x6F DT 0x6E,0x6D,0x6C,0x6C,0x6B,0x6B,0x6A,0x69 DT 0x67,0x66,0x65,0x65,0x65,0x64,0x64,0x64 DT 0x63,0x63,0x62,0x61,0x60,0x60,0x60,0x60 ;TABLA COEFICIENTE 2 PARA EL CALCULO DE LA ENTALPIA TABCF2: ADDWF PCL,1 DT 0x3E,0x80,0x43,0xD0,0x48,0xE4,0x4D,0x4E DT 0x51,0xAE,0x55,0xF0,0x59,0x9C,0x5D,0x20 DT 0x60,0x7C,0x63,0xB0,0x66,0xBC,0x68,0xE2 DT 0x6A,0xEA,0x6C,0xDE,0x6E,0xB4,0x70,0x80 DT 0x71,0xFC,0x73,0x6E,0x74,0xCC,0x76,0x20 DT 0x77,0x74,0x78,0x50,0x79,0x22,0x79,0xF4 DT 0x7A,0xBC,0x7B,0x84,0x7D,0x1E,0x7E,0xAE DT 0x80,0x3E,0x81,0xCE,0x83,0x54,0x84,0x1C DT 0x84,0xE4,0x85,0x8E,0x86,0x42,0x86,0xEC DT 0x87,0xA0,0x88,0x54,0x88,0xFE,0x89,0x9E DT 0x8A,0x3E,0x8B,0x24,0x8C,0x00,0x8C,0xD2 DT 0x8D,0xAE,0x8E,0x80,0x8E,0xEE,0x8F,0x70 DT 0x8F,0xDE,0x90,0x4C,0x90,0xC4,0x91,0xB4 DT 0x92,0x90,0x93,0x80,0x94,0x52,0x95,0x2E DT 0x95,0x92,0x95,0xEC,0x96,0x50,0x96,0xA0 DT 0x96,0xF0,0x96,0xF0,0x96,0xF0,0x96,0xF0 ;SEGURIDADES EN LAS MEDIDAS ANALOGICAS Y DE VARIABLES DE FUNCIONAMIENTO SEGMV: CLRWDT BSF STATUS,5 MOVLW 4 ;FLAG DE COMUNICACIONES 341 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 SUBWF FCOM,0 BTFSC STATUS,0 GOTO ERRFUN CLRF STATUS MOVF MEDEXT,1 ;TEMPERATURA EXTERIOR BTFSC STATUS,2 GOTO QS2 MOVLW 1 SUBWF MEDEXT,0 BTFSS STATUS,2 GOTO QS1 MOVLW 0x91 SUBWF MEDEXT+1,0 BTFSC STATUS,0 GOTO ERRFUN GOTO QS2 QS1: MOVLW 3 SUBWF MEDEXT,0 BTFSS STATUS,2 GOTO ERRFUN MOVLW 0x9C SUBWF MEDEXT+1,0 BTFSS STATUS,0 GOTO ERRFUN QS2: BSF STATUS,5 BTFSS FCOM,0 GOTO QS2X MOVF MEDRET,1 ;TEMP RETOR BTFSS STATUS,2 342 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 GOTO ERRFUN MOVLW 0xFB SUBWF MEDRET+1,0 BTFSC STATUS,0 GOTO ERRFUN QS2X: MOVF MDHUMI,1 ;HUMEDA INT BTFSC STATUS,2 GOTO QS3 MOVLW 1 SUBWF MDHUMI,0 BTFSC STATUS,2 GOTO QS3 MOVLW 2 SUBWF MDHUMI,0 BTFSC STATUS,2 GOTO QS3 MOVLW 3 SUBWF MDHUMI,0 BTFSS STATUS,2 GOTO ERRFUN MOVLW 0xE9 SUBWF MDHUMI+1,0 BTFSC STATUS,0 GOTO ERRFUN QS3: MOVF MDHUME,1 ;HUMEDA EXT BTFSC STATUS,2 GOTO QS4 MOVLW 1 SUBWF MDHUME,0 343 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 BTFSC STATUS,2 GOTO QS4 MOVLW 2 SUBWF MDHUME,0 BTFSC STATUS,2 GOTO QS4 MOVLW 3 SUBWF MDHUME,0 BTFSS STATUS,2 GOTO ERRFUN MOVLW 0xE9 SUBWF MDHUME+1,0 BTFSC STATUS,0 GOTO ERRFUN QS4: MOVLW 3 SUBWF FCOM,0 BTFSS STATUS,2 GOTO QS6 MOVF ENTINT,1 ;ENTALPIA INT BTFSC STATUS,2 GOTO QS5 MOVLW 0x0A SUBWF ENTINT,0 BTFSS STATUS,0 GOTO ERRFUN MOVLW 0x47 SUBWF ENTINT,0 BTFSC STATUS,0 GOTO ERRFUN 344 MEMORIA VI. Código fuente QS5: Capítulo 2. Código de la tarjeta SA98 MOVF ENTEXT,1 ;ENTALPIA EXT BTFSC STATUS,2 GOTO QS6 MOVLW 0x0A SUBWF ENTEXT,0 BTFSS STATUS,0 GOTO ERRFUN MOVLW 0x47 SUBWF ENTEXT,0 BTFSC STATUS,0 GOTO ERRFUN QS6: BTFSS FCOM,0 GOTO QS6X MOVF CONSIG,1 ;CONSIGNA BTFSS STATUS,2 GOTO ERRFUN MOVLW 0x4B SUBWF CONSIG+1,0 BTFSS STATUS,0 GOTO ERRFUN MOVLW 0x97 SUBWF CONSIG+1,0 BTFSC STATUS,0 GOTO ERRFUN BTFSC MANDO,5 ;MANDO GOTO ERRFUN BTFSS MANDO,1 GOTO QS7 BTFSC MANDO,0 345 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 GOTO ERRFUN QS7: MOVLW 4 ;Nº ETAPAS SUBWF NETAP,0 BTFSC STATUS,0 GOTO ERRFUN QS6X: MOVF FFUNC,1 ;FLAG FUNCIONAM (BIT 0 SIEMPRE 0 XQ ES MOD MAQUINA) BTFSC STATUS,2 GOTO QS8 MOVLW 2 SUBWF FFUNC,0 BTFSC STATUS,2 GOTO QS8 MOVLW 4 SUBWF FFUNC,0 BTFSC STATUS,2 GOTO QS8 MOVLW 6 SUBWF FFUNC,0 BTFSS STATUS,2 GOTO ERRFUN QS8: MOVF FC,1 ;FLAG DE FREE-COOLING BTFSC STATUS,2 GOTO QS9 MOVLW 0xFF SUBWF FC,0 BTFSS STATUS,2 GOTO ERRFUN QS9: BCF STATUS,5 ;T PARA SALIR AL CONV DIGITAL-ANALOGICO MOVLW 0x0B 346 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 SUBWF TDA,0 BTFSC STATUS,0 GOTO ERRFUN MOVLW 0x3D ;T PARA FALLO DE COMUNICACIONES SUBWF TNCOM,0 BTFSC STATUS,0 GOTO ERRFUN MOVF FILSUC,1 ;SEÑAL DE FILTRO SUCIO BTFSC STATUS,2 GOTO QS10 MOVLW 0xFF SUBWF FILSUC,0 BTFSS STATUS,2 GOTO ERRFUN QS10: CLRF STATUS RETURN ERRFUN: NOP ;SI SE DISTORSIONAN LAS VARO LAS MEDIDAS -> RESETEAR CONTROL GOTO ERRFUN ;***************************************************************************** ;CALCULO FREE-COOLING QFCOOL: CLRWDT BSF STATUS,5 BTFSS FFUNC,1 GOTO FCTEM ;FREE-COOLING POR TEMPERATURA GOTO FCENT ;FREE-COOLING POR ENTALPIA ;FREE-COOLING POR TEMPERATURA FCTEM: CLRWDT CLRF STATUS MOVLW 0x19 ;DIFERENCIAL ENTRE TEMPERATURA RETORNO Y EXTERIOR PARA HACER FREE-COOLING = 5ºC (0x19) 347 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 MOVWF DEL MOVF MEDEXT,0 MOVWF MEDM MOVF MEDEXT+1,0 MOVWF MEDM+1 MOVLW 3 SUBWF MEDM,0 BTFSC STATUS,2 GOTO SFCE ;TEMP EXT NEG->TEMP.RETORNO > TEMP.EXT + 5ºC->SI F-C BSF STATUS,5 ;TEMP EXT POSITIVA (COMPARAR CN TEMP D RETORNO) MOVF FC,1 BCF STATUS,5 BTFSC STATUS,2 GOTO QFCL1 MOVLW 5 ;HISTERESIS ENTRE SI F-C Y NO F-C = 1ºC (0x05) SUBWF DEL,1 QFCL1: MOVF DEL,0 ADDWF MEDM+1,1 BTFSC STATUS,0 INCF MEDM,1 MOVF MEDM,0 BSF STATUS,5 SUBWF MEDRET,0 BTFSS STATUS,2 GOTO FCOX1 BCF STATUS,5 MOVF MEDM+1,0 BSF STATUS,5 SUBWF MEDRET+1,0 348 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 FCOX1: BTFSS STATUS,0 GOTO NFC ;TEMP.RETORNO < TEMP.EXTERIOR + 5ºC -> NO FREE-COOLING GOTO SFCE ;TEMP.RETORNO > TEMP.EXTERIOR + 5ºC -> SI FREE-COOLING ;FREE-COOLING POR ENTALPIA FCENT: CLRWDT CLRF STATUS MOVLW 0x0C ;DIFERENCIAL ENTR ENTALPIA IN Y ENTALPIA EXT PARA F-C= 12 KJ/Kg 0x0C MOVWF DEL BSF STATUS,5 MOVF ENTEXT,0 BCF STATUS,5 MOVWF MEDM BSF STATUS,5 MOVF FC,1 BCF STATUS,5 BTFSC STATUS,2 GOTO QFCL2 MOVLW 4 ;HISTERESIS ENTRE SI F-C Y NO F-C = 4 KJ/Kg (0x04) SUBWF DEL,1 QFCL2: MOVF DEL,0 ADDWF MEDM,1 MOVF MEDM,0 BSF STATUS,5 SUBWF ENTINT,0 BTFSS STATUS,0 GOTO NFC ;ENTALPIA INTERIOR < ENTALPIA EXTERIOR + 12 KJ/Kg -> NO F-C GOTO SFCE ;ENTALPIA INTERIOR > ENTALPIA EXTERIOR + 12 KJ/Kg -> SI F-C ;NO FREE-COOLING NFC: CLRWDT 349 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 BSF STATUS,5 CLRF FC ;NO FREE-COOLING BTFSC FFUNC,2 ;COMPROBAR SI CONFIG CN POT DE MIN APERTUR Y VER CALIDA AIRE GOTO SIPOT3 ;SI HAY POTENCIOMETRO DE MINIMA APERTURA MOVF MDCALD,1 BTFSS STATUS,2 GOTO SCD3 CLRF STATUS ;NO HAY POTENCIOMETRO DE MINIMA APERTURA CLRF DAOUTA ;SALIDA AL SISTEMA DE F-C SIN POT DE MIN APERTURA -> SAL=0 CLRF DAOUTB GOTO FNFC SCD3: MOVF MDCALD,0 BCF STATUS,5 MOVWF DAOUTA MOVWF DAOUTB GOTO FNFC SIPOT3: MOVF MDCALD,0 SUBWF MPMINA,0 BTFSS STATUS,0 GOTO SCD2 MOVF MPMINA,0 ;SAL A SISTEM D F-C CN POT DE MIN APERTURA -> SAL=MPMINA BCF STATUS,5 MOVWF DAOUTA MOVWF DAOUTB FNFC: CLRF STATUS RETURN ;SI FREE-COOLING SFCE: CLRWDT BSF STATUS,5 350 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 MOVLW 0xFF MOVWF FC ;SI FREE-COOLING MOVLW 1 SUBWF NETAP,0 BTFSC STATUS,2 GOTO CFC1 ;1 ETAPA EN FRIO GOTO CFC2 ;2 O MAS ETAPAS EN FRIO CFC1: CLRWDT MOVF MEDRET+1,0 SUBWF CONSIG+1,0 BTFSC STATUS,0 GOTO NFC MOVF CONSIG+1,0 SUBWF MEDRET+1,0 BCF STATUS,5 MOVWF DEL MOVF DEL,1 BTFSC STATUS,2 GOTO NFC MOVLW 0x0A SUBWF DEL,0 BTFSS STATUS,0 GOTO CFCX MOVLW 0xFF FREG: MOVWF DAOUTA MOVWF DAOUTB BSF STATUS,5 BCF MANDO,4 ;1 ETAPA EN CONTROL - DEVOLVER 0 ETAPAS BCF MANDO,3 351 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 CLRF STATUS RETURN CFCX: BSF STATUS,5 CLRF MULT1 MOVLW 0x19 MOVWF MULT1+1 CLRF MULT2 BCF STATUS,5 MOVF DEL,0 BSF STATUS,5 MOVWF MULT2+1 MOVF PCLATH,0 MOVWF PCLAX3 BSF PCLATH,4 BCF PCLATH,3 CALL MULT ;SUBRUTINA DE MULTIPLICACION MOVF PCLAX3,0 MOVWF PCLATH MOVF RESMUL+2,0 MOVWF VAL1 BTFSS FFUNC,2 GOTO REGC1 MOVF MPMINA,0 ;NO HAY POTENCIOMETRO DE MIN APERTURA ;SI HAY POTENCIOMETRO DE MIN APERTURA SUBWF MDCALD,0 BTFSS STATUS,0 GOTO REGC2 REGC1: MOVF MDCALD,0 SUBWF VAL1,0 BTFSS STATUS,0 352 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 GOTO REGC3 REGC4: MOVF VAL1,0 BCF STATUS,5 GOTO FREG REGC3: MOVF MDCALD,0 BCF STATUS,5 GOTO FREG REGC2: MOVF MPMINA,0 SUBWF VAL1,0 BTFSC STATUS,0 GOTO REGC4 MOVF MPMINA,0 BCF STATUS,5 GOTO FREG CFC2: CLRWDT CLRF STATUS MOVLW 0xFF ;COMPUERTAS TOTALMENTE ABIERTAS MOVWF DAOUTA MOVWF DAOUTB CALL CRM2E CLRF STATUS RETURN CRM2E: BSF STATUS,5 MOVLW 2 SUBWF NETAP,0 BTFSS STATUS,2 GOTO RM3 BCF MANDO,4 ;2 ETAPAS EN CONTROL - DEVOLVER 1 ETAPA 353 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 BSF MANDO,3 RETURN RM3: BSF MANDO,4 ;3 ETAPAS EN CONTROL - DEVOLVER 2 ETAPAS BCF MANDO,3 RETURN ;***************************************************************************** ;SAL AL CONV DIG-ANALOG MAX500 – SAL A LOS 4 CANALES (A-B-C-D) DE MANERA SEG CONVDA: CLRWDT CLRF STATUS CALL STRDAC ;START COMUNICACIONES BCF PORTC,1 ;CANAL VOUTA -> A1=0 Y A0=0 CALL CLKDAC CALL CLKDAC MOVF DAOUTA,0 ;SALIDA DIGITAL-ANALOGICA CANAL A MOVWF DATODA CALL SENDAC ;ENVIAR DATO A CONVERTIDOR MAX500 CALL STPDAC ;STOP COMUNICACIONES CALL DELDAF ;RETARDO AL TERMINAR COMUNICACION (0.5 MSEG) CALL STRDAC ;START COMUNICACIONES BCF PORTC,1 ;CANAL VOUTB -> A1=0 Y A0=1 CALL CLKDAC BSF PORTC,1 CALL CLKDAC MOVF DAOUTB,0 ;SALIDA DIGITAL-ANALOGICA CANAL B MOVWF DATODA CALL SENDAC ;ENVIAR DATO A CONVERTIDOR MAX500 CALL STPDAC ;STOP COMUNICACIONES CALL DELDAF ;RETARDO AL TERMINAR COMUNICACION (0.5 MSEG) CALL STRDAC ;START COMUNICACIONES 354 MEMORIA VI. Código fuente BSF PORTC,1 Capítulo 2. Código de la tarjeta SA98 ;CANAL VOUTC -> A1=1 Y A0=0 CALL CLKDAC BCF PORTC,1 CALL CLKDAC MOVF DAOUTC,0 ;SALIDA DIGITAL-ANALOGICA CANAL C MOVWF DATODA CALL SENDAC ;ENVIAR DATO A CONVERTIDOR MAX500 CALL STPDAC ;STOP COMUNICACIONES CALL DELDAF ;RETARDO AL TERMINAR COMUNICACION (0.5 MSEG) CALL STRDAC ;START COMUNICACIONES BSF PORTC,1 ;CANAL VOUTD -> A1=1 Y A0=1 CALL CLKDAC CALL CLKDAC MOVF DAOUTD,0 ;SALIDA DIGITAL-ANALOGICA CANAL D MOVWF DATODA CALL SENDAC ;ENVIAR DATO A CONVERTIDOR MAX500 CALL STPDAC ;STOP COMUNICACIONES CALL DELDAF ;RETARDO AL TERMINAR COMUNICACION (0.5 MSEG) RETURN SENDAC: MOVLW 8 ;ENVIAR DATO A CONVERTIDOR MAX500 MOVWF DEL PROGDA: CLRWDT RLF DATODA,1 BTFSS STATUS,0 GOTO DAT0 BSF PORTC,1 GOTO PONCLK DAT0: BCF PORTC,1 PONCLK: CALL CLKDAC 355 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 DECFSZ DEL,1 GOTO PROGDA RETURN STRDAC: BCF PORTC,1 ;START COMUNICACIONES CON MAX500 CALL DELDAC BCF PORTC,0 RETURN STPDAC: BCF PORTC,1 ;STOP COMUNICACIONES CON MAX500 CALL DELDAC BSF PORTC,0 CALL DELDAC BSF PORTC,1 CALL DELDAC CALL DELDAC BCF PORTC,2 ;TRANSFERIR DATOS A CANALES - LINEA LDAC EN ESTADO BAJO CALL DELDAC BSF PORTC,2 CALL DELDAC RETURN CLKDAC: CALL DELDAC ;CLOCK COMUNICACIONES CON MAX500 BSF PORTC,0 CALL DELDAC BCF PORTC,0 CALL DELDAC RETURN DELDAF: MOVLW 0x14 ;RETARDO DE APROXIMADAMENTE 0.5 MSEG MOVWF DEL MDELF: CLRWDT CALL DELF 356 MEMORIA VI. Código fuente Capítulo 2. Código de la tarjeta SA98 DECFSZ DEL,1 GOTO MDELF RETURN DELF: NOP NOP NOP NOP NOP NOP NOP DELDAC: NOP ;RETARDO COMUNICACIONES CON MAX500 NOP NOP NOP NOP NOP RETURN ;******************** *************PAGE 2************************************* ORG 0x1000 ;MULTIPLICACION HEXADECIMAL DE UN NUMERO (MULT1 - MAXIMO 10 BITS) POT OTRO NUMERO (MULT2 - MAXIMO 10 BITS) - RESULTADO MULTIPLICACION EN 3 BYTES (RESMUL) MULT: CLRWDT CLRF RESMUL ;VALOR INICIAL DEL ACUMULADOR CLRF RESMUL+1 CLRF RESMUL+2 BTFSS MULT2+1,0 GOTO MUL1 CALL INIDAT CALL SUMTOT 357 MEMORIA III. Código Fuente Capítulo 2. Modelado MUL1: BTFSS MULT2+1,1 GOTO MUL2 CALL INIDAT CALL BUCR0 MUL2: BTFSS MULT2+1,2 GOTO MUL3 CALL INIDAT CALL BUCR1 MUL3: BTFSS MULT2+1,3 GOTO MUL4 CALL INIDAT CALL BUCR2 MUL4: BTFSS MULT2+1,4 GOTO MUL5 CALL INIDAT CALL BUCR3 MUL5: BTFSS MULT2+1,5 GOTO MUL6 CALL INIDAT CALL BUCR4 MUL6: BTFSS MULT2+1,6 GOTO MUL7 CALL INIDAT CALL BUCR5 MUL7: BTFSS MULT2+1,7 GOTO MUL8 CALL INIDAT CALL BUCR6 MUL8: BTFSS MULT2,0 GOTO MUL9 358 MEMORIA III. Código Fuente Capítulo 2. Modelado CALL INIDAT CALL BUCR7 MUL9: BTFSS MULT2,1 RETURN CALL INIDAT CALL BUCR8 RETURN BUCR8: CALL ROTMUL BUCR7: CALL ROTMUL BUCR6: CALL ROTMUL BUCR5: CALL ROTMUL BUCR4: CALL ROTMUL BUCR3: CALL ROTMUL BUCR2: CALL ROTMUL BUCR1: CALL ROTMUL BUCR0: CALL ROTMUL SUMTOT: MOVF MULAUX+2,0 ADDWF RESMUL+2,1 BTFSC STATUS,0 INCF RESMUL+1,1 MOVF MULAUX+1,0 ADDWF RESMUL+1,1 BTFSC STATUS,0 INCF RESMUL,1 MOVF MULAUX,0 ADDWF RESMUL,1 RETURN ROTMUL: BCF STATUS,0 RLF MULAUX+2,1 RLF MULAUX+1,1 359 MEMORIA III. Código Fuente Capítulo 2. Modelado RLF MULAUX,1 RETURN INIDAT: MOVF MULT1+1,0 MOVWF MULAUX+2 MOVF MULT1,0 MOVWF MULAUX+1 CLRF MULAUX RETURN ;******************* ***PAGE 3************************************* ORG 0x1800 ;TABLA MEDIDA SONDA TEMPERATURA EXTERIOR (RANGO DE TEMPERATURAS: -20ºC A +80ºC) - LAS MEDIDAS EN TABLA ESTAN MULTIPLICADAS POR 5 TABLAE: ADDWF PCL,1 DT 0x01,0x90,0x01,0x90,0x01,0x90,0x01,0x90 ;00 DT 0x01,0x90,0x01,0x90,0x01,0x90,0x01,0x7C ;08 DT 0x01,0x68,0x01,0x54,0x01,0x41,0x01,0x36 ;10 DT 0x01,0x27,0x01,0x18,0x01,0x0E,0x01,0x04 ;18 DT 0x00,0xFB,0x00,0xF5,0x00,0xEB,0x00,0xE2 ;20 DT 0x00,0xD8,0x00,0xD1,0x00,0xCB,0x00,0xC5 ;28 DT 0x00,0xBE,0x00,0xB9,0x00,0xB4,0x00,0xAE ;30 DT 0x00,0xA8,0x00,0xA3,0x00,0x9E,0x00,0x99 ;38 DT 0x00,0x94,0x00,0x8F,0x00,0x8B,0x00,0x86 ;40 DT 0x00,0x81,0x00,0x7D,0x00,0x78,0x00,0x74 ;48 DT 0x00,0x6F,0x00,0x6B,0x00,0x67,0x00,0x63 ;50 DT 0x00,0x5F,0x00,0x5C,0x00,0x58,0x00,0x55 ;58 DT 0x00,0x51,0x00,0x4D,0x00,0x4A,0x00,0x47 ;60 DT 0x00,0x44,0x00,0x41,0x00,0x3E,0x00,0x3B ;68 DT 0x00,0x37,0x00,0x32,0x00,0x2D,0x00,0x2A ;70 DT 0x00,0x27,0x00,0x24,0x00,0x21,0x00,0x1E ;78 DT 0x00,0x1B,0x00,0x17,0x00,0x14,0x00,0x11 ;80 DT 0x00,0x0E,0x00,0x0B,0x00,0x08,0x00,0x05 ;88 360 -> +80ºC MEMORIA III. Código Fuente Capítulo 2. Modelado DT 0x00,0x02,0x03,0xFF,0x03,0xFB,0x03,0xF8 ;90 DT 0x03,0xF5,0x03,0xF3,0x03,0xF0,0x03,0xEC ;98 DT 0x03,0xEA,0x03,0xE7,0x03,0xE4,0x03,0xE0 ;A0 DT 0x03,0xDD,0x03,0xDA,0x03,0xD7,0x03,0xD4 ;A8 DT 0x03,0xCE,0x03,0xCB,0x03,0xC8,0x03,0xC4 ;B0 DT 0x03,0xC1,0x03,0xBE,0x03,0xB9,0x03,0xB5 ;B8 DT 0x03,0xB2,0x03,0xAF,0x03,0xAB,0x03,0xA6 ;C0 DT 0x03,0xA2,0x03,0x9C,0x03,0x9C,0x03,0x9C ;C8 DT 0x03,0x9C,0x03,0x9C,0x03,0x9C,0x03,0x9C ;D0 DT 0x03,0x9C,0x03,0x9C,0x03,0x9C,0x03,0x9C ;D8 DT 0x03,0x9C,0x03,0x9C,0x03,0x9C,0x03,0x9C ;E0 DT 0x03,0x9C,0x03,0x9C,0x03,0x9C,0x03,0x9C ;E8 DT 0x03,0x9C,0x03,0x9C,0x03,0x9C,0x03,0x9C ;F0 DT 0x03,0x9C,0x03,0x9C,0x03,0x9C,0x03,0x9C ;F8 -> -20ºC ORG 0x1A00 ;TABLA MEDIDA HUMEDAD (RANGO DE HUMEDAD: 0% A 100%) - LAS MEDIDAS EN TABLA ESTAN MULTIPLICADAS POR 10 TABLAH: ADDWF PCL,1 DT 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ;00 DT 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ;08 DT 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ;10 DT 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ;18 DT 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ;20 DT 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ;28 DT 0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x19 ;30 DT 0x00,0x25,0x00,0x32,0x00,0x3E,0x00,0x4B ;38 DT 0x00,0x57,0x00,0x64,0x00,0x70,0x00,0x7D ;40 DT 0x00,0x89,0x00,0x96,0x00,0xA2,0x00,0xAE ;48 DT 0x00,0xBA,0x00,0xC7,0x00,0xD3,0x00,0xE0 ;50 DT 0x00,0xEC,0x00,0xF9,0x01,0x05,0x01,0x12 ;58 DT 0x01,0x1E,0x01,0x2B,0x01,0x37,0x01,0x44 ;60 361 -> 0% (1V) (4mA) MEMORIA III. Código Fuente Capítulo 2. Modelado DT 0x01,0x50,0x01,0x5D,0x01,0x69,0x01,0x76 ;68 DT 0x01,0x82,0x01,0x8F,0x01,0x9B,0x01,0xA7 ;70 DT 0x01,0xB4,0x01,0xC0,0x01,0xCD,0x01,0xD9 ;78 DT 0x01,0xE6,0x01,0xF2,0x01,0xFF,0x02,0x0B ;80 DT 0x02,0x18,0x02,0x24,0x02,0x31,0x02,0x3D ;88 DT 0x02,0x49,0x02,0x56,0x02,0x62,0x02,0x6F ;90 DT 0x02,0x7B,0x02,0x88,0x02,0x94,0x02,0xA1 ;98 DT 0x02,0xAD,0x02,0xBA,0x02,0xC6,0x02,0xD3 ;A0 DT 0x02,0xDF,0x02,0xEC,0x02,0xF8,0x03,0x05 ;A8 DT 0x03,0x11,0x03,0x1E,0x03,0x2A,0x03,0x37 ;B0 DT 0x03,0x43,0x03,0x50,0x03,0x5C,0x03,0x69 ;B8 DT 0x03,0x75,0x03,0x82,0x03,0x8E,0x03,0x9B ;C0 DT 0x03,0xA7,0x03,0xB4,0x03,0xC0,0x03,0xCD ;C8 DT 0x03,0xD9,0x03,0xE6,0x03,0xE8,0x03,0xE8 ;D0 DT 0x03,0xE8,0x03,0xE8,0x03,0xE8,0x03,0xE8 ;D8 DT 0x03,0xE8,0x03,0xE8,0x03,0xE8,0x03,0xE8 ;E0 DT 0x03,0xE8,0x03,0xE8,0x03,0xE8,0x03,0xE8 ;E8 DT 0x03,0xE8,0x03,0xE8,0x03,0xE8,0x03,0xE8 ;F0 DT 0x03,0xE8,0x03,0xE8,0x03,0xE8,0x03,0xE8 ;F8 -> 100 % (4V) (20mA) ORG 0x1C00 ;TABLA MEDIDA CALIDAD DEL AIRE (MEDIDA LINEAL) TABLAC: ADDWF PCL,1 DT 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07;00->+CALIDAD AIRE (0V) (0x00)->AL 20% DT 0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F ;08 DT 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17 ;10 DT 0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F ;18 DT 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27 ;20 DT 0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F ;28 DT 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37 ;30 DT 0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F ;38 362 MEMORIA III. Código Fuente Capítulo 2. Modelado DT 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47 ;40 DT 0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F ;48 DT 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57 ;50 DT 0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F ;58 DT 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67 ;60 DT 0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F ;68 DT 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77 ;70 DT 0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F ;78 DT 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87 ;80 DT 0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F ;88 DT 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97 ;90 DT 0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F ;98 DT 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7 ;A0 DT 0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF ;A8 DT 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7 ;B0 DT 0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF ;B8 DT 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7 ;C0 DT 0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF ;C8 DT 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7 ;D0 DT 0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF ;D8 DT 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7 ;E0 DT 0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF ;E8 DT 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7 ;F0 DT 0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF ;F8 COMPUERTA ABIERTA ; SUBRUTINA DE AUTOTEST MAUTES: CLRWDT RETURN ;******************************************************************** END 363 -> PEOR CALIDAD DEL AIRE (5V) (0xFF) -> PARTE VI: Datasheets 364 MEMORIA VI. Datasheets Capítulo 1. Datasheets Capítulo 1 Datasheets Capítulo 1 E Datasheets 1. Daigu n este capítulo se adjuntan los Datasheets de los componentes que sea necesario saber su funcionamiento más en profundidad o alguna de sus características destacables. 365 MEMORIA VI. Datasheets Capítulo 1. Datasheets 1. Termistor NTC 366 MEMORIA VI. Datasheets Capítulo 1. Datasheets 367 MEMORIA VI. Datasheets Capítulo 1. Datasheets 2. MAX487 368 MEMORIA VI. Datasheets Capítulo 1. Datasheets 369 MEMORIA VI. Datasheets Capítulo 1. Datasheets 370 MEMORIA VI. Datasheets Capítulo 1. Datasheets 371 MEMORIA VI. Datasheets Capítulo 1. Datasheets 372 MEMORIA VI. Datasheets Capítulo 1. Datasheets 373 MEMORIA VI. Datasheets Capítulo 1. Datasheets 374 MEMORIA VI. Datasheets Capítulo 1. Datasheets 375 MEMORIA VI. Datasheets Capítulo 1. Datasheets 3. MAX500 376 MEMORIA VI. Datasheets Capítulo 1. Datasheets 377 MEMORIA VI. Datasheets Capítulo 1. Datasheets 378 MEMORIA VI. Datasheets Capítulo 1. Datasheets 379 MEMORIA VI. Datasheets Capítulo 1. Datasheets 380 MEMORIA VI. Datasheets Capítulo 1. Datasheets 381 MEMORIA VI. Datasheets Capítulo 1. Datasheets 382 MEMORIA VI. Datasheets Capítulo 1. Datasheets 4. ULN-2803 383 MEMORIA VI. Datasheets Capítulo 1. Datasheets 384 MEMORIA VI. Datasheets Capítulo 1. Datasheets 385 MEMORIA VI. Datasheets Capítulo 1. Datasheets 5. MC34084 386 MEMORIA VI. Datasheets Capítulo 1. Datasheets 387 MEMORIA VI. Datasheets Capítulo 1. Datasheets 388 MEMORIA VI. Datasheets Capítulo 1. Datasheets 6. TL431 389 MEMORIA VI. Datasheets Capítulo 1. Datasheets 390 MEMORIA VI. Datasheets Capítulo 1. Datasheets 391 MEMORIA VI. Datasheets Capítulo 1. Datasheets 7. Relé OM-G5V-1 392 MEMORIA VI. Datasheets Capítulo 1. Datasheets 393 MEMORIA VI. Datasheets Capítulo 1. Datasheets 394 MEMORIA VI. Datasheets Capítulo 1. Datasheets 395