1 PIC Programacion en C

download 1 PIC Programacion en C

of 11

Transcript of 1 PIC Programacion en C

I.E.S PRADO DE SANTO DOMINGO

C.F.G.S. DESARROLLO DE PRODUCTOS ELECTRNICOS

PROGRAMACIN DE MICROCONTROLADORES PIC EN LENGUAJE C. COMPILADOR CCS.Para escribir un programa en C con el CCS, se deben tener en cuenta una serie de elementos bsicos de su estructura: DIRECTIVAS DE PREPROCESADO. Controlan la conversin del programa a cdigo mquina por parte del compilador. Llevan el smbolo # al comienzo. PROGRAMAS o FUNCIONES: conjunto de instrucciones. Puede haber uno o varios. En cualquier caso siempre debe haber uno definido como principal mediante la inclusin de la llamada main(). INSTRUCCIONES: indican como se debe comportar el PIC en todo momento. COMENTARIOS: permiten describir lo que significa cada lnea del programa. DIRECTIVAS DE PREPROCESADO: # include Especifica el fichero de encabezamiento del PIC a utilizar. # fuses Es una directiva que especifica la configuracin del PIC. Las opciones son: Reloj: LP (low power: baja potencia y baja frecuencia), XT (cristal hasta 4 MHz), HS (>4MHz), RC. Perro guardian: WDT, NOWDT. Power Up Timer: PUT, NO PUT. Cdigo protegido: PROTECT, NO PROTECT. Hay otras posibilidades, dependiendo del PIC. Se especifican las opciones que se deseen, separadas por comas. # use delay (clock = frecuencia del cristal en Hz) # otros include..., con los nombre de ficheros.c que hayan sido creados y deban ser incluidos, como por ejemplo si modificamos el driver para el LCD, pondramos, por ejemplo #include lcd_nuevo.C El compilador suministra los controladores (drivers) para diversos dispositivos como LCD, teclado, EEPROM serie, conversin A/D. Si se va a utilizar por ej. el LCD hay que mirar el fichero que incluye por si est preparado para un puerto especfico. En caso de utilizar en nuestra aplicacin otro puerto, crearemos el nuevo fichero o modificaremos el ya existente, por ej con el nombre lcd_nuevo.C #use standard_io(X) Con esta directiva se pueden utilizar las funciones output_x() e input_x() para escribir o leer en el puerto. El compilador se asegura de configurar el puerto mediante los TRIS, por lo que no tendremos que hacerlo nosotros. Entre parntesis hay que poner la letra del puerto A, B, C, #use fast_io(X)

DESARROLLO DE PROYECTOS DE PRODUCTOS ELECTRNICOS

Profesor: Jos Manuel Ortega

I.E.S PRADO DE SANTO DOMINGO

C.F.G.S. DESARROLLO DE PRODUCTOS ELECTRNICOS

Con esta directiva se pueden utilizar las mismas funciones anteriores, pero tendremos que encargarnos nosotros de los TRIS. Esta directiva mejora la eficiencia del programa, respecto a la anterior que incluir ms cdigo. Si no se especifica ninguna de las dos directivas anteriores, se pueden utilizar las funciones citadas de entrada y salida, pero configurando los TRIS, es decir, es como si se utilizara la estndar_io. #byte Esta directiva sirve para asignar un nombre a una posicin de memoria RAM. Por ejemplo: # byte puerto_a = 0x05 #bit Esta directiva sirve para asignar un nombre a un bit de una posicin de memoria RAM. Por ejemplo: # bit pulsador = puerto_a.0 OJO! El compilador de C no conoce nombres como PORTA, puerto_a, tris_B, etc., pero s reconoce las posiciones de memoria de la RAM reservadas a los registros de propsito especfico, por lo que si se desea utilizar los nombres, deber realizarse la asignacin correspondiente. No se debe confundir esto con algunas funciones propias del compilador de C, como set_tris_A(0xFF) que slo se pueden utilizar si se ha incluido la directiva correspondiente para que se incluyan estas funciones. Existen otras directivas como las que hacen relacin a las interrupciones, como por ejemplo #INT_EXT (interrupcin por RB0), #INT_RTCC (desbordamiento del timer0), #INT_AD (interrupcin por fin de conversin A/D),

LA GESTIN DE LOS PUERTOS Cada pin de un puerto puede programarse para actuar como entrada o como salida. La configuracin del puerto se realiza a travs del registro TRISx. En un microcontrolador los puertos y los TRIS ocupan posiciones fijas de la memoria RAM, En los PIC16, estas posiciones son: PORTA: posicin de memoria 0x05 PORTB: posicin de memoria 0x06 PORTC: posicin de memoria 0x07 Si hay ms puertos, stos ocupan posiciones de memoria sucesivas. Todas ellas estn en el banco 0. TRISA: TRISB: TRISC: posicin de memoria 0x85 posicin de memoria 0x86 posicin de memoria 0x87

Un cero en un bit del TRIS configura a ese bit del puerto como salida y un uno, como entrada. En los PIC18, tanto los puertos como los TRIS ocupan posiciones altas de memoria RAM. PORTA: TRISA: posicin de memoria 0xF80 posicin de memoria 0xF92

En el puerto A el pin RA4 tiene salida en drenador abierto en los PIC16 (pero no en los PIC18) lo que obliga a utilizar una resistencia de pull-up en caso de utilizarse como salida. Este terminal tieneDESARROLLO DE PROYECTOS DE PRODUCTOS ELECTRNICOS Profesor: Jos Manuel Ortega

I.E.S PRADO DE SANTO DOMINGO

C.F.G.S. DESARROLLO DE PRODUCTOS ELECTRNICOS

entrada trigger-schmitt lo que permite su utilizacin como contador de eventos en conjuncin con el timer0. El puerto B tiene resistencias de pull-up internas que se pueden habilitar a travs del bit RBPU del OPTION_REG. Para habilitarlas se pone un cero en ese bit o bien con la instruccin de C: port_b_pullups(TRUE). Esto se hace cuando se va a utilizar el puerto como entrada y se desea poner resistencias de pull-up por si no queremos que haya estados indefinidos cuando los pines estn al aire, es decir no estn ni a cero ni a uno. No se puede hacer caso de utilizarlo como salida. Gestin de los puertos a travs de la RAM Se definen TRIS y PUERTOS como bytes, utilizando la directiva #byte y situndolos en las posiciones de memoria correspondiente. De esta forma se puede utilizar el nombre que le demos a la posicin de memoria y utilizarla para escribir datos en el puerto. Se puede declarar un bit de un registro con una variable mediante la directiva #BIT, lo que permite trabajar directamente con el terminal: #BIT nombre = posicin de memoria.bit Ejemplo: # BIT puls = 0x06.0

Gestin de los puertos a travs de Funciones en C en el Compilador CCS: Se pueden utilizar los nombres de las posiciones de memoria o tambin se pueden utilizar las siguientes funciones: Funciones que modifican un bit. bit_clear (variable, bit), por ej. bit_clear(puerto_b,7) bit_set(variable, bit) bit_test(variable, bit) swap(variable) esta funcin intercambia los nibbles. Funciones asociadas a un pin. Se pone, por ejemplo PIN_B7 . Este nombre lo reconoce porque lo tiene definido as en el fichero de encabezamiento .h del PIC. Las funciones son las siguientes (donde X es la letra del puerto y n es el nmero del pin). output_low(PIN_Xn); output_high(PIN_Xn); output_bit(PIN_Xn,valor); Pin a 0 o 1 (esto se especifica en lugar de valor). output_toggle(PIN_Xn); Cambia el nivel del pin input(PIN_Xn); Lee el pin

Funciones asociadas a puertos. El compilador ofrece funciones predefinidas para trabajar con los puertos siempre que se especifique la directiva primero. output_x(valor); unos) Lo que pongamos en valor lo saca por el puerto x, por ej. 0XFF (todosProfesor: Jos Manuel Ortega

DESARROLLO DE PROYECTOS DE PRODUCTOS ELECTRNICOS

I.E.S PRADO DE SANTO DOMINGO

C.F.G.S. DESARROLLO DE PRODUCTOS ELECTRNICOS

input_x();

Lee el puerto. Esta funcin devuelve el valor del puerto entero. No se especifica nada entre los parntesis. set_tris_x(valor); Carga el TRIS get_tris_x(); Devuelve el valor del TRIS Donde pone valor, ir un nmero, si no hay nada ms es que est expresado en decimal. Si empieza por 0x, es que est en hexadecimal, si empieza por 0b, en binario y si va entre comillas simples, ser un carcter. Todas las funciones output() e input() se utilizan con las directivas:

#use fast_io(x) Con output_x() saca el valor al puerto y con input_x(), lee. Hay que configurar primero los TRIS, por ej. con set_tris_x(); #use standard_io(x) Las mismas funciones anteriores pueden utilizarse sin tener que configurar los TRIS, pues se encarga de ello el cdigo asociado a la directiva. Si no se especifica la directiva, entonces para utilizar las funciones de entrada y salida, hay que configurar primero los puertos a travs de los TRIS. Las funciones anteriores trabajan con todo el puerto. Si se desea trabajar slo con un pin de un puerto, es preferible utilizar las funciones asociadas a un pin, comentadas anteriormente.

TIPOS DE DATOS EN C. Int1 o Short. Entero de un bit. Tamao: 1 bit Int o Int8: Entero. Tamao 8 bits (0 a 255) Int16 o Long: Entero de 16 bits. (0 a 65535) Int32: Entero de 32 bits (0 a 4.294.967.295) Float: Coma flotante. Tamao 32 bits Char: Carcter. Tamao 8 bits (0 a 255) Void: sin valor Signed Int8: Entero con signo. Tamao 8 bits (-128 a 127) Signed Int16: Entero largo con signo. Tamao 16 bits (-32768 a 32767) El Compilador CCS tambin contempla el tipo byte, con un tamao de 8 bits. A veces el valor de una variable no cambia nunca. Esto sucede cuando se utiliza la variable para contener un nmero fijo, til por ejemplo en clculos. Por tanto realmente no se trata de una variable sino de una constante, pero se desea utilizar una palabra para manejar dicha constante. Por ejemplo: giro = 360, para recordar que un ngulo completo corresponde a 360 grados. En este caso es til avisar al compilador de que se trata de una constante. Por tanto en lugar de declarar int giro = 360;, es mejor declarar const int giro = 360; cualquier intento de modificar el valor de giro mediante, por ejemplo una asignacin giro = 330, ser indicado como error por el compilador.

Operadores de asignacin. += Ej. x+=y, es lo mismo que x = x + yProfesor: Jos Manuel Ortega

DESARROLLO DE PROYECTOS DE PRODUCTOS ELECTRNICOS

I.E.S PRADO DE SANTO DOMINGO

C.F.G.S. DESARROLLO DE PRODUCTOS ELECTRNICOS

-= *= /= %= = &= |= ^=

Asignacin del resto de la divisin Desplazamiento a izquierda Desplazamiento a derecha AND de bits OR de bits OR exclusiva de bits

Operadores relacionales. < > >=