Microcontrolador (Puertos)

18
Ing. Electrónica INSTITUTO TECNOLÓGICO DE CIUDAD GUZMÁN Información sobre El Microcontolador: Puertos Jorge Armando Ortiz Ramírez. Breve recopilación para aprender un poco más sobre El Microcontrolador TECALITLÁN JAL. 6 DE ENERO DEL 2011

description

Es una recopilación de informacion para entender a grandes rasgos el funcionamiento del Microcontrolador y el uso de los puertos en el mimsmo.

Transcript of Microcontrolador (Puertos)

Page 1: Microcontrolador (Puertos)

Ing. Electrónica

INSTITUTO TECNOLÓGICO DE

CIUDAD GUZMÁN

Información sobre El Microcontolador:

Puertos

Jorge Armando Ortiz Ramírez.

Breve recopilación para aprender un poco más sobre El

Microcontrolador

TECALITLÁN JAL. 6 DE ENERO DEL 2011

Page 2: Microcontrolador (Puertos)

Microcontrolador

Un microcontrolador es un circuito integrado de alta escala de integración que incorpora la mayor

parte de los elementos que configuran un controlado.

El microcontrolador es un chip que incluye todos los componentes de un computador. Debido a su

reducido tamaño es posible montar el controlador en el dispositivo al que gobierna. En este caso el

controlador recibe el nombre de controlador empotrado (embedded controller).

Un microcontrolador dispone normalmente de los siguientes componentes:

•Procesador o UCP (Unidad Central de Proceso).

•Memoria RAM para Contener los datos.

•Memoria para el programa tipo ROM/PROM/EPROM.

•Líneas de E/S para comunicarse con el exterior.

•Diversos módulos para el control de periféricos (temporizadores, Puertas Serie y Paralelo, ADC

Conversores Analógico/Digital, DAC Conversores Digital/Analógico, etc.).

•Generador de impulsos de reloj que sincronizan el funcionamiento de todo el sistema.

Page 3: Microcontrolador (Puertos)

En resumen, un Microcontrolador (uC) es una microcomputadora porque tiene todo lo que una

Computadora Personal (PC) posee solo que el uC está hecho para ejecutar un programa o realizar

solamente una tarea que es controlar un sistema, otra diferencia entre el uC y una PC es que ésta posé

discos duros porque es necesario almacenar gran cantidad de información y en el uC solo es

necesario seguir las instrucciones programadas por el programador para ejecutar una tarea.

Estructura de un microcomputador

Estructura básica de un microcomputador

Un microcomputador, aunque aparentemente es un aparato muy complejo, es una máquina

electrónica relativamente sencilla, quizás más simple que un aparato de televisión o una grabadora de

video.

Esto se debe a que está formado por varios bloques totalmente digitales y claramente definidos, cada

uno con una función específica. Por tanto, su principio de operación es muy simple y confiable.

Cada bloque, a su vez, está formado por varios circuitos integrados fáciles de entender y manejar. La

parte compleja está dentro de los circuitos integrados, pero esto no interesa al usuario, ya que este

solamente debe conocer muy bien la configuración de los pines, su funcionamiento y su

programación.

Un computador digital está conformado por tres bloques funcionalmente independientes (figura 712).

Una unidad de entrada y salida, una CPU y una memoria.

A su vez, la unidad de entrada y salida se divide en un bloque de salida y un bloque de entrada. Del

mismo modo, la CPU se divide en una unidad de control y una unidad aritmético-lógica (ALU), y la

memoria en ROM y RAM, obteniéndose seis bloques o unidades con funciones muy específicas.

Page 4: Microcontrolador (Puertos)

Estas seis unidades que constituyen un computador digital se muestran en la figura 713. A

continuación describiremos la función básica de cada una de ellas en términos generales.

Page 5: Microcontrolador (Puertos)

Unidad de entrada

Esta parte del circuito acepta o recibe información del mundo externo, procedente de un operador

humano, un fenómeno físico (temperatura, velocidad, etc.), un sistema de grabación

electromagnético, etc. El propósito de la unidad de entrada es llevar los datos del mundo externo

hacia la unidad de memoria para su posterior procesamiento.

En los computadores para procesamiento de datos, los sistemas de entrada más usuales son un

teclado, un mouse o ratón, una o varias unidades de disco flexible, una unidad de disco duro, un

modem, un lápiz óptico y un micrófono, entre otros.

En los computadores utilizados para control, las unidades de entrada son generalmente transductores

que censan fenómenos físicos como temperatura, presión, peso, caudal, movimiento, posición, luz,

sonido, etc. Las señales análogas de voltaje o de corrientes producidas por estos sensores se llevan al

computador por medio de uno o varios convertidores A/D (analógico-digitales).

Unidad de salida

La misión de esta parte del circuito, es entregar los resultados de la información binaria, ya procesada

por el computador, al mundo exterior.

Esta información se lleva desde la memoria o desde la unidad central de proceso (CPU) hacia

circuitos o aparatos llamados periféricos que se encuentran fuera del computador.

En los computadores para procesamiento de datos, las unidades de salida más usuales son las

impresoras, las pantallas o monitores de video, las unidades de disco flexible y de disco duro, los

módems para comunicaciones por redes telefónicas, los plotters o graficadores, los parlantes, etc.

En los computadores para control, las señales digitales salen al mundo exterior a través de una o

varias unidades de salida. Entre las más comunes tenemos las tarjetas de interface que tienen relés,

transistores bipolares, MOSFET de potencia, SCRs, triacs y otros dispositivos manejadores de

potencia.

Estos, a su vez, activan motores de corriente continua o servomotores, motores paso a paso,

actuadores mecánicos o hidráulicos, resistencias de calentamiento, electroválvulas, solenoides y otros

tipos de elementos que realizan la operación final en una máquina o aparato.

También se encuentran como unidades de salida tarjetas con convertidores D/A (digitales-analógicos)

que convierten las señales digitales del computador en señales análogas equivalentes para ser

utilizadas en circuitos de este tipo.

Unidad de memoria

La función de la unidad de memoria consiste en almacenar programas y datos y es una de las más

importantes en un computador. Se distinguen dos sistemas diferentes de memoria: la de

almacenamiento primario y la de almacenamiento secundario. La primera se denomina también

memoria principal y la segunda memoria auxiliar.

Page 6: Microcontrolador (Puertos)

Memoria de almacenamiento primario

La memoria principal o de almacenamiento primario está formada por circuitos integrados de

memoria donde se almacenan los programas que se van a ejecutar y los datos que se necesitan

durante la ejecución de estos programas.

Hay tres tipos de memoria principal: ROM, RAM y cache.

•Memoria ROM o memoria de lectura. La información pregrabada electrónicamente en ella

(programas

o lista de instrucciones) solamente puede ser leída y no es posible alterar su contenido por ningún

método directo. En esta memoria se escribe el programa monitor o de arranque del computador, lo

que permite que ejecute las acciones necesarias para poder iniciar un trabajo.

Cuando encendemos un computador, se activan generalmente la pantalla y una unidad de disco

(flexible o duro), permitiendo el montaje de una parte del sistema operativo en la memoria RAM para

continuar con la ejecución de un programa,

•Memoria RAM o memoria de lectura y escritura. En este tipo de memoria se puede almacenar

información para ser utilizada posteriormente y, si es necesario, se puede alterar o cambiar en

cualquier momento. En la memoria RAM se almacenan los programas y los datos que estos van

originando. Su actividad es muy intensa, ya que recibe y entrega millones de bits (1's y 0's) por

segundo a todos los bloques del computador.

El desarrollo de la tecnología de los microcomputadores y de los computadores en general ha estado

estrechamente ligado con el desarrollo de las memorias RAM. Cada vez se logra mayor capacidad de

almacenamiento en estos circuitos a un menor costo.

Las primeras memorias RAM de buena capacidad almacenaban 1 Kilobyte de información digital.

Los primeros microcomputadores, con una capacidad de memoria RAM de 8 Kilobytes, utilizaban 8

de estos circuitos. Actualmente, son comunes computadores personales y de escritorio con

capacidades de 1 y 2 Gigabytes de memoria RAM.

•Memoria de cache. Es una memoria RAM con tiempo de «acceso» muy rápido donde se mantienen

los datos más utilizados durante la ejecución de un programa. El objetivo de esta memoria, en la

arquitectura de un computador, es acelerar la velocidad de procesamiento de la información.

Memoria de almacenamiento secundario

Este sistema de almacenamiento, también llamado memoria auxiliar, se utiliza para guardar grandes

cantidades de datos que no se requieren con frecuencia en la memoria principal durante la operación

del computador. Hay varios sistemas de almacenamiento secundario: los discos magnéticos, que

pueden ser discos flexibles o blandos, también llamados floppies; los discos duros, que permiten el

almacenamiento de grandes cantidades de datos (gigabytes), los discos ópticos, etc.

Page 7: Microcontrolador (Puertos)

Unidad central de procesamiento (CPU)

En la terminología de computadores se denomina como CPU (Central Processing Unit) o unidad

central de procesamiento, a la unidad que reúne la unidad de control y la unidad aritmético-lógica en

un solo bloque. Esta última también se conoce como ALU (Arithmetic Logic Unit).

En la práctica, la unidad central o CPU se encuentra en forma de un circuito integrado llamado

microprocesador, tema central de este curso y al cual le dedicaremos nuestra mayor atención.

Unidad de control

La unidad de control se encarga de la interpretación y ejecución de las instrucciones del programa.

También controla todos los componentes de un computador por medio de líneas de conexión

llamadas bases.

Esta unidad es el elemento central de toda la máquina y se encarga de enviar señales de coordinación

a todas las demás unidades. Podría compararse, en un momento dado, con el gerente de una empresa

o con el director de una orquesta.

Por ejemplo, una impresora escribirá información en el papel si específicamente se le instruye para

que lo haga. Esto se logra por medio de una "instrucción" como "imprima" o "escriba", que el

computador debe ejecutar. El cumplimiento o ejecución de esta instrucción necesita un tráfico de

señales binarias entre la impresora y el computador. La coordinación de esta importante tarea la lleva

a cabo la unidad de control.

Unidad aritmético-lógica (ALU)

Esta unidad está encargada de realizar las operaciones lógicas y aritméticas usando como base la

operación de suma y la notación del complemento de dos. La ejecución de la mayoría de las

operaciones de un computador se realiza en esta unidad.

Por ejemplo, si se desea sumar dos números almacenados en dos posiciones de memoria, estos se

deben traer a la unidad aritmética donde se lleva a cabo la operación. El resultado se almacena

nuevamente en una posición de memoria.

Las principales operaciones aritméticas realizadas en la ALU son la suma, la resta y el complemento

a dos. Las principales operaciones lógicas son la AND, la OR, la NOT, la OR, la EXOR y la

comparación.

También realiza esta unidad operaciones con los registros internos como desplazamiento, rotación y

traslado de información digital.

De acuerdo al tamaño de la memoria y según la velocidad y capacidad de la CPU o microprocesador,

los computadores se clasifican en supercomputadores, computadores, minicomputadores y

microcomputadores. Sin embargo, independientemente de su tamaño, todos ellos tienen la misma

estructura básica y el mismo principio de funcionamiento estudiados en esta lección.

El rapidísimo avance de esta tecnología hace que un microcomputador de hoy sea mucho más

poderoso que un minicomputador del año anterior, dejando un poco obsoleta esta clasificación.

Page 8: Microcontrolador (Puertos)

Buses

En el diagrama de la figura 714 podemos observar que los diferentes bloques del sistema se conectan

entre sí por medio de unas flechas gruesas y otras delgadas. A estas líneas se les llama buses. Un bus

es un conjunto de líneas que llevan o traen señales digitales de un circuito a otro.

Las líneas y el sentido de las flechas indican las rutas existentes entre las seis unidades para el

intercambio mutuo de información. En los sistemas con microprocesadores existen generalmente tres

buses: direcciones, datos y control. La estructura de buses de los microcomputadores se analiza en

detalle en la próxima lección.

Brevemente, la unidad de control utiliza el bus de direcciones para determinar, por decodificación, la

posición de memoria o el dispositivo de entrada y salida que participa en una transferencia de

información en un momento dado. El número de líneas del bus de direcciones determina la capacidad

de memoria del sistema y el número de dispositivos de entrada/salida con los cuales puede

comunicarse.

Una vez que la unidad de control ha seleccionado el dispositivo con el cual quiere efectuar una

transferencia de información, utiliza el bus de datos para transportar dicha información. Así, por

medio de este bus, el microprocesador puede enviar o recibir datos de la memoria y también enviar o

recibir señales del mundo exterior a través de las unidades de entrada y salida.

El número de líneas del bus de datos determina lo que se denomina el «ancho» de la palabra de

trabajo de la unidad de procesamiento central o CPU. Son típicas longitudes de palabra de 4, 8, 16,

32, e incluso, 64 bits. Los primeros computadores personales utilizaban un bus de datos de 8 bits,

luego salieron al mercado los equipos de 16 bits y actualmente el bus más utilizado es el de 32 bits*

El bus de control transporta las señales que necesita la unidad de control para coordinar y sincronizar

el funcionamiento de todos los elementos del computador. Cada uno de estos elementos debe

intervenir solamente cuando le corresponda. De lo contrario, el proceso de cómputo sería caótico.

Page 9: Microcontrolador (Puertos)

El número de líneas del bus de control varía según el tipo de CPU o microprocesador que se utilice.

Observe que todas las unidades que constituyen el microcomputador comparten el mismo bus de

datos. Esto es posible gracias al empleo de circuitos integrados de tecnología tri-state.

Por el bus de datos solamente circula siempre la información correspondiente al bloque o unidad que

haya sido seleccionado por el bus de direcciones. Como es obvio, si dos unidades de un

microcomputador se seleccionaran para recibir o entregar señales al mismo tiempo, habría un

conflicto de información y el sistema trabajaría erráticamente.

Resumen

De acuerdo a lo estudiado anteriormente, la operación de un computador digital se puede resumir así:

* El computador acepta información (programas y datos) por medio de la unidad de entrada y la

trasfiere a la memoria.

* Bajo el mando de un programa o lista de instrucciones que ejecuta la unidad de control, la

información de la memoria se lleva a la unidad aritmético-lógica para su procesamiento.

* Una vez procesada la información, se entrega al mundo exterior a través de la unidad de

salida.

* Todas las actividades las coordina la unidad de control.

“Lo que lleva, trae, recibe y manda información en el Microcontrolador, son los buses; es importante

entenderlos”

PUERTOS DE ENTRADA / SALIDA EN UN

MICROCONTROLADOR

Cualquier aplicación de un sistema digital basado en un microprocesador o microcontrolador requiere

la transferencia de datos entre circuitos externos al microprocesador y él mismo. Estas transferencias

constituyen las operaciones llamadas ENTRADA y SALIDA, (input /output) o E/S (I/O). Los puertos

de entrada/salida son básicamente registros externos o internos. Algunos microprocesadores

proporcionan señales de control que permiten que los registros externos que forman los puertos de

E/S ocupen un espacio de direcciones separada, es decir, distinto del espacio de direcciones de los

registros externos que componen la memoria. Cuando los puertos tienen asignado un espacio de

direcciones separado, se dice que están en modo de ENTRADA/SALIDA AISLADA o E/S

ESTÁNDAR. Por el contrario, cuando se ubican dentro del mismo espacio que la memoria, se dice

que están en modo de ENTRADA/SALIDA MAPEADA A MEMORIA o PROYECTADA EN

MEMORIA.

En su forma más elemental, un puerto de entrada está compuesto sólo por un buffer de tercer estado y

con más frecuencia por un buffer de tercer estado junto con un registro de almacenamiento (latch). El

buffer de tercer estado tiene la función de controlar, es decir, aislar o permitir el flujo de información

del puerto al bus de datos del microprocesador. El registro tiene la función de almacenar

Page 10: Microcontrolador (Puertos)

temporalmente la información generada por el dispositivo periférico de entrada hasta que pueda ser

leída por el microprocesador.

ENTRADA/SALIDA AISLADA.- Para que un microprocesador pueda implementar el modo E/S

aislada (isolated I/O) son indispensables las siguientes condiciones:

1.- El microprocesador debe proporcionar señales de control que permitan distinguir entre una

operación con un puerto y una referencia a memoria.

2.- El código de instrucciones debe tener instrucciones especiales con las que se pueda leer (entrada)

o escribir (salida) en los puertos.

ENTRADA/SALIDA MAPEADA.- El modo de E/S mapeada a memoria (memory mapped I/O) se

basa en que tanto las localidades de memoria como los puertos de E/S se consideran como registros

externos desde el punto de vista del microprocesador. Entonces, las instrucciones que hacen

referencia a la memoria también pueden transferir datos entre un dispositivo periférico y el

microprocesador, siempre y cuando el puerto de E/S que los interconecta se encuentre dentro del

espacio de direccionamiento de memoria, es decir, controlado por las señales de control para

memoria. De esta forma, el registro asociado con el puerto de E/S es tratado simplemente como una

localidad de memoria más.

Una caracteristicas importante es que las operaciones de entrada y salida usando E/S mapeada a

memoria no están limitadas a los registros internos.

COMPARACIÓN ENTRE E/S AISLADA y E/S MAPEADA A MEMORIA

El modo de E/S aislada presenta las siguientes ventajas:

- Como se usan instrucciones especiales para E/S en un programa éstas pueden distinguirse

fácilmente de las instrucciones que hagan referencia a memoria.

- Como sólo se utilizan ocho líneas en el direccionamiento de un puerto, se necesitan menos circuitos

para su decodificación.

- Como el número de puerto se puede representar en un byte, las instrucciones son más cortas.

- Como los puertos están asignados a un espacio separado de la memoria, se tiene disponible la

capacidad total de direccionamiento del microprocesador para circuitos de memoria.

Las desventajas de este método son:

- La capacidad de procesamiento y flexibilidad de las instrucciones de E/S es en general muy

restringida.

- Se debe dedicar al menos una terminal del circuito integrado del microprocesador para la señal de

control que distingue las operaciones con puertos de las operaciones con memoria.

Por otra parte, el modo de E/S mapeada a memoria tiene como ventaja:

- Permite la utilización de la gran variedad de instrucciones que hacen referencia a la memoria, para

la transferencia de información y la ejecución de operaciones aritméticas o lógicas directamente en

los puertos, sin necesidad de transferir los datos a los registros internos del microprocesador.

Page 11: Microcontrolador (Puertos)

- Reduce el número de líneas de control que debe tener el microprocesador.

Sus desventajas son las siguientes:

- Cada puerto implantado de este modo disminuye en uno las direcciones disponibles para memoria.

- Es necesario decodificar las 16 líneas de direcciones para seleccionar el puerto.

- Las instrucciones que hacen referencia a la memoria requieren dos bytes para representar la

dirección, por lo tanto son más largas y también puede ser más lentas.

GESTIÓN DE PUERTOS EN EL COMPILADOR CCS C

Gestión de puertos en C

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

A través de la RAM

Se definen 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.

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

Page 12: Microcontrolador (Puertos)

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 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ífico (0 a 7) de la variable.

bit_set (var, bit); // Pone a 1 el bit específico (0 a 7) de la variable.

bit_test (var, bit); // Muestra el bit específico (0 a 7) de la variable.

swap (var); // Intercambia los 4 bits de mayor peso por los 4 de menor peso de

// la variable

bit_set (PORTC , 4); // "saca" un 1 por el terminal RC4

if (bit_test (PORTB,0)==1) bit_clear (PORTB, 1) ; // si RB0 es 1 borra RB1

Se puede declarar un bit de un registro con una variable mediante la directiva #BIT, lo que permite

trabajar directamente con el terminal:

#BIT nombre = posición.bit

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

RB4 = 0;

Ejemplo:

Se configuran 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.

#include <18F4550.h>

#fuses XT,NOWDT

#use delay ( clock = 4000000 ) // Reloj de 4 MHz

Page 13: Microcontrolador (Puertos)

#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 (TISB,1); // B1 como salida

bit_clear (PORTB,1); // Apaga el LED

while (1) { // Es un ciclo que se repite indefinidamente.

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

}

}

A través de las directivas

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

output_X (valor); // Por el puerto correspondiente saca el valor (0-255).

input_X(); // Se obtiene el valor en el puerto correspondiente.

set_tris_X(valor); // Carga el registro TRISx con el valor (0-255).

port_b_pullups (valor); // Mediante valor = TRUE o valor = FALSE habilita o deshabilita las

// resistencias de pull-up en PORTB.

get_trisX() // Devuelve el valor del registro TRISx

Donde la X es la inicial del puerto correspondiente (A, B, C,...).

Output_A(0xFF); // Saca por el puerco A el valor 11111

Valor = Input_B( ) ; // Lee el valor del puerto B

Set_tris_C(0x0F) ; // Configura el puerto C: C0-C3 entradas, C4-C7 salidas

Page 14: Microcontrolador (Puertos)

Existen una serie de funciones asociadas a un terminal o pin*. El parámetro pin* se define en un

fichero include (por ejemplo, 16F876.h) con un formato del 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*); // Pin a 0.

output_high (pin*); // Pin a 1.

output_bit (pin*, valor); // Pin a valor especificado.

output_toggle(pin*); // Complementa el valor del pin.

output_float (pin*); // Pin de entrada, quedando a tensión flotante… (simula salida en

// drenador abierto)

input_state(pin*); // Lee el valor del pin sin cambiar el sentido del terminal.

input(pin*); // Lee el valor del pin.

Las funciones output_x() e input_x() dependen de la directiva tipo #USE *_IO que esté activa.

Directivas:

#USE FASTIO (PUERTO) [PUERTO: A...]

Con la función output_x() se saca el valor al puerto y con la función input_x() se lee el puerto. La

directiva no modifica previamente el registro TRIS correspondiente.

Hay que asegurarse de que los registros TRIS están correctamente definidos. Entonces, el ejemplo

anterior quedaría:

#include <18F4550.h>

#fuses XT,NOWDT

#use delay ( clock = 4000000 )

#use fast_io (B) ←

void main () {

port_b_pullups (TRUE);

set_tris_B(0x01) ;

output_low(P1N_B1) ;

Page 15: Microcontrolador (Puertos)

while (1)

{

if ( input (PIN_B0) == 1 )

output_low(PIN_Bl) ;

else

output_high (PIN_B1) ;

}

}

#USE STANDARD_IO (PUERTO) [PUERTO: A...]

Con la función output_x() el compilador se asegura de que el terminal, o terminales correspondientes,

sean de salida mediante la modificación del TRIS correspondiente. Con la función input_x() ocurre lo

mismo pero asegurando el terminal (terminales) como entrada. Es la directiva por defecto. Entonces,

el ejemplo antes visto quedaría:

#include <18F4550.h>

#fuses XT,NOWDT

#use delay( clock = 4000000 )

#use standard_io (B) ←

void main () {

port_b_pullups (TRUE);

output_low(PIN_Bl) ;

while (1)

{

if (input (PIN_B0) == 1 )

output_low (PIN_B1);

else

output_high (PIN_B1);

}

}

Page 16: Microcontrolador (Puertos)

#USE FIXED_IO (PUERTO_OUTPUTS=pin* , ...) [PUERTO: A...]

El compilador se encarga de generar el código para definir los puertos de acuerdo con la información

que indica la directiva (donde sólo se indican los terminales de salida), sin tener en cuenta si la

operación es de entrada o de salida. Entonces, el ejemplo anterior quedaría:

#include <18F4550.h>

#fuses XT,NOWDT

#use delay ( clock = 4000000 )

#use fixed_io(b_outputs=pin_bl) ←

void main() {

port_b_pullups (TRUE);

output_low(PIN_Bl);

while (1)

{

if (input(PIN_BO) == 1 )

output_low(PIN_Bl) ;

else

output_high (PIN_B1);

}

}

Con punteros

En C se puede acceder a la memoria de datos mediante punteros. Los punteros se deben definir como

INT:

#define TRISA (int*) 0x85

#define PORTA (int*) 0x05

El registro es manejado mediante la utilización del operando *:

int valor

valor = *porta

Los terminales se pueden leer o escribir utilizando operadores lógicos:

*porta |= 0b0000000l; // RA0 = 1

Page 17: Microcontrolador (Puertos)

*porta &= 0b11111101; // RA2 = 0

If (*porta & 0b00000001)... // Lee el valor de RA0

Entonces, el ejemplo antes visto quedaría:

#include <18F4550.h>

#fuses XT,NOWDT

#use delay ( clock = 4000000 )

#define TRISB (int*) 0x86 ←

#define PORTB (int*) 0x06 ←

#define OPTION (int*) 0x81 ←

void main () {

*option &= 0b01111111; // Pone a 0 el bit 7 del OPTION_REG (pull-up habilitado)

*trisb = 0x01; // RB0 entrada, RB1 salida

*portb = 0x00; // Apaga el LED

While (1)

{

if (*portb & 0x01 ) // Lee el RB0 y si es 1..

*portb=0x00; // Apaga el LED (RB1 = 0)

else

*portb=0x02; // Si es 0 enciende el LED (RB1 = 1)

}

}

EN CONCLUSIÓN SOBRE PUERTOS:

La configuración de un puerto depende mucho de las prestaciones de los buses ya que estos son los

portadores de los datos en el Microcontrolador:

Primero debemos “decirle” al Microcontrolador que el Puerto es de entrada o de salida y en lenguaje

C hay varias formas de hacerlo como ya se vio anteriormente, después de definir el puerto como I/O

hay que “decirle” al Microcontrolador si se va a leer o escribir un dato y finalmente, indicar el dato

en cuestión.

Page 18: Microcontrolador (Puertos)

BIBLIOGRAFÍA:

- Compilador C CCS y simulador PROTEUS para Microcontroladores PIC García, Eduardo

Primera Edición Editorial: Alfaomega

- Curso de Electronica Digital Cekit - Volumen 4

- Recopilación varia

NOTA: Si a alguien le interesa extraer información del documento, mandenme un

mensaje al correo: [email protected] y con gusto les proporcionaré el documento

sin protección para que dispongan de él.