Home

MANUAL DE USUARIO DEL COMPILADOR PCW DE CCS®

image

Contents

1. e 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_BO 0 es lo mismo que output_low pin_BO output_bit PIN_BO input PIN_B1 pone BO igual que B1 output_bit PIN_BO shift_left amp data 1 input PIN_B1 saca por BO el MSB de data y al mismo tiempo desplaza el nivel en B1 al LSB de data e OUTPUT_FLOAT pin Esta funci n pone la patilla especificada como pin en el modo de entrada Esto permitir que la patilla est flotante para representar un nivel alto en una conexi n de tipo colector abierto Ejemplo guardamos la lectura del port A en dato if dato amp 0x80 0 comprobamos si es 1 el MSB output_low pin_A0 si es 1 ponemos a cero el pin AO else output _float pin_A0 de lo contrario ponemos el pin A0 a uno 31 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_AO 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_AO 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 desact
2. resul vari var Cambio de signo en enteros o reales val ango n IMAZ e Operadores relacionales Su misi n es comparar dos operandos y dar un resultado entero 1 verdadero 0 falso La siguiente tabla ilustra estos operadores iguala i Distinto de e Operadores l gicos Al igual que los operadores relacionales stos devuelven 1 verdadero O falso tras la evaluaci n de sus operandos La tabla siguiente ilustra estos operadores EC e Operadores de manejo de bits Estos operadores permiten actuar sobre los operandos a nivel de bits y s lo pueden ser de tipo entero incluyendo el tipo char Son los que siguen Negaci n de bits complemento a 1 a de bits AND O exclusivo de bits EXOR Odebits OR Operadores de incremento y decremento Aunque estos operadores forman parte del grupo de operadores de asignaci n he preferido separarlos en aras a una mayor claridad Su comportamiento se asemeja a las instrucciones de incremento incf f d del ensamblador del controlador PIC 16x84 o inc variable del Intel 8051 Operador Descripcion Decremento Operadores de desplazamiento de bits Los operadores de desplazamiento otorgan al C capacidad de control a bajo nivel similar al lenguaje ensamblador Estos operadores utilizan dos operandos enteros tipo int el primero es el elemento a desplazar y el segundo el n mero de posiciones de bits que se desplaza Se resumen en l
3. ccccesccccesceceeeeeaeeeeeeeeees 18 BEEN 18 ENKE ee A A eae aes 18 HPRAGMA COMANDO coooccccnccnnnconnnncnnnnnnnnncnnnonnnnnnnnnnnnncnnnnnnnnnnnonnnns 18 HUNDEF IDENTIFICADOR c ooocccoccnccncncononnnncnncnonnnnnnnnnncnononnncnnnnnonnnns 18 4 5 Especificaci n de dispositivos oocccoconncccnnnncccnnnnnoconnnnnnncnnnnnncrnnnnnnrrnnnnnnns 19 FDEVIGE G HIP di e 19 dl E eebe ee 19 HID n mero n mero NUMELO 2 cece eece cence eeeeeceeeneceeenececeneneeanenes 19 FID NOMbBreAlCHIVO 423 s ccak euk lt a dd ada 19 HD CHECKSUM cos ineine a ee aeaa E E 19 IFUSESODPCIONGS geseet E eR AT N 19 4 6 Calificadores de fUNCION ooconccoccccconconconooncononncnnonnonnonnonnnnnonnnnnennnnnennnnnannnns 20 EINEN aaa Eege 20 dl NA DEFAUL Kg Eeer 20 FIND GLOBAL uc ia 20 FIN XK deeg all etica seda 21 ASEPARATE cuina dee d Eege dee id 22 4 7 Librerias incorporadas ai ds 23 USE DELAY CLOCK tee ia Ne 23 HUSE FAST_lO puerto serrait netere iaaa e EE E VREI 23 HUSE FIXED_lO puerto_ OUTPUTS A 23 HUSE DCiMaster GDA ji 24 HUSE RS232 BAUD oP eas cece cineca liliana 25 HUSE STANDARD_IO puerto c cooooccccconoccccnnnocnncnnnannnnnnannncnnnannnnnnnns 25 5 FUNCIONES PERMITIDAS POR EL COMPILADOR 22 cssccseceesecesceescceecusecuseceensees 26 5 1 Funciones de I O eertebHo nn nao no a 26 EICH LEE 26 EI E E ET 26 GETGHARO sosa diana iaa 26 GETS CHarEstridg aseran nanos caca 26 PUTO aaa aia 26 PUTTCHARI c
4. SEL SE ENDIF El pre procesador eval a la expresi n_constante y si es distinta de cero procesara las l neas hasta el ELSE que es opcional o en su defecto hasta el ENDIF Ejemplo if a b c gt 8 printf Demasiados par metros endif e IFDEF ELSE ENDIF Esta directiva act a como el IF s lo que aqui el pre procesador simplemente comprueba que reconoce el id especificado creado con un DEFINE N tese que HIFDEF verifica si se defini un id pero IFNDEF comprueba que no est definido el id Ejemplo ifdef DEBUG printf punto de debug en Hendif es ERROR Esta directiva para el compilador y emite el mensaje que se incluye a continuaci n en la misma l nea de la propia directiva El mensaje puede incluir macros Tambi n puede utilizarse para alertar al usuario de una situaci n an mala en tiempo de compilaci n Ejemplos Hif BUFFER_SIZE gt 16 error El tama o del buffer es demasiado grande endif error Macro test min x y 17 INCLUDE lt Nombre_Fichero gt INCLUDE Nombre_Fichero Esta directiva hace que el compilador incluya en el fichero fuente el texto que contiene el archivo especificado en lt Nombre_Fichero gt Si el nombre del fichero se incluye entre los s mbolos lt gt el compilador busca el fichero en el directorio INCLUDE Si se pone entre comillas dobles el compilador busca primero en el directorio actual o directorio de trabajo y si no lo encuentra
5. The savings are accomplished because B and C are not executing at the same time and the same real memory locations will be used for their 6 variables just not at the same time The compiler will allocate only 13 locations for the group of functions A B C where 20 were required before to perform the same operation 67 Number of bits is out of range For a count of bits such as in a structure definition this must be 8 For a bit number specification such as in the BIT the number must be 0 7 Out of ROM A segment or the program is too large A function and all of the INLINE functions it calls must fit into one segment a hardware code page For example on the 56 chip a code page is 512 instructions If a program has only one function and that function is 600 instructions long you will get this error even though the chip has plenty of ROM left The function needs to be split into at least two smaller functions Even after this is done this error may occur since the new function may be only called once and the linker might automatically INLINE it This is easily determined by reviewing the call tree via ALT T If this error is caused by too many functions being automatically INLINED by the linker simply add a SEPARATE before a function to force the function to be SEPARATE Separate functions can be allocated on any page that has room The best way to understand the cause of this error is to review the calling tree via ALT T Parameter
6. el compilador pueda determinar la velocidad de transmisi n y la patilla utilizada La directiva HUSE RS232 permanece efectiva hasta que se encuentre otra que anule la anterior Los procedimientos de I O serie exigen incluir JSE DELAY para ayudar a sincronizar de forma correcta la velocidad de transmisi n Recordad que es necesario adaptar los niveles de voltaje antes de conectar el PIC a un dispositivo RS 232 Ejemplo printf Continuar s n do respuesta getch while respuesta s amp amp respuesta n e GETS char string Esta funci n lee caracteres usando GETC de la cadena string hasta que encuentra un retorno de carro valor ASCII 13 La cadena se termina con un 0 Ejemplo V ase la funci n GET_STRING en el archivo INPUT C e PUTC PUTCHAR Estas funciones env an un car cter a la patilla XMIT del dispositivo RS232 Es preciso utilizar la directiva USE RS232 antes de la llamada a esta funci n para que el compilador pueda determinar la velocidad de transmisi n y la patilla utilizada La directiva USE RS232 permanece efectiva hasta que se encuentre otra que anule la anterior Ejemplo if checksum 0 putchar ACk else putchar NAk NAK caracter de respuesta negativa 26 PUTS string Esta funci n env a cada car cter de string a la patilla XMIT del dispositivo RS232 Una vez concluido el env o de todos los caracteres la funci n env a un retorno de carro CR o RETURN ASCII
7. til ya que muestra todos los caracteres entrantes excepto los no imprimibles que mostrar su c digo hexadecimal en rojo e PICCHIPS PICCHIPS es un programa de utilidad que lee la base de datos de un dispositivo El compilador utiliza esta base de datos para determinar las caracter sticas espec ficas del dispositivo durante la compilaci n Al ejecutar el programa sin ning n par metro listar todos los dispositivos PIC disponibles Si especificamos un dispositivo como par metro p ej pic16c84 es decir escribimos picchips pic16c84 obtenemos informaci n detallada sobre este dispositivo A modo de ejemplo y para el citado PIC se obtiene la siguiente informaci n PIC16084 Opcode 14 bits ROM 1024 RAM 36 I O 13 H W EEPROM 64 POR TIMO TRIS RAM 0C 2F Ports A 01234 B 01234567 C D E Fuses LP 0003 0000 XT 0003 0001 HS 0003 0002 RC 0003 0003 NOWDT 0004 0000 WDT 0004 0004 NOPUT 0008 0000 PUT 0008 0008 PROTECT 3FF0 0000 NOPROTECT 3FF0 3FFO ID is at 2000 Par Device value 0084 C Device value 84 C Scratch at OC e CHIPEDIT ChipEdit es una utilidad de Windows s lo para PCW que permite editar la base de datos de un dispositivo Con esta utilidad podemos agregar dispositivos modificarlos o eliminarlos de la base de datos Para agregar un dispositivo seleccionar de la lista otro equivalente de caracte
8. 13 y un avance de l nea LF o LINE FEED ASCII 10 Ejemplo puts St puts HOLA nm puts PRINTF function string values La funci n de impresi n formateada PRINTF saca una cadena de caracteres al est ndar serie RS 232 o a una funci n especificada El formato est relacionado con el argumento que ponemos dentro de la cadena string Cuando se usan variables string debe ser una constante El car cter se pone dentro de string para indicar un valor variable seguido de uno o m s caracteres que dan formato al tipo de informaci n a representar Si ponemos obtenemos a la salida un solo El formato tiene la forma gen rica wt donde w es optativo y puede ser 1 2 9 Esto es para especificar cu ntos car cteres son representados si elegimos el formato 01 09 indicamos ceros a la izquierda o tambi n 1 1 a 9 9 para representaci n en punto flotante t es el tipo de formato y puede ser uno de los siguientes U Entero sinsigno o x Enteroen Hex en min sculas X Enteroen Hex en may sculas Ejemplos byte x y z printf Hola printf RTCCValue gt 2x n r get_rtcc printf 2u X 4X n r x y Z printf LCD_PUTC n c n 27 Ejemplos de formatos El resultado es impreciso Informaci n no v lida KBHIT Esta funci n devuelve TRUE si el bit que se est enviando al pin RCV de un dispositivo RS232 es el bit de inicio
9. The internal compiler limit for the permitted number of identifiers has been reached Call CCS to find out if this can be increased Too many nested INCLUDEs No more than 10 include files may be open at a time Too many parameters More parameters have been given to a function than the function was defined with Too many subscripts More subscripts have been given to an array than the array was defined with Type is not defined The specified type is used but not defined in the program Check the spelling Type specification not valid for a function This function has a type specifier that is not meaningful to a function Undefined identifier The specified identifier is being used but has never been defined Check the spelling Undefined label that was used in a GOTO There was a GOTO LABEL but LABEL was never encountered within the required scope A GOTO cannot jump outside a function Unknown device type A DEVICE contained an unknown device The center letters of a device are always C regardless of the actual part in use For example use PIC16C74 not PIC16RC74 Be sure the correct compiler is being used for the indicated device See DEVICE for more information 69 Unknown keyword in FUSES Check the keyword spelling against the description under FUSES Unknown type The specified type is used but not defined in the program Check the spelling USE parameter invalid One of the parameters to a USE library is not valid for th
10. dar el siguiente procedimiento 1 leer NOMBRE 2 leer NOTA 3 si no hay mas notas ir al punto 5 4 ir al punto 2 5 calcular la MEDIA 6 imprimir NOMBRE 7 imprimir MEDIA DIAGRAMA DE FLUJO DEL EJEMPLO MEDIA LEER NOMBRE LEER NOTA M S NOTAS IMPRIMIR NOMBRE IMPRIMIR NOTA 61 10 Estructura de un programa en C De forma generalizada la estructura de un programa en C tiene el siguiente aspecto declaraciones globales prototipos de funciones main variables locales bloque de sentencias llamadas a las funciones funcion_1 variables locales a funcion_1 bloque de sentencias llamada a otra s funciones funcion_n EJEMPLO DE UN PROGRAMA EN LANGUAJE C parpadeo c Programa que hace parpadear un led en RB7 cada ms Hinclude lt 16C84 H gt tipo de PIC use delay clock 4000000 reloj de 4 MHz byte puerto b 06 direcci n del puerto B void main void set_tris_b 0x00 puerto B como salida puerto_b 0 apaga todos los led dof delay_us 1000 retardo de 1000 seg bit_set puerto_b 7 enciende el led RB7 delay_us 1000 espera 1 ms bit_clear puerto_b 7 apaga el led while TRUE Repetir siempre 62 11 MENSAJES DE ERROR DEL COMPILADOR ENDIF with no corresponding IF A numeric expression must appear here The indicated item must evaluate to a number A D
11. de PIC un microcontrolador de 6 8 18 6 40 patillas El compilador de C que vamos a utilizar es el PCW de la casa CCS Inc A su vez el compilador lo integraremos en un entorno de desarrollo integrado IDE que nos va a permitir desarrollar todas y cada una de las fases que se compone un proyecto desde la edici n hasta la compilaci n pasando por la depuraci n de errores La ltima fase a excepci n de la depuraci n y retoques hardware finales ser programar el PIC Al igual que el compilador de Turbo C ste traduce el c digo C del archivo fuente C a lenguaje m quina para los microcontroladores PIC generando as un archivo en formato hexadecimal HEX Adem s de ste tambi n genera otros seis ficheros tal como se observa en la figura de la siguiente p gina Finalmente deciros que esta vez os presento los apuntes en soporte electr nico a diferencia de ocasiones anteriores que estaban en formato impreso Es una experiencia nueva y que como toda prueba tiene sus riesgos aunque espero y deseo que de una u otra forma logre prender la llama de la ilusi n o por lo menos despertar el inter s por el estudio de la electr nica y en particular de este mundo inacabado de la programaci n en C y los microcontroladores 2 PROGRAMAS DE UTILIDAD e SIO SIO Serial Input Output es un simple programa terminal no inteligente que puede ejecutarse desde el DOS para realizar entradas y salidas sobre un puerto serie SIO es
12. h Ejemplo float x 2 871 num ceil x num 3 42 f EXP x b i Calcula la funci n exponencial del n mero real x Si la magnitud de x es demasiado grande el comportamiento es impreciso El prototipo de esta funci n est en el fichero de cabecera math h Ejemplo float v1 pi 3 1416 v1 exp pi FLOOR x Calcula el valor entero m s grande menor que el n mero real x es decir hace un redondeo por defecto del n mero real x El prototipo de esta funci n est en el fichero de cabecera math h Ejemplo float x 3 871 num floor x num 3 c ISALNUM char c ISALPHA char c ISDIGIT char c ISLOWER char c ISSPACE char c ISUPPER char c ISXDIGIT char Todas estas funciones manejan cadenas de caracteres y sus prototipos estan en el fichero de cabecera ctype h Este fichero contiene las siguientes macros Cada funci n devuelve un valor distinto de cero si ISALNUM X Xes0 9 A Z oa a ISALPHA X Xes A Z o a z ISDIGIT X X es 0 9 ISLOWER X Xes a 2 ISUPPER X Xes A Z ISSPACE X X es un espacio ISXDIGIT X X es 0 9 A F o a f LABS x Obtiene el valor absoluto del entero largo x Si el resultado no puede representarse el comportamiento es indefinido El prototipo de esta funci n est en el fichero de cabecera stdlib h LOG x Calcula el logaritmo natural del n mero real x Si el argumento es menor o igual que ce
13. psp_output_full psp_data command while losp_input_full if psp_overflow error TRUE else data psp_data e SETUP_PSP mode Esta funci n inicializa el PSP mode puede ser o PSP_ENABLED o PSP_DISABLED La funci n SET_TRIS_E value puede usarse para establecer la direcci n de los datos Los datos pueden leerse y escribirse utilizando la variable PSP_DATA 39 5 8 FUNCIONES DE I O SPI A DOS HILOS e SETUP_SPI mode Esta funci n inicializa el SPI mode puede ser SPI_MASTER SPI_SLAVE SPLL_TO_H SPI_H_TO_L SPI_CLK_DIV_4 SPI_CLK_DIV_16 SPI_CLK_DIV_64 SPI_CLK_T2 SPI_SS_DISABLED 00000 Ejemplo setup_spi spi_master spi_ _to_h spi_clk_div_16 e SPI_DATA_IS_IN Esta funci n devuelve TRUE si se han recibido datos en el SPI e SPI READ Esta funci n devuelve un valor le do por el SPI Cuando SPI_READ recibe un dato se temporiza y la funci n devuelve el valor le do Si no hay datos dispuestos SPI_READ permanece a la espera Ejemplo if spi_data_is_in si ha llegado dato new_data spi_read lee el dato e SPI_WRITE value Esta funci n escribe el valor por el SPI Ejemplo spi_write data_out data_in spi_read 40 5 9 FUNCIONES PARA EL LCD e LCD_LOAD buffer_pointer offset length Carga length bytes del buffer_pointer en el segmento del rea de datos del LCD comenzando en el offset cuyo valor puede ser 0 15 e LCD_S
14. such as r min value 6 Missing ENDIF A IF was found without a corresponding ENDIF Missing or invalid REG file The user registration file s are not part of the download software In order for the software to run the files must be in the same directory as the EXE files These files are on the original diskette CD ROM or email in a non compressed format You need only copy them to the EXE directory There is one REG file for each compiler PCB REG PCM REG and PCH REG Must have a USE DELAY before a USE RS232 The RS232 library uses the DELAY library You must have a USE DELAY before you can do a USE RS232 No MAIN function found All programs are required to have one function with the name main Not enough RAM for all variables The program requires more RAM than is available The memory map ALT M will show variables allocated The ALT T will how the RAM used by each function Additional RAM usage can be obtained by breaking larger functions into smaller ones and splitting the RAM between them For example a function A may perform a series of operations and have 20 local variables declared Upon analysis it may be determined that there are two main parts to the calculations and many variables are not shared between the parts A function B may be defined with 7 local variables and a function C may be defined with 7 local variables Function A now calls B and C and combines the results and now may only need 6 variables
15. utiliza un ciclo de trabajo de 8 bits CCP_PWM_PLUS 2 s lo si se utiliza un ciclo de trabajo de 8 bits CCP_PWM_PLUS_3 s lo si se utiliza un ciclo de trabajo de 8 bits e SETUP_COMPARATOR mode S lo los PIC de la serie 16c62x pueden usar esta funci n v ase el archivo de cabecera 16c620 h donde mode puede ser A0 A3 AI A3 A0 A3 A1 A2 NC NG Ai A2 NC NG NG NG A0 VR_A2 VR A3 VR_A2 VR A0 A2 A1 A2 OUT ON A3 Ad A3_A2 A1 A2 Cada uno de los cuatro items separado por _ son C1 C1 C2 C2 Ejemplo setup_comparator A0_A3_A1_A2 inicializa dos comparadores independientes e SET_PWM1_DUTY value SET_PWM2_DUTY value Estas funciones escriben los 10 bits de value al dispositivo PWM para establecer el ciclo de trabajo Se puede usar un valor de 8 bits si no son necesarios los bits menos significativos 51 5 15 FUNCIONES PARA EL MANEJO DE LA EEPROM INTERNA e READ_CALIBRATION n Esta funci n lee n posiciones de la memoria de calibraci n de un 14000 Ejemplo Fin read_calibration 16 e READ_EEPROM address Esta funci n lee un byte de la direcci n address de EEPROM especificada La direcci n puede ser 0 63 Ejemplo define LAST_VOLUME 10 volume read_EEPROM LAST_VOLUME e WRITE_EEPROM address value Esta funci n escribe un byte de datos en la direcci n de memoria EEPROM especificada address puede valer 0 63 value es el byte de datos a escribir Esta funci n puede tardar varios mili
16. 22 4 7 LIBRERIAS INCORPORADAS e USE DELAY CLOCK frecuencia Esta directiva indica al compilador la frecuencia del procesador en ciclos por segundo a la vez que habilita el uso de las funciones DELAY_MS y DELAY_US Opcionalmente podemos usar la funci n restart_WDT para que el compilador reinicie el WDT durante el retardo Ejemplos use delay clock 20000000 use delay clock 32000 RESTART_WDT e 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 UO sin programar el registro de direcci n El puerto puede ser A G Ejemplo use fast_io A e USE FIXED_IO puerto_OUTPUTS pin_x pin_x Esta directiva afecta al c digo que el compilador generar para las instrucciones de entrada y salida El m todo fijo de hacer I O causar que el compilador genere c digo para hacer que un pin de l O sea entrada o salida cada vez que se utiliza Esto ahorra el byte de RAM usado en I O normal Ejemplo Zuse fixed_io a_outputs PIN_A2 PIN_A3 23 USE DC master slave SDA Pin SCL Pin opciones La librer a 12C contiene funciones para implementar un bus 12C La directiva USE 12C permanece efectiva para las funciones I12C_START DC STOP I2C_READ DC WRITE e 12C_ POLL hasta que se encuentre otra directiva USE DC Se generan las funciones software a menos que se especifique la opci n NOFOR
17. BRK char s1 char s2 Localiza la primera coincidencia de cualquier car cter de s2 en s1 y devuelve un puntero al car cter o s1 si s2 es una cadena vac a CHAR STRSTR char s1 char s2 Localiza la primera coincidencia de una secuencia de caracteres de s2 en s1 y devuelve un puntero a la secuencia devuelve null si s2 es una cadena vac a CHAR STRTOK char s1 char s2 Encuentra la pr xima muestra en s1 delimitada por un car cter de separaci n de cadena de s2 que puede ser diferente de una llamada a la otra devuelve un puntero a l La primera llamada inicia al principio de S1 la b squeda del primer car cter que no est contenido en s2 y devuelve NULL si no lo encuentra Si no se encuentra este es el inicio punto de parida del primer token valor de retorno La Funci n entonces busca desde all un car cter contenido en s2 Si no se encuentra el token actual se extiende hasta el extremo de s1 y las b squedas siguientes de un token devolver n null Si se encuentra uno se sobreescribe por 0 que termina el token actual La funci n guarda el puntero la car cter siguiente desde el que se iniciar la pr xima b squeda Cada llamada posterior con O como primer argumento inicia la b squeda a partir del puntero guardado 46 STRCPY dest SRC Copia una constante de cadena en la RAM Ejemplo char string 10 strcpy string Hola c TOLOWER char c TOUPPER char Pasa los carac
18. C mode Esta funci n prepara o configura el conversor A D Para la serie 14000 esta funci n establece la corriente de carga V ase el archivo 14000 H para los valores seg n el modo de funcionamiento Los modos son ADC_OFF ADC _CLOCK_DIV_2 ADC_CLOCK_DIV_8 ADC_CLOCK_DIV_32 ADC_CLOCK_INTERNAL OF E EI EN Ejemplo setup_adc ADC_CLOCK_INTERNAL e 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 49 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_BO delay_ms 5000 value road _adc printf A D value 2x n r value 50 5 14 FUNCIONES CCP e SETUP_CCP1 mode SETUP_CCP2 mode Estas funciones inicializa el contador CCP Para acceder a los contadores CCP se utilizan las variables CCP_1 y CCP_2 Los valores para mode son CCP_OFF CCP_CAPTURE_FE CCP_CAPTURE_RE CCP_CAPTURE_DIV_4 CCP_CAPTURE_DIV_16 CCP_COMPARE_SET_ON_MATCH CCP_COMPARE_CLR_ON_ MATCH CCP_COMPARE_INT CCP_COMPARE_RESET_TIMER CCP_PWM CCP_PWM_PLUS_1 s lo si se
19. CE_SW El modo SLAVE s lo debe usarse con las funciones SSP Las opciones son OPCIONES SDA pin Especifica el pin sn Ejemplos Zuse I2C master sda PIN_BO scl PIN_B1 Zuse I2C slave sda PIN_C4 scl PIN_C3 address 0x20 NOFORCE_SW USE RS232 BAUD baudios XMIT pin RCV pin Esta directiva le dice al compilador la velocidad en baudios y los pines utilizados para la I O serie Esta directiva tiene efecto hasta que se encuentra otra directiva RS232 La directiva USE DELAY debe aparecer antes de utilizar USE RS232 Esta directiva habilita el uso de funciones tales como GETCH PUTCHAR y PRINTF Si la I O no es estandar es preciso poner las directivas FIXED_IO o FAST_IO delante de USE RS232 OPCIONES RESTART_WDT ECH GETC ponga a cero el WDT mientras espera un Invierte la polaridad de los pines serie normalmente no es INVERT necesario con el convertidor de nivel como el MAX232 No puede usarse con el SCI interno PARITY X Donde X es N E u O BITS X Donde X es 5 9 no puede usarse 5 7 con el SCI FLOAT_HIGH Se utiliza para las salidas de colecctor abierto Indica al compilador que guarde los errores recibidos en la ERRORS variable RS232_ERRORS para restablecerlos cuando se producen 24 Permite velocidades de transmisi n bajas en chips uC s memorias etc que tienen problemas de transmisi n Cuando utilizamos dispositivos con SCI y se especifican los pines SCI entonces se usar el SCI Si
20. ES ccc ccccee cette cece seen eee tee e teen anaes 36 EE Ca RER WEE 36 GETSELIMERON satinado ardid 36 GETZTIMERTO satis aia 36 GET EIN ERD get and 36 RESTAR WD KEE 36 SE TR TOC VAUR uti ee Ae 36 SET_TIMERO value Aiie aaae iaaa a dpan 36 SET_TIMER1 Value srna aaa a eiae 36 SERZTIMER2 Value iretsi an a Ae ae eet a a EA 36 SETUP_COUNTERS rtCc_st erae e a a EEA 37 SETUP_TIMER_1 M0Od8 0 cccceceeceeeeeeeeeeeeeeeeaaeeeeeeeeeeeeeeaeaaeeees 37 GETUR TIMER Z2imode per 1 38 5 7 Funciones de I O PSP PARALELA aisnssnnsssssnnsssnsssnsenrsrrrssrrernrsrrrerrrerrrerrnnn 39 PSP sINPWT RULE caca 39 PSP_QUTPUT FULLO coincidi 39 PSP_OVERFLOW a aae aaa a ae aaa aaa a aaa aA aaiae 39 SETUP PSP MOde creuit et dai AOT 39 5 8 Funciones de I O SPI A DOS HILOS ocoocccccnncccnncnnnonnnnnnnnnnnnnnnnnncnnnannnnnnnnos 40 SETUP SPI MOd8 osrand a N 40 SPL DATA CSS INQ raid ie 40 SPILREAD Lario ebe 40 SPUWRITE Value cuiicitasiiitarniptridi horaria lona cian 40 5 9 Funciones para el LOD c oocccococcccccnnnonnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnrnnnnnnnnnnnnns 41 LCD LOAD pufer poin 1 41 LCD_SYMBOL SyMbol D7 enes aduan a oa a 41 SETUP EG pre Beet cc sciesscectucancetjandvesitetance ATE AES 41 5 10 Funciones del C EST NDAR siii ada 42 ET tt loci codo 42 ACOSO AA aves ae 42 AEI OT 42 ATAN ac E 42 A 42 ATOLA PU RE 42 CEL oi 42 SEXPODO RE TT 43 E HE ele E EE 43 ISAENUM Ghar iii dad 43 ER Oe METTEG 43 I
21. EVICE required before this line The compiler requires a device before it encounters any statement or compiler directive that may cause it to generate code In general defines may appear before a device but not much more A numeric expression must appear here Some C expression like 123 A or B C must appear at this spot in the code Some expression that will evaluate to a value Array dimensions must be specified The notation is not permitted in the compiler Specific dimensions must be used For example A 5 Arrays of bits are not permitted Arrays may not be of SHORT INT Arrays of Records are permitted but the record size is always rounded up to the next byte boundary Attempt to create a pointer to a constant Constant tables are implemented as functions Pointers cannot be created to functions For example CHAR CONST MSG 9 HI THERE is permitted however you cannot use 8 MSG You can only reference MSG with subscripts such as MSG i and in some function calls such as Printf and STRCPY Attributes used may only be applied to a function INLINE or SEPARATE An attempt was made to apply INLINE or SEPARATE to something other than a function Bad expression syntax This is a generic error message lt covers all incorrect syntax Baud rate out of range The compiler could not create code for the specified baud rate If the internal UART is being used the combination of the clock and the UART capabilities could not get a baud
22. Ejemplo setup_counters RTCC_INTERNAL WDT_2304MS 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 INTERNA o T1_CLK_OUT o T1_DIV_BY_4 o T1_EXTERNAL o T1_DIV_BY_1 o T1_DIV_BY_8 Ejemplos setup_timer_1 T1_DISABLED setup_timer_1 TI_INTERNAL T1_DIV_BY_4 setup _timer_1 TI_INTERVAL T1_DIV_BY_8 37 SETUP_TIMER_2 mode period postscale Esta funci n inicializa el timer2 mode especifica el divisor del reloj del oscilador period es un n mero comprendido entre 0 255 y determina el momento en el que el valor del reloj se resetea a 0 postscale es un n mero de 0 a 15 que determina cu ntos reset del timer se han producido antes de una interrupci n 0 significa 1 reset 1 significa 2 reset y as sucesivamente El valor del timer puede leerse y puede escribirse utilizando GET_TIMER2 y SET_TIMER2 Los valores de mode son T2_DISABLED T2_DIV_BY_1 T2_DIV_BY_4 T2_DIV_BY_16 0000 Ejemplo setup_timer_2 T2_DIV_BY_4 0xc0 2 38 5 7 FUNCIONES DE I O PSP PARALELA e b PSP_INPUT_FULL b PSP_OUTPUT_FULL b PSP_OVERFLOW Estas funciones verifican el PSP para las condiciones indicadas y devuelven VERDADERO o FALSO Ejemplos while
23. MANUAL DE USUARIO DEL COMPILADOR PCW DE CCS 0 da casio C Compiler for Microchip PiCmicro MCUs Escrito por Andr s Canovas Lopez Reeditado para formato PDF por Victor Dorado INDICE INTRO DUCCI N e ears acs 6 2 PROGRAMAS DE UTILIDAD oooccoccccnnoncnnnancnnnnonancnonancnnnnnnnnnnnnnannnnnnn cnn rnnnnnnnnnrnnnanrnanannnns 7 3 0PERADORES Y EXPRESIONES oocccocccconnncconononnnnnonnncnnnnnnnnncnnnancnnnrrnnnnrnnnnrrnnnnrnnnnrnanannnn 8 4 DIRECTIVAS DEL PREPROCESADOR c occooccccncccnnnncnnnancnnnnnnnnnnnnnannnnncnnnnnnnnnnnnnannrnnanenanenns 12 4 1 Gontrol de Mem ui dpi 12 HAS Md Aids 12 HENDAS Mia edi 12 BITIdentificad On iaa 13 HBYTE identificador os ana as aana e aa aa a aia ana ienaa di 14 FRESE RVE ido 14 PROM rat e A A a cas 14 HLEBO RAM laa cani a 14 4 2 Gontrol del COMpiladOr iii ci dt 15 FASE a A OS 15 HORT RER 15 O NY 20 ore Sevag shares StF ter ee eis E Sete Cee ago 15 4 3 Identificadores predefinidos 16 DATE a AA Aa 16 DEVICE it O E E n dat 16 EA e 16 REM eessen ata 16 4 4 Dir ctivas del G estandar iii As 17 DEFINE IDENTIFICADOR Cadena 17 HIF expresi n_CONStante 0 cece ce eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeees 17 IFDEF IDENTIFICADOR ccccccsscceseeceesceceesceanceseecesaeeseeeeees 17 FER ROR radical odia ads tanda 17 INCLUDE lt NOMBRE_FICHERO gt cocccccccccnccnccocncnncnnnncncnonnncnncnnnnnnns 18 INCLUDE NOMBRE_FICHERO
24. O DEL TIMER2 INT_CP1 MODO CAPTURA DE DATOS POR CCP1 INT_CCP2 MODO CAPTURA DE DATOS POR CCP2 INT_SSP PUERTO DE SERIE INTELIGENTE SPI 12C INT_PSP PUERTO PARALELO INT_TBE SCI DATO SERIE TRANSMITIDO INT_RDA SCI DATO SERIE RECIBIDO INT_COMP COMPARADOR DE INTERRUPCIONES INT_ADOF DESBORDAMIENTO DEL A DC DEL PIC 14000 INT_RC CAMBIO EN UN PIN Cx INT_12C 12 DEL 14000 INT_BUTTON PULSADOR DEL 14000 INT_LCD LCD 92x El compilador salta a la funci n de interrupci n cuando se detecta una interrupci n Es el propio compilador el encargado de generar el c digo para guardar y restaurar el estado del procesador Tambi n es el compilador quien borrar la interrupci n el flag Sin embargo nuestro programa es el encargado de llamar a la funci n ENABLE_INTERRUPT para activar previamente la interrupci n junto con el se alizador flag global de interrupciones Ejemplo Hfint_ad control_adc adc_activo FALSO 21 SEPARATE funci n SEPARATE le dice al compilador que el procedimiento o funci n que sigue a la directiva ser llevado a cabo por SEPARADO Esto es til para evitar que el compilador haga autom ticamente un procedimiento en l nea INLINE Esto ahorra memoria ROM pero usa m s espacio de la pila El compilador har todos los procedimientos SEPARATE separados tal como se solicita aun cuando no haya bastante pila Ejemplo separate swap_byte int a int b int t t a KB b b t
25. OTATE_RIGHT address bytes Esta funci n rota a la derecha un bit de un array o de una estructura N tese que esta rotaci n implica que el bit LSB pasa a ser el bit MSB address puede ser un identificador de un array o la direcci n a un byte o a una estructura por ejemplo amp dato bytes es el n mero de bytes implicados en la rotaci n Ejemplo struct int cell_1 4 nt cell_2 4 int cell_3 4 int cell_4 4 cells rotate_right amp cells 2 rotate_right amp cells 2 rotate_right amp cells 2 rotate_right amp cells 2 celda 1 gt 4 2 gt 1 3 gt 2 y 4 gt 3 SHIFT_LEFT address bytes value Esta funci n desplaza a la izquierda un bit de un array o de una estructura N tese la diferencia entre rotaci n y desplazamiento en la primera se produce una realimentaci n del dato en la segunda no address puede ser un identificador de array o la direcci n de una estructura por ejemplo amp dato bytes es el n mero de bytes implicados en el desplazamiento value es el valor del bit que insertamos Esta funci n devuelve el bit que queda fuera en el desplazamiento Ejemplo byte buffer 3 for i 1 lt 24 i while linput PIN_A2 shift_left buffer 3 input PIN_A3 while input PIN_A2 lee 24 bits de la patilla A3 cada bit se lee durante la transici n de bajo a alto en la patilla A2 54 SHIFT_RIGHT address bytes value Esta funci n desplaza a la de
26. RES TEMPORIZADORES e GET_RTCC GET_TIMERO GET_TIMER1 i GET_TIMER2 Estas funciones devuelven el valor de la cuenta de un contador en tiempo real RTCC y TimerO son el mismo Timer1 es de 16 bits y los otros son de 8 bits Ejemplo while get_rtcc l 0 e RESTART_WDT Esta funci n reiniciara el timer del watchdog Si habilitamos el timer del watchdog debe llamarse peri dicamente a RESTART_WDT para prevenir el reseteo del procesador Ejemplo while done restart_wadt e SET_RTCC value SET_TIMERO value SET_TIMER1 value SET_TIMER2 value Estas funciones activan el timer o temporizador al valor especificado RTCC y Time son el mismo Timer1 es de 16 bits y los otros son de 8 bits Ejemplo if get_rtcc 25 set_rtcc 0 36 SETUP_COUNTERS rtcc_state ps_state Esta funci n inicializa el timer RTCC o el WDT El rtcc_state determina qu es lo que activa el RTCC El ps_state establece un pre scaler para el RTCC o el WDT El pre scaler alarga el ciclo del contador indicado Si se activa el pre scaler del RTCC el WDT se pondr a WDT_18MS Si se activa el pre scaler del WDT el RTCC se pone a RTCC_DIV_1 RTCC_INTERNAL Valores del rtcc_state RTCC_EXT L TO H RTCC_EXT_H TO L RTCC_DIV_2 RTCC_DIV_4 RTCC_DIV_8 RTCC_DIV_16 RTCC_DIV_32 RTCC_DIV_64 RTCC_DIV_128 RTCC_DIV_256 WDT_18MS WDT_36MS WDT_72MS WDT_144MS WDT_288MS WDT_576MS WDT_1152MS WDT_2304MS Valores del ps_ state
27. SDIGIT Chat TEE 43 ISLOWER Chal evi oh bere a Mi iit nev inn Ma ae 43 ISSPAGE Chal sisecocestsccitsaanchectedetaid inascedaceigcdidetaivecezatadodiaaneens cetacean 43 ISUPPER Chas coran faites tate tact ove tastes E E 43 ISXDIGIT e IR WEE 43 LABS I caia dial 43 LORI a 43 Beck a s rdido cada 44 MEMCPY dest source N coccccocccconcncnncccnnonnnnnnccnncnnnnnnnnncnnnnnnnonencnnnss 44 MEMSET dest value mi 44 SORT aaeei erakon eaa aiana ea iaa Ai kae a r aaa a og 44 5 11 Funciones de Manejo de Cadenas ceceeeceeeeeeeeeeeeeeeeeeeeeeeaaeeeeeeaaeeeees 45 STRICMP char s1 char s2 r E AEE 45 STRNCMP char s1 char reee ER EN 45 STRO har S TENA ra li 45 46 STRCPY dest SRG neanta ee eee aA a AEAN 47 C LOLOWER EE 47 c TOUPPER char teen EA eters cede 47 5 12 Voltaje de Referencia VREF A 48 SETUP VREF MOde cuicos dp 48 5 13 Funciones de ENTRADA AJD ccceceee cence cece eeeeee eee eeeeaaeeeeeeaaaeeeeeaaaeeess 49 SETUP ADG MOde 2 cocci nc eeeete ne ia tae 49 SETUP_ADC_PORTS Value ooccccconcccncnnncccnnnnnaccnnnnnnccnnnnnnccnnnnnnccnnns 49 SET_ADC_CHANNEL chan AA 49 ISREAD ADC iia A Aa 50 D TAVEUNCIONES CCR Ae ee ee EE Se 51 SETUP_CCOP1 mde roeien a E a A A 51 SETUP GCP MOOD EE 51 SETUP_COMPARATOR mode ccccconcccccnnnnccncnnnnccnnnnnncncnnnancccnnnanccnnns 51 SET_PWM1_DUTY value c oooonoonccncnnconcnnnnnncnccnnnnconononnancnncnncnnnnnnnanos 51 SET_PWM2_ DUTY Value oooooooccc
28. TS Ejemplo disable_interrupts GLOBAL Proh be todas las interrupciones enable_interrupts INT_AD Quedan habilitadas estas dos interrupciones enable_interrupis INT_12C pero hasta que no se habilite GLOBAL no podran activarse enable_interrupis GLOBAL Ahora s se pueden producir las interrupciones anteriores e EXT_INT_EDGE edge Esta funci n determina el flanco de activaci n de la interrupci n externa El flanco puede ser de subida L_TO_H o de bajada H_TO_L Ejemplo ext_int_edge L_TO_H 34 READ_BANK bank offset Esta funci n lee un byte de datos del banco de memoria especificado en bank El banco puede ser 1 2 0 3 y s lo para la serie 57 de PIC el desplazamiento u offset est entre 0 y 15 Ejemplo dato READ_BANK 1 5 RESTART_CAUSE Esta funci n devolver la raz n por la que se ha producido el ltimo reset del procesador Los valores de retorno pueden ser WDT_FROM_SLEEP WDT_TIMEOUT MCLR_FROM_SLEEP NORMAL_POWER_UP Ejemplo switch restart_cause case WDT_FROM_SLEEP case WDT_TIMEOUT handle_error SLEEP Esta funci n pone al micro en un estado de REPOSO Ejemplo SLEEP WRITE_BANK bank offset value Esta funci n escribe un byte de datos en el banco de memoria especificado Value es el byte de datos a escribir bank puede ser 1 3 seg n el PIC offset puede ser 0 15 Ejemplo WRITE_BANK 1 0 23 35 5 6 CONTADO
29. YMBOL symbol b7_addr b6_addr b5_addr b4_addr b3_adar b2_addr b1_addr b0_addr Carga 8 bits en el segmento del rea de datos del LCD con cada direcci n del bit especificado Si el bit 7 de symbol est a 1 el segmento en B7_addr se pone a 1 en otro caso se pone a Esto es igualmente cierto para todos los otros bits de symbol N tese que B7_addr es un bit de direcci n de la RAM del LCD Ejemplo byte CONST DIGIT_MAPI10 0X90 0XB7 0X19 0X36 0X54 0X50 0XB5 0X24 define DIGIT_1_CONFIG COM0 2 COM0 4 COM0 5 COM2 4 COM2 1 COM1 4 COM1 5 for i 1 i lt 9 i LCD_SYMBOL DIGIT_MAP i DIGIT_1_CONFIG delay_ms 1000 e SETUP_LCD mode prescale segments Esta funci n se usa para inicializar al controlador 923 924 del LCD donde mode puede ser o LCD_DISABLED o LCD_MUX13 o LCD_STATIC o LCD _MUX14 o LCD_MUX12 y puede ser calificado por o STOP_ON_SLEEP o USE_TIMER_1 Adem s prescale puede valer entre O y 15 segments pueden ser cualquiera de los siguiente o SEGO 4 o SEG16_19 o SEG5_8 o SEGO 28 o SEG9_11 o SEG29_31 o SEG12_15 o ALL LCD PINS 41 5 10 FUNCIONES DEL C ESTANDAR e f ABS x Calcula el valor absoluto de un entero Si el resultado no se puede representar el comportamiento es impreciso El prototipo de esta funci n est en el fichero de cabecera stdlib h e f ACOS x Calcula el valor del arco coseno del n mero real x El valor de retorno est en el rango 0 piJradia
30. a siguiente tabla Desplazamiento ala derecha lt lt Desplazamiento a la izquierda Operadores de direcci n amp e indirecci n Los operadores amp y se utilizan para trabajar con punteros v ase tema 11 El lenguaje C est muy influenciado por el uso de punteros Un puntero es una variable que contiene la direcci n de una variable o de una funci n es decir es una variable que apunta a otra variable Los punteros permiten la manipulaci n indirecta de datos y c digos Disponemos de dos operadores v ase la siguiente tabla a pe direcci n De inirecci n El operador de direcci n amp nos da la direcci n de memoria de su operando El resultado es un puntero al objeto esto es a un tipo de datos Por ejemplo si queremos guardar en el puntero p la direcci n de memoria de la variable entera contador debemos hacer lo siguiente p amp contador p apunta a la direcci n de contador El operador de indirecci n nos da el valor o contenido de la variable cuya direcci n est apuntada por el puntero p amp contador p apunta a la direcci n de contador a guarda en a el contenido de la var apuntada por p 10 e Expresiones Constantes Decimal Octal Hex Binario Car cter Car cter octal x Car cter especial x puede ser n t b r f dv abcdef Cadena el car cter nulo se agrega al final Identificadores ABCDE Hasta 32 caracteres no puede empezar c
31. alizadas y no pueden cambiar en tiempo de ejecuci n No est n permitidos punteros a constantes SHORT es un tipo especial utilizado para generar c digo muy eficiente para las operaciones de I O No se permiten las arrays de SHORT ni los punteros a SHORT La siguiente tabla muestra la sintaxis para las definiciones de datos Ejemplos int a b c d typedef int byte typedef short bit bit e f byte g 3 2 char h enum boolean false true boolean j byte k 5 byte const SEMANAS 52 byte const FACTORES 4 8 16 64 128 struct registro_datos byte a 2 byte b 2 2 bits byte c 3 3 bits int d 56 DEFINICIONES DE DATOS typedef static auto calificador_tipo especificador_tipo identificador Variable global e inicializada a 0 La variable existe mientras el procedimiento esta activo Es el valor por defecto por eso no es necesario poner auto Especificadores de tipo unsigned unsigned int int char long long int signed signed int signed long float short short int Identificador Enum Struct Union declarador define un numero de 8 bits sin signo define un numero de 8 bits sin signo define un numero de 8 bits sin signo define un numero de 8 bits sin signo define un numero de 16 bits sin signo define un numero de 16 bits sin signo define un numero de 8 bits con signo define un numero de 8 bits con signo define un numero de 16 bits con signo define un nume
32. c digo que ser puesto en cualquier parte donde se llame al procedimiento Esto es til para ahorrar espacio de la pila stack y aumentar la velocidad Sin esta directiva es el compilador quien decidir cuando es mejor hacer los procedimientos EN LINEA Ejemplo inline swap_byte int a int amp b e INT_DEFAULT funci n_de_ interrupci n _por_defecto La funci n que sigue a la directiva ser llamada si el PIC activa una interrupci n y ninguno de los flags de interrupci n est activo Ejemplo int_default control_interrupcion activar_int VERDADERO e INT_GLOBAL funci n La funci n que sigue a esta directiva reemplaza al distribuidor de interrupciones del compilador dicha funci n toma el control de las interrupciones y el compilador no salva ning n registro Normalmente no es necesario usar esto y debe tratarse con gran prudencia 20 INT_xxx funcion_de_interrupcion Estas directivas especifican que la funci n que le sigue es una funci n de interrupci n Las funciones de interrupci n no pueden tener ning n par metro Como es natural no todas las directivas pueden usarse con todos los dispositivos Las directivas de este tipo que disponemos son INT_EXT INTERRUPCION EXTERNA INT_RTCC DESBORDAMIENTO DEL TIMERO RTCC INT_RB CAMBIO EN UNO DE LOS PINES B4 B5 B6 B7 INT_AD CONVERSOR A D INT_EEPROM ESCRITURA EN LA EEPROM COMPLETADA INT_TIMER1 DESBORDAMIENTO DEL TIMER INT_TIMER2 DESBORDAMIENT
33. cccnconcnonnnncnccnncnnonononnancnnnnncnnnnnnnnnos 51 5 15 Funciones para la EEPROM interna 52 READ CALIBRATION IN wcssccsdeetseciastascapeeadtad enaa neniani 52 READ _EEPROM address urreria A 52 WRITE_EEPROM address value cceeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeees 52 5 16 Funciones de MANIPULACI N DE BITS ccccccccccccecesseeccseeecseeseesseneees 53 BIT GLEAR VAr Dit EE 53 BLT OEM Vals BEI Eed eegen Eege erica ege 53 BIT TES var Bit uu A id hn es ee ie 53 ROTATE_LEFT addr byte eee ceeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeaaeeeeeeaaee eres 53 ROTATE_RIGHT addr byte 2 20 00 cee eeeeeeeeeeeeeeeeeeeeeeeeeeeeeaeeeeeeaaee ees 54 SHIFT_LEFT addr byte val AA 54 SHIFT_RIGHT addr byte Val occccoonnccccnoncccccnnnccccnnnnnccnnnnnnccnnnnnnccnnns 55 SWAP byte aiii 55 6 DEFINICI N DE DATOS EE 56 7 DEFINICI N DE FUNCI N REENEN 59 8 FUNCIONES PAR METROS POR REFERENCIA EEN 60 9 EDICI N DE UN PROGRAMA EN C EEN 61 10 ESTRUCTURA DE UN PROGRAMA EN 2 eeccccceeeceeeeeeeeeeeeeeeeeeeeeeeseeeeeeeseeeeeeneeeeenees 62 11 MENSAJES DE ERROR DEL COMPILADOR 0seccceeeeeseeeeeeeeeeeeeeeseeeeeeeseeeeneneeeeeeeees 63 1 INTRODUCCION Si queremos realizar la programaci n de los microcontroladores PIC en un lenguaje como el C es preciso utilizar un compilador de C Dicho compilador nos genera ficheros en formato Intel hexadedimal que es el necesario para programar utilizando un programador
34. constant causes this Divide by zero An attempt was made to divide by zero at compile time using constants Duplicate case value Two cases in a switch statement have the same value Duplicate DEFAULT statements The DEFAULT statement within a SWITCH may only appear once in each SWITCH This error indicates a second DEFAULT was encountered Duplicate define The identifier in the define has already been used in a previous define The redefine an identifier use UNDEF first To prevent defines that may be included from multiple source do something like e ifndef ID e define ID text e Hendif Duplicate function A function has already been defined with this name Remember that the compiler is not case sensitive unless a CASE is used Duplicate Interrupt Procedure Only one function may be attached to each interrupt level For example the INT_RB may only appear once in each program Duplicate USE Some USE libraries may only be invoked once since they apply to the entire program such as HUSE DELAY These may not be changed throughout the program Element is not a member A field of a record identified by the compiler is not actually in the record Check the identifier spelling ELSE with no corresponding IF Check that the and match up correctly End of file while within define definition The end of the source file was encountered while still expanding a define Check for a missing End of source file reached without clo
35. de un car cter Es preciso utilizar la directiva USE RS232 antes de la llamada a esta funci n para que el compilador pueda determinar la velocidad en baudios y la patilla utilizada La directiva USE RS232 permanece efectiva hasta que se encuentre otra que anule la anterior Ejemplo keypress while keypress Q entramos al bucle while if kbhit keypress getc en la variable keypress se guardan los caracteres if linput PIN_B2 inicio del env o de un byte output_high PIN_B3 else output_low PIN_B3 SET_UART_SPEED baud Esta funci n cambia la velocidad de transmisi n de la UART Universal Asynchronous Receiver Transmitter en tiempo de ejecuci n SETUP_ADC mode Esta funci n configura permite establecer los par metros del conversor anal gico digital Para el chip 14000 esta funci n establece la corriente de carga Los modos son los siguientes ADC_OFF ADC_CLOCK_DIV_2 ADC_CLOCK_DIV_8 ADC_CLOCK_DIV_32 ADC_CLOCK_INTERNAL Ejemplo setup_adc ADC_CLOCK_INTERNAL 28 5 2 FUNCIONES DE I O CON EL BUS I2C e ba fC POLL Esta funci n retorna un valor distinto de cero TRUE cuando el hardware ha recibido un byte en el buffer En ese momento se produce una llamada a la funci n GC READ que devolver inmediatamente el byte recibido 12C_POLL est disponible s lo cuando se usa el SSP Ejemplo i2c_start condici n de inicio i2c_write Oxc1 direccionamiento lec
36. dispositivo 12C est modo master Hay que especificar la directiva USE 12C antes de la llamada a I2C_STOP Ejemplo V ase la funci n I2C_WRITE 12C_WRITE byte La funci n I2C_WRITE envia un byte al interface 12C Hay que especificar la directiva USE DC antes de la llamada a 12C_WRITE En modo master la propia funci n genera la se al de reloj con los datos y en modo esclavo esperar la se al de reloj del master Esta funci n devuelve el Bit de acuse de recibo ACK Ejemplo i2c_start condici n de inicio i2c_write Oxa0 direcci n del dispositivo i2c_write 5 envio de una orden al dispositivo i2c_write 12 envio de datos al dispositivo i2c_stop condici n de parada 30 5 3 FUNCIONES DE I O DISCRETA e 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 _lO utilizada El valor de retorno es un entero corto Ejemplo while linput PIN_B1 Nota El argumento para las funciones de entrada y salida es una direcci n de bit Por ejemplo para el bit 3 del port A byte 5 de los SFR tendr a un valor direcci n de 5 8 3 43 Esto se puede definir como sigue define pin3_portA 43 Los pines o patillas de los dispositivos estan definidos como PIN_XX en los archivos de cabecera H Estos se pueden modificar para que los nombres de los pines sean m s significativos para un proyecto determinado
37. e 4MHz delay_ms 2 retardo de 2ms void retardo_segundos int n retardo de n segundos 0 lt n gt 255 for n 0 n delay_ms 1000 1 segundo e DELAY_US time Esta funci n realiza retardos del valor especificado en time Dicho valor es en microsegundos y el rango va desde 0 a 65535 Es necesario utilizar la directiva use delay antes de la llamada a esta funci n para que el compilador sepa la frecuencia de reloj Ejemplos use delay clock 20000000 delay_us 50 int espera 10 delay_us espera 33 5 5 FUNCIONES DE CONTROL DEL PROCESADOR e 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_CCP2 o INT_COMP o INT_EXT o INT_EEPROM o INT_SSP o INT_ADOF o INT_RTCC o INT_TIMER1 o INT_PSP o INT_RC o INT_RB o INT_TIMER2 o INT_TBE o INT_I2C o INT_AD o INT_CP1 o INT_RDA o INT BUTTON Ejemplo disable_interrupts GLOBAL proh be todas las interrupciones e ENABLE_INTERRUPTS level Esta funci n activa la interrupci n del nivel dado en level Queda a cargo del t cnico definir un procedimiento o rutina de atenci n para el caso que se produzca la interrupci n indicada El nivel GLOBAL permite todas las interrupciones que est n habilitadas de forma individual V ase tambi n DISABLE_INTERRUP
38. e current environment USE parameter value is out of range One of the values for a parameter to the USE library is not valid for the current environment 70
39. entonces lo busca en los directorios INCLUDE del compilador Ejemplo include lt 16C54 H gt include reg_C84 h HLIST Guarda el c digo fuente en el archivo LST NOLIST No guarda el c digo fuente en el archivo LST PRAGMA comando Esta directiva se usa para mantener compatibilidad entre los compiladores de C El compilador aceptar esta directiva antes de cualquier otro comando del pre procesador Ejemplo pragma device PIC16C54 UNDEF Identificador El identificador ID no tendr ya significando para el pre procesador 18 4 5 ESPECIFICACION DE DISPOSITIVOS e DEVICE CHIP Esta directiva define al compilador la arquitectura hardware utilizada Esto determina la memoria RAM y ROM asi como el juego de instrucciones Para los chips uC s memorias etc con mas de 256 bytes de RAM se puede seleccionar entre punteros de 8 o 16 bits Para usar punteros de 16 bits hay que a adir 16 despu s del nombre del chip uC memoria o en una nueva l nea despu s de la declaraci n del chip Se puede obtener informacicon sobre un dispositivo con el programa PICCHIPS Ejemplos device PIC16C67 16 device PIC16C74 device 16 e HD ID n mero n mero n mero ID nombre_archivo AID CHECKSUM Esta directiva define la palabra de IDdentificaci n que se grabar en el chip uC memoria etc Esta directiva no afecta a la compilaci n pero la informaci n se pone en el archivo de salida La primera sintax
40. ession must evaluate to a constant The indicated expression must evaluate to a constant at compile time For example 5 3 1 is permitted but 5 x 1 where X is a INT is not permitted If X were a DEFINE that had a constant value then it is permitted Expression too complex This expression has generated too much code for the compiler to handle for a single expression This is very rare but if it happens break the expression up into smaller parts Too many assembly lines are being generated for a single C statement Contact CCS to increase the internal limits Extra characters on preprocessor command line Characters are appearing after a preprocessor directive that do not apply to that directive Preprocessor commands own the entire line unlike the normal C syntax For example the following is an error 65 PRAGMA DEVICE lt PIC16C74 gt main int x x 13 File in INCLUDE can not be opened Check the filename and the current path The file could not be opened Filename must start with or lt Filename must terminate with or gt Floating point numbers not supported A floating point number is not permitted in the operation near the error For example F where F is a float is not allowed Function definition different from previous definition This is a mis match between a function prototype and a function definition Be sure that if a INLINE or SEPARATE are used that they appear for both the prototype and definition These di
41. irie unei a E AEN 26 PUTS String sinine rina eres A de 27 PRINTE function 2 seesi eei een e Re E EE ERNE 27 KEREI anida ad 28 SETCUARTOSPEED Dalld vivio idilio 28 5 2 Funciones de I O con el BUS 12C 00ococococccccncnconcncnnnncncnnanannnn nono nnnnc nan nnna nas 29 leg ei EA 29 126 READ ui a Rie ENEE 29 I2G RE ARA NET 29 I2G STOR ica A dar 30 20 WRITE Dylan litis 30 5 3 Funciones de l O DISCHREIA nono nanncnanna ninas 31 INPUT DIN EE 31 OUTPUT_BIT pin value cccocoooccncnnnoccncnnnoccnnnnnnccnnnnancnnnonancnnnnnancnnnos 31 OUTPUT FLOAM PIN ai AA iii 31 OUTPUT _HIGH piIN rerasan teare aeta AE A AE EEA ea AE a 32 QUTPUT LOW pin cosita ta diia 32 PORT BePULLUPS fag ieinter inna E AA EARR 32 SET TRIS X Valle aise eaaa a e SE NEEE KEE E TERE 32 5 4 Funciones de RETARDOS eisiaa iaaa Aaa a EAE EAEE 33 DELAY CYCLES COUN anida ii N a 33 DELAY MS MG ruses eae E A EA AEAEE 33 DELAY US Mejicana ano E TENTEA Aa 33 5 5 Funciones de CONTROL del PROCEGADOR 34 DISABLE_INTERRUPTS level c cececeeeeeeeeeceeeeeeseeeeeeeaeeeees 34 ENABLE_INTERRUPTS level c c eccceeceeeeeeeceeeeeeeseeeeeesaeeeees 34 EXT_INT_EDGE edge eadrainn iaee eaa ennaa Ern R ETEA 34 READ_BANK bank offset ooooooccccconococccononoccnnoonnnnnnnnnnnnnncnnnnnoninos 35 RESTARTOGAUSE etnia darla ATTE Ra E ee dE 35 SBLEERU eegen ERC EE EES AE 35 WRITE_BANK bank Of Sn 1 35 5 6 CONTADORES TEMPORIZADOR
42. is necesita un n mero de 16 bit y pondr un nible en cada una de las cuatro palabras del ID La segunda sintaxis especifica el valor exacto en cada una de las cuatro palabras del ID Cuando se especifica nombre_archivo el ID se lee del archivo indicado su formato debe ser texto simple con un CR LF al final La palabra CHECKSUM indica que el checksum del dispositivo debe tomarse como el ID Ejemplo id 0x1234 id NumSerie txt id CHECKSUM e FUSES opciones Esta directiva define qu fusibles deben activarse en el dispositivo cuando se programe Esta directiva no afecta a la compilaci n sin embargo esta informaci n se pone en el archivo de salida Si los fusibles necesitan estar en formato Parallax hay que agregar PAR en opciones Utilizar la utilidad PICCHIPS para determinar qu opciones son v lidas para cada dispositivo La opci n SWAP tiene la funci n especial de intercambiar los bytes alto y bajo de los datos que no son parte del programa en el archivo Hex Esta informaci n es necesaria para algunos programadores de dispositivos Algunas de las opciones m s usadas son LP XT HS RC WDT NOWDT PROTECT NOPROTECT PUT NOPUT Power Up Timer BROWNOUT NOBROWNOUT PAR Parallax Format Fuses SWAP Ejemplo fuses HS WDT 19 4 6 CALIFICADORES DE FUNCION e INLINE Esta directiva le dice al compilador que el procedimiento que sigue a la directiva ser llevado a cabo EN LINEA Esto causar una copia del
43. iva Ejemplo port_b_pullups FALSE SET_TRIS_A value SET_TRIS_B value SET_TRIS_C value SET_TRIS_D value SET_TRIS_E value Estas funciones permiten escribir directamente los registros tri estado para la configuraci n de los puertos 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 Ox0F pone BO B1 B2 y B3 como entradas B4 B5 B6 y B7 como salidas en un PIC 16c84 32 5 4 FUNCIONES DE RETARDOS e 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 A retardo de 3ciclos instrucci n es igual que un NOP e 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 Para obtener retardos m s largos as como retardos variables es preciso hacer llamadas a una funci n separada v ase el ejemplo siguiente 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 d
44. lsear el valor de retorno La sintaxis de los comandos en ensamblador se describen en la tabla 1 Ejemplo int paridad int dato f int contador asm movlw 8 movwf contador movlw 0 lazo xorwf dato w rrf dato f decfsz contador f goto lazo mowf _return_ endasm 12 ADDM fd ANDWF td OSC CLAW COM Ta DECF 1d DECESZ 1d NOF TA INCFSZ td Gau MOVE 1d MOVEHW MOVPLW MOVWF f P SLEEP RLF f d XORLW ARE TAS MAA Z O Nota O f Operando fuente puede ser una constante un registro o una variable o d Operando destino puede ser una constante 0 o 1 y tambi n W o F o b Campo que referencia la posici n de un bit dentro de un registro o k Operando inmediato o literal puede ser una expresi n constante BIT identificador x y Esta directiva crear un identificador id que puede utilizarse como cualquier SHORT INT entero corto un bit El identificador referenciar un objeto en la posici n de memoria x m s el bit de desplazamiento y Ejemplos Abit tiempo 3 4 int resultado bit resultado_impar resultado 0 if resultado_ impar 13 BYTE Identificador X Esta directiva crear un identificador id que puede utilizarse como cualquier NT un byte El identificador referenciar un objeto en la posici n de memoria x donde x puede ser una constante u otro identificador Si x es otro identificador entonces ste estar localizado en la misma direcci n que el ide
45. n par metro de tipo char aceptar una constante de cadena El compilador generar un bucle que llama a la funci n una vez para cada car cter de la cadena Ejemplo void Icd_putc char c definici n de la funci n Icd_putc Maquina parada 59 8 FUNCIONES PARAMETROS POR REFERENCIA El compilador esta limitado a trabajar con parametros por referencia Esto aumenta la legibilidad del c digo as como la eficacia de algunos procedimientos Los dos procedimientos siguientes son iguales pero s lo el segundo opera con par metros por referencia funcion_a int x int y x 5 y x 3 funcion_a amp a amp b funct_b int amp x int amp y if x 5 Y X43 funcion_b a b declaraci n de la funci n llamada a la funci n declaraci n de la funci n paso de par metros por referencia llamada a la funci n 60 9 Edicion de un programa en C Para crear un programa hay que seguir los pasos siguientes 1 Especificaciones del programa qu tiene que hacer 2 Hacer organigrama 3 Escribir el codigo fuente conocer el lenguaje 4 Compilar Enlazar Link 5 Depurar errores si los hay ANALISIS DE UN PROBLEMA SENCILLO Como ejemplo orientativo se hace a continuaci n el desarrollo de un programa sencillo Se trata de obtener la nota media de un alumno durante un trimestre El an lisis de esta tarea que la hemos llamado MEDIA puede
46. nes Si el argumento no est dentro del rango 1 1 el comportamiento es impreciso El prototipo de esta funci n est en el fichero de cabecera math h e f ASIN x Obtiene el valor del arco seno del n mero real x El valor de retorno est en el rango pi 2 pi 2 radianes Si el argumento no est dentro del rango 1 1 el comportamiento es impreciso El prototipo de esta funci n est en el fichero de cabecera math h e f ATAN x Calcula el valor del arco tangente del n mero real x El valor de retorno est en el rango pi 2 pi 2 radianes El prototipo de esta funci n est en el fichero de cabecera math h e ATOI char ptr Esta funci n convierte la cadena de caracteres apuntada por ptr en un valor de tipo entero Acepta argumentos en decimal y en hexadecimal Si el resultado no se puede representar el comportamiento es indeterminado El prototipo de esta funci n est en el fichero de cabecera stdlib h e ATOL char ptr Esta funci n convierte la cadena de caracteres apuntada por ptr en un n mero entero largo long Acepta argumentos en decimal y en hexadecimal Si el resultado no se puede representar el comportamiento es indeterminado El prototipo de esta funci n est en el fichero de cabecera stdlib h e f CEIL x Obtiene el valor entero m s peque o mayor que el n mero real x es decir hace un redondeo por exceso del n mero real x El prototipo de esta funci n est en el fichero de cabecera math
47. no se puede alcanzar una tasa de baudios dentro del 3 del valor deseado utilizando la frecuencia de reloj actual se generar un error BRGH10K ENABLE pin El pin especificado estar a nivel alto durante la transmisi n Usa una UART software en lugar del hardware aun cuando se especifican los pines del hardware La definici n de RS232_ERRORS es como sigue Sin UART El bit 7 es el 9 bit para el modo de datos de 9 bit El bit 6 a nivel alto indica un fallo en el modo flotante alto FORCE_SW Con UART Usado s lo para conseguir Copia del registro RCSTA excepto que el bit O se usa para indicar un error de paridad Ejemplo use rs232 baud 9600 xmit PIN_A2 rcv PIN_A3 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 l O estandar Ejemplo use standard_io A 25 5 FUNCIONES PERMITIDAS POR EL COMPILADOR DE C 5 1 FUNCIONES DE I O SERIE RS232 e c GETC c GETCH c GETCHAR Estas funciones esperan un car cter por la patilla RCV del dispositivo RS232 y retorna el car cter recibido Es preciso utilizar la directiva HUSE RS232 antes de la llamada a esta funci n para que
48. ntificador id Ejemplos byte status 3 byte port_b 6 struct short int r_w short int c_d int no_usado 2 int dato 4 port_a byte port_a 5 port_a c_d 1 RESERVE Permite reservar posiciones de la RAM para uso del compilador RESERVE debe aparecer despu s de la directiva DEVICE de lo contrario no tendr efecto Ejemplo RESERVE 0x7d 0x7e 0x7f ROM Esta directiva permite insertar datos en el archivo HEX En particular se puede usar para programar la EEPROM de datos de la serie 84 de PIC Ejemplo rom 0x2100 1 2 3 4 5 6 7 8 ZERO_RAM Directiva que pone a cero todos los registros internos que pueden usarse para mantener variables antes de que comienze la ejecuci n del programa Y si en lugar de salidas son entradas c mo se pone USE FIXED_IO puerto_INPUTS pin_x pin_x Puede ser PSP 14 4 2 CONTROL DEL COMPILADOR e CASE Hace que el compilador diferencie entre may sculas y min sculas Por defecto el compilador hace esta distinci n e FOPTn Esta directiva s lo se usa con el paquete PCW y establece el nivel de optimizaci n Se aplica al programa entero y puede aparecer en cualquier parte del archivo fuente El nivel de optimizaci n 5 es el nivel para los compiladores DOS El valor por defecto para el compilador PCW es 9 que proporciona una optimizaci n total e PRIORITY Esta directiva se usa para establecer la prioridad de las interrupciones L
49. of the structure must appear Change to the form s f where s is the structure name and f is a field name Structures and UNIONS cannot be parameters use or amp 68 A structure may not be passed by value Pass a pointer to the structure using amp Subscript out of range A subscript to a RAM array must be at least 1 and not more than 128 elements Note that large arrays might not fit in a bank ROM arrays may not occupy more than 256 locations This expression cannot evaluate to a number A numeric result is required here and the expression used will not evaluate to a number This type cannot be qualified with this qualifier Check the qualifiers Be sure to look on previous lines An example of this error is VOID X Too many DEFINE statements The internal compiler limit for the permitted number of defines has been reached Call CCS to find out if this can be increased Too many array subscripts Arrays are limited to 5 dimensions Too many constant structures to fit into available space Available space depends on the chip Some chips only allow constant structures in certain places Look at the last calling tree to evaluate space usage Constant structures will appear as functions with a CONST at the beginning of the name Too many identifiers have been defined The internal compiler limit for the permitted number of variables has been reached Call CCS to find out if this can be increased Too many identifiers in program
50. on n meros Un sub ndice M ltiples sub ndices Dip O Referencia a una estructura o una uni n Referencia a una estructura o una uni n EE e expres expr sizeof type open expr expr rem expre expr expr expr expr expr value expr value expr value expr value expr value lt lt expr value amp expr value expr expr amp value expr expr expr gt expr expr gt expr expr expr 11 4 DIRECTIVAS DEL PREPROCESADOR Todas las directivas del pre procesador comienzan con el caracter seguido por un comando especifico Algunas de estas directivas son extensiones del C estandar El C proporciona una directiva del preprocesador que los compiladores aceptan y que permite ignorar o actuar sobre los datos que siguen Nuestro compilador admite cualquier directiva del pre procesador que comienze con PRAGMA lo que nos asegura la compatibilidad con otros compiladores Ejemplo INLINE Estas dos l neas son v lidas PRAGMA INLINE A continuaci n se describen todas y cada una de las directivas del compilador que utilizaremos para programar los microcontroladores PIC 4 1 CONTROL DE MEMORIA es ASM ENDASM Las l neas entre 4ASM y ENDASMse tratan como c digo ensamblador La variable predefinida RETURN_ puede utilizarse para asignar un valor de retorno a la funci n desde el c digo en ensamblador Tener presente que cualquier c digo C despu s de AMB ENDASM i b y antes del final de la funci n puede fa
51. or de las constantes de la lista Cada uno de los identificadores de la lista son creados como una constante Por defecto el primer identificador se pone a cero y los siguientes se incrementan en uno Si incluimos expresi n_constante despu s de un identificador ste tendr el valor de la expresi n_constante y los siguientes se incrementar n en uno Ejemplo enum ADC_SOURCE Jon an1 an2 an3 bandgap srefh srefl itemp refa refb 58 7 DEFINICION DE FUNCION El formato de la definici n de una funci n es como sigue calificador_tipo identificador especificador_tipo identificador cuerpo de la funci n El calificador_tipo para una funci n pueden ser void o un especificador de tipo v ase la lista de la p gina anterior La definici n de una funci n puede ir precedida por una de las siguientes directivas del proprocesador calificadores de funci n para dentificar una caracter stica especial de la funci n separate inline int_ Cuando utilizamos una de las directivas mencionadas y la funci n tiene un prototipo declaraci n anterior a la definici n de la funci n y colocada al principio del fichero fuente hay que incluir la misma directiva en el prototipo y en la definici n de la funci n Una caracter stica no muy corriente se ha a adido al compilador para ayudar a evitar los problemas creados por el hecho de que no pueden crearse punteros a constantes de cadenas Una funci n que tiene u
52. os elementos de mayor prioridad van primero Ejemplo priority rtcc rb la interrupci n rtcc ahora tiene mayor prioridad 15 4 3 IDENTIFICADORES PREDEFINIDOS e __DATE__ Este identificador del pre procesador contiene la fecha actual en tiempo de compilaci n en el formato siguiente 30 SEP 98 Ejemplo printf Este software fu compilado el d a printf DATE e __DEVICE__ Este identificador del pre procesador es definido por el compilador con el n mero base del dispositivo actual El n mero base normalmente es el n mero que sigue a la s letra s en el n mero de componente o referencia de un dispositivo Por ejemplo los PIC16C84 tienen el n mero base 84 Ejemplo ZU device__ 84 setup_port_a todas_entradas Hendif e __PCB__ Se utiliza para determinar si es el compilador PCB el que est haciendo la compilaci n Ejemplo Htifdef__pcb__ este compilador s lo es v lido para PIC cuyo opcode es de 12 bits device PIC 16c54 endif e DCH Se utiliza para determinar si es el compilador PCM el que est haciendo la compilaci n Ejemplo Hifdef__pcm__ device PIC16c71 endif 16 4 4 DIRECTIVAS DEL C ESTANDAR e DEFINE Identificador CADENA Se utiliza simplemente para reemplazar el IDentificador ID con CADENA Ejemplo define BITS 8 define rotar x x lt lt 4 a a BITS Es lo mismo que a a 8 a rotar a Es lo mismo que a a lt lt 4 e GIE expresi n constante
53. r ticas similares y pulsar el bot n ADD Para editar o borrar un dispositivo seleccionarlo y pulsar el bot n EDIT o DELETE e CONVERT PConvert es una utilidad de Windows PCW s lo que permite realizar conversiones de un tipo de datos a otros tipos Por ejemplo de decimal en Punto Flotante a Hexadecimal de 4 byte La utilidad abre una ventana pequena para realizar las conversiones y puede permanecer activa durante una sesi n con PCW o con MPLAB Esto puede ser til durante el proceso de depuraci n de un programa 3 OPERADORES Y EXPRESIONES e Operadores de asignaci n Una expresi n de asignaci n tradicional es de la forma expr1 expr operador expr2 es decir i i 5 Esta expresi n se puede representar por otra forma m s corta expr1 operador expr2 siguiendo con el mismo ejemplo i 5 Es en las expresiones complejas y no en una tan simple como la del ejemplo donde se puede apreciar la conveniencia de usar esta notaci n La siguiente tabla res me los operadores de asignaci n compuesta y su significado Asignaci n de resta p a Asignaci n de AND de Bis Asignaci n de OR de bits raci n de OF exes de ls Asignaci n de negaci n de bits e Operadores aritm ticos Los operadores aritm ticos se usan para realizar operaciones matem ticas Se listan en la siguiente tabla Operador Descripci n Suma enteros o reales e SECH varl var2 Poe Resta enteros o reales resul vari var2
54. rate within 3 of the requested value If the built in UART is not being used then the clock will not permit the indicated baud rate For fast baud rates a faster clock will be required BIT variable not permitted here Addresses cannot be created to bits For example amp X is not permitted if X is a SHORT INT Can t change device type this far into the code The DEVICE is not permitted after code is generated that is device specific Move the DEVICE to an area before code is generated Character constant constructed incorrectly Generally this is due to too many characters within the single quotes For example ab is an error as is nr The backslash is permitted provided the result is a single character such as 010 or ni Constant out of the valid range This will usually occur in inline assembly where a constant must be within a particular range and it is not For example BTFSC 3 9 would cause this error since the second operand must be from 0 8 63 Constant too large must be lt 65536 As it says the constant is too big Define expansion is too large A fully expanded DEFINE must be less than 255 characters Check to be sure the DEFINE is not recursively defined Define syntax error This is usually caused by a missing or mis placed or within a define Different levels of indirection This is caused by a INLINE function with a reference parameter being called with a parameter that is not a variable Usually calling with a
55. recha un bit de un array o de una estructura N tese la diferencia entre rotaci n y desplazamiento en la primera se produce una realimentaci n del dato en la segunda no address puede ser un identificador de array o la direcci n de una estructura por ejemplo amp dato bytes es el n mero de bytes implicados en el desplazamiento value es el valor del bit que insertamos Esta funci n devuelve el bit que queda fuera en el desplazamiento Ejemplo struct byte time byte command 4 byte source 4 msg for i 0 i lt 16 i while linput PIN_A2 shift_right 8msg 3 input PIN_A1 while input PIN_A2 lee 16 bits de la patilla A1 cada bit se lee en la transici n de bajo a alto en la patilla A2 for i 0 i lt 8 i output_bit PIN_AO shift_right amp data 1 0 desplaza 8 bits y los saca por el Pin_AO primero sale el LSB SWAP byte Esta funci n intercambia el nibble alto con el nibble bajo del byte dado Esto es lo mismo que byte byte lt lt 4 byte gt gt 4 Ejemplo x 0x45 swap x x ahora tiene 0x54 55 6 DEFINICION DE DATOS Si TYPEDEF se pone delante de la definici n de un dato entonces no se asigna espacio de memoria al identificador a menos que sea utilizado como un especificador de tipo en otras definiciones de datos Si delante del identificador ponemos CONST entonces el identificador es tratado como constante Las constantes deben ser inici
56. rectives are treated much like a type specifier Function used but not defined The indicated function had a prototype but was never defined in the program Identifier is already used in this scope An attempt was made to define a new identifier that has already been defined Illegal C character in input file A bad character is in the source file Try deleting the line and re typing it Improper use of a function identifier Function identifiers may only be used to call a function An attempt was made to otherwise reference a function A function identifier should have a after it Incorrectly constructed label This may be an improperly terminated expression followed by a label For example x 5 MPLAB Initialization of unions is not permitted Structures can be initialized with an initial value but UNIONS cannot be Internal compiler limit reached The program is using too much of something An internal compiler limit was reached Contact CCS and the limit may be able to be expanded Invalid conversion from LONG INT to INT In this case a LONG INT cannot be converted to an INT You can type cast the LONG INT to perform a truncation For example INT LI Internal Error Contact CCS This error indicates the compiler detected an internal inconsistency This is not an error with the source code although something in the source code has triggered the internal error This problem can usually be quickly corrected by sending the
57. ro de 32 bits en punto flotante define un bit define un bit Identificador de una definici n TYPE de tipo tipo enumerado v ase sintaxis a continuaci n estructura v ase sintaxis a continuaci n uni n v ase sintaxis a continuaci n const Jidentificador expr _constante valor_inicial enumerador enum identificador lista_identificadores expresi n_constante 57 estructura y union struct identificador calificador_tipo identificador expresi n_constante expresi6n_constante union idem Ejemplo struct Icd_pin_map boolean enable boolean rs boolean rw boolean unused int data 4 lcd Si ponemos expresi n_constante despu s de un identificador determina el n mero de bits que utilizar dicho identificador Este n mero puede ser 1 2 8 Se pueden utilizar arrays de dimensi n m ltiple poniendo los que se precisen Tambi n podemos anidar estructuras y uniones Un identificador despu s de struct puede usarse en otra struct y las no se pueden usar para reutilizar la estructura de la misma forma otra vez Nota Recordar que todo lo expresado entre corchetes es opcional es decir se puede especificar o no seg n convenga Si la expresi n va entre llaves entonces indica que debe aparecer una o m s veces y en ese caso separados por comas v ase m s abajo el siguiente ejemplo El identificador despu s de enum es un tipo de datos tan grande como la may
58. ro o demasiado grande el comportamiento es impreciso El prototipo de esta funci n est en el fichero de cabecera math h 43 LOG10 x Calcula el logaritmo decimal o base diez del n mero real x Si el argumento es menor o igual que cero o demasiado grande el comportamiento es impreciso El prototipo de esta funci n est en el fichero de cabecera math h MEMCPY dest source n Esta funci n copia B I n b i bytes desde source a dest en la memoria RAM Tanto destcomo source deben ser punteros Ejemplo memcpy amp structA amp structB sizeof structA memcpy arrayA arrayB sizeof arrayA memcepy amp structA amp databyte 1 MEMSET dest value n b4i Esta funci n pone n bytes de memoria a partir de dest con el valor value dest debe ser un puntero Ejemplo memset arrayA 0 sizeof arrayA memset structA Oxff sizeof structA SQRT x Obtiene la ra z cuadrada del n mero real x Si el argumento es negativo el comportamiento es indeterminado 44 5 11 FUNCIONES DE MANEJO DE CADENAS Estas funciones estan definidas en el archivo de cabecera string h que debe incluirse con una directiva include en el fuente Todas las funciones listadas aqui operan con constantes de cadena como parametro Antes de utilizar estas funciones conviene copiar con STRCPY una constante de cadena a una cadena en la RAM e CHAR STRCAT char s1 char s2 A ade una copia de la cadena s2 al final de s1
59. s not permitted An identifier that is not a function or preprocessor macro can not have a after it Pointers to bits are not permitted Addresses cannot be created to bits For example amp X is not permitted if X is a SHORT INT Pointers to functions are not valid Addresses cannot be created to functions Previous identifier must be a pointer A gt may only be used after a pointer to a structure It cannot be used on a structure itself or other kind of variable Printf format type is invalid An unknown character is after the in a printf Check the printf reference for valid formats Printf format invalid A bad format combination was used For example lc Printf variable count does not match actual count The number of format indicators in the printf does not match the actual number of variables that follow Remember in order to print a single you must use Recursion not permitted The linker will not allow recursive function calls A function may not call itself and it may not call any other function that will eventually re call it Recursively defined structures not permitted A structure may not contain an instance of itself Reference arrays are not permitted A reference parameter may not refer to an array Return not allowed in void function A return statement may not have a value if the function is void String too long Structure field name required A structure is being used in a place where a field
60. segundos para ejecutarse Ejemplo define LAST_VOLUME 10 volume write_eeprom LAST_ VOLUME volume 32 5 16 FUNCIONES PARA LA MANIPULACION DE BITS e BIT_CLEAR var bit Esta funci n simplemente borra pone a 0 el d gito especificado en bit 0 7 o 0 15 del byte o palabra aportado en var El bit menos significativo es el 0 Esta funci n es exactamente igual que var amp 1 lt lt bit Ejemplo int x X bit_clear x 2 EN e BIT_SET var bit Esta funci n pone a 1 el d gito especificado en bit 0 7 o 0 15 del byte o palabra aportado en var El bit menos significativo es el 0 Esta funci n es igual que var 1 lt lt bit Ejemplo int x X bit_set x 3 1x 13 e BIT_TEST var bit Esta funci n examina el d gito especificado en bit 0 7 o 0 15 del byte o palabra aportado en var Esta funci n es igual aunque mucho m s eficaz que esta otra forma var amp 1 lt lt bit 0 Ejemplo if bit_test x 3 Ibit_test x 1 o el bit 3 es 1 0 el bit 1 es O e ROTATE_LEFT address bytes Esta funci n rota a la izquierda un bit de un array o de una estructura N tese que la rotaci n implica que el bit MSB pasa a ser el bit LSB address puede ser un identificador de un array o la direcci n a un byte o a una estructura por ejemplo amp dato bytes es el n mero de bytes implicados en la rotaci n Ejemplo X 0x86 rotate_left amp x 1 x tiene ahora Ox0d 53 R
61. sing comment symbol The end of the source file has been reached and a comment started with is still in effect The is missing Error in define syntax 64 Error text not in file The error is a new error not in the error file on your disk Check to be sure that the errors txt file you are using came on the same disk as the version of software you are executing Call CCS with the error number if this does not solve the problem Expect Expect comma Expect WHILE Expect Expecting Expecting Expecting a Expecting a or Expecting a or Expecting a Expecting a or Expecting a or Expecting a close paren Expecting a declaration Expecting a structure union Expecting a variable Expecting a Expecting a Expecting an Expecting an array Expecting an expression Expecting an identifier Expecting an opcode mnemonic This must be a Microchip mnemonic such as MOVLW or BTFSC Expecting LVALUE such as a variable name or expression This error will occur when a constant is used where a variable should be For example 4 5 will give this error Expecting a basic type Examples of a basic type are INT and CHAR Expecting procedure name Expression must be a constant or simple variable The indicated expression must evaluate to a constant at compile time For example 5 3 1 is permitted but 5 x 1 where X is a INT is not permitted If X were a DEFINE that had a constant value then it is permitted Expr
62. source files to CCS so the problem can be re created and corrected In the meantime if the error was on a particular line look for another way to perform the same operation The error was probably caused by the syntax of the identified statement If the error was the last line of the code the problem was in linking Look at the call tree for something out of the ordinary Invalid parameters to shift function 66 Built in shift and rotate functions such as SHIFT_LEFT require an expression that evaluates to a constant to specify the number of bytes Invalid ORG range The end address must be greater than or equal to the start address The range may not overlap another range The range may not include locations 0 3 If only one address is specified it must match the start address of a previous org Invalid Pre Processor directive The compiler does not know the preprocessor directive This is the identifier in one of the following two places XXXXX PRAGMA xxxxx Library in USE not found The identifier after the USE is not one of the pre defined libraries for the compiler Check the spelling LVALUE required This error will occur when a constant is used where a variable should be For example 4 5 will give this error Macro identifier requires parameters A DEFINE identifier is being used but no parameters were specified as required For example define min x y x lt y x y When called MIN must have a after it
63. teres de may sculas a min sculas y viceversa TOLOWER X pasa a min sculas y devuelve a z TOUPPER X pasa a may sculas y devuelve A Z El resto de caracteres no sufre ning n cambio 47 5 12 VOLTAJE DE REFERENCIA VREF e SETUP_VREF mode S lo los PIC de la serie 16c62x pueden usar esta funci n v ase el archivo de cabecera 16c620 h donde mode puede ser FALSE desactivado VREF_LOW VDD VALUE 24 VREF_HIGH VDD VALUE 32 VDD 4 En combinaci n con VALUE y opcionalmente con VREF_A2 Ejemplo SETUP_VREF VREF_HIGH 6 Con VDD 5 el voltage es 1 5 6 32 5 4 2 1875V 48 5 13 FUNCIONES DE ENTRADA A D e 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 V ase el archivo de cabecera h para cada PIC concreto Las constantes ALL_ANALOG y NO_ANALOGS son v lidas para todos los chips Algunos otros ejemplos de constantes son RAO_RA1_RA3_ANALOG Esto hace que los pines AO A1 y A3 sean anal gicos y los restantes sean digitales Los 5v se usan como referencia v ase el siguiente ejemplo RAO_RA1_ANALOG_RA3_REF Las patillas AO 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 e SETUP_AD
64. tura del dispositivo count 0 while count 4 f 2c_poll r count 2c_read leer pr ximo byte tratamiento de la informaci n i2c_stop condici n de parada e 12C_READ La funci n 12C_READ lee un byte del interface 12C Es necesario especificar la directiva USE DC antes de la llamada a 12C_READ En modo master esta funci n genera los impulsos de reloj y en modo esclavo permanece a la espera de estos impulsos Cuando la funci n espera los datos no se puede producir ninguna interrupci n Si incluimos la opci n RESTART_WDT en la directiva USE 12C entonces esta funci n activa el WDT o perro guardi n mientras est esperando Se puede utilizar el par metro optativo 0 para que la funci n no env e el car cter acuse de recibo ACK de los datos recibidos Ejemplo i2c_start condici n de inicio i2c_write Oxa1 direcci n del dispositivo r1 i2c_read Lee el byte primero r2 i2c_read Lee segundo byte i2c_stop condici n de paro e 12C_START Esta funci n lanza una condici n de inicio cuando el dispositivo 12C est modo master Es necesario especificar la directiva USE DC antes de la llamada a I2C_START Despu s de la condici n de inicio el reloj se maniene a nivel bajo hasta que se llama a las funciones I2C_READ e 12C_WRITE Ejemplo V ase la funci n DC WRITE 29 12C_STOP Esta funci n lanza una condici n de stop o paro cuando el
65. y devuelve un puntero a la nueva cadena s1 e CHAR STRCHR char s char c Encuentra la primera coincidencia del car cter c en la cadena s y devuelve un puntero al car cter e CHAR STRRCHR char s char c Encuentra la ltima coincidencia del car cter c en la cadena s y devuelve un puntero al car cter e SIGNED INT STRCMP char et char s2 Compara s1 y s2 devuelve 1 si s1 lt s2 O si s1 s2 1 si s1 gt s2 e SIGNED INT STRNCMP char s1 char s2 int n Compara un m ximo de n caracteres que no vayan seguidos de 0 de s1 a s2 devuelve 1 si s1 lt s2 0 si s1 s2 y 1 si s1 gt s2 e SIGNED INT STRICMP char s1 char s2 Compara s1 y s2 sin hacer distinci n entre may sculas y min sculas Devuelve 1 si s1 lt s2 0 si s1 s2 y 1 si s1 gt s2 e CHAR STRNCPY char s1 char s2 int n Copia un m ximo de n caracteres que no vayan seguidos de 0 de s2 a s1 si s2 tiene menos de n caracteres se a aden 0 al final e INT STRCSPN char et char s2 Calcula la longitud de la porci n inicial mayor de s1 que consiste enteramente de caracteres que no estan en s2 45 INT STRSPN char s1 char s2 Calcula la longitud de la porci n inicial mayor de s1 que consiste enteramente de caracteres que estan en s2 INT STRLEN char s Obtiene la longitud de s1 excluyendo el car cter 10 CHAR STRLWR char s Reemplaza may sculas con min sculas y devuelve un puntero a s CHAR STRP

Download Pdf Manuals

image

Related Search

Related Contents

  JVC Everio Gz-ms130 16 Gb Camcorder - Onyx Black  

Copyright © All rights reserved.
Failed to retrieve file