ANEXO II. PROGRAMACIÓN DEL INTEGRADO PIC16F87XA

Documentos relacionados
Laboratorio 8: Interrupción por Lectura de Entradas y por Desbordamiento del TMR0.

Instrucciones para programar el PIC16F877

Practica de PIC 16F84

Las Instrucciones. A continuación vamos a presentar el conjunto de instrucciones básico de los Microcontroladores Picmicro.

Alarma con Interfaz DTMF de Línea Telefónica basado en PIC16F84

INSTRUCCIONES DE ENSAMBLADOR

Set de instrucciones Microcontrolador PIC.

Programa del PIC 16F877A

Denominación: Relé Universal Descripción del protocolo Modbus: N EA: 1451 Sustitución de: Hoja: 1 de 10

Tema 6: Microcontroladores

W4IKS MANUAL DEL USUARIO

NOTA TÉCNICA. FECHA: 29 de marzo de Airbag DTC Codes NºPSA.15

Capítulo VIII: PROGRAMACIÓN DEL PIC 16F876A

Bucles: o Bucles infinitos o Bucles finitos o Bucles anidados Medir tiempos con MPLAB Ejemplos y ejercicios

El único lenguaje que entienden los microcontroladores es el código máquina formado por ceros y unos del sistema binario.

Microcontrolador PIC 16F84

Indice. Escrito por Administrator Martes, 02 de Septiembre de :45 - Actualizado Domingo, 20 de Septiembre de :45 1 / 15

RECURSOS FUNDAMENTALES

Tema: Utilización del módulo ADC en los microcontroladores PIC.

Guía Experiencia Nº3 Microcontroladores

PIC16C5X (GAMA BAJA) Solo en dispositivos de 28 pins. Encapsulado y patillaje:

Registros SFR vistos hasta ahora: Microcontroladores PIC

Manejo LCD Gráfico DSM

1. ÍNDICE. Índice de contenido 2. INTRODUCCIÓN 3. CONTENIDO 1. OBJETIVOS DEL PROYECTO

[CURSO BÁSICO DE PIC TABLAS]

Jesús Alberto Díaz Carmona Ingeniería en Informática. Curso 2005/06. Diseño de Sistemas Basados en Microprocesador

Programación en PIC Los primeros pasos

PRÁCTICA 4 LOS BITS DE CONFIGURACIÓN DEL PIC16F628

SALTOS EN FUNCIONDE UN BIT Aquéllas que pueden producir el salto en función del estado de un bit. Son btfsc y

Aprendiendo a programar Microcontroladores PIC en Lenguaje C con CCS

UNIVERSIDAD DE OVIEDO

ESCUELA INTERNACIONAL DE IDIOMAS Avenida Pedro de Heredia, Calle 49a #31-45, barrio el Libano

PRÁCTICA 1: OBTENCIÓN DE CERTIFICADOS DIGITALES

Control de pantallas de cristal líquido mediante PIC

Disco de Alberti. Y el disco interno: A B C D E F G H I J K L M N Ñ O P Q R S T U V W X Y Z

COMUNICACIÓN I2C PROTOTIPO BRAZO ROBÓTICO BM001

PROFESOR: Práctica 5. Manejo de Motores

Microcontrolador PIC 16F84

1. Proponer un circuito que tenga el puerto b como salida conectando 8 leds, realizando un programa que me encienda los bits 0, 1, 3, 5, 7.

Sistema de seguridad con emisión de mensaje SMS

Ingeniería Técnica en Informática de Sistema E.T.S.I. Informática Universidad de Sevilla

MICROPROCESADORES II LENGUAJE C EN LOS MICROCONTROLADORES PIC

Guía Rápida Instalación TBK-SER1001

PRÁCTICA 5 DIRECCIONAMIENTO INDIRECTO Y TECLADO MATRICIAL

Los dos círculos deben quedar unidos al centro y con la posibilidad de girar cada uno de ellos de forma independiente.

17 Con el chorro de agua pequeño, la cubeta se llena en 10 minutos

PIC MICRO ESTUDIO Reloj en tiempo real RTCU2 Clave: 719

Características generales en el PIC16F877

A BCD EA F ABC DA C B

LOS PIC16F88X: EEPROM de Usuario

GUIA GENERAL PARA LA PROGRAMACIÓN DEL SISTEMA EVOLUPIC Bootloader 16F88 BOOTLOADER: AN1310 DE MICROCHIP INDICE

GUIA GENERAL PARA LA PROGRAMACIÓN DEL SISTEMA EB88 BOOTLOADER: TINY INDICE

Experiencia con Motores paso a paso

La información en este documento se basa en el Cisco Catalyst 3850 Series Switch que funciona con la versión o posterior.

PRACTICA 4. REALIZAR ENCENDIDO-APAGADO DE DIODOS LED

! "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

PROGRAMACIÓN DEL MICROCONTROLADOR PIC 16C64 COMO CONTROLADOR MULTIEJE PARA MOTORES PASO

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO FACULTAD DE INGENIERÍA DIVISIÓN DE INGENIERÍA ELÉCTRICA DEPARTAMENTO DE INGENIERÍA EN COMPUTACIÓN

Tema 3: Lenguaje ensamblador. La primera abstracción de la máquina para el programador

:: Microcontroladores PIC - Tabla de Referencias. Conceptos Básicos

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS COORDINACIÓN DE ELECTRÓNICA GUÍA DE LABORATORIO Nº 02

Ejercicios Tema 6. Funciones

SISTEMA DE NUMERACIÓN DECIMAL

Autor: María Soledad Proaño Rocha.

PROFESOR: Práctica 8. Manejo de Puertos de Entrada y salida del Microcontrolador PIC

INDICE. Introduction a los microcontroladores Ejemplo de microcontrolador minimalista: PIC10F200 El microcontrolador ARM7 LPC2103

Usando un PIC para la Generación de Tonos de Audio

Dependiendo del dispositivo usado, se tienen hasta 5 puertos de entrada/salida disponibles: PORTA PORTB PORTC PORTD PORTE

Tema: Comunicación serie entre PIC y PC.

Usando los Codificadores Cuadráticos

MICROCONTROLADORES II (FAMILIA PIC16F87X) LENGUAJE C PARA PICS

EDU-PIC Módulo 16F84 Manual del Usuario

MANUAL DE MICROCONTROLADORES PIC

Sistemas con Microprocesadores I

INGENIERIA EN MICROCONTROLADORES. Maquinas de Estado. Introducción

Sensores inalámbricos de bajo

EDUPIC Módulo 16F628 Manual del Usuario

Proyectos con el PIC16F84

GUIA GENERAL PARA LA PROGRAMACIÓN DEL SISTEMA PICCITO 16F88 INDICE

Anexo No. 5. Estructura de Archivo - Registro de Garantías

LCD. Las pantallas de cristal líquido o módulos LCD, como. Módulo. con interface serial

Control de servomotores. (c) Domingo Llorente

UNIVERSIDAD ANDINA DEL CUSCO CATÁLOGO DE ASIGNATURAS ESTUDIOS DE FORMACIÓN GENERAL

Tema 11. Introducción a los Microprocesadores y Microcontroladores

CALCULADORA DE FUNCIONES BÁSICAS Oscar Gregorio Pérez Macías

Códigos HTML - Caracteres y símbolos

Seguidores de clase. Universidad Pontificia de Salamanca (Madrid) Microcontrolador PIC 16F877

Energía fotovoltaica y su aplicación rural

Modificado por Luis Frino Fuente

1-Introducción. KIT ARM- Ténicas Digitales II - Ing. Ruben M. Lozano /9

Laboratorio de Diseño de Robots Móviles Practica No. 2 Sistema mínimo del microcontrolador PIC16F877

TEMA 5 LA MEMORIA DE DATOS MEMORIA RAM D.P.E. DESARROLLO DE PROYECTOS 1

Corporacion Universitaria Autonoma del Cauca EJEMPLARIZACION DE COMUNICACIÓN ENTRE DOS MODOULOS XBEE SERIE 2.

Dentro del PIC16F877 se distinguen tres bloques de memoria.

Control de avance al encendido

Pl. del Humedal, 5, Entlo 2º GIJÓN Tfno: Fax:

;*****************************************PROGRAMA*******************************************

UNIDAD No. 2 CAD para WLAN, Administración y Seguridad en Redes de Datos

Temporizadores y contadores en tiempo real: El módulo Timer0 del PIC.

CURSO BÁSICO DE PIC16F877

Transcripción:

ANEXO II. PROGRAMACIÓN DEL INTEGRADO PIC16F87XA ANEXO II. PROGRAMACIÓN DEL INTEGRADO PIC16F87XA Página 1 de 15

1. FICHEROS DE CABECERA ANEXO II. PROGRAMACIÓN DEL INTEGRADO PIC16F87XA Página 2 de 15

#include <16F876A.h> #device adc=8 #FUSES NOWDT #FUSES HS #FUSES PUT #FUSES NOPROTECT #FUSES NODEBUG #FUSES BROWNOUT #FUSES NOLVP #FUSES NOCPD #FUSES NOWRT //No Watch Dog Timer //High speed Osc (> 4mhz) //Power Up Timer //Code not protected from reading //No Debug mode for ICD //Reset when brownout detected //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O //No EE protection //Program memory not write protected #use delay(clock=4000000) #use rs232(baud=9600,parity=n,xmit=pin_c6,rcv=pin_c7,bits=8) ANEXO II. PROGRAMACIÓN DEL INTEGRADO PIC16F87XA Página 3 de 15

2. CÓDIGO FUENTE ANEXO II. PROGRAMACIÓN DEL INTEGRADO PIC16F87XA Página 4 de 15

// POWER MONITOR V1.0 // 16 de Junio de 2010 //---------------------------------------------------------------------------------------- // Descripción: // Monitor DC que cumple la norma MIL-PRF-24021K TABLA III y Figura 9 // Siempre que se cumpla dicha norma, el relé de salida está activado, // de lo contrario el relé se desactiva y el tipo de error es informado con los LEDs: // LED1 -> Tensión baja // LED2 -> La tensión esta entre 10 y 24 y ha superado 2.5s entre estos niveles // LED3 -> La tensión esta entre 30 y 50v y ha superado los tiempos definidos en la tabla // LED4 -> Tensión alta // LEDs 1 al 4 -> Rizado máximo admitido superado (los 4 encendidos a la vez) //---------------------------------------------------------------------------------------- #include <pwrmon00.h> #define LoadVMAX 250 //50v Por encima de esta tensión SIEMPRE da error #define Load29V 133 //29v Entre estas 2 tensiones no hay error, fuera #define Load24V 111 //24v se amplifica la tabla de abajo #define LoadVMIN 51 //10v Por debajo de esta tensión SIEMPRE da error // Sólo se usa cuando el relé fue activado #define ResetVMAX 137 #define ResetVMIN 105 #define RELE PIN_B4 #define LED1 PIN_B0 #define LED2 PIN_B1 #define LED3 PIN_B2 #define LED4 PIN_B3 #define BUTTON PIN_C0 #define MAXRIPPLE 23 #define NOERROR 0 #define LOWVERROR 1 #define LOWVERRORT 2 #define HIGHVERRORT 3 #define HIGHVERROR 4 #define RIPPLEERROR 5 #use fast_io(b) //29.9v Rango de tensiones para encendido o rearme //23v // Rango a cumplir antes del encendido o después de un error de las anteriores // Rizado máximo permitido (4Vpp) // LEDs apagados // LED1 // LED2 // LED3 // LED4 // Los 4 LEDs encendidos // Lista de errores posibles para la variable ERROR // Tabla que cumple la curva A de la Figura 9 de la MIL-PRF-24021 const int8 Limites[]=240, 145, 105, 82, 68, 57, 49, 43, 38, 34, 31, 29, 26, 24, 23, 22, 20, 19, 17, 16, 14, 14, 14, 13, 13, 12, 12, 11, 11, 10, 10, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3; int8 ContInt = 5; // Se usa para multiplicar el tiempo del temporizador HW x5 int1 TOMARMUESTRA = FALSE; // SI = TRUE se ha producido 5 veces la interrupción WH (ContInt=5) int8 ERROR = 0; // Almacena el tipo de error int1 ESTADO_RELE = 0; // Diferencia los 2 estados de funcionamiento del Power monitor, avión conectado o desconectado ANEXO II. PROGRAMACIÓN DEL INTEGRADO PIC16F87XA Página 5 de 15

int8 MUESTRA = 0; // Almacena el valor de la conversión del ADC int8 CONTADOR_MAL = 0; int8 CONTADOR_OK = 0; int16 CONTADOR_LOW = 0; // Contador para 2.5s (500 x 5ms) // Interrupcion del Timer configurado para 1ms, se activa un flag cuando ha ocurrido 5 veces (5ms). // Se toman muestras del ADC cada 5ms. #int_rtcc void RTCC_isr(void) if(--contint==0) TOMARMUESTRA = TRUE; ContInt = 5; // Toma una muestra del nivel de rizado de la tensión y se compara con el valor máximo admitido // Devuelve un 0 si se supera dicho valor. int1 RizadoOK() int8 MUESTRARIPPLE; set_adc_channel(1); delay_us(10); MUESTRARIPPLE=read_adc(); if(muestraripple>maxripple) return 0; else return 1; void main() setup_adc_ports(an0_an1_an3); setup_adc(adc_clock_div_2); setup_spi(spi_ss_disabled); setup_timer_0(rtcc_internal RTCC_DIV_4); // Temporizador a 1ms setup_timer_1(t1_disabled); setup_timer_2(t2_disabled,0,1); setup_comparator(nc_nc_nc_nc); setup_vref(false); enable_interrupts(int_rtcc); // Interrupción por desbordamiento del timer set_tris_b( 0b11100000 ); output_b(0x00); // Se espera a pulsar el botón ON/RESET ANEXO II. PROGRAMACIÓN DEL INTEGRADO PIC16F87XA Página 6 de 15

delay_ms(3000); enable_interrupts(global); while(!input(button)) while(input(button)) while(true) if(tomarmuestra == TRUE) TOMARMUESTRA = FALSE; set_adc_channel(0); delay_us(10); MUESTRA = read_adc(); // Entramos sólo si desbordo el timer 5 veces (5ms) // Reseteamos el contador para volver a contar 5ms if(estado_rele == 0) // Estado inicial o después de un error if((muestra > ResetVMIN)&&(MUESTRA < ResetVMAX)&&(RizadoOK())) // Condiciones de la TablaIII part1, MIL-PRF24021 output_high(rele); ESTADO_RELE = 1; ERROR = NOERROR; CONTADOR_OK = 0; CONTADOR_MAL = 0; CONTADOR_LOW = 0; output_low(led1); output_low(led2); output_low(led3); output_low(led4); else if(muestra <= ResetVMIN) ERROR = LOWVERROR; else if(muestra >= ResetVMAX) ERROR = HIGHVERROR; else ERROR = RIPPLEERROR; // Si alguna de las condiciones del if anterior no se cumplió, averiguamos cual else // CON RELÉ ACTIVADO, Condiciones de la Tabla III parte 2. if(!rizadook()) ERROR = RIPPLEERROR; if(muestra >= LoadVMAX) ERROR = HIGHVERROR; else if(muestra < LoadVMIN) ERROR = LOWVERROR; else if((muestra > LoadVMIN)&&(MUESTRA < Load24V)) CONTADOR_LOW++; ANEXO II. PROGRAMACIÓN DEL INTEGRADO PIC16F87XA Página 7 de 15

if(contador_low > 488) ERROR = LOWVERRORT; else if((muestra > Load24V)&&(MUESTRA < Load29V)) CONTADOR_LOW = 0; CONTADOR_MAL = 0; ERROR = NOERROR; else if((muestra>=load29v)&&(muestra<loadvmax)) if(++contador_mal > Limites[MUESTRA-Load29V]) ERROR = HIGHVERRORT; if(error!=noerror) output_low(rele); ESTADO_RELE = 0; switch(error) case HIGHVERROR: output_high(led4); output_low(led1); output_low(led2); output_low(led3); break; case HIGHVERRORT: output_high(led3); output_low(led1); output_low(led2); output_low(led4); break; case LOWVERRORT: output_high(led2); output_low(led1); output_low(led3); output_low(led4); break; case LOWVERROR: output_high(led1); output_low(led2); output_low(led3); output_low(led4); break; case RIPPLEERROR: output_high(led1); output_high(led2); output_high(led3); output_high(led4); break; // Duración máxima permitida (2.5s) para tensiones entre 24 y 10v. // Rango de tensiones normal // Se resetean contadores de error // Apagamos el relé ya que se produjo un error // Pasamos el estado de relé desactivado // Averiguamos que tipo de error dio y encendemos el LED para dicho error ANEXO II. PROGRAMACIÓN DEL INTEGRADO PIC16F87XA Página 8 de 15

while(!input(button)) while(input(button)) ERROR = NOERROR; CONTADOR_OK = 0; // Una vez producido un error se necesita un rearme ANEXO II. PROGRAMACIÓN DEL INTEGRADO PIC16F87XA Página 9 de 15

3. COMPILACIÓN ANEXO II. PROGRAMACIÓN DEL INTEGRADO PIC16F87XA Página 10 de 15

CCS PCM C Compiler, Version 4.065, 38112 04-jun-10 17:45 Filename: C:\Documents and Settings\mrflower-laptop\Mis documentos\proyectos\powermon\pwrmon00\pwrmon00.lst ROM used: 544 words (7%) Largest free fragment is 2048 RAM used: 24 (7%) at main() level 25 (7%) worst case Stack: 2 worst case (1 in main + 1 for interrupts) * 0000: MOVLW 00 0001: MOVWF 0A 0002: GOTO 0DE 0003: NOP 0004: MOVWF 7F 0005: SWAPF 03,W 0006: CLRF 03 0007: MOVWF 21 0008: MOVF 0A,W 0009: MOVWF 20 000A: CLRF 0A 000B: MOVF 04,W 000C: MOVWF 22 000D: MOVF 77,W 000E: MOVWF 23 000F: MOVF 78,W 0010: MOVWF 24 0011: MOVF 79,W 0012: MOVWF 25 0013: MOVF 7A,W 0014: MOVWF 26 0015: MOVF 7B,W 0016: MOVWF 27 0017: BCF 03.7 0018: BCF 03.5 0019: BTFSS 0B.5 001A: GOTO 01D 001B: BTFSC 0B.2 001C: GOTO 030 001D: MOVF 22,W 001E: MOVWF 04 001F: MOVF 23,W 0020: MOVWF 77 0021: MOVF 24,W 0022: MOVWF 78 0023: MOVF 25,W 0024: MOVWF 79 0025: MOVF 26,W 0026: MOVWF 7A 0027: MOVF 27,W 0028: MOVWF 7B 0029: MOVF 20,W ANEXO II. PROGRAMACIÓN DEL INTEGRADO PIC16F87XA Página 11 de 15

002A: MOVWF 0A 002B: SWAPF 21,W 002C: MOVWF 03 002D: SWAPF 7F,F 002E: SWAPF 7F,W 002F: RETFIE 0030: BCF 0A.3 0031: BCF 0A.4 0032: GOTO 0A3 // POWER MONITOR V1.0 // 16 de Abril 2009 //---------------------------------------------------------------------------------------- // Descripción: // Monitor DC que cumple la norma MIL-PRF-24021K TABLA III y Figura 9 // Siempre que se cumpla dicha norma, el relé de salida está activado, // de lo contrario el relé se desactiva y el tipo de error es informado.. // con los LEDs: // LED1 -> Tensión baja // LED2 -> La tensión esta entre 10 y 24 y ha superado 2.5s entre estos niveles // LED3 -> La tensión esta entre 30 y 50v y ha superado los tiempos definidos en la tabla // LED4 -> Tensión alta // LEDs 1 al 4 -> Rizado máximo admitido superado (los 4 encendidos a la vez) //---------------------------------------------------------------------------------------- #include <pwrmon00.h> #include <16F876A.h> //////// Standard Header file for the PIC16F876A device //////////////// #device PIC16F876A #list #device adc=8 #FUSES NOWDT //No Watch Dog Timer #FUSES HS //High speed Osc (> 4mhz) #FUSES PUT //Power Up Timer #FUSES NOPROTECT //Code not protected from reading #FUSES NODEBUG //No Debug mode for ICD #FUSES BROWNOUT //Reset when brownout detected #FUSES NOLVP //No low voltage programming, B3(PIC16) or B5(PIC18) used for I/O #FUSES NOCPD //No EE protection #FUSES NOWRT //Program memory not write protected #use delay(clock=4000000) * 00AC: MOVLW 32 00AD: MOVWF 04 00AE: BCF 03.7 00AF: MOVF 00,W 00B0: BTFSC 03.2 00B1: GOTO 0C0 00B2: MOVLW 01 ANEXO II. PROGRAMACIÓN DEL INTEGRADO PIC16F87XA Página 12 de 15

00B3: MOVWF 78 00B4: CLRF 77 00B5: DECFSZ 77,F 00B6: GOTO 0B5 00B7: DECFSZ 78,F 00B8: GOTO 0B4 00B9: MOVLW 4A 00BA: MOVWF 77 00BB: DECFSZ 77,F 00BC: GOTO 0BB 00BD: GOTO 0BE 00BE: DECFSZ 00,F 00BF: GOTO 0B2 00C0: BCF 0A.3 00C1: BCF 0A.4 00C2: GOTO 144 (RETURN) #use rs232(baud=9600,parity=n,xmit=pin_c6,rcv=pin_c7,bits=8) #define LoadVMAX 250 // 50v Por encima de esta tensión SIEMPRE da error #define Load29V 133 // 29v Entre estas 2 tensiones no hay error, fuera #define Load24V 111 // 24v se amplifica la tabla de abajo #define LoadVMIN 51 // 10v Por debajo de esta tensión SIEMPRE da error // Sólo se usan cuando el relé fue activado. #define ResetVMAX 137 // 29.9v Rango de tensiones para encendido o rearme #define ResetVMIN 105 // 23v // Rango a cumplir antes del encendido o después de un error de las anteriores #define RELE PIN_B4 #define LED1 PIN_B0 #define LED2 PIN_B1 #define LED3 PIN_B2 #define LED4 PIN_B3 #define BUTTON PIN_C0 #define MAXRIPPLE 23 // Rizado máximo permitido (4Vpp) #define NOERROR 0 // LEDs apagados #define LOWVERROR 1 // LED1 #define LOWVERRORT 2 // LED2 #define HIGHVERRORT 3 // LED3 #define HIGHVERROR 4 // LED4 #define RIPPLEERROR 5 // Los 4 LEDs encendidos // Lista de errores posibles para la variable ERROR #use fast_io(b) // Tabla que cumple la curva A de la Figura 9 de la MIL-PRF-24021 const int8 Limites[]= 240, 145, 105, 82, 68, 57, 49, 43, 38, 34, 31, 29, 26, 24, 23, 22, 20, 19, 17, 16, 14, 14, 14, 13, 13, 12, 12, 11, 11, 10, 10, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3; int8 ContInt = 5; // Se usa para multiplicar el tiempo del temporizador HW x5 ANEXO II. PROGRAMACIÓN DEL INTEGRADO PIC16F87XA Página 13 de 15

* 00F1: MOVLW 05 00F2: BCF 03.5 00F3: MOVWF 28 int1 TOMARMUESTRA = FALSE; // SI = TRUE se ha producido 5 veces la interrupción WH (ContInt=5) 00F4: BCF 29.0 int8 ERROR = 0; // Almacena el tipo de error 00F5: CLRF 2A int1 ESTADO_RELE = 0; // Diferencia los 2 estados de funcionamiento del Power monitor, avión conectado o desconectado 00F6: BCF 29.1 int8 MUESTRA = 0; // Almacena el valor de la conversión del ADC 00F7: CLRF 2B int8 CONTADOR_MAL = 0; 00F8: CLRF 2C int8 CONTADOR_OK = 0; 00F9: CLRF 2D int16 CONTADOR_LOW = 0; // Contador para 2.5s (500 x 5ms) 00FA: CLRF 2E 00FB: CLRF 2F // Interrupción del Timer configurado para 1ms, se activa un flag cuando ha ocurrido 5 veces (5ms). // Se toman muestras del ADC cada 5ms. #int_rtcc void RTCC_isr(void) if(--contint==0) * 00A3: DECFSZ 28,F 00A4: GOTO 0A8 TOMARMUESTRA = TRUE; 00A5: BSF 29.0 ContInt = 5; 00A6: MOVLW 05 00A7: MOVWF 28 // Toma una muestra del nivel de rizado de la tensión y se compara con el valor máximo admitido // Devuelve un 0 si se supera dicho valor. 00A8: BCF 0B.2 00A9: BCF 0A.3 00AA: BCF 0A.4 00AB: GOTO 01D int1 RizadoOK() int8 MUESTRARIPPLE; set_adc_channel(1); ANEXO II. PROGRAMACIÓN DEL INTEGRADO PIC16F87XA Página 14 de 15

* 00C3: MOVLW 08 00C4: MOVWF 78 00C5: MOVF 1F,W 00C6: ANDLW C7 00C7: IORWF 78,W 00C8: MOVWF 1F delay_us(10); 00C9: MOVLW 03 00CA: MOVWF 77 00CB: DECFSZ 77,F 00CC: GOTO 0CB MUESTRARIPPLE=read_adc(); 00CD: BSF 1F.2 00CE: BTFSC 1F.2 00CF: GOTO 0CE 00D0: MOVF 1E,W 00D1: MOVWF 31 if(muestraripple>maxripple) 00D2: MOVF 31,W 00D3: SUBLW 17 00D4: BTFSC 03.0 00D5: GOTO 0DA return 0; 00D6: MOVLW 00 00D7: MOVWF 78 00D8: GOTO 0DD else 00D9: GOTO 0DD return 1; 00DA: MOVLW 01 00DB: MOVWF 78 00DC: GOTO 0DD 00DD: RETLW 00 void main() 00DE: CLRF 04 00DF: BCF 03.7 00E0: MOVLW 1F 00E1: ANDWF 03,F 00E2: MOVLW 19 00E3: BSF 03.5 00E4: MOVWF 19 00E5: MOVLW A6 00E6: MOVWF 18 00E7: MOVLW 90 ANEXO II. PROGRAMACIÓN DEL INTEGRADO PIC16F87XA Página 15 de 15