56
MICROCONTROLADORES II (FAMILIA PIC16F87X) LENGUAJE C PARA PICS PROF. LUIS ZURITA IUT Cumaná

MICROCONTROLADORES II EN C. TEMA 1

Embed Size (px)

Citation preview

Page 1: MICROCONTROLADORES II EN C. TEMA 1

MICROCONTROLADORES II(FAMILIA PIC16F87X)

LENGUAJE C PARA PICS

PROF. LUIS ZURITA

IUT Cumaná

Page 2: MICROCONTROLADORES II EN C. TEMA 1

CARACTERÍSTICAS

• Velocidad de operación: hasta 20 MHz de reloj.

• 8K x 14 bits por palabra de memoria de programa FLASH.

• 368 x 8 bytes de memoria de datos (RAM)

• 256 x 8 bytes de memoria de datos EEPROM.

• 14 fuentes de interrupciones.

• Memoria de pila (stack) de 8 niveles de profundidad.

• Protecciones:

– Power-on Reset (POR)

– Power-up Timer (PWRT)

– Oscillator Start-up Timer (OST)

– Watchdog Timer (WDT) independiente del cristal.

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 3: MICROCONTROLADORES II EN C. TEMA 1

PUERTOS DE ENTRADA Y SALIDA

• PORTA ( RA5, RA4, RA3, RA2, RA1, RA0 )

• PORTB ( RB7, RB6, RB5, RB4, RB3, RB2, RB1, RB0 )

• PORTC ( RC7, RC6, RC5, RC4, RC3, RC2, RC1, RC0 )

• PORTD ( RD7, RD6, RD5, RD4, RD3, RD2, RD1, RD0 )

• PORTE ( RE2, RE1, RE0 )

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 4: MICROCONTROLADORES II EN C. TEMA 1

CARACTERÍSTICAS (PERIFÉRICOS)

• Timer 0: timer/counter de 8 bits con un pre-escalador de 8 valores.

• Timer 1: 16-bit timer/counter con pre-escalador

• Timer 2: 8-bit timer/counter con registro de estado de 8-bit, pre-escalador y post-escalador

• Dos módulos de Captura, Comparación y PWM (Modulación por anchura de pulso)– Capture es de 16-bit, max. resolución es 12.5 ns

– Compare es de 16-bit, max. resolución es 200 ns

– PWM max. resolución de 10-bit

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 5: MICROCONTROLADORES II EN C. TEMA 1

CARACTERÍSTICAS (PERIFÉRICOS 2)

• Convertidor analógico a digital de 10-bit multi-canal

• Puerto serial síncrono (SSP) con SPI. (modo

maestro) e I2C (maestro/esclavo)

• Transmisor-Receptor síncrono-asíncrono universal (USART/SCI) con 9-bit

• Puerto paralelo esclavo (PSP) con 8-bits de ancho, con terminales de control RD, WR y CS

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 6: MICROCONTROLADORES II EN C. TEMA 1

ARQUITECTURA INTERNA

• Arquitectura HARVARD.

• Buses separados (datos e instrucciones).

• Memoria de programa : 14 bits.

• Memoria de datos: 8 bits.

• Recursos mapeados en memoria de datos.

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 7: MICROCONTROLADORES II EN C. TEMA 1

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 8: MICROCONTROLADORES II EN C. TEMA 1

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 9: MICROCONTROLADORES II EN C. TEMA 1

FUNCIONES PORTA

Terminal Funciones

RA0 Ent. Digital Sal. Digital Ent. Analógica

RA1 Ent. Digital Sal. Digital Ent. Analógica

RA2 Ent. Digital Sal. Digital Ent. Analógica VREF -

RA3 Ent. Digital Sal. Digital Ent. Analógica VREF +

RA4 Ent. Digital Sal. Digital Ent. contador 1

RA5 Ent. Digital Sal. Digital Ent. Analógica

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 10: MICROCONTROLADORES II EN C. TEMA 1

FUNCIONES PORTB

Terminal Funciones

RB0 Ent. Digital Sal. Digital Ent. Interrupción 0

RB1 Ent. Digital Sal. Digital

RB2 Ent. Digital Sal. Digital

RB3 Ent. Digital Sal. Digital PGM ( función LVP )

RB4 Ent. Digital Sal. Digital

RB5 Ent. Digital Sal. Digital

RB6 Ent. Digital Sal. Digital PGC ( función LVP )

RB7 Ent. Digital Sal. Digital PGD ( función LVP )

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 11: MICROCONTROLADORES II EN C. TEMA 1

FUNCIONES PORTC

Terminal Funciones

RC0 Ent. Digital Sal. Digital Sal. Osc timer 1 Ent. Contador 1

RC1 Ent. Digital Sal. Digital Ent. Osc Timer 1 Captura/Comp/PWM 1

RC2 Ent. Digital Sal. Digital Captura/Comp/PWM 2

RC3 Ent. Digital Sal. Digital Reloj sincrono SPI Reloj síncrono I2C

RC4 Ent. Digital Sal. Digital Datos entrada SPI Datos I2C

RC5 Ent. Digital Sal. Digital Datos salida SPI

RC6 Ent. Digital Sal. Digital Transmisión USART

RC7 Ent. Digital Sal. Digital Recepción USART

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 12: MICROCONTROLADORES II EN C. TEMA 1

FUNCIONES PORTD

Terminal Funciones

RD0 Ent. Digital Sal. Digital Bit 0 puerto paralelo esclavo

RD1 Ent. Digital Sal. Digital Bit 1 puerto paralelo esclavo

RD2 Ent. Digital Sal. Digital Bit 2 puerto paralelo esclavo

RD3 Ent. Digital Sal. Digital Bit 3 puerto paralelo esclavo

RD4 Ent. Digital Sal. Digital Bit 4 puerto paralelo esclavo

RD5 Ent. Digital Sal. Digital Bit 5 puerto paralelo esclavo

RD6 Ent. Digital Sal. Digital Bit 6 puerto paralelo esclavo

RD7 Ent. Digital Sal. Digital Bit 7 puerto paralelo esclavo

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 13: MICROCONTROLADORES II EN C. TEMA 1

FUNCIONES PORTE

Terminal Funciones

RE0 Ent. Digital Sal. Digital Ent. Analógica Lectura PSP

RE1 Ent. Digital Sal. Digital Ent. Analógica Escritura PSP

RE2 Ent. Digital Sal. Digital Ent. Analógica Habilitación PSP

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 14: MICROCONTROLADORES II EN C. TEMA 1

LENGUAJE C. TIPOS DE DATOS.

El compilador CCS acepta los siguientes tipos de variables:

Especificación Significado Tamaño Rango

char carácter 8 bits 0 a 255 (sin signo)

Int entero 8 bits 0 a 255 (sin signo)

float Coma flotante 32 bits 6 bits de precisión

double Float doble precisión

No soportado No para PCM

void Sin valor nulo Ninguno

int1 Entero de 1 bit 1 bit 0 a 1

int8 Entero de 8 bits 8 bits 0 a 255 (sin signo)

int16 Entero de 16 bits 16 bits 0 a 65535

int32 Entero de 32 bits 32 bits 0 a (232-1)

Short Entero de 1 bit 1 bit 0 a 1

long Entero de 16 bits 16 bits 0 a 65535 (sin signo)

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 15: MICROCONTROLADORES II EN C. TEMA 1

LENGUAJE C. TIPOS DE DATOSTodos los tipos de datos son por defecto sin signo (unsigned)

salvo los de tipo float.

Para almacenar datos con signo, hay que introducir elmodificador signed delante del tipo. El efecto que se consigue es elrecogido en la siguiente tabla.

Los números negativos se codifican en complemento a 2.

Cuando se opera con distintos grupos de datos en una mismaexpresión, se aplican una serie de reglas para resolver lasdiferencias.

En general se produce una “promoción” hacia los tipos de datosde mayor longitud presentes en la expresión.

Especificación Significado Tamaño Rango

Signed char caractér con signo

8 bits -128 a 128

Signed int Entero con signo 8 bits -128 a 128

Signed long Coma flotante 16 bits -32768 a 32768

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 16: MICROCONTROLADORES II EN C. TEMA 1

LENGUAJE C. CONSTANTES

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 17: MICROCONTROLADORES II EN C. TEMA 1

OPERADORES ARITMÉTICOS

OPERADORES RELACIONALES

!=

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 18: MICROCONTROLADORES II EN C. TEMA 1

OPERADORES LÓGICOS

OPERADORES A NIVEL DE BITS

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 19: MICROCONTROLADORES II EN C. TEMA 1

OPERADORES DE INCREMENTO Y DECREMENTO

OPERADORES DE CORRIMIENTO

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 20: MICROCONTROLADORES II EN C. TEMA 1

VARIABLES• Las variables se utilizan para nombrar posiciones de memoria

RAM; se deben declarar, obligatoriamente, antes deutilizarlas; para ello se debe indicar el nombre y el tipo dedato que se manejará. Se definen de la siguiente forma:

• TIPO NOMBRE_VARIABLE[=VALOR INICIAL]– TIPO hace referencia a cualquiera de los tipos de datos

– NOMBRE_VARIABLE puede ser cualquiera y el valor inicial es opcional.

Ejemplos:

byte k = 5;

byte const SEMANAS = 52;

float temp_limit=500.0;

char k, kant=‘0’;

int x,y,z;

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 21: MICROCONTROLADORES II EN C. TEMA 1

VARIABLES

• Las variables pueden ser de tipo LOCAL o GLOBAL.

• Las variables locales sólo se utilizan en la funcióndonde se encuentran declaradas; las variablesglobales se pueden utilizar en todas las funciones delprograma. Ambas deben declararse antes de serutilizadas y las globales deben declararse antes decualquier función y fuera de ellas. Las variablesglobales son puestas a cero cuando se inicia lafunción principal main().

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 22: MICROCONTROLADORES II EN C. TEMA 1

EJEMPLO DE VARIABLES LOCALES Y GLOBALES

int16 counter; //Variable globalVoid FUNCION ( ){

int dato1, dato2=34; //Variables locales}void main(){

int8 suma; //Variable local}

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 23: MICROCONTROLADORES II EN C. TEMA 1

FUNCIONESLas funciones son los bloques constructivosfundamentales en C.Todas las sentencias deben encontrarse dentro defunciones.Las funciones deben ser definidas antes de ser utilizadas.Formato general de definición de una función:

Tipo_dato nombre_función (tipo param1, tipo param2, …){

cuerpo de la función (sentencias);}

El tipo de dato devuelto se indica mediante tipo_dato. Sino se indica nada, se entiende que devuelve un entero. Sino devuelve nada debe incluirse una especificación tipovoid.

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 24: MICROCONTROLADORES II EN C. TEMA 1

La manera que tiene una función para devolver unvalor es mediante la sentencia return:

return (expresión); ó return expresión;

La expresión debe proporcionar el mismo tipo dedato que el especificado en la función. Si no debedevolver nada, se finaliza con:

return;

Cuando una función se encuentra con una sentenciareturn se vuelve a la rutina de llamada inmediatamente ylas sentencias posteriores a return no se ejecutan.

Además de con las sentencia return, las funcionesterminan su ejecución y vuelven al lugar desde donde seles llamó cuando alcanzan la llave de cierre de función }tras ejecutar la última sentencia de la misma.

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 25: MICROCONTROLADORES II EN C. TEMA 1

Además de devolver valores, una función también puederecibir parámetros (denominados argumentos) según se indicóen su definición.Por ejemplo:

int suma(int a, int b){

return(a+b);}main(){

int c;c= suma(10 , 23);

}Los argumentos se pueden pasar a las funciones por valor o

por referencia.La llamada por valor copia el argumento de llamada en el

parámetro formal de la función y no modifica su valor en lafunción de partida.

Parámetros formales

Argumentos de llamada

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 26: MICROCONTROLADORES II EN C. TEMA 1

DECLARACIONES DE CONTROL

If – else:

if (expresión)

sentencia1;

else

sentencia2;

If – else:

if (expresión) {

sentencia1;}

else {

sentencia2;}

If-elseCuando la expresión evaluada es verdadera, Las

instrucciones de la sentencia 1 son ejecutadas. Si la expresión esfalsa, las instrucciones de la sentencia 2 son ejecutadas. Laexpresión debe ser evaluada a un valor entero. Los paréntesisque encierra la expresión son obligatorios.La palabra especial “else sentencia 2” es opcional.

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 27: MICROCONTROLADORES II EN C. TEMA 1

Sentencia if.Se ejecuta una sentencia o bloque de código si la expresión queacompaña al if tiene un valor distinto a cero (verdadero). Si es cero(falso) continúa sin ejecutar la sentencia o bloque de sentencias.if (expresión) ó if (expresión=

sentencia; {sentencia 1;sentencia 2;…}

Sentencia if-elseSe evalúa una expresión y, si es cierta se ejecuta el primer bloquede código o sentencia 1. Si es falsa, se ejecuta el segundo.if (expresión)

sentencia 1;else

sentencia 2;Abreviatura: (expresión)?(sentencia 1): (sentencia 2);

NOTA: Se pueden combinar variosif-else para establecer múltiplescaminos de decisión

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 28: MICROCONTROLADORES II EN C. TEMA 1

A=0? C=5

B=10

If (A==0) B=10;Else C=5;

If (A!=1) B=10;Else C=5;

NO

SI

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 29: MICROCONTROLADORES II EN C. TEMA 1

A>20? B=15

B=5

If (A>10){IF(A>20) B=5;Else B=15;}

NO

SI

A>10?

SI

NO

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 30: MICROCONTROLADORES II EN C. TEMA 1

A>20? B=15

B=5

if (A>10){IF(A>20) B=15;}

else B=5;

SI

NO

A>10?

SI

NO

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 31: MICROCONTROLADORES II EN C. TEMA 1

Sentencia switch

Sustituye a if-else cuando se realiza una selección múltiple que

compara una expresión con una lista de constantes enteras o

caracteres. Cuando se da una coincidencia, el cuerpo de sentencias

asociadas a esa constante se ejecuta hasta que aparezca break.

switch (expresión)

{

case constante 1:

grupo de sentencias;

break;

case constante 2:

grupo de sentencias;

break;

default:

grupo n de sentencias;

}

No puede haber dosconstantes iguales en doscase de la misma sentenciaswitch.

default es opcional y elbloque asociado se ejecutasólo si no hay ningunacoincidencia con lasconstantes especificadas.

Nota: break es opcional. Sino aparece se sigue con elcase siguiente.

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 32: MICROCONTROLADORES II EN C. TEMA 1

A=2? B=2SI

A=0?

NO

A=3? B=3SI

NO

NO

B=1SI

switch (A){case 0:B=1;break;case 2:B=2;break;case 3:B=3;break;default:break

;}

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 33: MICROCONTROLADORES II EN C. TEMA 1

Sentencia de bucle for.Se emplea para repetir una sentencia o bloque de sentencias:for (inicialización; condición; incremento){

sentencia(s);}

En la inicialización se le asigna un valor inicial a una variable que se emplea para el control de la repetición del bucle.

La condición se evalúa antes de ejecutar la sentencia. Si es cierta, se ejecuta el bucle. Si no, se sale del mismo.

El incremento establece cómo cambia la variable de control cada vez que se repite el bucle.

Es posible anidar bucles for para modificar dos o más variables de control.

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 34: MICROCONTROLADORES II EN C. TEMA 1

N<=10?NO

NO

IMPRIMIR NN=N+1 SI

SI

NO

N=1

For(N=1;N<=10;N++){

Printf(“%u”,N);}

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 35: MICROCONTROLADORES II EN C. TEMA 1

Sentencia de bucle while:La repetición se lleva a cabo mientras sea cierta una expresión.

while (expresión)

{

sentencia(s);

}

La expresión se evalúa antes de cualquier iteración. Si es falsa, ya nose ejecuta la sentencia o bloque de sentencias.

Sentencia de bucle do-while:do

{

sentencia(s);

}

while (expresión)

Las sentencias se ejecutan antes de que se evalúe la expresión, porlo que el bucle se ejecuta siempre al menos una vez.

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 36: MICROCONTROLADORES II EN C. TEMA 1

COMENTARIOS

Los comentarios se incluyen en el código fuente para documentar yorientar al programador sobre el código que se diseña.

Son ignorados por el compilador y no afectan a la longitud nirapidez de ejecución del código final.

Un comentario se puede colocar en cualquier lugar del programa y pueden tener la longitud y el número de líneas que se quiera.

Hay dos formatos posibles para los comentarios:Formato 1. Empiezan por // y llegan hasta el final de la línea.

// Esto es un comentario.Formato 2. Empiezan por /* y finalizan por */. No es posible anidar

comentarios con este formato. Ejemplos:/*Esto también esun comentario*//*Pero esto que /*parece un comentario válido*/ no lo es*/

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 37: MICROCONTROLADORES II EN C. TEMA 1

OTRAS SENTENCIAS

• 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.

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 38: MICROCONTROLADORES II EN C. TEMA 1

DIRECTIVAS

• Las directivas de pre-procesado comienzancon el símbolo # y continúan con un comandoespecífico. La sintaxis depende del comando.Algunos comandos no permiten otroselementos sintácticos en la misma expresión.

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 39: MICROCONTROLADORES II EN C. TEMA 1

DIRECTIVAS DE INTERÉS

# DEVICE chip: permite definir el PIC con el que se realizará la compilación. Ejemplo:

#device PIC16F877

#FUSES options: permite definir la palabra de configuración para programar un PIC. Ejemplo:

#fuses XT,NOWDT,PUT,NOPROTECT, NOLVP

#INCLUDE <archivo>: permite incluir un fichero en el programa. Ejemplo:

#INCLUDE <16f877.h>

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 40: MICROCONTROLADORES II EN C. TEMA 1

DIRECTIVAS DE INTERÉS

#USE DELAY (CLOCK=SPEED): permite definir las frecuenciasdel oscilador del PIC, el compilador lo utiliza para realizarcálculos de tiempo. Se puede utilizar M, MHZ, K y KHZ paradefinir la frecuencia. Ejemplo:

#use delay(clock=4000000)

Luego de definida en las declaraciones se pueden utilizarlas funciones:

delay_ms(tiempo en milisegundos)

delay_us(tiempo en microsegundos)

delay_cycles(tiempo en base a los ciclos de máquina)

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 41: MICROCONTROLADORES II EN C. TEMA 1

FUNCIONES

• El compilador CCS suministra una serie de funcionespredefinidas para acceder y utilizar el PIC y susperiféricos. Estas funciones facilitan la configuracióndel PIC sin entrar en el nivel de los registrosespeciales.

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 42: MICROCONTROLADORES II EN C. TEMA 1

MANEJO DE LOS PUERTOS

• 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 STANDARD_IO)

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 43: MICROCONTROLADORES II EN C. TEMA 1

MANEJO DE LOS PUERTOS

• A través de la RAM:

#BYTE variable=constante. Ejemplo:

#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

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 44: MICROCONTROLADORES II EN C. TEMA 1

MANEJO DE LOS PUERTOS

• Una vez definidas estas variables se puedenconfigurar y controlar los puertos a través de loscomandos de asignación.

TRISA= 0xFF;TRISB= 0x00;TRISC=0x0F;• Escritura en los puertos:PORTC=0x0A;• Lectura de puertos:dato=PORTA; // Asigna el valor del puerto A a la

// variable dato.

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 45: MICROCONTROLADORES II EN C. TEMA 1

MANEJO DE LOS PUERTOS

Existen unas funciones de C que permiten trabajarbit a bit con los registros o variables definidaspreviamente. Estas funciones son las siguientes:

bit_clear(var,bit);

bit_set(var,bit);

Bit_test(var,bit);

Swap(var);

Ejemplos:

bit_set(PORTC,4);

If (bit_test(PORTB,0)==1) bit_clear(PORTB,1);

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 46: MICROCONTROLADORES II EN C. TEMA 1

MANEJO DE LOS PUERTOS

• Se puede declarar un bit de un registro mediante ladirectiva #BIT, lo que permite trabajar directamentecon el terminal:

#BIT nombre = posición.bit. Ejemplo:

#BIT RB4=0x06.4 //PORTB=0x06

RB4=0;

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 47: MICROCONTROLADORES II EN C. TEMA 1

MANEJO DE LOS PUERTOS#include <16F877.h>#fuses XT,NOWDT,NOLVP#use delay (clock=4000000)#BYTE TRISB=0x86#BYTE PORTB=0x06#BYTE OPTION_REG=0x81void main ( ) {

bit_clear (OPTION_REG,7);bit_set (TRISB,0);bit_clear (TRISB,1);bit_clear (PORTB,1);while (1){

if (bit_test(PORTB,0)==1)bit_clear(PORTB,1);

elsebit_set(PORTB,1);

}}

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 48: MICROCONTROLADORES II EN C. TEMA 1

MANEJO DE PUERTOS• A través de las directivas

El compilador ofrece funciones predefinidas para trabajar con los puertos. Estas funciones son:

output_X(valor);

input_X( );

set_tris_X(valor);

port_b_pullups (valor); //True o FALSE

get_tris( );

Ejemplo:

output_A(0xFF);

valor=input_B( );

set_tris_C(0x0F);

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 49: MICROCONTROLADORES II EN C. TEMA 1

MANEJO DE PUERTOS• Existen una serie de funciones asociadas a un pin*. El

parámetro pin se define en el fichero include con un formatodel tipo PIN_Xn, donde X es el puerto y n es el número de pin.

#define PIN_A0 40

#define PIN_A1 41

Las funciones son:

output_low (pin*);

output_high (pin*);

output_bit (pin*,valor);

output_toggle (pin*);

output_float (pin*); // pin de entrada a tensión flotante

input_state (pin*);

Input (pin*);

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 50: MICROCONTROLADORES II EN C. TEMA 1

MANEJO DE PUERTOS

• Las funciones output_x() e input_x()dependen de la directiva tipo #USE_IO queesté activa. Directivas:

#USE FAST_IO(PUERTO)

Con la función output_x() se saca el valor alpuerto y con la función input_x() se lee elpuerto. La directiva no modifica previamenteel registro TRIS correspondiente.

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 51: MICROCONTROLADORES II EN C. TEMA 1

MANEJO DE PUERTOS#include <16F877.h>#fuses XT,NOWDT,NOLVP#use delay (clock=4000000)#use fast_io(B)void main ( ) {

port_B_pullups (TRUE);set_tris_B(0x01);output_low(PIN_B1);while (1){

if (input(PIN_B0)==1)output_low(PIN_B1);

elseoutput_high (PIN_B1);

}}

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 52: MICROCONTROLADORES II EN C. TEMA 1

MANEJO DE PUERTOS

#USE STANDARD_IO(PUERTO)

Con la función output_x() el compilador seasegura de que el terminal, o terminalescorrespondientes sean de salida mediante lamodificación del TRIS correspondiente. Con lafunción input_x() ocurre lo mismo peroasegurando el terminal o terminales comoentrada. Es la directiva por defecto. Entonces,el ejemplo anterior quedaría:

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 53: MICROCONTROLADORES II EN C. TEMA 1

MANEJO DE PUERTOS

#include <16F877.h>#fuses XT,NOWDT,NOLVP#use delay (clock=4000000)#use standard_io(B)void main ( ) {

port_b_pullups (TRUE);output_low(PIN_B1);while (1){

if (input(PIN_B0)==1)output_low(PIN_B1);

elseoutput_high (PIN_B1);

}}

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 54: MICROCONTROLADORES II EN C. TEMA 1

ESTRUCTURA DE UN PROGRAMA EN C( ciclo while )

// Definición de variables globales

// Definición de funciones

void main(void){

// Definición de variables locales

// Configuración de registros (recursos y puertos)

// ciclo infinitowhile ( 1 )

{

// Programa de usuario

}}

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 55: MICROCONTROLADORES II EN C. TEMA 1

ESTRUCTURA DE UN PROGRAMA EN C( ciclo for )

// Definición de variables globales

// Definición de funciones

void main(void){

// Definición de variables locales

// Configuración de registros (recursos y puertos)

// ciclo infinitofor ( ; ; )

{

// Programa de usuario

}}

Prof. Luis Zurita Microcontroladores II

IUT Cumaná

Page 56: MICROCONTROLADORES II EN C. TEMA 1

ESTRUCTURA DE UN PROGRAMA EN C( ciclo do - while )

// Definición de variables globales

// Definición de funciones

void main(void){

// Definición de variables locales

// Configuración de registros (recursos y puertos)

// ciclo infinitodo

{

// Programa de usuario

} while ( 1 ) ;}

Prof. Luis Zurita Microcontroladores II

IUT Cumaná