SlideShare una empresa de Scribd logo
Microcontroladores
Cap. 3.- PROGRAMACION DEL MICROCONTROLADOR EN LENGUAJE C
CCS Compiler
CCS Compiler
El CCS Compiler
es una herramienta útil para programar microcontroladores PIC, en la
cual están incluidas muchas librerías para el manejo de puertos,
protocolos de comunicación y entre otros.
Es un compilador de lenguaje de alto nivel que permite
realizar las mismas tareas en un menor tiempo de desarrollo y con mucha
mayor facilidad en la programación en comparación al lenguaje
ensamblador. Básicamente el compilador CCS maneja la misma estructura
de programación que el lenguaje de programación C.
Traduce el código C del archivo fuente (.c) a lenguaje de máquina para
programar microcontroladores PIC (.HEX).
Se incluye Drivers o librerías de código fuente para manejo de pantallas
LCD, teclados, sensores, protocolos de comunicación, memorias,
conversión analógico a digital, etc.
Se integra al módulo de desarrollo IDE del MPLAB (software de
desarrollo de Microchip) y otros simuladores y editores para la
depuración del código fuente.
Funciones para el manejo de interrupciones
CARACTERÍSTICAS DE COMPILADOR
Para escribir un programa en C con el CCS C se deben tener en
cuenta una serie de elementos básicos de su estructura
DIRECTIVAS DE PREPROCESADO : controlan la conversión del
programa a código máquina por parte del compilador.
PROGRAMAS o FUNCIONES : conjunto de instrucciones. Puede
haber uno o varios; en cualquier caso siempre debe haber uno
definido como principal mediante la inclusión de la llamada
main() .
INSTRUCCIONES : indican como debe comportar el PIC en todo
momento.
COMENTARIOS : permiten describir lo que significa cada línea
del programa.
Estructura de un programa
Directivas de preprocesado
#INCLUDE <NOMBRE_DEL_FICHERO>
Esta directiva hace que el compilador incluya en el
fichero fuente el texto que contiene el archivo indicado.
Ejemplo: #include <16F877.H>
# FUSE
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.Algunas de las opciones más
usadas son:
LP, XT, HS, RC (Tipo de oscilador)
WDT, NOWDT (Activación del Watch Dog Timer)
PROTECT, NOPROTECT (Protección del código)
PUT, NOPUT (Temporizador de arranque)
BROWNOUT, NOBROWNOUT (Detección de caídas
de tensión de la fuente de alimentación)
Ejemplo #fuse HS, WDT.
#INT_XX
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
más comunes son las siguientes:
#INT_EXT: Interrupción externa
#INT_TRCC: Desbordamiento del TIMER0 (RTCC) #INT_RB:
Cambio en los pines B4, B5, B6, B7 #INT_AD: Conversor
A/D
#INT_TIMER1: Desbordamiento del TIMER1.
#INT_TIMER2: Desbordamiento del TIMER2 #INT_CP1:
Modo captura de datos por
CCP1
#INT_CCP2: Modo captura por CCP2
Directivas de preprocesado
#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().
Ejemplo: #USE DELAY (CLOCK = 4000000)
#USE STANDARD_io (Puerto)
Esta directiva afecta al código que el compilador
generará para las instrucciones de entrada y salida. Este
método rápido de hacer I/O ocasiona que el compilador
realice I/O sin programar el registro de dirección. El
puerto puede ser A-G.
Ejemplo: #USE STANDARD_io(B)
Directivas de preprocesado
#USE RS232 (BAUD = baudios, XMIT = pin,
RCV= pin)
Esta directiva le dice al compilador la
velocidad en bits por segundo y los pines
utilizados para la comunicación 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.
Directivas de preprocesado
Funciones
FUNCIONES DISCRETAS DE I/0
Input(pin)
Devuelve el estado '0' o '1' de la patilla indicada en pin. El método de acceso de I/O depende de la última
directiva #USE *_IO utilizada. El valor de retorno es un entero corto.
Ejemplo : if (Input(Pin_B0)==1)
Output (Pin, Value)
Esta función saca el bit dado en value(0 o 1) por la patilla de I/O especificada en pin. El modo de establecer la dirección
del registro, está determinada por la última directiva #USE *_IO.
Ejemplo : output_bit( PIN_B0, 0);
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_C0)
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_D0)
Funciones
FUNCIONES DISCRETAS DE I/0
Port_b_pullups(flag)
Esta función activa/desactiva las resistencias pullups en las entradas del puerto B. Flag puede ser TRUE (activa)
o FALSE (desactiva).
Ejemplo: Port_b_pullups(false)
Set_ tris_puerto(Valor)
Estas funciones permiten escribir directamente los registros tri-estado para la configuración de los puertos (configurar
pines de entrada y salida)
Esto debe usarse con FAST_IO(), 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_A(0xff); puertoAcomo entrada
FUNCIONES DE RETARDO
Delay_cicles(Valor)
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_cicles(100); Cuenta 100 ciclos
Delay_ms(Valor)
Esta función realiza retardos del valor especificado en tiempo. 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.
Delay_us(Valor)
Esta función realiza retardos del valor especificado en tiempo. 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.
FUNCIONES PARA LA MANIPULACIÓN DE BITS
Bit_clear (Var, Bit)
Esta función simplemente borra (pone a '0') el dígito especificado en bit(0-7 ó 0-15) del byte o palabra aportado en var. El
bit menos significativo es el 0.
Ejemplo : int x = 10;
Bit_clear(x,0) ;
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.
Rotate_left(Dirección, 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. Dirección puede ser un identificador de un array o la dirección a un byte o a
una estructura, por ejemplo, &dato. bytes es el número de bytes implicados en la rotación.
Ejemplo : X = 0*50
Rotate_left(&X, 1) ; 0*A0
Rotate_right (Dirección, 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, &dato. bytes es el número de bytes implicados en la rotación.
El CCS acepta el los siguientes tipos de variables
Las constantes se pueden especificar en octal, decimal, hexadecimal
o en binario
CONSTANTES
VARIABLES
La variables se utilizan para nombrar posiciones de memoria RAM.
Se deben de declarar obligatoriamente antes de utilizarlas, para
ello se debe indicar el nombre y el tipo de dato que se utilizará.
Se definen de la siguiente manera.
tipo nombre_variable = valor inicial
Ejemplo:
float voltaje=0;
int8 suma=0;
int contador=10;
VARIABLES globales y locales
Las variables de finidas en un programa pueden ser de tipo LOCAL o GLOBAL . Las variables locales sólo
se utilizan en la función donde se encuentran declaradas; las variables globales se pueden utilizar en
todas las funciones del programa. Ambas deben declararse antes de ser utilizadas y las globales deben
declararse antes de cualquier función y fuera de ellas. Las variable globales son puestas a cero cuando
se inicia la función principal main().
VARIABLES globales y locales
Las variables pueden ser defi nidas con:
AUTO : (usada por defecto, no hace falta que se indique) donde la variable existe mientras la función
esta activa. Estas variables no se inicializan a cero. Su valor se pierde cuando se sale de la función.
STATIC : Una variable local se activa como global, se inicializa a cero y mantiene su valor al entrar y salir
de la función.
EXTERN : Permite el uso de variables en compilaciones múltiples.
Operadores de asignación
Operadores aritméticos
Operadores
relacionales Operadores
lógicos
Operadores
de bit
Funciones
Las funciones son bloques de sentencias; todas las sentencias se deben enmarcar dentro de las funciones. Al
igual que las variables, las funciones deben de fi nirse antes de utilizarse. Una función puede ser invocada
desde una sentencia de otra función. Una función puede devolver un valor a la sentencia que la ha llamado.
El tipo de dato se indica en la de fi nición de la función; en el caso de no indicarse nada se entiende que es un
int8 y en el caso de no devolver un valor se debe especifi car el valor VOID . La función, además de devolver
un valor, puede recibir parámetros o argumentos.
La estructura de una función es:
Manejo de puertos
Los microcontroladores PIC tienen
terminales de entrada/salida divididos en
puertos, que se encuentran nombrados
alfabéticamente A, B, C, D, etc. Cada
puerto puede tener hasta 8 terminales
que, de forma básica, se comportan
como una entrada/ salida digital. Según
las características del PIC , cada puerto
puede tener, además, asignado un
bloque funcional: convertidor AD ,
USART , I2C , etc. Por ejemplo la familia
PIC16F87X, pueden llegar hasta 5
puertos en el PIC16F877 donde se
pueden encontrar bloques de TIMERS ,
CCP , MSSP , USART , PSP y
convertidoresAD.
Manejo de puertos
Considerando a los puertos como entradas/salidas digitales, los puertos se caracterizan
por ser independientes, es decir, se puede programar cada terminal del puerto para que
se comporte como una entrada o una salida digital la habilitación como entrada o salida
se realiza a través del registro TRISx (TRISA: 85h, TRISB: 86h, TRISC: 87h, TRISD: 88h o
TRISE: 89h en el BANCO 1 de la memoria RAM ).
Un valor 0 (cero) en estos registros indica que el terminal correspondiente del puerto es
de salida, mientras que un valor 1(uno) indica que será de entrada.
Manejo de puertos en C compiler
En lenguaje C se pueden gestionar los puertos de dos formas:
•Se declaran los registros TRISX y PORTX definiendo su posición en la memoria
RAM como variables de C.
Utilizando las directivas específicas del compilador ( #USE FAST_IO , #USE
FIXED_IO , #USE STANDARD_IO ).
Manejo de puertos en C compiler
A través de la RAM Se de finen los registros PORTx y TRISx como bytes y se sitúan
en la posición correspondiente de la memoria RAM .
La directiva utilizada de C es #BYTE :
#BYTE variable=constante;
#BYTE TRISA = 0x85 // Variable TRISA en 85h.
#BYTE PORTA = 0x05 // Variable PORTA en 05h.
#BYTE TRISB = 0x86 // Variable TRISB en 86h.
#BYTE PORTB = 0x06 // Variable PORTB en 06h
#BYTE TRISC = 0x87 // Variable TRISC en 87h
#BYTE PORTC = 0x07 // Variable PORTC en 07h.
Manejo de puertos en C compiler
Una vez definidas estas variables se pueden configurar y controlar los puertos a
través de los comandos de asignación.
TRISA = 0xFF; // 8 terminales de entrada
TRISB = 0x00; // 8 terminales de salida
TRISC = 0x0F; // 4 terminales de mayor peso de salida, 4 terminales de
// menor peso de entrada
Escritura en los puertos:
PORTC = 0x0A; // salida del datos 00001010 por el puerto C
Lectura de puertos:
valor = PORTA; // Asigna el dato del puerto A a la variable valor.
Manejo de puertos en C compiler
Manejo de sentencias:
TRISD=0x0F;
if (PORTD & 0x0F) PORTD |= 0xA0; // comprueba los 4 terminales de
// menor peso del puerto D y si son
// 1111 saca por los 4 terminales de
// mayor peso el dato 1010.
Existen unas funciones de C que permiten trabajar bit a bit con los registros o
variables definidas previamente.
Estas funciones son las siguientes:
bit_clear (var,bit); // Pone a 0 el bit especí fi co (0 a 7) de la variable.
bit_set (var , bit); // Pone a 1 el bit especí fi co (0 a 7) de la variable.
bit_test (var , bit); // Muestra el bit especí fi co (0 a 7) de la variable.
swap (var); // Intercambia los 4 bits de mayor peso por los 4);
// menor peso de la variable los 4 de bit_set (PORTC ,
Manejo de puertos
El compilador nos ofrece funciones predefinidas que nos ayudan a trabajar con los puertos
Ejemplos:
output_B(0b11001100);
valor = input_A();
//saca un uno lógico por el pin(b7,b6,b4,b3)
//lee el valor del puerto A y lo almacena en valor
Algunas funciones asociadas
Ejemplos:
output_toggle(pin_b6);
input(pin_c3);
output_low(pin_b0);
//complementa el valor del pin b6
//lee el valor del pin c3
//Pone el pin b0 a un cero logico
Estructuras o declaraciones de control
Las declaraciones son usadas para controlar el proceso
de ejecución del programa.
Las que admite CCS son:
 If-Else
 While
 Do-While
 For
 Switch-Case
 Return
 Break, Continue y Goto
IF-ELSE
Con la ayuda del comando IF-ELSE se pueden tomar decisiones
Primero se evalúa la EXPRESIÓN y si es cierta ( TRUE o 1)
ejecuta la SENTENCIA_1 , en el caso contrario ( FALSE o 0)
ejecuta la SENTENCIA_2 .
Pueden anidarse los IF-ELSE dando lugar a los ELSE-IF ; esto
permite tomar decisiones múltiples. if (expresión_1)
sentencia_1; [else if (expresión_2) sentencia_2;] [else
sentencia_3;]
En este caso las EXPRESIONES se evalúan en orden, si
alguna de ellas es cierta la SENTENCIAasociada a ella se
ejecutará y se termina la función. En caso contrario se ejecuta
la SENTENCIA del ELSE .
En ambos casos si existen varias sentencias para ejecutar se
deben utiliza las llaves
Ejemplos
For Se usa para repetir sentencias su estructura es :
for (inicialización ; condición de fi nalización
; incremento ) {
sentencias;
}
En las expresiones del FOR la inicialización es una variable a la cual se le asigna un
valor inicial con el que controlar el bucle.
La condición de finalización sirve para evaluar ANTES de ejecutar las sentencias si
es cierta o no, en el caso de ser cierta se ejecutan las sentencias y en caso contrario
se sale del FOR .
Por último, la expresión de incremento o decremento modifica la variable de control
DESPUÉS de ejecutar el bucle.
NOTA Se pueden anidar bucles FOR utilizando distintas variables de control.
Ejemplo For
Switch
Switch es un caso particular de una decisión múltiple
switch (expresión)
{
case constante 1:
sentencias;
break;
case constante 2:
sentencias;
break;
...
[default: sentencias;]
}
Evalúa la expresión y en orden a la CONSTANTE adecuada realiza las sentencias asociadas. Si ninguno
de los CASE corresponde a la CONSTANTE se ejecuta DEFAULT (este comando es opcional).
El comando BREAK provoca la salida de SWITCH , de lo contrario se ejecuta el siguiente CASE . NOTA
No pueden existir dos CASE con la misma CONSTANTE
Ejemplo de Switch en diagrama de bloque
While y Do-While
Se utiliza para repetir sentencias.
while (expresión)
{
sentencias;
}
La expresión se evalúa y la sentencia se ejecuta mientras
la expresión es verdadera, cuando es falsa se sale del
WHILE .
Do
{
sentencias;
} while (expresión);
DO-WHILE se diferencia del WHILE y del FOR en la
condición de finalización, la cual se evalúa al final del
bucle, por lo que las sentencias se ejecutan al menos una
vez.
Se debe tener cuidado al usar las estructuras de manera que
no se tenga un BUCLE SIN FIN
Ejemplos de While y Do-While
Return, Break y Goto
Return: se emplea para devolver datos en las funciones.
Break: permite salir de un bucle, se utiliza para While , For , Do y
Switch .
Goto: provoca un salto incondicional.
Comentarios
Los comentarios en el programa facilitan la compresión de las distintas expresiones tanto
para el programador como para quién tiene que interpretar dicho programa.
No afectan a la compilación por lo que pueden ser tan extensos como el programador quiera.
Se pueden colocar en cualquier parte del programa y con dos formatos:
•Utilizando // .Al colocar estos signos se comienza el comentario y finaliza en el final de la
línea. Por ejemplo:
//Comentario que terminará al final de esta línea
•Utilizando /* y */ . Se debe utilizar al inicio y al final de comentario, pero no pueden repetirse
dentro del mismo comentario. Por ejemplo:
/* Este comentario no finaliza al final de esta línea,
finaliza cuando
se cierre el comentario */
Entorno de trabajo CCS Compiler
Barra de comandos
Barra de sub comandos
Zona de código
Pestaña del
programa
Barra de
ventanas
auxiliares
Ejemplo de programa
Ejemplo 1: Se con figuran los terminales RB1 como salida y el RB0 como
entrada (con resistencia de pull-up ). La salida debe tener el mismo valor que la
entrada. Se utiliza un interruptor en la entrada y un led en la salida
Componentes
proteus ISIS:
PIC16F876, RES,
LED-BLUE y SW-
SPST-MOM.
Ejemplo de programa
#include <16F876.h>
#fuses XT,NOWDT
#use delay( clock = 4000000 ) // Reloj de 4 MHz
#BYTE TRISB = 0x86 // TRISB en 86h.
#BYTE PORTB = 0x06 // PORTB en 06h
#BYTE OPTION_REG = 0x81 // OPTION_REG en 81h.
void main()
{
bit_clear(OPTION_REG,7); // Habilitación Pull-up
bit_set(TRISB,0); // B0 como entrada
bit_clear(TRISB,1); // B1 como salida
bit_clear(PORTB,1); // Apaga el LED
while (1)
{
if (bit_test(portb,0) == 1 ) // Si RB0 es 1, apaga el LED
bit_clear(portb,1);
else
bit_set(portb,1); // Si RB0 = 0, enciende el LED
}
}

Más contenido relacionado

Similar a Cap3 programación de microcontroladores en c.pptx

Introduccion a la programacion en c 18
Introduccion a la programacion en c 18Introduccion a la programacion en c 18
Introduccion a la programacion en c 18
fitomaster
 
Lenguajec diapositivas
Lenguajec diapositivasLenguajec diapositivas
Lenguajec diapositivas
tacubomx
 
Introduccion a la programacion en c 1
Introduccion a la programacion en c 1Introduccion a la programacion en c 1
Introduccion a la programacion en c 1
georgemanson69
 
Lenguajec 1
Lenguajec 1Lenguajec 1
Lenguajec 1
joeshego
 
Clase 02 gestion de puertos - directivas
Clase 02   gestion de puertos - directivasClase 02   gestion de puertos - directivas
Clase 02 gestion de puertos - directivas
almidon_pcb
 
Laboratorio # 1 introducción a arduino
Laboratorio # 1   introducción a arduinoLaboratorio # 1   introducción a arduino
Laboratorio # 1 introducción a arduino
CASERA
 
INSTRUCCIONES BÁSICAS PARA C++
INSTRUCCIONES BÁSICAS PARA C++INSTRUCCIONES BÁSICAS PARA C++
INSTRUCCIONES BÁSICAS PARA C++
Idalia Tristan
 
Guia en lenguaje c
Guia en lenguaje c Guia en lenguaje c
Guia en lenguaje c
Lewuin Ocanto
 
introduccion a la programacion de los microcontroladores motorola-freescale
introduccion a la programacion de los microcontroladores motorola-freescaleintroduccion a la programacion de los microcontroladores motorola-freescale
introduccion a la programacion de los microcontroladores motorola-freescale
tecautind
 
INTRODUCCION A LA PROGRAMACION DE LOS MICROCONTROLADORES MOTOROLA-FREESCALE
INTRODUCCION A LA PROGRAMACION DE LOS MICROCONTROLADORES MOTOROLA-FREESCALEINTRODUCCION A LA PROGRAMACION DE LOS MICROCONTROLADORES MOTOROLA-FREESCALE
INTRODUCCION A LA PROGRAMACION DE LOS MICROCONTROLADORES MOTOROLA-FREESCALE
tecautind
 
Indexado con desplazamiento
Indexado con desplazamiento  Indexado con desplazamiento
Indexado con desplazamiento
tecautind
 
Funciones
FuncionesFunciones
Introduccion al assembler
Introduccion al assemblerIntroduccion al assembler
Introduccion al assembler
Romi Walter Miranda
 
Introduccion al assembler[1]
Introduccion al assembler[1]Introduccion al assembler[1]
Introduccion al assembler[1]
Juan Guillermo Escobar Uribe
 
Emsamblador
EmsambladorEmsamblador
Emsamblador
arianny lopez
 
Lenguaje c diapositivas
Lenguaje c diapositivasLenguaje c diapositivas
Lenguaje c diapositivas
starduslex
 
Lenguajes diapositivas
Lenguajes diapositivasLenguajes diapositivas
Lenguajes diapositivas
starduslex
 
Lenguajes diapositivas
Lenguajes diapositivasLenguajes diapositivas
Lenguajes diapositivas
starduslex
 
Estructura programa arduino
Estructura programa arduinoEstructura programa arduino
Estructura programa arduino
recursos educativos
 
Int. programacion
Int. programacionInt. programacion
Int. programacion
Walter Wilfredo
 

Similar a Cap3 programación de microcontroladores en c.pptx (20)

Introduccion a la programacion en c 18
Introduccion a la programacion en c 18Introduccion a la programacion en c 18
Introduccion a la programacion en c 18
 
Lenguajec diapositivas
Lenguajec diapositivasLenguajec diapositivas
Lenguajec diapositivas
 
Introduccion a la programacion en c 1
Introduccion a la programacion en c 1Introduccion a la programacion en c 1
Introduccion a la programacion en c 1
 
Lenguajec 1
Lenguajec 1Lenguajec 1
Lenguajec 1
 
Clase 02 gestion de puertos - directivas
Clase 02   gestion de puertos - directivasClase 02   gestion de puertos - directivas
Clase 02 gestion de puertos - directivas
 
Laboratorio # 1 introducción a arduino
Laboratorio # 1   introducción a arduinoLaboratorio # 1   introducción a arduino
Laboratorio # 1 introducción a arduino
 
INSTRUCCIONES BÁSICAS PARA C++
INSTRUCCIONES BÁSICAS PARA C++INSTRUCCIONES BÁSICAS PARA C++
INSTRUCCIONES BÁSICAS PARA C++
 
Guia en lenguaje c
Guia en lenguaje c Guia en lenguaje c
Guia en lenguaje c
 
introduccion a la programacion de los microcontroladores motorola-freescale
introduccion a la programacion de los microcontroladores motorola-freescaleintroduccion a la programacion de los microcontroladores motorola-freescale
introduccion a la programacion de los microcontroladores motorola-freescale
 
INTRODUCCION A LA PROGRAMACION DE LOS MICROCONTROLADORES MOTOROLA-FREESCALE
INTRODUCCION A LA PROGRAMACION DE LOS MICROCONTROLADORES MOTOROLA-FREESCALEINTRODUCCION A LA PROGRAMACION DE LOS MICROCONTROLADORES MOTOROLA-FREESCALE
INTRODUCCION A LA PROGRAMACION DE LOS MICROCONTROLADORES MOTOROLA-FREESCALE
 
Indexado con desplazamiento
Indexado con desplazamiento  Indexado con desplazamiento
Indexado con desplazamiento
 
Funciones
FuncionesFunciones
Funciones
 
Introduccion al assembler
Introduccion al assemblerIntroduccion al assembler
Introduccion al assembler
 
Introduccion al assembler[1]
Introduccion al assembler[1]Introduccion al assembler[1]
Introduccion al assembler[1]
 
Emsamblador
EmsambladorEmsamblador
Emsamblador
 
Lenguaje c diapositivas
Lenguaje c diapositivasLenguaje c diapositivas
Lenguaje c diapositivas
 
Lenguajes diapositivas
Lenguajes diapositivasLenguajes diapositivas
Lenguajes diapositivas
 
Lenguajes diapositivas
Lenguajes diapositivasLenguajes diapositivas
Lenguajes diapositivas
 
Estructura programa arduino
Estructura programa arduinoEstructura programa arduino
Estructura programa arduino
 
Int. programacion
Int. programacionInt. programacion
Int. programacion
 

Último

S09 PBM-HEMORRAGIAS 2021-I Grabada 1.pptx
S09 PBM-HEMORRAGIAS 2021-I Grabada 1.pptxS09 PBM-HEMORRAGIAS 2021-I Grabada 1.pptx
S09 PBM-HEMORRAGIAS 2021-I Grabada 1.pptx
yamilbailonw
 
DIAPOSITIVA DE LA NORMA ISO 22000 EXPOSICI�N.pptx
DIAPOSITIVA DE LA NORMA ISO 22000 EXPOSICI�N.pptxDIAPOSITIVA DE LA NORMA ISO 22000 EXPOSICI�N.pptx
DIAPOSITIVA DE LA NORMA ISO 22000 EXPOSICI�N.pptx
KeylaArlethTorresOrt
 
Rinitis alérgica-1.pdfuhycrbibxgvyvyjimomom
Rinitis alérgica-1.pdfuhycrbibxgvyvyjimomomRinitis alérgica-1.pdfuhycrbibxgvyvyjimomom
Rinitis alérgica-1.pdfuhycrbibxgvyvyjimomom
DanielaLoaeza5
 
Infografia de operaciones basicas de la construccion.pdf
Infografia de operaciones basicas de la construccion.pdfInfografia de operaciones basicas de la construccion.pdf
Infografia de operaciones basicas de la construccion.pdf
DanielMelndez19
 
exposicion sobre los tipos de cortes de rolas para la produccion de chapas
exposicion sobre los tipos de cortes de rolas para la produccion de chapasexposicion sobre los tipos de cortes de rolas para la produccion de chapas
exposicion sobre los tipos de cortes de rolas para la produccion de chapas
raul958375
 
Proceso de obtenciòn de nitrogeno por el metodo Haber-Bosh
Proceso de obtenciòn de nitrogeno por el metodo Haber-BoshProceso de obtenciòn de nitrogeno por el metodo Haber-Bosh
Proceso de obtenciòn de nitrogeno por el metodo Haber-Bosh
shirllyleytonm
 
Equipo 4. Mezclado de Polímeros quimica de polimeros.pptx
Equipo 4. Mezclado de Polímeros quimica de polimeros.pptxEquipo 4. Mezclado de Polímeros quimica de polimeros.pptx
Equipo 4. Mezclado de Polímeros quimica de polimeros.pptx
angiepalacios6170
 
tipos de energias: la Energía Radiante.pdf
tipos de energias: la Energía Radiante.pdftipos de energias: la Energía Radiante.pdf
tipos de energias: la Energía Radiante.pdf
munozvanessa878
 
Focos SSO Fin de Semana del 31 MAYO A al 02 de JUNIO de 2024.pdf
Focos SSO Fin de Semana del 31 MAYO A  al 02 de JUNIO  de 2024.pdfFocos SSO Fin de Semana del 31 MAYO A  al 02 de JUNIO  de 2024.pdf
Focos SSO Fin de Semana del 31 MAYO A al 02 de JUNIO de 2024.pdf
PatoLokooGuevara
 
OPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTO
OPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTOOPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTO
OPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTO
GERARDO GONZALEZ
 
Sesión 03 universidad cesar vallejo 2024
Sesión 03 universidad cesar vallejo 2024Sesión 03 universidad cesar vallejo 2024
Sesión 03 universidad cesar vallejo 2024
FantasticVideo1
 
METODOLOGIA DE TRAZO Y REPLANTEO EN TOPOGRAFIA
METODOLOGIA DE TRAZO Y REPLANTEO EN TOPOGRAFIAMETODOLOGIA DE TRAZO Y REPLANTEO EN TOPOGRAFIA
METODOLOGIA DE TRAZO Y REPLANTEO EN TOPOGRAFIA
LuisCiriacoMolina
 
380378757-velocidades-maximas-y-minimas-en-los-canales.pdf
380378757-velocidades-maximas-y-minimas-en-los-canales.pdf380378757-velocidades-maximas-y-minimas-en-los-canales.pdf
380378757-velocidades-maximas-y-minimas-en-los-canales.pdf
DiegoAlexanderChecaG
 
diagrama de flujo. en el área de ingeniería
diagrama de flujo. en el área de ingenieríadiagrama de flujo. en el área de ingeniería
diagrama de flujo. en el área de ingeniería
karenperalta62
 
Cálculo del espesor del conducto forzado
Cálculo del espesor del conducto forzadoCálculo del espesor del conducto forzado
Cálculo del espesor del conducto forzado
KristianSaavedra
 
DIAGRAMA DE FLUJO DE ALGORITMO......
DIAGRAMA DE FLUJO   DE   ALGORITMO......DIAGRAMA DE FLUJO   DE   ALGORITMO......
DIAGRAMA DE FLUJO DE ALGORITMO......
taniarivera1015tvr
 
PRES 3. METROLOGÍA DE GASES Y RADIACIONES IONIZANTES.pptx
PRES 3. METROLOGÍA DE GASES Y RADIACIONES IONIZANTES.pptxPRES 3. METROLOGÍA DE GASES Y RADIACIONES IONIZANTES.pptx
PRES 3. METROLOGÍA DE GASES Y RADIACIONES IONIZANTES.pptx
brandonsinael
 
chancadoras.............................
chancadoras.............................chancadoras.............................
chancadoras.............................
ssuser8827cb1
 
Dosificacion de hormigon NCH 170 actualizada
Dosificacion de hormigon NCH 170 actualizadaDosificacion de hormigon NCH 170 actualizada
Dosificacion de hormigon NCH 170 actualizada
pipex55
 
INGLES_LISTA_DE_VOCABULARIO una lista completa
INGLES_LISTA_DE_VOCABULARIO una lista completaINGLES_LISTA_DE_VOCABULARIO una lista completa
INGLES_LISTA_DE_VOCABULARIO una lista completa
JaimmsArthur
 

Último (20)

S09 PBM-HEMORRAGIAS 2021-I Grabada 1.pptx
S09 PBM-HEMORRAGIAS 2021-I Grabada 1.pptxS09 PBM-HEMORRAGIAS 2021-I Grabada 1.pptx
S09 PBM-HEMORRAGIAS 2021-I Grabada 1.pptx
 
DIAPOSITIVA DE LA NORMA ISO 22000 EXPOSICI�N.pptx
DIAPOSITIVA DE LA NORMA ISO 22000 EXPOSICI�N.pptxDIAPOSITIVA DE LA NORMA ISO 22000 EXPOSICI�N.pptx
DIAPOSITIVA DE LA NORMA ISO 22000 EXPOSICI�N.pptx
 
Rinitis alérgica-1.pdfuhycrbibxgvyvyjimomom
Rinitis alérgica-1.pdfuhycrbibxgvyvyjimomomRinitis alérgica-1.pdfuhycrbibxgvyvyjimomom
Rinitis alérgica-1.pdfuhycrbibxgvyvyjimomom
 
Infografia de operaciones basicas de la construccion.pdf
Infografia de operaciones basicas de la construccion.pdfInfografia de operaciones basicas de la construccion.pdf
Infografia de operaciones basicas de la construccion.pdf
 
exposicion sobre los tipos de cortes de rolas para la produccion de chapas
exposicion sobre los tipos de cortes de rolas para la produccion de chapasexposicion sobre los tipos de cortes de rolas para la produccion de chapas
exposicion sobre los tipos de cortes de rolas para la produccion de chapas
 
Proceso de obtenciòn de nitrogeno por el metodo Haber-Bosh
Proceso de obtenciòn de nitrogeno por el metodo Haber-BoshProceso de obtenciòn de nitrogeno por el metodo Haber-Bosh
Proceso de obtenciòn de nitrogeno por el metodo Haber-Bosh
 
Equipo 4. Mezclado de Polímeros quimica de polimeros.pptx
Equipo 4. Mezclado de Polímeros quimica de polimeros.pptxEquipo 4. Mezclado de Polímeros quimica de polimeros.pptx
Equipo 4. Mezclado de Polímeros quimica de polimeros.pptx
 
tipos de energias: la Energía Radiante.pdf
tipos de energias: la Energía Radiante.pdftipos de energias: la Energía Radiante.pdf
tipos de energias: la Energía Radiante.pdf
 
Focos SSO Fin de Semana del 31 MAYO A al 02 de JUNIO de 2024.pdf
Focos SSO Fin de Semana del 31 MAYO A  al 02 de JUNIO  de 2024.pdfFocos SSO Fin de Semana del 31 MAYO A  al 02 de JUNIO  de 2024.pdf
Focos SSO Fin de Semana del 31 MAYO A al 02 de JUNIO de 2024.pdf
 
OPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTO
OPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTOOPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTO
OPERACIONES BÁSICAS (INFOGRAFIA) DOCUMENTO
 
Sesión 03 universidad cesar vallejo 2024
Sesión 03 universidad cesar vallejo 2024Sesión 03 universidad cesar vallejo 2024
Sesión 03 universidad cesar vallejo 2024
 
METODOLOGIA DE TRAZO Y REPLANTEO EN TOPOGRAFIA
METODOLOGIA DE TRAZO Y REPLANTEO EN TOPOGRAFIAMETODOLOGIA DE TRAZO Y REPLANTEO EN TOPOGRAFIA
METODOLOGIA DE TRAZO Y REPLANTEO EN TOPOGRAFIA
 
380378757-velocidades-maximas-y-minimas-en-los-canales.pdf
380378757-velocidades-maximas-y-minimas-en-los-canales.pdf380378757-velocidades-maximas-y-minimas-en-los-canales.pdf
380378757-velocidades-maximas-y-minimas-en-los-canales.pdf
 
diagrama de flujo. en el área de ingeniería
diagrama de flujo. en el área de ingenieríadiagrama de flujo. en el área de ingeniería
diagrama de flujo. en el área de ingeniería
 
Cálculo del espesor del conducto forzado
Cálculo del espesor del conducto forzadoCálculo del espesor del conducto forzado
Cálculo del espesor del conducto forzado
 
DIAGRAMA DE FLUJO DE ALGORITMO......
DIAGRAMA DE FLUJO   DE   ALGORITMO......DIAGRAMA DE FLUJO   DE   ALGORITMO......
DIAGRAMA DE FLUJO DE ALGORITMO......
 
PRES 3. METROLOGÍA DE GASES Y RADIACIONES IONIZANTES.pptx
PRES 3. METROLOGÍA DE GASES Y RADIACIONES IONIZANTES.pptxPRES 3. METROLOGÍA DE GASES Y RADIACIONES IONIZANTES.pptx
PRES 3. METROLOGÍA DE GASES Y RADIACIONES IONIZANTES.pptx
 
chancadoras.............................
chancadoras.............................chancadoras.............................
chancadoras.............................
 
Dosificacion de hormigon NCH 170 actualizada
Dosificacion de hormigon NCH 170 actualizadaDosificacion de hormigon NCH 170 actualizada
Dosificacion de hormigon NCH 170 actualizada
 
INGLES_LISTA_DE_VOCABULARIO una lista completa
INGLES_LISTA_DE_VOCABULARIO una lista completaINGLES_LISTA_DE_VOCABULARIO una lista completa
INGLES_LISTA_DE_VOCABULARIO una lista completa
 

Cap3 programación de microcontroladores en c.pptx

  • 1. Microcontroladores Cap. 3.- PROGRAMACION DEL MICROCONTROLADOR EN LENGUAJE C CCS Compiler
  • 2. CCS Compiler El CCS Compiler es una herramienta útil para programar microcontroladores PIC, en la cual están incluidas muchas librerías para el manejo de puertos, protocolos de comunicación y entre otros. Es un compilador de lenguaje de alto nivel que permite realizar las mismas tareas en un menor tiempo de desarrollo y con mucha mayor facilidad en la programación en comparación al lenguaje ensamblador. Básicamente el compilador CCS maneja la misma estructura de programación que el lenguaje de programación C.
  • 3. Traduce el código C del archivo fuente (.c) a lenguaje de máquina para programar microcontroladores PIC (.HEX). Se incluye Drivers o librerías de código fuente para manejo de pantallas LCD, teclados, sensores, protocolos de comunicación, memorias, conversión analógico a digital, etc. Se integra al módulo de desarrollo IDE del MPLAB (software de desarrollo de Microchip) y otros simuladores y editores para la depuración del código fuente. Funciones para el manejo de interrupciones CARACTERÍSTICAS DE COMPILADOR
  • 4. Para escribir un programa en C con el CCS C se deben tener en cuenta una serie de elementos básicos de su estructura DIRECTIVAS DE PREPROCESADO : controlan la conversión del programa a código máquina por parte del compilador. PROGRAMAS o FUNCIONES : conjunto de instrucciones. Puede haber uno o varios; en cualquier caso siempre debe haber uno definido como principal mediante la inclusión de la llamada main() . INSTRUCCIONES : indican como debe comportar el PIC en todo momento. COMENTARIOS : permiten describir lo que significa cada línea del programa. Estructura de un programa
  • 5. Directivas de preprocesado #INCLUDE <NOMBRE_DEL_FICHERO> Esta directiva hace que el compilador incluya en el fichero fuente el texto que contiene el archivo indicado. Ejemplo: #include <16F877.H> # FUSE 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.Algunas de las opciones más usadas son: LP, XT, HS, RC (Tipo de oscilador) WDT, NOWDT (Activación del Watch Dog Timer) PROTECT, NOPROTECT (Protección del código) PUT, NOPUT (Temporizador de arranque) BROWNOUT, NOBROWNOUT (Detección de caídas de tensión de la fuente de alimentación) Ejemplo #fuse HS, WDT.
  • 6. #INT_XX 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 más comunes son las siguientes: #INT_EXT: Interrupción externa #INT_TRCC: Desbordamiento del TIMER0 (RTCC) #INT_RB: Cambio en los pines B4, B5, B6, B7 #INT_AD: Conversor A/D #INT_TIMER1: Desbordamiento del TIMER1. #INT_TIMER2: Desbordamiento del TIMER2 #INT_CP1: Modo captura de datos por CCP1 #INT_CCP2: Modo captura por CCP2 Directivas de preprocesado
  • 7. #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(). Ejemplo: #USE DELAY (CLOCK = 4000000) #USE STANDARD_io (Puerto) Esta directiva afecta al código que el compilador generará para las instrucciones de entrada y salida. Este método rápido de hacer I/O ocasiona que el compilador realice I/O sin programar el registro de dirección. El puerto puede ser A-G. Ejemplo: #USE STANDARD_io(B) Directivas de preprocesado
  • 8. #USE RS232 (BAUD = baudios, XMIT = pin, RCV= pin) Esta directiva le dice al compilador la velocidad en bits por segundo y los pines utilizados para la comunicación 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. Directivas de preprocesado
  • 9. Funciones FUNCIONES DISCRETAS DE I/0 Input(pin) Devuelve el estado '0' o '1' de la patilla indicada en pin. El método de acceso de I/O depende de la última directiva #USE *_IO utilizada. El valor de retorno es un entero corto. Ejemplo : if (Input(Pin_B0)==1) Output (Pin, Value) Esta función saca el bit dado en value(0 o 1) por la patilla de I/O especificada en pin. El modo de establecer la dirección del registro, está determinada por la última directiva #USE *_IO. Ejemplo : output_bit( PIN_B0, 0); 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_C0) 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_D0)
  • 10. Funciones FUNCIONES DISCRETAS DE I/0 Port_b_pullups(flag) Esta función activa/desactiva las resistencias pullups en las entradas del puerto B. Flag puede ser TRUE (activa) o FALSE (desactiva). Ejemplo: Port_b_pullups(false) Set_ tris_puerto(Valor) Estas funciones permiten escribir directamente los registros tri-estado para la configuración de los puertos (configurar pines de entrada y salida) Esto debe usarse con FAST_IO(), 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_A(0xff); puertoAcomo entrada
  • 11. FUNCIONES DE RETARDO Delay_cicles(Valor) 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_cicles(100); Cuenta 100 ciclos Delay_ms(Valor) Esta función realiza retardos del valor especificado en tiempo. 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. Delay_us(Valor) Esta función realiza retardos del valor especificado en tiempo. 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.
  • 12. FUNCIONES PARA LA MANIPULACIÓN DE BITS Bit_clear (Var, Bit) Esta función simplemente borra (pone a '0') el dígito especificado en bit(0-7 ó 0-15) del byte o palabra aportado en var. El bit menos significativo es el 0. Ejemplo : int x = 10; Bit_clear(x,0) ; 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. Rotate_left(Dirección, 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. Dirección puede ser un identificador de un array o la dirección a un byte o a una estructura, por ejemplo, &dato. bytes es el número de bytes implicados en la rotación. Ejemplo : X = 0*50 Rotate_left(&X, 1) ; 0*A0 Rotate_right (Dirección, 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, &dato. bytes es el número de bytes implicados en la rotación.
  • 13. El CCS acepta el los siguientes tipos de variables
  • 14. Las constantes se pueden especificar en octal, decimal, hexadecimal o en binario CONSTANTES
  • 15. VARIABLES La variables se utilizan para nombrar posiciones de memoria RAM. Se deben de declarar obligatoriamente antes de utilizarlas, para ello se debe indicar el nombre y el tipo de dato que se utilizará. Se definen de la siguiente manera. tipo nombre_variable = valor inicial Ejemplo: float voltaje=0; int8 suma=0; int contador=10;
  • 16. VARIABLES globales y locales Las variables de finidas en un programa pueden ser de tipo LOCAL o GLOBAL . Las variables locales sólo se utilizan en la función donde se encuentran declaradas; las variables globales se pueden utilizar en todas las funciones del programa. Ambas deben declararse antes de ser utilizadas y las globales deben declararse antes de cualquier función y fuera de ellas. Las variable globales son puestas a cero cuando se inicia la función principal main().
  • 17. VARIABLES globales y locales Las variables pueden ser defi nidas con: AUTO : (usada por defecto, no hace falta que se indique) donde la variable existe mientras la función esta activa. Estas variables no se inicializan a cero. Su valor se pierde cuando se sale de la función. STATIC : Una variable local se activa como global, se inicializa a cero y mantiene su valor al entrar y salir de la función. EXTERN : Permite el uso de variables en compilaciones múltiples.
  • 21. Funciones Las funciones son bloques de sentencias; todas las sentencias se deben enmarcar dentro de las funciones. Al igual que las variables, las funciones deben de fi nirse antes de utilizarse. Una función puede ser invocada desde una sentencia de otra función. Una función puede devolver un valor a la sentencia que la ha llamado. El tipo de dato se indica en la de fi nición de la función; en el caso de no indicarse nada se entiende que es un int8 y en el caso de no devolver un valor se debe especifi car el valor VOID . La función, además de devolver un valor, puede recibir parámetros o argumentos. La estructura de una función es:
  • 22. Manejo de puertos Los microcontroladores PIC tienen terminales de entrada/salida divididos en puertos, que se encuentran nombrados alfabéticamente A, B, C, D, etc. Cada puerto puede tener hasta 8 terminales que, de forma básica, se comportan como una entrada/ salida digital. Según las características del PIC , cada puerto puede tener, además, asignado un bloque funcional: convertidor AD , USART , I2C , etc. Por ejemplo la familia PIC16F87X, pueden llegar hasta 5 puertos en el PIC16F877 donde se pueden encontrar bloques de TIMERS , CCP , MSSP , USART , PSP y convertidoresAD.
  • 23. Manejo de puertos Considerando a los puertos como entradas/salidas digitales, los puertos se caracterizan por ser independientes, es decir, se puede programar cada terminal del puerto para que se comporte como una entrada o una salida digital la habilitación como entrada o salida se realiza a través del registro TRISx (TRISA: 85h, TRISB: 86h, TRISC: 87h, TRISD: 88h o TRISE: 89h en el BANCO 1 de la memoria RAM ). Un valor 0 (cero) en estos registros indica que el terminal correspondiente del puerto es de salida, mientras que un valor 1(uno) indica que será de entrada.
  • 24. Manejo de puertos en C compiler En lenguaje C se pueden gestionar los puertos de dos formas: •Se declaran los registros TRISX y PORTX definiendo su posición en la memoria RAM como variables de C. Utilizando las directivas específicas del compilador ( #USE FAST_IO , #USE FIXED_IO , #USE STANDARD_IO ).
  • 25. Manejo de puertos en C compiler A través de la RAM Se de finen los registros PORTx y TRISx como bytes y se sitúan en la posición correspondiente de la memoria RAM . La directiva utilizada de C es #BYTE : #BYTE variable=constante; #BYTE TRISA = 0x85 // Variable TRISA en 85h. #BYTE PORTA = 0x05 // Variable PORTA en 05h. #BYTE TRISB = 0x86 // Variable TRISB en 86h. #BYTE PORTB = 0x06 // Variable PORTB en 06h #BYTE TRISC = 0x87 // Variable TRISC en 87h #BYTE PORTC = 0x07 // Variable PORTC en 07h.
  • 26. Manejo de puertos en C compiler Una vez definidas estas variables se pueden configurar y controlar los puertos a través de los comandos de asignación. TRISA = 0xFF; // 8 terminales de entrada TRISB = 0x00; // 8 terminales de salida TRISC = 0x0F; // 4 terminales de mayor peso de salida, 4 terminales de // menor peso de entrada Escritura en los puertos: PORTC = 0x0A; // salida del datos 00001010 por el puerto C Lectura de puertos: valor = PORTA; // Asigna el dato del puerto A a la variable valor.
  • 27. Manejo de puertos en C compiler Manejo de sentencias: TRISD=0x0F; if (PORTD & 0x0F) PORTD |= 0xA0; // comprueba los 4 terminales de // menor peso del puerto D y si son // 1111 saca por los 4 terminales de // mayor peso el dato 1010. Existen unas funciones de C que permiten trabajar bit a bit con los registros o variables definidas previamente. Estas funciones son las siguientes: bit_clear (var,bit); // Pone a 0 el bit especí fi co (0 a 7) de la variable. bit_set (var , bit); // Pone a 1 el bit especí fi co (0 a 7) de la variable. bit_test (var , bit); // Muestra el bit especí fi co (0 a 7) de la variable. swap (var); // Intercambia los 4 bits de mayor peso por los 4); // menor peso de la variable los 4 de bit_set (PORTC ,
  • 28. Manejo de puertos El compilador nos ofrece funciones predefinidas que nos ayudan a trabajar con los puertos Ejemplos: output_B(0b11001100); valor = input_A(); //saca un uno lógico por el pin(b7,b6,b4,b3) //lee el valor del puerto A y lo almacena en valor
  • 29. Algunas funciones asociadas Ejemplos: output_toggle(pin_b6); input(pin_c3); output_low(pin_b0); //complementa el valor del pin b6 //lee el valor del pin c3 //Pone el pin b0 a un cero logico
  • 30. Estructuras o declaraciones de control Las declaraciones son usadas para controlar el proceso de ejecución del programa. Las que admite CCS son:  If-Else  While  Do-While  For  Switch-Case  Return  Break, Continue y Goto
  • 31. IF-ELSE Con la ayuda del comando IF-ELSE se pueden tomar decisiones Primero se evalúa la EXPRESIÓN y si es cierta ( TRUE o 1) ejecuta la SENTENCIA_1 , en el caso contrario ( FALSE o 0) ejecuta la SENTENCIA_2 . Pueden anidarse los IF-ELSE dando lugar a los ELSE-IF ; esto permite tomar decisiones múltiples. if (expresión_1) sentencia_1; [else if (expresión_2) sentencia_2;] [else sentencia_3;] En este caso las EXPRESIONES se evalúan en orden, si alguna de ellas es cierta la SENTENCIAasociada a ella se ejecutará y se termina la función. En caso contrario se ejecuta la SENTENCIA del ELSE . En ambos casos si existen varias sentencias para ejecutar se deben utiliza las llaves
  • 33. For Se usa para repetir sentencias su estructura es : for (inicialización ; condición de fi nalización ; incremento ) { sentencias; } En las expresiones del FOR la inicialización es una variable a la cual se le asigna un valor inicial con el que controlar el bucle. La condición de finalización sirve para evaluar ANTES de ejecutar las sentencias si es cierta o no, en el caso de ser cierta se ejecutan las sentencias y en caso contrario se sale del FOR . Por último, la expresión de incremento o decremento modifica la variable de control DESPUÉS de ejecutar el bucle. NOTA Se pueden anidar bucles FOR utilizando distintas variables de control.
  • 35. Switch Switch es un caso particular de una decisión múltiple switch (expresión) { case constante 1: sentencias; break; case constante 2: sentencias; break; ... [default: sentencias;] } Evalúa la expresión y en orden a la CONSTANTE adecuada realiza las sentencias asociadas. Si ninguno de los CASE corresponde a la CONSTANTE se ejecuta DEFAULT (este comando es opcional). El comando BREAK provoca la salida de SWITCH , de lo contrario se ejecuta el siguiente CASE . NOTA No pueden existir dos CASE con la misma CONSTANTE
  • 36. Ejemplo de Switch en diagrama de bloque
  • 37. While y Do-While Se utiliza para repetir sentencias. while (expresión) { sentencias; } La expresión se evalúa y la sentencia se ejecuta mientras la expresión es verdadera, cuando es falsa se sale del WHILE . Do { sentencias; } while (expresión); DO-WHILE se diferencia del WHILE y del FOR en la condición de finalización, la cual se evalúa al final del bucle, por lo que las sentencias se ejecutan al menos una vez. Se debe tener cuidado al usar las estructuras de manera que no se tenga un BUCLE SIN FIN
  • 38. Ejemplos de While y Do-While
  • 39. Return, Break y Goto Return: se emplea para devolver datos en las funciones. Break: permite salir de un bucle, se utiliza para While , For , Do y Switch . Goto: provoca un salto incondicional.
  • 40. Comentarios Los comentarios en el programa facilitan la compresión de las distintas expresiones tanto para el programador como para quién tiene que interpretar dicho programa. No afectan a la compilación por lo que pueden ser tan extensos como el programador quiera. Se pueden colocar en cualquier parte del programa y con dos formatos: •Utilizando // .Al colocar estos signos se comienza el comentario y finaliza en el final de la línea. Por ejemplo: //Comentario que terminará al final de esta línea •Utilizando /* y */ . Se debe utilizar al inicio y al final de comentario, pero no pueden repetirse dentro del mismo comentario. Por ejemplo: /* Este comentario no finaliza al final de esta línea, finaliza cuando se cierre el comentario */
  • 41. Entorno de trabajo CCS Compiler Barra de comandos Barra de sub comandos Zona de código Pestaña del programa Barra de ventanas auxiliares
  • 42. Ejemplo de programa Ejemplo 1: Se con figuran los terminales RB1 como salida y el RB0 como entrada (con resistencia de pull-up ). La salida debe tener el mismo valor que la entrada. Se utiliza un interruptor en la entrada y un led en la salida Componentes proteus ISIS: PIC16F876, RES, LED-BLUE y SW- SPST-MOM.
  • 43. Ejemplo de programa #include <16F876.h> #fuses XT,NOWDT #use delay( clock = 4000000 ) // Reloj de 4 MHz #BYTE TRISB = 0x86 // TRISB en 86h. #BYTE PORTB = 0x06 // PORTB en 06h #BYTE OPTION_REG = 0x81 // OPTION_REG en 81h. void main() { bit_clear(OPTION_REG,7); // Habilitación Pull-up bit_set(TRISB,0); // B0 como entrada bit_clear(TRISB,1); // B1 como salida bit_clear(PORTB,1); // Apaga el LED while (1) { if (bit_test(portb,0) == 1 ) // Si RB0 es 1, apaga el LED bit_clear(portb,1); else bit_set(portb,1); // Si RB0 = 0, enciende el LED } }