Está en la página 1de 22

tutorial 1 gestin de puertos

Como habilitar los puertos como entrada o salida?


La habilitacin como entrada o salida

se realiza a travs del registro TRISx. Para saber en que direccin se sitan el TRIS y PORT en la memoria solo hay que checar el datasheet de cada PIC ya que en algunos casos la direccin tiende a cambiar segn el PIC.

En la figura anterior se muestra el

datasheet del PIC 16f628a y se observa las direcciones de los puertos A y B, las cuales son: PORTA=05h PORTB=06h NOTA: la h indica que se encuentra en hexadecimal.

En CCS se puede manipular los puertos a travs de

En CCS

la RAM, para esto se deben definir los registros PORTx y TRISx como bytes y se sitan en la posicin correspondiente a la memoria RAM. La directiva utilizada de C es #BYTE. #BYTE porta=0x05 // variable porta en 05h #BYTE portb=0x06 // variable portb en 06h #BYTE trisa= 0x85 // variable trisa en 85h #BYTE trisb= 0x86 // variable trisb en 86h NOTA: en CCS se utilizan las // para escribir comentarios.

Una vez definidas las direcciones de los PORTx y

los TRISx se pueden configurar los puertos a travez de los TRISx. TRISA=0b11111 //indica que el RA0, RA1, RA2, RA3 y RA4 se ocupan como entradas. TRISB=0b00001111// indica que RB0 al RB3 se ocupan como entradas y del RB4 al RB7 como salidas. NOTA: Para asignar a un puerto como entrada se debe de adjudicarle un 1 y para una salida un cero. Para ocupar cdigo binario en CCS se utiliza el cdigo 0b antes de los bits.

PORTB=0b00011010// saca por el RB1, RB3 y RB4

un uno y por el RB0, RB2, RB5, RB6 y RB7 saca un cero. PORTD=0x00// pon en cero el puerto d.

Ejemplo:

#include <16f628a.h> #fuses xt,nowdt //tipo de cristal a utilizar #use delay (clock=4000000)//reloj de 4Mhz #byte trisa=0x85 //direccin del trisa en la memoria #byte trisb=0x86 #byte porta=0x05 #byte portb=0x06 void main(){ //funcin principal trisa=0b10100; //RA0,RA1 y RA3 como salida, el RA2 y //RA4 como entrada trisb=0b00000000;//todo el puerto B como salida portb=0x00; //se pone el puerto B en cero while(true){ //buncle infinito

portb=0b01010101; //RB0,RB2,RB4 y RB6 se ponen en

//uno, RB1,RB3,RB5 y RB7 se ponen en 0 porta=0b01011; //RA0,RA1 y RA3 se ponen a 1, RA2 y //RA4 se ponen a 0 } }

SIMULACIN

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 especifico (0 a 7) //de la variable. bit_set(var,bit); //pone a 1 el bit especifico (0 a 7) de //la variable. bit_test(var,bit); //muestra el bit especifico (0 a 7) de //la variable. ejemplo: bit_clear (portb,0);// saca un 0 en la terminal RB0. bit_set (portb,2);// saca un 1 en la terminal RB2.

NOTA: el bit_test se utilizara mas adelante cuando

explique sobre el if. Para poder sacar un retardo en CCS solo se utiliza el comando: delay_ms(100);// saca un retardo de 100 milisegundos. delay_us(100); //saca un retardo de 100 microsegundos.
con toda esta informacin podemos realizar nuestro

primer proyecto.

PROYECTO 1 SEMFORO
#include <16f84a.h>
#fuses xt,nowdt //tipo de cristal a utilizar

#use delay (clock=4000000)//reloj de 4Mhz


#byte trisa=0x85 //direccion del trisa en la memoria #byte trisb=0x86

#byte porta=0x05
#byte portb=0x06

void main(){ //funcion principal


bit_clear(trisa,3);//el RA3 como salida

trisb=0x00;//todo el puerto B como salida portb=0x00;//puerto B puesto en 0 while(true){ //buncle infinito bit_set(porta,3);//pone en 1 el RA3 delay_ms(5000); //retardo de 5 segundos bit_clear(porta,3);//pone en 0 el RA3 bit_set(portb,0); //pone en 1 el RB0 delay_ms(5000); bit_clear(portb,0);//pone en 0 el RB0 bit_set(portb,1); //pone en 1 el RB1 delay_ms(5000); bit_clear(portb,1); } }

SIMULACIN

PRUEBAS EN PROTOBOARD

PCB

BLOG:

http://microcontroladores-ing-elec-

rh.blogspot.mx/ REFERENCIA: COMPILADOR C CCS Y SIMULADOR PROTEUS PARA MICROCONTROLADORES PIC


TUTORIAL REALIZADO POR: ING. R.H.

También podría gustarte