1. LENGUAJE DE PROGRAMACIÓN C18

Documentos relacionados
Programación estructurada (Introducción a lenguaje C)

PIC 18F45XX. El módulo CCP de Comparación, Captura y PWM (Pulse Wide Modulation)

Programación En Lenguaje C

Estructuras de Datos Declaraciones Tipos de Datos

Elementos de un programa en C

Lección 2 Introducción al lenguaje C

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

ÍNDICE CAPÍTULO 1 FUNDAMENTOS DE LOS MICROCONTROLADORES

PIC 18F45XX EL TIMER 0

6 MODULACIÓN DE ANCHO DE PULSO (PWM)

Tema 2. El lenguaje JAVA

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Unidad II Fundamentos de C++ M.C. Juan Carlos Olivares Rojas

Tipos de Datos en C. Palabras reservadas en C

Es un lenguaje estructurado, tiene una abundante cantidad de operadores y tipos de datos.

Laboratorio de Arquitectura de Redes. Introducción al lenguaje C

TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS

LENGUAJE. Tema 1 - Introducción

Introducción a Java. Introducción a Java. Programación I

Introducción al lenguaje C

Descripción de un Programa

Lenguaje C Elementos de un Programa. Ing. Hugo Fdo. Velasco Peña Universidad Nacional 2006

7 CONVERTIDOR ANALÓGICO DIGITAL

PIC16F88. Características

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Registros SFR vistos hasta ahora: Microcontroladores PIC

Programación Estructurada

LENGUAJE C PARA SISTEMAS DEDICADOS

Tipos de datos y Operadores Básicos

UNIDAD 1. Algoritmo se define como un conjunto de instrucciones que la computadora debe seguir para resolver un problema.

LENGUAJE. Tema 2 Elementos de un programa

Definición de Memoria

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

INTRODUCCIÓN AL LENGUAJE C

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C

Fundamentos de Informática E.U.P. Universidad de Sevilla

La familia PIC18 USB posee 4 timers: Timer0, Timer1, Timer2 y Timer3, cada uno de los cuales tiene sus características únicas.

CONCEPTOS BASICOS DEL LENGUAJE JAVA

Tema 2: Conceptos básicos. Escuela Politécnica Superior Ingeniería Informática Universidad Autónoma de Madrid

Programación en Lenguaje C

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

TEMA 4. ESTRUCTURAS DE CONTROL

Módulo. = Asignación = = Comp. de igualdad!= Com. de desigualdad <= Comp. menor o igual >= Comp. mayor o igual AND lógico OR lógica.

PIC 18F45XX CARACTERÍSTICAS GENERALES

Expresiones Lógicas y Operadores sobre Bits

Descripción y Contenido del Curso. Programación C++ Capacity Academy.

1.1 Tipos de Datos Primitivos. 1.2 Tipos de datos estructurados. 1.3 Definición de estructura de datos

Tipos de datos y operadores en C++

Elementos léxicos del lenguaje de programación Java

Informática Ingeniería en Electrónica y Automática Industrial

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

MICROCONTROLADORES PIC16F84 ING. RAÚL ROJAS REÁTEGUI

Laboratorio de Arquitectura de Redes. Entrada y salida estándar

Palabras reservadas de C++ y C. Una palabra reservada no puede declararse como un identificador, esto haría un conflicto entre conectores y funciones.

Se guardan en archivos con extencion c y los cabezales con extension h

Guía rápida para gestionar el puerto paralelo del PC

Especificación IEEE-754, para representar valores decimales en punto flotante de simple precisión.

6. Entrada y Salida Explicación de la interfaz entre el computador y el mundo exterior.

INTRODUCCIÓN. Comunicación Serial.

Sensor de Temperatura utilizando el Starter Kit Javelin Stamp. Realizado por: Bertha Palomeque A. Rodrigo Barzola J.

Lenguaje de programación C. Introducción

Lenguaje C. República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III

El Computador y sus Partes INTRODUCCIÓN A LAS TECNOLOGÍAS INFORMÁTICAS

Aprendiendo a programar Microcontroladores PIC en Lenguaje C con CCS

3.3 Conceptos Básicos del Lenguaje Java

Capítulo 1 Conceptos arquitectónicos

FUNCIONES. Identificador valido. Tipo-Funcion Identificador_de_la_funcion (Tipo par1,tipo par2 )

EVOLUCIÓN HISTÓRICA DE LOS µp

Tipos de Datos Estructurados

ADMINISTRACIÓN GENERAL DE TECNOLOGÍA DE LA INFORMACIÓN ADMINISTRACIÓN CENTRAL DE DESARROLLO Y MANTENIMIENTO DE APLICACIONES

Expresiones Aritméticas. Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz

Introducción al Lenguaje de Programación C

Curso de Programación en C. Licenciatura, FCQeI. APUNTADORES.

Objetivo de aprendizaje del tema

Microchip Tips & Tricks...

Control Digital en PC con MS-DOS

5 - Lenguaje Ensamblador

Segundo Parcial Programación en Mikro C PIC16F877

Periféricos Interfaces y Buses

Qué es un programa informático?

MICROCONTROLADORES: FUNDAMENTOS Y APLICACIONES CON PIC. Autores: Fernando E. Valdés Pérez Ramon Pallàs Areny. Título de la obra:

Programación estructurada (Tipos, operadores y expresiones)

Tema 2. El lenguaje de programación Java (Parte 1)

Nelson David Muñoz Politécnico CJIC TUTORIAL DISPLAYS

1. LIBRERÍA DEL USB: MPUSBAPI.DLL

Fundamentos de programación

Fundamentos de Programación 2017-I

Tema 13: Apuntadores en C

TIPOS DE DATOS BASICOS EN LENGUAJE C

Sistema Operativo. Repaso de Estructura de Computadores. Componentes Hardware. Elementos Básicos

Microchip Tips & Tricks...

Práctica 2. Implementación de un driver básico para la transmisión de datos a través de la UART.

Programación en java. Estructuras algorítmicas

PUNTEROS (APUNTADORES)

Constantes. Las constantes no cambian durante la ejecucion de un programa en C++, en C++ existen 4 tipos de constantes:

Transcripción:

1. LENGUAJE DE PROGRAMACIÓN C18 1.1. INTRODUCCIÓN El lenguaje C fue creado en los años 70 para escribir el código del sistema operativo UNIX. Tanto por su origen como por sus características, es un lenguaje muy adecuado para la programación de sistemas, ya que combina la abstracción de los lenguajes de alto nivel con la eficiencia del lenguaje máquina. La amplia utilización de C para distintos tipos de computadores ocasionó muchas variantes. Éstas eran similares, pero a menudo incompatibles, lo que se volvió un problema serio para los desarrolladores que necesitaban escribir programas que se ejecutaran en distintas plataformas. Entonces, se hizo evidente la necesidad de una versión estándar de C. En 1983, se creó el comité técnico X3J11 bajo la supervisión de American National Standards Comitte on Computer and Information Processing (X3), para proporcionar una definición del lenguaje clara e independiente de la computadora. En 1989, el estándar fue aprobado. ANSI cooperó con la International Organization for Standardization (ISO) para estandarizar C a nivel mundial; el documento conjunto del estándar se publicó en 1990 y se conoce como ANSI/ISO9899:1990 o ANSI C. Entre las características de este lenguaje cabe citar que es altamente portable, es muy flexible, genera código muy eficiente y permite escribir código muy compacto (se pueden realizar muchas funciones escribiendo pocas líneas de código). El C18 es una versión del C creada específicamente para los microcontroladores PIC18, que por sus características resulta demasiado complicado la programación en su lenguaje de bajo nivel, el Assambler. 1.2. COMPILADOR MPLAB C18 1.2.1. INTRODUCCIÓN El compilador MPLAB C18 es un compilador que optimiza el estándar ANSI C en los microcontroladores PIC18. El compilador modifica el estándar ANSI X3.159-1989 sólo en los puntos en los que se puedan crear conflictos con el soporte del microcontrolador. El MPLAB C18 tiene las siguientes características: Compatibilidad ANSI 89. Integración con el MLAB IDE para una mayor facilidad de realización y debugg de proyectos. Admite ensamblador empotrado. Gran variedad de librerías. Optimización multinivel. Acceso transparente en la lectura/escritura de la memoria. Versión estudiante gratuita.

Documento creado por Slalen para Electronics Strange World En este manual, aparecen en verde y con tipo de letra Comic Sans MS el código fuente y en verde con tipo de letra Times New Roman las notas del código. 1.2.2. TIPOS DE DATOS Los datos de más de un byte de longitud, se almacenan en memoria como en el ensamblador, con el criterio Little Indian; es decir, los bytes menos significativos se almacenan en las posiciones de memoria bajas. 1.2.2.1. Enteros Tipo Tamaño Mínimo Máximo Char 8 bits -128 127 Signedchar 8 bits -128 127 Unsigned char 8 bits 0 255 Int 16 bits -32768 32767 Unsigned Int 16 bits 0 65535 Short 16 bits -32768 32767 Unsigned Short 16 bits 0 65535 Short long 24 bits -8.388.608 8.388.607 Unsigned short long 24 bits 0 16.777.215 1.2.2.2. Reales Long 32 bits -2.147.483.648 2.147.483.647 Unsigned long 32 bits 0 4.294.967.295 Tipo Tamaño Exponente Mínimo Exponente Máximo Float 32 bits -126 128 Double 32 bits -126 128 1.2.2.3. Estructuras Se permiten las estructuras de datos. Su utilidad es el acceso a bits. union tpuerto{ unsigned char valor; struct{ unsigned bit0:1; unsigned bit1:1; 2

Manual C18 }byte; }; unsigned bit2:1; unsigned bit3:1; unsigned bit4:1; unsigned bit5:1; unsigned bit6:1; unsigned bit7:1; En este ejemplo se declara tpuerto como byte que contiene: Una variable tipo char llamada valor. Un conjunto de bits. 1.2.2.4. Almacenamiento El compilador reconoce los modificadores establecidos en la norma ANSI: Auto: Externa: Register: Las variables se declaran globales si se ha hecho fuera de las funciones y locales si se realiza en las funciones. Tienen prioridad las locales. Todas las variables no inicializadas tienen un valor indefinido. La variable declarada pertenece a otro módulo, por lo que no reserva memoria para ella. Sirve para acceder a una variable aunque no se haya declarado todavía. Se inicializan a cero. La variable se guarda en uno de los registros del procesador. Si no se puede almacenar en un registro, se comporta como Auto. Útil para optimizar el tiempo de ejecución de algunas funciones. Static: Typedef: Overlay: Variables locales que retiene su valor al salir de la función en la que se ha declarado. Se inicializan a cero. Ahorra número de instrucciones para acceder a las variables. Asigna un nuevo nombre a un tipo de datos. Declara las variables locales Static pero se inicializan cada vez que se llama la función. 3

Documento creado por Slalen para Electronics Strange World 1.2.2.5. Calificadores Ahorra espacio de memoria. Const: Definición de una constante. Volatile: El contenido de la variable puede cambiar. Far: Los datos se encuentran en un banco lejano, hay que cambiar de banco o de acceso indirecto para acceder a la variable. Si se declara código, podemos acceder a objetos por encima de 64KB. Near: La variable se declara en el banco de acceso. Si se declara código, accedemos a una zona inferior de 64KB. RAM: La variable se sitúa en la memoria de datos. ROM: La variable se sitúa en la memoria de programa. 1.2.3. ESTRUCTURAS DE CONTROL 1.2.3.1. Repetitivas 1.2.3.1.1. Sentencia While Las instrucciones se ejecutan repetidamente hasta que el valor de la expresión, que se comprueba al comenzar el bucle, sea falso, es decir cero. while (expresión) { Instrucción 1 Instrucción 2... Instrucción n } 1.2.3.1.2. Sentencia Do Las instrucciones se ejecutan repetidamente hasta que el valor de la expresión, que se comprueba al final del bucle, sea falso, es decir cero. do { Instrucción 1 Instrucción 2... Instrucción n } while ( expresión ); 1.2.3.1.3. Sentencia For Las instrucciones se ejecutan repetidamente hasta que el valor de la exp2 sea falso, es decir cero. exp1 sirve para inicializar el contador del bucle. exp3 controla el contador del bucle. Se evalúa al final del mismo. for( exp1; exp 2; exp 3) { 4

Manual C18 Instrucción 1 Instrucción 2... Instrucción n } 1.2.3.1.4. Sentencia If La expresión se evalúa y si es verdadera (distinta de cero) se ejecutan las instrucciones. If( expresión ) { Instrucción 1 Instrucción 2... Instrucción n } 1.2.3.1.5. Sentencia If-Else La expresión se evalúa, si es verdadera se ejecutan las instrucciones A, en caso contrario las Instrucciones B. If( expresión ) { Instrucciones A } else {Instrucciones B } 1.2.3.1.6. Sentencia Switch Permite realizar selecciones múltiples. switch ( expresión ) { case const1: Instrucción 1; break; case const2: Instrucción 2; break;... default: Instrucción n break; } 1.2.3.1.7. Sentencia Break Interrumpe la ejecución de un bucle while, do-while o for. Ejemplo: cómo salir de un bucle infinito for? For (;;) { if( a==0) { break; } a=porta; } 5

Documento creado por Slalen para Electronics Strange World 1.2.3.1.8. Sentencia Continue Se utiliza en los bucles para pasar a la siguiente repetición. For (;;) { if( a!=0) { continue; } break; } 1.2.3.1.9. Sentencia Goto Transfiere incondicionalmente el control a la sentencia etiquetada por el identificador. goto identificador; identificador: instrucciones; Es una sentencia propia del lenguaje Basic. No se recomienda su utilización ya que varía la estructura del programa. 1.2.4. PUNTEROS Un puntero es una variable que contiene la dirección a una zona de memoria en la que se almacena una variable. Los punteros ocupan 16Bits. char car; //variable de tipo char char *pcar; //puntero a una variable char car=0xaa pcar=&car Otra forma de acceso: //almacena el dato hexadecimal AA //almacena la dirección de la variable car, & devuelve la dirección char *pcar; //puntero a una variable char pcar=(char*)0x501 //almaceno en el puntero la dirección de memoria 501 *pcar=0xaa //almaceno en la dirección de memoria que tiene el puntero, el dato 0xAA #define CAR=0xAA Optimizando este código: CAR (*(char*)0x501) Al optimizarlo se ahorran las direcciones de memoria del puntero. Hay que tener cuidado ya que el compilador no comprueba errores. 1.2.5. CADENAS DE CONSTANTES Las cadenas de constantes se pueden almacenar en la memoria de programa. Existen instrucciones especiales para moverlas entre la RAM y la ROM: 6

Manual C18 char *strcpy (auto char *s1, auto const char *s2). Copia dos cadenas ambas de la RAM. char *strcpypgm2ram (auto char *s1, auto rom const char *s2). Copia dos cadenas, la original de la memoria de programa y la copia en la RAM. rom char *strcpyram2pgm (auto rom char *s1, auto const char *s2). Copia dos cadenas, la original en la RAM y la copia en la memoria de programa. rom char *strcpypgm2pgm (auto rom char *s1, auto const rom char *s2). Copia dos cadenas ambas en la memoria de programa. 1.3. LIBRERÍAS DEL C18 Una librería es una colección de funciones agrupadas por referencia y facilidad de llamada. En este apartado aparecen las librerías utilizadas en el proyecto. Las librerías relacionadas con el USB no se instalan con el compilador, teniendo que descargarse de la página del fabricante; el resto se encuentran en la carpeta lib dentro de la carpeta de instalación del MPLAB C18. 1.3.1. ABREVIATURAS EN LAS LIBRERÍAS DE MICROCHIP A ACM ACT ADR ALLOC ALT AUX B BD BDT BUFF C CDC CFG CLR Modelo abstracto de control Actividad, activa Dirección Asignación Alterno Auxiliar Buffer Descriptor Tabla del buffer descriptor Buffer Clase del dispositivo Configuración borrar 7

Documento creado por Slalen para Electronics Strange World CLS CTRL D DC DEF DEFS DEV DIR DSC E ENDP EP EXT F FN FS H HID I INIT INT INTF IO ISOCH ISR L LANG LEN LS M MAX MCHP MEM Clase Control Clase del dispositivo Definición ver DEF Dispositivo Dirección Descriptor Endpoint Endpoint Externo funcional Full-Speed Dispositivo interfaz humana inicializar Interrupción/interno Interfaz Entrada-salida Síncrono Rutina del servicio de interrupción Lenguaje Longitud Low-speed Máximo Tecnología de microchip Memoria 8

Manual C18 MFR MGT MIN MSD N NUM O OP Fabricante, fabricación, fabricación Gerencia Mínimo Dispositivo de almacenamiento masivo Número Operacional P PKT PID PP PREP PTR R RDY REG REQ RCPT RPT RWU RX S SIE STAT STD SYNCH SYS T TEL TR TRF TX Paquete Paquete de identificación Ping-pong Preparación Puntero listo registro Petición Receptor Informe Reinicio remoto recibir Motor de la interfaz serie Estado Estándar síncrono, sincronización Sistema Teléfono Emisor Transferencia transmisión 9

Documento creado por Slalen para Electronics Strange World U USB UTIL V VAR VAL VEND Z ZLP Bus serie universal Utilidad Variable Valor Vendedor Paquete cero de longitud 1.3.2. ADC.H: LIBRERÍA DE LOS CONVERSORES A/D Con esta libraría se tratan los conversores analógico-digitales, desde su configuración hasta su lectura. Para poder llamar a las funciones, como se indica en el código, hay que incluir la librería de la siguiente forma: #include <adc.h> 1.3.2.1. Descripción De Las Funciones char BusyADC(void) Comprueba si el conversor está realizando una conversión o no. Devuelve un 1 si el conversor A/D realiza la conversión y un 0 si no lo hace. BusyADC(); void CloseADC(void) CloseADC(); Desactiva el conversor A/D y el mecanismo de interrupción. void ConvertADC(void) Esta función comienza la conversión A/D. Se puede utilizar BusyADC() para detectar el final de la conversión. ConvertADC(); void OpenADC(unsigned char config, unsigned char config2, unsigned char portconfig) Esta función resetea los registros asociados al conversor A/D al estado POR y configura el reloj, el formato del resultado, tensión de referencia, puerto y canal. 10

Manual C18 Hay variaciones dependiendo del microcontrolador. Lo que se expone aquí es para la mayoría de los micros. config: Fuente de reloj: ADC_FOSC_2 F OSC /2 ADC_FOSC_4 F OSC /4 ADC_FOSC_8 F OSC /8 ADC_FOSC_16 F OSC /16 ADC_FOSC_32 F OSC /32 ADC_FOSC_64 F OSC /64 ADC_FOSC_RC F OSC /RC Justificación del resultado A/D: ADC_RIGHT_JUST ADC_LEFT_JUST ADC_0_TAD ADC_2_TAD ADC_4_TAD ADC_6_TAD ADC_8_TAD Resultado en los bits menos significativos Resultado en los bits más significativos Selectores del tiempo de adquisición A/D: ADC_12_TAD ADC_16_TAD ADC_20_TAD 0 Tad 2 Tad 4 Tad 6 Tad 8 Tad 12 Tad 16 Tad 20 Tad config2: Canal: ADC_CH0 Canal 0 ADC_CH1 Canal 1 ADC_CH2 Canal 2 ADC_CH3 Canal 3 ADC_CH4 Canal 4 11

Documento creado por Slalen para Electronics Strange World ADC_CH5 Canal 5 ADC_CH6 Canal 6 ADC_CH7 Canal 7 ADC_CH8 Canal 8 ADC_CH9 Canal 9 ADC_CH10 Canal 10 ADC_CH11 Canal 11 ADC_CH12 Canal 12 ADC_CH13 Canal 13 ADC_CH14 Canal 14 ADC_CH15 Canal 15 Interrupciones A/D: ADC_INT_ON ADC_INT_OFF Interrupciones activadas Interrupciones desactivadas Configuración de tensiones A/D: ADC_VREFPLUS_VDD V REF+ =AV DD ADC_VREFPLUS_EXT V REF+ =externa ADC_VREFMINUS_VDD V REF- =AV DD ADC_VREFMINUS_EXT V REF- =externa portconfig: El valor de portconfig es un valor de 0 a 15. Corresponde con los bits 0 a 3 del registro ADCON1, que son los bits de configuración de los puertos. OpenADC(ADC_FOSC_32 & ADC_RIGHT_JUST & ADC_12_TAD, DC_CH0 & ADC_INT_OFF, 15; int ReadADC(void) Esta función devuelve los 16 bits con signo resultado de la conversión A/D. Basándose en la configuración del conversor A/D, el resultado puede almacenarse en los bits menos o más significativos. int resultado; resultado=readadc(); void SetChanADC(unsigned char channel) Selecciona al canal que se va a utlizar en el código. Si se han activado los canales AN0 y AN1, antes de leer el AN1 hay que llamar esta función para que se lea al AN1 y no el AN0. channel: 12

Manual C18 ADC_CH0 Canal 0 ADC_CH1 Canal 1 ADC_CH2 Canal 2 ADC_CH3 Canal 3 ADC_CH4 Canal 4 ADC_CH5 Canal 5 ADC_CH6 Canal 6 ADC_CH7 Canal 7 ADC_CH8 Canal 8 ADC_CH9 Canal 9 ADC_CH10 Canal 10 ADC_CH11 Canal 11 ADC_CH12 Canal 12 ADC_CH13 Canal 13 ADC_CH14 Canal 14 ADC_CH15 Canal 15 SetChanADC(ADC_CH1); 13

Documento creado por Slalen para Electronics Strange World 1.3.3. PWM.H: FUNCIONES DEL PWM Y EPWM Esta librería trata la modulación de ancho de pulso tanto de los CCP como de los mejorados. Todas las funciones aparecen con una x, esta corresponde al número del CCP que se está utilizando. La forma de invocar las funciones está escrita en verde (código). Antes de llamar las funciones hay que incluir la librería: #include <pwm.h> Para que la modulación funcione correctamente hay que activar el Timer 2, se explica en este capítulo. 1.3.3.1. Descripción De Las Funciones void ClosePWMx(void) y void CloseEPWM1(void) ClosePWM2(); Esta función desactiva el canal PWM específico. La x corresponde al canal. void OpenPWMx(char period) y void OpenEPWM1(char period) Esta función configura el canal PWM específico por periodo y por base de tiempos. El PWM sólo utiliza el Timer2. Para que funcione el PWM, antes hay que abrir el Timer2 con la función OpenTimer2( ). period: Puede ser un valor de 0x00 a 0xFF. Este dato determina la frecuencia del PWM mediante la fórmula: Periodo _ PWM = [( period) + 1] 4 T OpenPWM2(0xFF); OSC ( Valor _ del _ prescaler _ de _ TMR2) void SetDCPWMx(unsigned int dutycicle) y void SetDCPEPWM1(unsigned int dutycicle) Esta función escribe un valor nuevo del ciclo de trabajo en el canal PWM especificado. dutycicle: El valor de dutycicle puede ser de 10 bits, si es mayor sólo se almacenarán los 10 bits de menos peso. SetDCPWM2(0x0F0); void SetOutputEPWM1(unsigned char outputconfig, unsigned char outputmode) Esta función configura la salida del módulo EPWM. 14

Manual C18 outputconfig: SINGLE_OUT Salida simple FULL_OUT_FWD Salida full-bridge forward FULL_OUT_REV Salida full-bridge reverse HALF_OUT Salida half-bridge outputmode: PWM_MODE_1 P1A, P1B, P1C y P1D activo por altos PWM_MODE_2 P1A y P1C activo por altos y P1B y P1D activo por bajos PWM_MODE_3 P1A y P1C activo por bajos y P1B y P1D activo por altos PWM_MODE_4 P1A, P1B, P1C y P1D activo por bajos SetOutputEPWM1(SIGNED_OUT, PWM_MODE_1); 15

Documento creado por Slalen para Electronics Strange World 1.3.4. TIMERS.H: FUNCIONES DE LOS TEMPORIZADORES Esta librería es la encargada de los temporizadores. En esta traducción de la librería de Microchip sólo aparecen las palabras de configuración válidas para la familia PIC18Fxx5x, ya que varía dependiendo del microprocesador. Para incluirla hay que escribir al principio del archivo: #include <timers.h> 1.3.4.1. Descripción de las funciones void CloseTimerx(void) CloseTimer2(); Esta función desactiva el temporizador x y su interrupción. void OpenTimer0(unsigned char config); Esta función configura el Timer0 de acuerdo con las opciones especificadas y lo activa. config: Interrupción Timer0: TIMER_INT_ON TIMER_INT_OFF T0_8BIT T0_16BIT Activa Desactiva Tamaño del Temporizador: Fuente de reloj: T0_SOURCE_EXT T0_SOURCE_INT Modo 8bits Modo 16bits Fuente esterna Fuente interna (T OSC ) Disparador del reloj externo (de la fuente externa): T0_EDGE_FALL T0_EDGE_RISE Flanco de bajada Flanco de subida Valor del Prescaler: T0_PS_1_1 Prescaler 1:1 T0_PS_1_2 Prescaler 1:2 T0_PS_1_4 Prescaler 1:4 16

Manual C18 T0_PS_1_8 Prescaler 1:8 T0_PS_1_16 Prescaler 1:16 T0_PS_1_32 Prescaler 1:32 T0_PS_1_64 Prescaler 1:64 T0_PS_1_128 Prescaler 1:128 T0_PS_1_256 Prescaler 1:256 OpenTimer0(TIMER_INT_OFF & T0_8BIT & T0_SOURCE_INT & T0_PS_1_32) void OpenTimer1(unsigned char config); Esta función configura el Timer1 de acuerdo con las opciones especificadas y lo activa. config: Interrupción Timer1: TIMER_INT_ON Activa TIMER_INT_OFF Desactiva Tamaño del Temporizador: T1_8BIT_RW Modo 8bits T1_16BIT_RW Modo 16bits Fuente de reloj: T1_SOURCE_EXT Fuente esterna T1_SOURCE_INT Fuente interna (T OSC ) Valor del Prescaler: T0_PS_1_1 Prescaler 1:1 T0_PS_1_2 Prescaler 1:2 T0_PS_1_4 Prescaler 1:4 T0_PS_1_8 Prescaler 1:8 Oscilador: T1_OSC1EN_ON Activo T1_OSC1EN_OFF Desactivo Sincronización del reloj de entrada: T1_SYNC_EXT_ON Sincronización de la entrada del reloj ext. T1_SYNC_EXT_OFF Sin sinc. Uso con CCP: Dispositivos con 1 ó 2 CCP: 17

Documento creado por Slalen para Electronics Strange World T3_SOURCE_CCP T1_CCP1_T3_CCP2 T1_SOURCE_CCP Timer3 fuente de ambos CCP Timer1 fuente del CCP1 y Timer3 del CCP2 Timer1 fuente de ambos CCP OpenTimer1(TIMER_INT_OFF & T1_8BIT_RW & T1_SOURCE_EXT & T1_PS_1_1 & T1_OSC1EN_OFF & T1_SYNC_EXT_OFF & T1_SOURCE_CPP) void OpenTimer2(unsigned char config); Esta función configura el Timer2 de acuerdo con las opciones especificadas y lo activa. config: Interrupción Timer2: TIMER_INT_ON Activa TIMER_INT_OFF Desactiva Valor del Prescaler: T2_PS_1_1 Prescaler 1:1 T2_PS_1_2 Prescaler 1:2 T2_PS_1_4 Prescaler 1:4 T2_PS_1_16 Prescaler 1:16 Valor del Postscaler: T2_PS_1_1 Postscaler 1:1 T2_PS_1_2 Postscaler 1:2 T2_PS_1_15 Postscaler 1:15 T0_PS_1_16 Prescaler 1:16 Uso con CCP: Dispositivos con 1 ó 2 CCP: T3_SOURCE_CCP Timer3 fuente de ambos CCP T1_CCP1_T3_CCP2 Timer1 fuente del CCP1 y Timer3 del CCP2 T1_SOURCE_CCP Timer1 fuente de ambos CCP OpenTimer2(TIMER_INT_OFF & T2_PS_1_1 & T2_POST_1_8) void OpenTimer3(unsigned char config); Esta función configura el Timer3 de acuerdo con las opciones especificadas y lo activa. config: Interrupción Timer3: TIMER_INT_ON Activa 18

TIMER_INT_OFF T3_8BIT_RW Desactiva Tamaño del Temporizador: T3_16BIT_RW Fuente de reloj: T3_SOURCE_EXT Modo 8bits Modo 16bits Fuente esterna T3_SOURCE_INT Fuente interna (T OSC ) Valor del Prescaler: T3_PS_1_1 Prescaler 1:1 T3_PS_1_2 Prescaler 1:2 T3_PS_1_4 Prescaler 1:4 T3_PS_1_8 Prescaler 1:8 Sincronización del reloj de entrada: T3_SYNC_EXT_ON T3_SYNC_EXT_OFF Sin sinc. Uso con CCP: Dispositivos con 1 ó 2 CCP: T3_SOURCE_CCP T1_CCP1_T3_CCP2 T1_SOURCE_CCP Sincronización de la entrada del reloj ext. Timer3 fuente de ambos CCP Timer1 fuente del CCP1 y Timer3 del CCP2 Timer1 fuente de ambos CCP Manual C18 OpenTimer3(TIMER_INT_OFF & T3_8BIT_RW & T3_SOURCE_EXT & T3_PS_1_1 & T3_SYNC_EXT_OFF & T1_SOURCE_CPP) unsigned int/char ReadTimerx(void) Esta función lee el valor del registro/registros del temporizador respectivo dependiendo si es de 8bits o de 16bits. Cuando se utiliza un temporizador de 16bits en el modo de 8bits, el byte alto puede que no sea cero. El usuario tiene que almacenar el resultado en un char para que sea correcto. unsigned int resultado; resultado=readtimer0(); //el resultado es un int porque el Timer0 es de 16bits unsigned char resultado; resultado=readtimer2(); //el resultado es un char porque el Timer2 es de 8bits void WriteTimerx(unsigned int/char timer) Esta función escribe un valor en el/los registros específicos del temporizador. timer: Es el valor que se va a almacenar en el temporizador. 19

Documento creado por Slalen para Electronics Strange World Es un int si el temporizador es de 16bits, aunque trabaje en modo 8bits; y un char si el temporizador es de 8bits. WriteTimer0(10000); 20

Manual C18 1.3.5. DELAYS.H: RETRASOS POR SOFTWARE Las funciones delay ejecutan un código de un número específico de ciclos de instrucciones. Hay que tener en cuenta la frecuencia del procesador. Para usarla primero hay que incluirla en el programa: #include <delays.h> 1.3.5.1. Descripción De Las Funciones void Delay1TCY(void) Esta función es una definición de la instrucción NOP. Cuando se encuentra en el código, el compilador inserta un NOP. Delay1TCY(); void Delay10TCYx(unsigned char unit) Esta función crea un retraso en múltiplos de 10 ciclos de instrucción. unit: El valor de unit puede ser de 8bits; en un rango de [1,255]. El retraso será de (10*unit) ciclos. Si unit=0 el retraso será de 2 560 ciclos. Delay10TCYx(); void Delay100TCYx(unsigned char unit) Esta función crea un retraso en múltiplos de 100 ciclos de instrucción. Esta función utiliza la variable global DelayCounter1. Si se utliza la función en las interrupciones y en el código, la variable anterior se tiene que almacenar y recuperar en el código de la interrupción. Darse cuenta de que otras funciones de retrasos utilizan la variable DelayCounter1. unit: El valor de unit puede ser de 8bits; en un rango de [1,255]. El retraso será de (100*unit) ciclos. Si unit=0 el retraso será de 25 600 ciclos. Delay100TCYx(); void Delay1KTCYx(unsigned char unit) Esta función crea un retraso en múltiplos de 1 000 ciclos de instrucción. 21

Documento creado por Slalen para Electronics Strange World Esta función utiliza la variable global DelayCounter1 y DelayCounter2. Si se utliza la función en las interrupciones y en el código, las variables anteriores se tienen que almacenar y recuperar en el código de la interrupción. Darse cuenta de que otras funciones de retrasos utilizan las variables DelayCounter1 y DelayCounter2. unit: El valor de unit puede ser de 8bits; en un rango de [1,255]. El retraso será de (1 000*unit) ciclos. Si unit=0 el retraso será de 256 000 ciclos. Delay1KTCYx(); void Delay10KTCYx(unsigned char unit) Esta función crea un retraso en múltiplos de 10 000 ciclos de instrucción. Esta función utiliza la variable global DelayCounter1 y DelayCounter2. Si se utliza la función en las interrupciones y en el código, las variables anteriores se tienen que almacenar y recuperar en el código de la interrupción. Darse cuenta de que otras funciones de retrasos utilizan las variables DelayCounter1 y DelayCounter2. unit: El valor de unit puede ser de 8bits; en un rango de [1,255]. El retraso será de (10 000*unit) ciclos. Si unit=0 el retraso será de 2 560 000 ciclos. Delay1KTCYx(); 22