Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Programación de microcontroladores
PIC con compilador CCS
Manuel Picón
1
Manuel Picón
Nombre del Seminario: Microprocesadores y microcontroladores 2
Programación de C PIC con CCS.
Lenguaje C con compilador PCW de la empresa CCS
Programación compilador en CCS
Manuel Picón
Nombre del Seminario: Microprocesadores y microcontroladores 3
Programación de C PIC con CCS.
Pasos para programar un microcontrolador
IDE Programa en
Programación compilador en CCS
Nombre.C lenguaje C
Compilador
Programa en
Nombre.BIN
lenguaje de
máquina
Microcontrolador
Manuel Picón
Nombre del Seminario: Microprocesadores y microcontroladores 4
Programación de C PIC con CCS.
Estructura de un programa en C
Comandos cabecera
declaraciones globales
Funciones
Programación compilador en CCS
funcion_1() {
declaración de variables variables locales de “funcion_1”
bloque de instrucciones
}
…
…
void funcion_n() {
declaración de variables locales de funcion_n;
bloque de instrucciones;
llamada a otras funciones;
}
Inicio del programa
void main{
declaración de variables variables locales de la función
“main”
bloque de instrucciones;
llamada a otras funciones
}
Fin del programa
Manuel Picón
Nombre del Seminario: Microprocesadores y microcontroladores 5
Programación de C PIC con CCS.
Tipo de datos
Tipo tamaño Sin signo Con signo
int1 1 bit 0a1 N/A
Programación compilador en CCS
Manuel Picón
Nombre del Seminario: Microprocesadores y microcontroladores 6
Programación de C PIC con CCS.
Formas de representar Constantes
123 Decimal
0123 Octal
0x123 Hex
Programación compilador en CCS
0b010010 Binario
'x' Caracter
'\010' Carácter Octal
'\xA5’ Carácter Hex
'\c‘ Caracteres especial:
\c
\n Line Feed – es igual a \x0a
\r Return Feed - Same as \x0d
\t TAB – es igual a \x09
\b Backspace – es igual a \x08
\f Form Feed - es igual a x0c
\a Bell - es igual a \x07
\v Vertical Space - es igual a \x0b
\? Question Mark - es igual a \x3f
\' Single Quote - es igual a \x22
\" Double Quote - es igual a \x22
\\ A Single Backslash - es igual a \x5c
Manuel Picón
Nombre del Seminario: Microprocesadores y microcontroladores 7
Programación de C PIC con CCS.
Operador Descripción
+= Asignación de suma
-= Asignación de resta
*= Asignación de multiplicación
/= Asignación de división
%= Asignación de resto de división
<<= Asignación de desplazamiento a la izquierda
>>= Asignación de desplazamiento a la derecha
&= Asignación de AND de bits
|= Asignación de OR de bits
^^= Asignación de OR exclusivo de bits
~= Asignación de negación de bits
Manuel Picón
Nombre del Seminario: Microprocesadores y microcontroladores 8
Programación de C PIC con CCS.
Operadores aritméticos
Operador Descripción Ejemplos
Programación compilador en CCS
Operadores relacionales
Operador Descripción
< Menor que
> Mayor que
<= Menor o igual que
>= Mayor o igual que
== Igual a
!= Distinto de
Manuel Picón
Nombre del Seminario: Microprocesadores y microcontroladores 9
Programación de C PIC con CCS.
Operadores lógicos
Operador Descripción
Programación compilador en CCS
! No lógico (NOT)
&& Y lógico (AND)
|| O lógico (OR)
Operador Descripción
++ Incremento
-- decremento
Manuel Picón
Nombre del Seminario: Microprocesadores y microcontroladores 10
Programación de C PIC con CCS.
Operador Descripción
++ Incremento
-- decremento
Operadores lógicos
Operador Descripción
++ Incremento
-- decremento
Manuel Picón
Nombre del Seminario: Microprocesadores y microcontroladores 11
Programación de C PIC con CCS.
Directivas del compilador
Manuel Picón
Nombre del Seminario: Microprocesadores y microcontroladores 12
Programación de C PIC con CCS.
Funciones de Entrada Salida I/O
INPUT(pin)
Devuelve un int1, es decir el estado '0' o '1' que tenga el pin indicado.
Ejemplo:
Programación compilador en CCS
OUTPUT_HIGH(pin)
Coloca el pin especificado de ‘1’
Ejemplo:
output_high(PIN_A0);
OUTPUT_LOW(pin)
Coloca el pin especificado de ‘0’
Ejemplo:
output_low(PIN_A0);
Manuel Picón
Nombre del Seminario: Microprocesadores y microcontroladores 13
Programación de C PIC con CCS.
Funciones de Entrada Salida I/O
PORT_B_PULLUPS(flag)
Programación compilador en CCS
Esta función activa/desactiva las resistencias pullups en las entradas del puerto B,
flag puede ser TRUE (activa) o FALSE (desactiva).
Ejemplo:
port_b_pullups(FALSE); //desactiva las pullups del puerto B.
Manuel Picón
Nombre del Seminario: Microprocesadores y microcontroladores 14
Programación de C PIC con CCS.
Funciones de Interrupciones
DISABLE_INTERRUPTS(Id_interrup)
Esta función deshabilita la fuente de interrupción indicada por Id_interrup.
Programación compilador en CCS
Ejemplo:
disable_interrupts(GLOBAL); // deshabilita todas las interrupciones.
ENABLE_INTERRUPTS(Id_interrup)
Esta función habilita la fuente de interrupción indicada por Id_interrup.
Ejemplos:
enable_interrupts(GLOBAL); // habilita todas las interrupciones del grupo
general
enable_interrupts(INT_RTCC); // habilita la interrupción del TIMER0
EXT_INT_EDGE(flanco)
Esta función determina el flanco de activación de la interrupción externa.
flanco puede ser: (L_TO_H) de subida o (H_TO_L) de bajada.
Ejemplo:
ext_int_edge( L_TO_H ); // flanco de subida
ENABLE_INTERRUPTS(), DISABLE_INTERRUPTS(),
CLEAR_INTERRUPT(), INTERRUPT_ACTIVE(), EXT_INT_EDGE()
Manuel Picón
Nombre del Seminario: Microprocesadores y microcontroladores 16
Programación de C PIC con CCS.
Funciones del Timer 0
SETUP_COUNTERS() o SETUP_TIMER_0(valor)
Las constantes que puede tener valor son:
RTCC_INTERNAL :Utiliza el reloj interno del microcontrolador
RTCC_EXT_L_TO_H :Flanco de subida cuando está en modo contador
RTCC_EXT_H_TO_L :Flanco de bajada cuando está en modo contador
RTCC_DIV_1, RTCC_DIV_2, RTCC_DIV_4, ….., RTCC_DIV_256
: son para configurar el pre-escalar
RTCC_OFF : apaga el Timer
RTCC_8_BIT : coloca el timer en modo 8 bits.
Manuel Picón
Nombre del Seminario: Microprocesadores y microcontroladores 17
Programación de C PIC con CCS.
Funciones del convertidor análogo digital ADC
SETUP_ADC(), SETUP_ADC_PORTS()
ADC_CLOCK_DIV_x donde x es: 2, 4, 8, 16, 32, 64 : divide la frecuencia de
Programación compilador en CCS
conversión entre x.
ADC_CLOCK_INTERNAL : la frecuencia para la conversión es la del reloj
interno
SETUP_ADC_PORTS()
NO_ANALOGS : todos los puertos so digitales
AN0 : un canal de conversión ADC
AN0_TO_AN1 : dos canales de conversión ACD
AN0_TO_AN2 : tres canales de conversión ADC
…….
AN0_TO_AN11 : doce canales de conversión ADC
ALL_ANALOG : trece canales de conversión ADC
Otras constantes de setup_adc_ports() se agragan a las anteriores con OR
VSS_VDD : valores de referencia 0-Vdd
VREF_VREF : valores de referencia VrefL-VrefH
VREF_VDD : valores de referencia VrefL-Vdd
VSS_VREF : valores de referencia 0-VrefH
Manuel Picón
Nombre del Seminario: Microprocesadores y microcontroladores 18
Programación de C PIC con CCS.
Funciones del convertidor análogo digital ADC
Programación compilador en CCS
ADC_OFF()
Apaga el convertidor ADC
SET_ADC_CHANNEL()
Se coloca en el argumento el canal de multiplexor que se usará en la
conversión. Establece el pin de salida del ADC
READ_ADC()
Devuel un in8 si el convertidor ADC está en modo 8 bits y int 16 si está en
modo 16 bits.
Manuel Picón
Nombre del Seminario: Microprocesadores y microcontroladores 19
Programación de C PIC con CCS.
Ejemplos:
/// Comandos cabecera /////
#include <18F4550.h> // librería de PIC18F4550
#DEVICE ADC=10 // configuración del ADC a 10 bits
Programación compilador en CCS
int tecla;
output_low(PIN_B3); // Coloca “0” en Fila A
if(input(PIN_B7)==0) tecla=7; // Cheque columnas 1
if(input(PIN_B6)==0) tecla=8; // 2
if(input(PIN_B5)==0) tecla=9; // 3
if(input(PIN_B4)==0) tecla=10; // 4
output_high(PIN_B3); // Coloca “1” en Fila A
output_low(PIN_B2); // Coloca “0” en Fila B
if(input(PIN_B7)==0) tecla=4; // Cheque columnas 1
if(input(PIN_B6)==0) tecla=5; // 2
if(input(PIN_B5)==0) tecla=6; // 3
if(input(PIN_B4)==0) tecla=11; // 4
output_high(PIN_B2); // Coloca “1” en Fila B
Sigue
Manuel Picón
Nombre del Seminario: Microprocesadores y microcontroladores 21
Programación de C PIC con CCS.
Ejemplos: (Continuación)
Rutina de lectura de teclado matricial 4x4
Programación compilador en CCS
Manuel Picón
Nombre del Seminario: Microprocesadores y microcontroladores 22
Programación de C PIC con CCS.
#INT_xxx función_de_interrupción
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.
Ejemplo:
Programación compilador en CCS
#INT_xxx función_de_interrupción
(Continuación)
Programación compilador en CCS
Ejemplo:
void main(){
int y;
lcd_init();
set_tris_b(0x80);
det_tris_e(0x00);
setup_timer_0(RTCC_INTERNAL)
enable_interrupts( INT_EXT);
enable_interrupts(GLOBAL);
while(TRUE){
....
instrcciones ciclo programa principal
….
}
}
Manuel Picón