Sunteți pe pagina 1din 18

INSTITUTO TECNOLÓGICO DE

CIUDAD GUZMÁN
TECALITLÁN JAL. 6 DE ENERO DEL 2011

Ing. Electrónica

Información sobre El Microcontolador:


Puertos
Jorge Armando Ortiz Ramírez.

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


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


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


#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


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

}
#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


*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.
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: jaor87@hotmail.com y con gusto les proporcionaré el documento
sin protección para que dispongan de él.

S-ar putea să vă placă și