Download Clase #10
Document related concepts
no text concepts found
Transcript
Universidad Nacional de Ingeniería Arquitectura de Maquinas I Unidad III: Introduccion a los Microcontroladores PIC MICROCHIP CCS un lenguaje de Alto nivel para PIC. Compilador C de CCS Este compilador ha sido desarrollado especificamente para Microcontroladores PIC, obteniendo la maxima optimizacion del compilador para estos dispositivos. Dispone de una amplia librería de funciones predefinidas, instrucciones y drivers para dispositivos como LCDs, convertidores AD, relojes en tiempo real, EEPROM, serie, etc. Los programas son editados y compilados a instrucciones maquina en el entorno grafico de una PC para despues ser cargado a un microcontrolador mediante un programador. Arq. de Computadora I Ing. Carlos Ortega H. 2 Estructura de un Programa Directivas de Preprocesado: Controlan la conversion del Programa a codigo maquina por parte del Compilador. Programas o Funciones: Conjunto de instrucciones. Pueden haber uno o varios, lo que identifica al principal es la inclusion de la llamada main() Instrucciones: Indican como deben comportarse el PIC en todo momento. Comentarios: Descripcion detallada de lo que siginifica cada linea del programa. Arq. de Computadora I Ing. Carlos Ortega H. 3 Tipos de Datos Tipo Tamaño Rango Descripcion Int1 Short 1 bit 0a1 Entero de 1 bit Decimal 123 Constantes Int8 8 bit 0 a 255 Entero Octal (o) 0123 Int16 16 bit 0a 65535 Entero de 16 bit Hexadecimal 0x123 Int32 32 bit 0a 429496 7295 Entero de 32 bit Binario x Caracter x Caracter Social '\010' Caracter Hexademimal '\f xA5' Float Coma Flotante Char 8 bit 0-255 Caracter Void ------------ ---------- Sin Valor Signed Intxxx 32 bit -231 - -231 Entero con signo Arq. de Computadora I Ing. Carlos Ortega H. 4 Operadores Asignación Arq. de Computadora I Aritméticos Ing. Carlos Ortega H. 5 Operadores Relacionales Lógicos Incremento y Decremento Declaraciones de Control Las declaraciones son usadas para controlar el proceso de ejecucion del programa. Las que admite CCS son: Ife – Else Sintaxis: if (expresion) sentencia_1; Else Sentencia_2; While Do while For Switch Case Return Break, Continue y GOTO Directivas Las Directivas de pre-procesado comienzan con el simbolo # y con tinuan con un comando especifico. #INCLUDE “filename” permite incluir fichero en el programa. #DEVICE chip, permite definir el PIC con el que se realizaara la compilacion. # FUSES options, la cual permite definir la palabra de configuracion para programar un PIC. #USE DELAY (clock =)speed) #ASM y ENDASM, permiten utilizar codigos ensamblador. Se utilizan al inicio y al final del bloque ensamblador. #BYTE Identificador = X El identificador referenciará un objeto en la posición de memoria x, donde x puede ser una constante u otro identificador. Directivas #USE FAST_IO (puerto) Esta directiva afecta al código que el compilador generará para las instrucciones de entrada y salida. Este método rápido de hacer I/O ocasiona que el compilador realice I/O sin programar el registro de dirección. El puerto puede ser A-G. Ejemplo: #use fast_io(A) #USE STANDARD_IO (puerto) Esta directiva afecta al código que el compilador genera para las instrucciones de entrada y salida. El método standar de hacer I/O causará que el compilador genere código para hacer que un pin de I/O sea entrada o salida cada vez que se utiliza. En los procesadores de la serie 5X esto necesita un byte de RAM para cada puerto establecido como I/O estandar. Ejemplo: #use standard_io(A) Tipos de Archivos Generados .PJT: Fichero de proyecto; contiene toda la informacion relacionada con el proyecto. .LST: Muestra un listado en el código C y el código ensamblador asociado para cada línea de código .SYM: Muestra las posiciones y valores de los registros y las variables del programa. .STA: Muestra una estadística de la utilización de la RAM, RON y la PILA. .TRE: muestra un árbol del programa en PCW y PCWH .HEX: Fichero Standar para la programación del PIC. .COF: Fichero binario que incluye el código maquina y la información para la depuracion correspondiente. Algunas Funciones de CCS Funciones CCS posee una serie de funciones predefinidas para acceder y utilizar el PIC y sus periféricos. INPUT(pin) Devuelve el estado '0' o '1' de la patilla indicada en pin. El método de acceso de I/O depende de la última directiva #USE *_IO utilizada. El valor de retorno es un entero corto. Ejemplo: while ( !input(PIN_B1) ); Algunas Funciones de CCS OUTPUT_BIT(pin, value) Esta función saca el bit dado en value(0 o 1) por la patilla de I/O especificada en pin. El modo de establecer la dirección del registro, está determinada por la última directiva #USE *_IO. Ejemplo: output_bit( PIN_B0, 0); // es lo mismo que output_low(pin_B0); output_bit( PIN_B0,input( PIN_B1 ) ); // pone B0 igual que B1 output_bit( PIN_B0, shift_left(&data, 1, input(PIN_B1))); // saca por B0 el MSB de 'data' y al mismo tiempo // desplaza el nivel en B1 al LSB de data. OUTPUT_HIGH(pin) Pone a 'uno' el pin indicado. El método de acceso de I/O depende de la última directiva #USE *_IO utilizada. Ejemplo: output_high(PIN_A0); Algunas Funciones de CCS OUTPUT_LOW(pin) Pone a 'cero' el pin indicado. El método de acceso de I/O depende de la última directiva #USE *_IO. Ejemplo: output_low(PIN_A0); PORT_B_PULLUPS(flag) Esta función activa/desactiva las resistencias pullups en las entradas del puerto B. Flag puede ser TRUE (activa) o FALSE (desactiva). Ejemplo: port_b_pullups(FALSE); SET_TRIS_X(value) Esto debe usarse con FAST_IO() y cuando se accede a los puertos de I/O como si fueran memoria, igual que cuando se utiliza una directiva #BYTE. Cada bit de value representa una patilla. Un '1' indica que la patilla es de entrada y un '0' que es de salida. Ejemplo: SET_TRIS_B( 0x0F ); DELAY_CYCLES(count) Esta función realiza retardos según el número de ciclos de instrucción especificado en count; los valores posibles van desde 1 a 255. Un ciclo de instrucción es igual a cuatro periodos de reloj. Ejemplo: delay_cycles( 3 ); DELAY_MS(time) Esta función realiza retardos del valor especificado en time. Dicho valor de tiempo es en milisegundos y el rango es 0-65535. Es preciso utilizar la directiva #use delay(clock=frecuencia) antes de la llamada a esta función, para que el compilador sepa la frecuencia de reloj. Ejemplos: #use delay (clock=4000000) // reloj de 4MHz delay_ms( 2 ); // retardo de 2ms FUNCIONES DE CONTROL DEL PROCESADOR DISABLE_INTERRUPTS(level) Esta función desactiva la interrupción del nivel dado en level. El nivel GLOBAL prohíbe todas las interrupciones, aunque estén habilitadas o permitidas. Los niveles de interrupción son: o GLOBAL o INT_AD o INT_COMP o INT_EXT o INT_EEPROM o INT_TIMER1 Ejemplo: disable_interrupts(GLOBAL); /* prohíbe todas las interrupciones */ SLEEP() Esta función pone al micro en un estado de REPOSO. CONTADORES / TEMPORIZADORES SETUP_TIMER_1(mode) Esta función inicializa el timer1. Los valores de mode deben ordenarse juntos, tal como se muestra en el ejemplo. El valor del timer puede leerse y puede escribirse utilizando GET_TIMER1() y SET_TIMER1(). Los valores de mode son: o T1_DISABLED o T1_EXTERNAL_SYNC o T1_DIV_BY_2 o T1_CLK_OUT o T1_DIV_BY_4 o T1_INTERNAL o T1_EXTERNAL o T1_DIV_BY_1 o T1_DIV_BY_8 Ejemplos: setup_timer_1 ( T1_DISABLED ); setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_4 ); SET_RTCC(value) SET_TIMERX(value) Estas funciones activan el timer o temporizador al valor especificado. RTCC y Timer0 son el mismo. Timer1 es de 16 bits y los otros son de 8 bits. Ejemplo: if ( get_rtcc()==25 ) set_rtcc(0); FUNCIONES DE ENTRADA A/D SETUP_ADC_PORTS(value) Esta función configura los pines del ADC para que sean analógicos, digitales o alguna combinación de ambos. Las combinaciones permitidas varían, dependiendo del chip. Las constantes usadas también son diferentes para cada chip. Las constantes ALL_ANALOG y NO_ANALOGS son válidas para todos los chips. Algunos otros ejemplos de constantes son: RA0_RA1_RA3_ANALOG Esto hace que los pines A0, A1 y A3 sean analógicos y los restantes sean digitales. Los +5v se usan como referencia RA0_RA1_ANALOG_RA3_REF Las patillas A0 y A1 son analógicas; la patilla RA3 se usa como voltaje de referencia y todas las demás patillas son digitales. Ejemplo: Setup_adc_ports( ALL_ANALOG ); FUNCIONES DE ENTRADA A/D SETUP_ADC(mode) Esta función prepara o configura el conversor A/D. Los modos son: o o o o o ADC_OFF ADC_CLOCK_DIV_2 ADC_CLOCK_DIV_8 ADC_CLOCK_DIV_32 ADC_CLOCK_INTERNAL Ejemplo: setup_adc(ADC_CLOCK_INTERNAL); SET_ADC_CHANNEL(canal) Especifica el canal a utilizar por la función READ_ADC(). El número de canal empieza en 0. Es preciso esperar un corto espacio de tiempo después de cambiar el canal de adquisición, antes de que se puedan obtener lecturas de datos válidos. Ejemplo: set_adc_channel(2); FUNCIONES DE ENTRADA A/D i=READ_ADC() Esta función lee el valor digital del conversor analógico digital. Deben hacerse llamadas a SETUP_ADC() y SET_ADC_CHANNEL() en algún momento antes de la llamada a esta función. Ejemplo: setup_adc( ALL_ANALOG ); set_adc_channel( ); while ( input(PIN_B0) ) { delay_ms( 5000 ); value = read_adc(); printf("A/D value = %2x\n",value); } Arq. de Computadora I Ing. Carlos Ortega H. 20