Sei sulla pagina 1di 3

4.2.

Tipos y set de instrucciones

Gestión de puerto a través de la memoria RAM

La directiva utilizada de C es #BYTE:

#BYTE variable=constante;

Ejemplo:

#BYTE TRISA=0X85

#BYTE PORTA=0X05

En el ejemplo se definen los registros PORTx y TRISx como bytes y se direccionan


a la posición correspondiente dentro de la memoria RAM.

Una vez definidas estas variables se pueden configurar y controlar los puertos a
través de los comandos de asignación.

Configuración de los puertos

Ejemplo:

TRISA=0b11111111; // 8 terminales de entrada

TRISB=0b00000000; // 8 terminales de salida

TRISC=0b00001111; // 4 terminales de mayor peso de salida y 4 terminales //de


mayor peso de entrada
Escritura en los puertos

PORTC = 0b00001101; // salida del dato 00001101 por el puerto C

Lectura de puertos

valor = PORTA; //Asigna el dato del puerto A a la variable valor

Manejo de sentencias

TRISA=0xFF;

If (PORTA==0x0F)

PORTB=0x10101010; //si los 4 terminales de menor

//peso del puerto A son 1111

//saca 10101010 por el puerto B

Instrucciones que trabajan a nivel de bits con las variables definidas


anteriormente

bit_clear(var, bit); //Pone a 0 el bit especifico (0-7) de la variable

bit_set(var,bit); //Pone a 1 el bit especifico (0-7) de la variable

bit_test(var,bit); //Muestra el bit especifico (0-7) de la variable

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

//peso de la variable

Gestión de puerto a través de 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, …)

Ejemplo: Se configuran los terminales RB1 como salida y el RB0 como entrada. La
salida debe tener el mismo valor que la entrada. Se utiliza un interruptor en la entrada
y un led en la salida.

Solución:

#include <16F84.h>

#fuses XT, NOWDT

#use delay(crystal=4000000)

#BYTE PORTB=0x06

//#BYTE TRISB=0X86

void main(){

set_tris_b(0b00000001);

bit_clear(PORTB,1);

while(TRUE){

if (bit_test (PORTB, 0) == 0)

bit_clear (PORTB,1);

else bit_set(PORTB,1);

Potrebbero piacerti anche