C18

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 22

1.

1.1.

LENGUAJE DE PROGRAMACIN C18


INTRODUCCIN

El lenguaje C fue creado en los aos 70 para escribir el cdigo del sistema operativo UNIX. Tanto por su origen como por sus caractersticas, es un lenguaje muy adecuado para la programacin de sistemas, ya que combina la abstraccin de los lenguajes de alto nivel con la eficiencia del lenguaje mquina. La amplia utilizacin 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 versin estndar de C. En 1983, se cre el comit tcnico X3J11 bajo la supervisin de American National Standards Comitte on Computer and Information Processing (X3), para proporcionar una definicin del lenguaje clara e independiente de la computadora. En 1989, el estndar fue aprobado. ANSI cooper con la International Organization for Standardization (ISO) para estandarizar C a nivel mundial; el documento conjunto del estndar se public en 1990 y se conoce como ANSI/ISO9899:1990 o ANSI C. Entre las caractersticas de este lenguaje cabe citar que es altamente portable, es muy flexible, genera cdigo muy eficiente y permite escribir cdigo muy compacto (se pueden realizar muchas funciones escribiendo pocas lneas de cdigo). El C18 es una versin del C creada especficamente para los microcontroladores PIC18, que por sus caractersticas resulta demasiado complicado la programacin en su lenguaje de bajo nivel, el Assambler.

1.2.
1.2.1.

COMPILADOR MPLAB C18


INTRODUCCIN

El compilador MPLAB C18 es un compilador que optimiza el estndar ANSI C en los microcontroladores PIC18. El compilador modifica el estndar ANSI X3.1591989 slo en los puntos en los que se puedan crear conflictos con el soporte del microcontrolador. El MPLAB C18 tiene las siguientes caractersticas: Compatibilidad ANSI 89. Integracin con el MLAB IDE para una mayor facilidad de realizacin y debugg de proyectos. Admite ensamblador empotrado. Gran variedad de libreras. Optimizacin multinivel. Acceso transparente en la lectura/escritura de la memoria. Versin 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 cdigo fuente y en verde con tipo de letra Times New Roman las notas del cdigo.

1.2.2.

TIPOS DE DATOS

Los datos de ms 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 Char Signedchar Unsigned char Int Unsigned Int Short Unsigned Short Short long Unsigned short long Long Unsigned long Tamao 8 bits 8 bits 8 bits 16 bits 16 bits 16 bits 16 bits 24 bits 24 bits 32 bits 32 bits Mnimo -128 -128 0 -32768 0 -32768 0 -8.388.608 0 -2.147.483.648 0 Mximo 127 127 255 32767 65535 32767 65535 8.388.607 16.777.215 2.147.483.647 4.294.967.295

1.2.2.2.

Reales
Tipo Float Double Tamao 32 bits 32 bits Exponente Mnimo -126 -126 Exponente Mximo 128 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;

Manual C18
unsigned bit2:1; unsigned bit3:1; unsigned bit4:1; unsigned bit5:1; unsigned bit6:1; unsigned bit7:1;

}byte;

};

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
Auto: 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. Externa: La variable declarada pertenece a otro mdulo, por lo que no reserva memoria para ella. Sirve para acceder a una variable aunque no se haya declarado todava. Se inicializan a cero. Register: 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 ejecucin de algunas funciones. Static: Variables locales que retiene su valor al salir de la funcin en la que se ha declarado. Se inicializan a cero. Ahorra nmero de instrucciones para acceder a las variables. Typedef: Asigna un nuevo nombre a un tipo de datos. Overlay: Declara las variables locales Static pero se inicializan cada vez que se llama la funcin. 3

El compilador reconoce los modificadores establecidos en la norma ANSI:

Documento creado por Slalen para Electronics Strange World Ahorra espacio de memoria.

1.2.2.5.

Calificadores
Const: Definicin 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 cdigo, podemos acceder a objetos por encima de 64KB. Near: La variable se declara en el banco de acceso. Si se declara cdigo, accedemos a una zona inferior de 64KB. RAM: La variable se sita en la memoria de datos. ROM: La variable se sita en la memoria de programa.

1.2.3. 1.2.3.1. 1.2.3.1.1.

ESTRUCTURAS DE CONTROL Repetitivas Sentencia While

Las instrucciones se ejecutan repetidamente hasta que el valor de la expresin, que se comprueba al comenzar el bucle, sea falso, es decir cero.
while (expresin) { Instruccin 1 Instruccin 2 ... Instruccin n }

1.2.3.1.2.

Sentencia Do

Las instrucciones se ejecutan repetidamente hasta que el valor de la expresin, que se comprueba al final del bucle, sea falso, es decir cero.
do { Instruccin 1 Instruccin 2 ... Instruccin n } while ( expresin );

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 evala al final del mismo.
for( exp1; exp 2; exp 3) {

Manual C18
Instruccin 1 Instruccin 2 ... Instruccin n }

1.2.3.1.4.

Sentencia If

La expresin se evala y si es verdadera (distinta de cero) se ejecutan las instrucciones.


If( expresin ) { Instruccin 1 Instruccin 2 ... Instruccin n }

1.2.3.1.5.

Sentencia If-Else

La expresin se evala, si es verdadera se ejecutan las instrucciones A, en caso contrario las Instrucciones B.
If( expresin ) { Instrucciones A } else {Instrucciones B }

1.2.3.1.6.

Sentencia Switch

Permite realizar selecciones mltiples. switch ( expresin ) { case const1: Instruccin 1; break; case const2: Instruccin 2; break; ... default: Instruccin n break; }

1.2.3.1.7.

Sentencia Break

Interrumpe la ejecucin de un bucle while, do-while o for. Ejemplo: cmo salir de un bucle infinito for?
For (;;) { if( a==0) { break; } a=PORTA; }

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 repeticin.


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 utilizacin ya que vara la estructura del programa.

1.2.4.

PUNTEROS

Un puntero es una variable que contiene la direccin a una zona de memoria en la que se almacena una variable. Los punteros ocupan 16Bits.
char char car; *pcar; //variable de tipo char //puntero a una variable char //almacena el dato hexadecimal AA //almacena la direccin de la variable car, & devuelve la direccin

car=0xAA pcar=&car

Otra forma de acceso:


char *pcar; //puntero a una variable char //almaceno en el puntero la direccin de memoria 501 //almaceno en la direccin de memoria que tiene el puntero, el dato 0xAA

pcar=(char*)0x501 *pcar=0xAA

Optimizando este cdigo:


#define CAR=0xAA 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:

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.

LIBRERAS DEL C18

Una librera es una coleccin de funciones agrupadas por referencia y facilidad de llamada. En este apartado aparecen las libreras utilizadas en el proyecto. Las libreras relacionadas con el USB no se instalan con el compilador, teniendo que descargarse de la pgina del fabricante; el resto se encuentran en la carpeta lib dentro de la carpeta de instalacin del MPLAB C18.

1.3.1.
A

ABREVIATURAS EN LAS LIBRERAS DE MICROCHIP

ACM ACT ADR ALLOC ALT AUX B BD BDT BUFF C CDC CFG CLR

Modelo abstracto de control Actividad, activa Direccin Asignacin Alterno Auxiliar

Buffer Descriptor Tabla del buffer descriptor Buffer

Clase del dispositivo Configuracin 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 Mximo Tecnologa de microchip Memoria Lenguaje Longitud Low-speed inicializar Interrupcin/interno Interfaz Entrada-salida Sncrono Rutina del servicio de interrupcin Dispositivo interfaz humana funcional Full-Speed Endpoint Endpoint Externo Clase del dispositivo Definicin ver DEF Dispositivo Direccin Descriptor Clase Control

Manual C18 MFR MGT MIN MSD N NUM O OP Operacional Nmero Fabricante, fabricacin, fabricacin Gerencia Mnimo Dispositivo de almacenamiento masivo

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 Telfono Emisor Transferencia transmisin Motor de la interfaz serie Estado Estndar sncrono, sincronizacin Sistema listo registro Peticin Receptor Informe Reinicio remoto recibir Paquete Paquete de identificacin Ping-pong Preparacin Puntero

Documento creado por Slalen para Electronics Strange World U USB UTIL V VAR VAL VEND Z ZLP Paquete cero de longitud Variable Valor Vendedor Bus serie universal Utilidad

1.3.2.

ADC.H: LIBRERA DE LOS CONVERSORES A/D

Con esta librara se tratan los conversores analgico-digitales, desde su configuracin hasta su lectura. Para poder llamar a las funciones, como se indica en el cdigo, hay que incluir la librera de la siguiente forma:
#include <adc.h>

1.3.2.1.

Descripcin De Las Funciones

char BusyADC(void)
Comprueba si el conversor est realizando una conversin o no. Devuelve un 1 si el conversor A/D realiza la conversin y un 0 si no lo hace.
BusyADC();

void CloseADC(void)
Desactiva el conversor A/D y el mecanismo de interrupcin.
CloseADC();

void ConvertADC(void)
Esta funcin comienza la conversin A/D. Se puede utilizar BusyADC() para detectar el final de la conversin.
ConvertADC();

void OpenADC(unsigned char config, unsigned char config2, unsigned char portconfig)
Esta funcin resetea los registros asociados al conversor A/D al estado POR y configura el reloj, el formato del resultado, tensin de referencia, puerto y canal.

10

Manual C18 Hay variaciones dependiendo del microcontrolador. Lo que se expone aqu es para la mayora de los micros. config: Fuente de reloj: ADC_FOSC_2 ADC_FOSC_4 ADC_FOSC_8 ADC_FOSC_16 ADC_FOSC_32 ADC_FOSC_64 ADC_FOSC_RC ADC_RIGHT_JUST ADC_LEFT_JUST ADC_0_TAD ADC_2_TAD ADC_4_TAD ADC_6_TAD ADC_8_TAD ADC_12_TAD ADC_16_TAD ADC_20_TAD FOSC/2 FOSC/4 FOSC/8 FOSC/16 FOSC/32 FOSC/64 FOSC/RC Resultado en los bits menos significativos Resultado en los bits ms significativos 0 Tad 2 Tad 4 Tad 6 Tad 8 Tad 12 Tad 16 Tad 20 Tad

Justificacin del resultado A/D:

Selectores del tiempo de adquisicin A/D:

config2: Canal: ADC_CH0 ADC_CH1 ADC_CH2 ADC_CH3 ADC_CH4 Canal 0 Canal 1 Canal 2 Canal 3 Canal 4

11

Documento creado por Slalen para Electronics Strange World ADC_CH5 ADC_CH6 ADC_CH7 ADC_CH8 ADC_CH9 ADC_CH10 ADC_CH11 ADC_CH12 ADC_CH13 ADC_CH14 ADC_CH15 ADC_INT_ON ADC_INT_OFF Canal 5 Canal 6 Canal 7 Canal 8 Canal 9 Canal 10 Canal 11 Canal 12 Canal 13 Canal 14 Canal 15 Interrupciones activadas Interrupciones desactivadas

Interrupciones A/D:

Configuracin de tensiones A/D: ADC_VREFPLUS_VDD VREF+=AVDD ADC_VREFPLUS_EXT VREF+=externa ADC_VREFMINUS_VDD VREF-=AVDD ADC_VREFMINUS_EXT VREF-=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 configuracin de los puertos.
OpenADC(ADC_FOSC_32 ADC_INT_OFF, 15; & ADC_RIGHT_JUST & ADC_12_TAD, DC_CH0 &

int ReadADC(void)
Esta funcin devuelve los 16 bits con signo resultado de la conversin A/D. Basndose en la configuracin del conversor A/D, el resultado puede almacenarse en los bits menos o ms significativos.
int resultado; resultado=ReadADC();

void SetChanADC(unsigned char channel)


Selecciona al canal que se va a utlizar en el cdigo. Si se han activado los canales AN0 y AN1, antes de leer el AN1 hay que llamar esta funcin para que se lea al AN1 y no el AN0. channel:

12

Manual C18 ADC_CH0 ADC_CH1 ADC_CH2 ADC_CH3 ADC_CH4 ADC_CH5 ADC_CH6 ADC_CH7 ADC_CH8 ADC_CH9 ADC_CH10 ADC_CH11 ADC_CH12 ADC_CH13 ADC_CH14 ADC_CH15
SetChanADC(ADC_CH1);

Canal 0 Canal 1 Canal 2 Canal 3 Canal 4 Canal 5 Canal 6 Canal 7 Canal 8 Canal 9 Canal 10 Canal 11 Canal 12 Canal 13 Canal 14 Canal 15

13

Documento creado por Slalen para Electronics Strange World

1.3.3.

PWM.H: FUNCIONES DEL PWM Y EPWM

Esta librera trata la modulacin de ancho de pulso tanto de los CCP como de los mejorados. Todas las funciones aparecen con una x, esta corresponde al nmero del CCP que se est utilizando. La forma de invocar las funciones est escrita en verde (cdigo). Antes de llamar las funciones hay que incluir la librera:
#include <pwm.h>

Para que la modulacin funcione correctamente hay que activar el Timer 2, se explica en este captulo.

1.3.3.1.

Descripcin De Las Funciones

void ClosePWMx(void) y void CloseEPWM1(void)


Esta funcin desactiva el canal PWM especfico. La x corresponde al canal.
ClosePWM2();

void OpenPWMx(char period) y void OpenEPWM1(char period)


Esta funcin configura el canal PWM especfico por periodo y por base de tiempos. El PWM slo utiliza el Timer2. Para que funcione el PWM, antes hay que abrir el Timer2 con la funcin OpenTimer2(). period: Puede ser un valor de 0x00 a 0xFF. Este dato determina la frecuencia del PWM mediante la frmula:
Periodo _ PWM = [( period ) + 1] 4 TOSC (Valor _ del _ prescaler _ de _ TMR 2)

OpenPWM2(0xFF);

void SetDCPWMx(unsigned int dutycicle) y void SetDCPEPWM1(unsigned int dutycicle)


Esta funcin 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 slo se almacenarn los 10 bits de menos peso.
SetDCPWM2(0x0F0);

void SetOutputEPWM1(unsigned outputmode)

char

outputconfig,

unsigned

char

Esta funcin configura la salida del mdulo EPWM.

14

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

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 librera es la encargada de los temporizadores.

En esta traduccin de la librera de Microchip slo aparecen las palabras de configuracin vlidas para la familia PIC18Fxx5x, ya que vara dependiendo del microprocesador. Para incluirla hay que escribir al principio del archivo:
#include <timers.h>

1.3.4.1.

Descripcin de las funciones

void CloseTimerx(void)
Esta funcin desactiva el temporizador x y su interrupcin.
CloseTimer2();

void OpenTimer0(unsigned char config);


Esta funcin configura el Timer0 de acuerdo con las opciones especificadas y lo activa. config: Interrupcin Timer0: TIMER_INT_ON TIMER_INT_OFF T0_8BIT T0_16BIT Fuente de reloj: T0_SOURCE_EXT T0_SOURCE_INT Fuente esterna Fuente interna (TOSC) Disparador del reloj externo (de la fuente externa): T0_EDGE_FALL T0_EDGE_RISE Flanco de bajada Flanco de subida Activa Desactiva Modo 8bits Modo 16bits

Tamao del Temporizador:

Valor del Prescaler: T0_PS_1_1 T0_PS_1_2 T0_PS_1_4 Prescaler 1:1 Prescaler 1:2 Prescaler 1:4

16

Manual C18 T0_PS_1_8 T0_PS_1_16 T0_PS_1_32 T0_PS_1_64 T0_PS_1_128 T0_PS_1_256 Prescaler 1:8 Prescaler 1:16 Prescaler 1:32 Prescaler 1:64 Prescaler 1:128 Prescaler 1:256

OpenTimer0(TIMER_INT_OFF & T0_8BIT & T0_SOURCE_INT & T0_PS_1_32)

void OpenTimer1(unsigned char config);


Esta funcin configura el Timer1 de acuerdo con las opciones especificadas y lo activa. config: Interrupcin Timer1: TIMER_INT_ON TIMER_INT_OFF T1_8BIT_RW T1_16BIT_RW Fuente de reloj: T1_SOURCE_EXT T1_SOURCE_INT Fuente esterna Fuente interna (TOSC) Valor del Prescaler: T0_PS_1_1 T0_PS_1_2 T0_PS_1_4 T0_PS_1_8 Oscilador: T1_OSC1EN_ON T1_OSC1EN_OFF T1_SYNC_EXT_ON Uso con CCP: Dispositivos con 1 2 CCP: Activo Desactivo Sincronizacin de la entrada del reloj ext. Prescaler 1:1 Prescaler 1:2 Prescaler 1:4 Prescaler 1:8 Activa Desactiva Modo 8bits Modo 16bits

Tamao del Temporizador:

Sincronizacin del reloj de entrada: T1_SYNC_EXT_OFF Sin sinc.

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 funcin configura el Timer2 de acuerdo con las opciones especificadas y lo activa. config: Interrupcin 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 T1_SOURCE_CCP Timer1 fuente de ambos CCP

Timer3 del CCP2

OpenTimer2(TIMER_INT_OFF & T2_PS_1_1 & T2_POST_1_8)

void OpenTimer3(unsigned char config);


Esta funcin configura el Timer3 de acuerdo con las opciones especificadas y lo activa. config: Interrupcin Timer3: TIMER_INT_ON Activa

18

Manual C18 TIMER_INT_OFF T3_8BIT_RW T3_16BIT_RW Fuente de reloj: T3_SOURCE_EXT T3_SOURCE_INT T3_PS_1_1 T3_PS_1_2 T3_PS_1_4 T3_PS_1_8 T3_SYNC_EXT_ON Uso con CCP: Dispositivos con 1 2 CCP: 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 Fuente esterna Fuente interna (TOSC) Prescaler 1:1 Prescaler 1:2 Prescaler 1:4 Prescaler 1:8 Sincronizacin de la entrada del reloj ext. Desactiva Modo 8bits Modo 16bits

Tamao del Temporizador:

Valor del Prescaler:

Sincronizacin del reloj de entrada: T3_SYNC_EXT_OFF Sin sinc.

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 funcin 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(); unsigned char resultado; resultado=ReadTimer2(); //el resultado es un int porque el Timer0 es de 16bits

//el resultado es un char porque el Timer2 es de 8bits

void WriteTimerx(unsigned int/char timer)


Esta funcin escribe un valor en el/los registros especficos 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 cdigo de un nmero especfico 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.

Descripcin De Las Funciones

void Delay1TCY(void)
Esta funcin es una definicin de la instruccin NOP. Cuando se encuentra en el cdigo, el compilador inserta un NOP.
Delay1TCY();

void Delay10TCYx(unsigned char unit)


Esta funcin crea un retraso en mltiplos de 10 ciclos de instruccin. 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 funcin crea un retraso en mltiplos de 100 ciclos de instruccin. Esta funcin utiliza la variable global DelayCounter1. Si se utliza la funcin en las interrupciones y en el cdigo, la variable anterior se tiene que almacenar y recuperar en el cdigo de la interrupcin. 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 funcin crea un retraso en mltiplos de 1 000 ciclos de instruccin.

21

Documento creado por Slalen para Electronics Strange World Esta funcin utiliza la variable global DelayCounter1 y DelayCounter2. Si se utliza la funcin en las interrupciones y en el cdigo, las variables anteriores se tienen que almacenar y recuperar en el cdigo de la interrupcin. 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 funcin crea un retraso en mltiplos de 10 000 ciclos de instruccin. Esta funcin utiliza la variable global DelayCounter1 y DelayCounter2. Si se utliza la funcin en las interrupciones y en el cdigo, las variables anteriores se tienen que almacenar y recuperar en el cdigo de la interrupcin. 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

También podría gustarte