PIC 18F45XX ENTRADAS Y SALIDAS DIGITALES 1. Configuración de E/S digital Podemos disponer de hasta 35 líneas de E/S digital. Para poder configurar un puerto se utiliza el registro TRISX, donde X puede ser uno de los puertos A,B,C,D o E del pic. Cada bit con un “1” del registro configura el pin como entrada y un “0” como salida. Los puertos A, B y E tienen asignados como función secundaria las entradas analógicas AN0..AN12. Para poder utilizar estos puertos como e/s digital primero hay que configurar el registro ADCON1. ADCON1=0x0F; // Todos los pines e/s digital. Ej1: Configurar RD0..RD3 como entradas y RD4..RD7 como salidas. TRISD=0x0F; o bien TRISD=0b00001111; Ej2: Configurar RB7 como salida y no modificar el resto de pines. TRISB&=0x7F; o bien TRISB&=0b01111111; Ej3: Configurar RA3 y RA4 como entradas sin modificar el resto. TRISA|=0x03; o bien TRISA|=0b00000011; 2 2. Lectura/escritura de puertos Para leer el estado de un puerto se utiliza el registro PORT. valor=PORTB; // Lee el puertoB y lo almacena en la variable valor Se puede leer el estado de un único pin usando la función PORTXbits.RXN. Donde X es uno de los puertos y N el bit que se desea leer (0..7) if(PORTAbits.RA3 == 1) pulsador=1; Para escribir en un puerto hay que escribir en su registro LAT asociado. LATB=0x00; // RB0..RB7 a cero. También se puede poner a cero o a uno un bit concreto de un puerto. PORTBbits.RB7=1; // Pone a nivel alto el pin RB7 PORTDbits.RD5=0; // Pone a nivel bajo el pin RD5 3 3. Tipos de datos soportados en C18 Nota: también se pueden utilizar variables tipo bit 4 4. Declaración de constantes y variables Una etiqueta que mantiene un valor fijo durante la ejecución del programa sin posibilidad de cambio se denomina constante y se define utilizando el modificador <const>. const float iva=1.21; Para almacenar un valor que puede variar a lo largo del programa se utilizan las variables. Para poder utilizar una variable hay que declararla primero: <modificador><tipo> nombre; unsigned char valor; También se pueden declarar e inicializar en la misma instrucción: unsigned char valor=0; rom char tabla[5]={1,2,3,4,5}; // La tabla se almacena en la memoria // de código Normalmente se suele utilizar el tipo “unsigned char” para leer registros de 8 bits y el tipo “unsigned int” para los de 16 bits 5 5. Ejemplo de programación Realizar un programa que lea el estado de los pines RD0..RD3 y ponga su valor en el display de siete segmentos conectado en el puerto B. 6 6. Solución 7 7. Simulación 8