You are on page 1of 22

tutorial 1 gestión de puertos

¿Como habilitar los puertos como entrada o salida?
 La habilitación como entrada o salida

se realiza a través del registro TRISx. Para saber en que dirección se sitúan el TRIS y PORT en la memoria solo hay que checar el datasheet de cada PIC ya que en algunos casos la dirección tiende a cambiar según 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 través de

En CCS

la RAM, para esto se deben definir los registros PORTx y TRISx como bytes y se sitúan en la posición 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 código binario en CCS se utiliza el código 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 //dirección del trisa en la memoria #byte trisb=0x86 #byte porta=0x05 #byte portb=0x06 void main(){ //función 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 } }

SIMULACIÓN

 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 información podemos realizar nuestro

primer proyecto.

PROYECTO 1 SEMÁFORO
 #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); } }

SIMULACIÓN

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.