instituto tecnológico de querétaro - itq.edu.mx · pdf fileguia del compilador c...
TRANSCRIPT
Guia del Compilador C para Microchip Instituto Tecnolgico de Quertaro
Armando Mora Campos 1
INSTITUTO TECNOLGICO DE QUERTARO
GUIA DEL COMPILADOR C DE CCS
PARA MICROCONTROLADORES
PIC DE MICROCHIP
Elabor: Prof. Armando Mora Campos.
Fecha: Febrero 2017.
Versin: 3.2
Guia del Compilador C para Microchip Instituto Tecnolgico de Quertaro
Armando Mora Campos 2
INDICE
1. FORMATO GENERAL DE UN PROGRAMA ............................................................... 4
2. TIPOS DE DATOS (type-specifier) .................................................................................. 7
3. DEFINICION DE FUNCIONES ....................................................................................... 9
4. SENTENCIAS DE CONTROL Y ESTATUTOS (stmt) .................................................. 10
5. EXPRESIONES ................................................................................................................. 11
6. FUNCIONES Y DIRECTIVAS PARA EL MANEJO DE PERIFERICOS Y
RECURSOS ...................................................................................................................... 13
6.1 Entradas/Salidas discretas ............................................................................................ 13
6.2 Temporizadores/contadores ......................................................................................... 14
6.3 Convertidores A/D ....................................................................................................... 16
6.4 Programacin de retardos ........................................................................................... 17
6.5 Comunicacin serie asincrona RS-232 ........................................................................ 17
6.6 Comunicacin serie sincrona i2c (SSP) ....................................................................... 19
6.7 Comunicacin serie sincrona SPI (E/S en dos hilos)................................................... 21
6.8 Puerto paralelo esclavo (PSP) ..................................................................................... 21
6.9 Comparadores .............................................................................................................. 22
6.10 EEPROM de datos (interna) ...................................................................................... 22
6.11 Manipulacin de bits ................................................................................................. 22
6.12 Funciones para el display LCD .................................................................................. 24
6.13 Control del procesador .............................................................................................. 25
6.14 Standard C ................................................................................................................ 26
7. MANEJO DE INTERRUPCIONES .................................................................................. 28
8. DIRECTIVAS MISCELANEAS ....................................................................................... 30
8.1 Insertando cdigo ensamblador en un programa en C ......................................... 30
8.2 Definicin de constantes tipo bit y byte ...................................................................... 30
8.3 Directivas auxiliares .................................................................................................... 30
9. SISTEMA OPERATIVO EN TIEMPO REAL ................................................................. 32
9.1 Directivas del RTOS ................................................................................................... 32
9.2 Funciones del RTOS .................................................................................................... 35
9.3 RTOS e interrupciones ............................................................................................... 46
Guia del Compilador C para Microchip Instituto Tecnolgico de Quertaro
Armando Mora Campos 3
10. NOTAS Y RECOMENDACIONES PARA EL COMPILADOR PCW ........................... 50
10.1 Manejo de puertos paralelos ..................................................................................... 50
10.2 Uso de variables que definen un bit (short y short int) .............................................. 50
10.3 Lectura y escritura de registros internos ................................................................... 51
10.4 Definicin de funciones: inline o separate? ............................................................. 52
10.5 Optimizacin en el manejo de la memoria RAM ...................................................... 53
10.6 Restricciones en llamadas a funciones en interrupciones .......................................... 54
10.7 Localizacin de tablas en memoria ROM ................................................................. 55
11. DIAGRAMA PARA LOS EJERCICIOS DEL PIC16F887. ............................................. 56
12. ARCHIVO H DEL PIC16F887.. ....................................................................................... 57
13. EJEMPLOS SUPERLAZO ............................................................................................... 65
14. EJEMPLOS RTOS COOPERATIVO ............................................................................. 109
Guia del Compilador C para Microchip Instituto Tecnolgico de Quertaro
Armando Mora Campos 4
1. FORMATO GENERAL DE UN PROGRAMA
(SUPERLAZO).
a) Indicando comentarios.
/*Comentarios*/ o //Comentarios:
//Ejemplo de comentarios bsicos: Nombre del programa, autor, fecha, procesador, resumen de
//operacin y uso.
b) Include para especificar el dispositivo y las constantes de terminales y registros:
#include //Nota: los archivos dispositivo.h ya incluyen la directiva #device,
#include // la cual define el MCU PIC a utilizar.
c) Include para definir los fusibles de programacin (ejemplo): #fuses RC, NOWDT, PROTECT, PUT //Configuracin por default.
d) Includes para el manejo de algunas funciones del compilador:
#include stdio.h //Include para algunas funciones del pto. serie RS-232.
#include ctype.h //Include para funciones isxxx().
#include stdlib.h //Include para algunas funciones char de c estandar.
#include math.h //Include para funciones matemticas de punto flotante.
e) Directivas use para el manejo de funciones y perifricos que se utilizaran (ejemplos): #use delay(clock=10000000, restart_wdt) //Directiva para el manejo de retardos.
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) //Directiva para el manejo del pto. Serie.
#use fast_io(A) //Una de las directivas para el manejo y operacion de puertos.
f) Directivas auxiliares (ejemplos):
#id word //Directiva para especificar el identificador del chip.
#zero_ram //Directiva para inicializar a cero todos los registros internos.
#rom dir = {data0, data1,..} //Directiva para insertar datos en el archivo.hex.
g) Declarando constantes (datos y localidades de memoria):
#define BITS 8 //Constantes.
#define INTS_PER_SECOND 76
#define LAST_VOLUME 10
#byte status = 3 //Localidad de memoria.
#bit time_out = 3.4 //Bit de un registro.
h) Declarando variables globales (ejemplo):
int a,b,c,d;
typedef int byte;
bit e,f;
enum ADC_SOURCE {an0, an1, an2, an3, bandgap, srefh, srefl, itemp, refa,refb, an4, an5,
an6, an7};
Guia del Compilador C para Microchip Instituto Tecnolgico de Quertaro
Armando Mora Campos 5
i) Funciones (ejemplos).
En forma de archivos include:
#include
#include
Con la funcin completa en el programa (ejemplos):
void display_data(long int data) {
char volt_string[6];
convert_to_volts(data, volt_string);
printf(volt_string);
printf(" (%4lX)",data);
}
float READ_FLOAT_CAL(int n) {
int i;
float data;
for (i = 0; i < 4; i++)
*(&data + i) = READ_CALIBRATION(i + n);
return(data);
}
j) Rutinas de servicio a interrupcion (ejemplos).
#int_rtcc // This function is called every time
clock_isr() { // the RTCC (timer0) overflows (255->0).
if(--int_count==0) { // For this program this is apx 76 times per second.
++seconds;
int_count=INTS_PER_SECOND;
}
}
#int_ccp2
void isr() {
rise = CCP_1;
fall = CCP_2;
pulse_width = fall - rise; // CCP_1 is the time the pulse went high
} // CCP_2 is the time the pulse went low
k) Funcin principal (ejemplos).
void main() {
byte i,j,address,value;
do {
printf("\r\n\nEEPROM:\r\n"); // Display contents of entire EEPROM in hex.