El PIC18F2550 es un microcontrolador que destaca por su compleja arquitectura. Su bus de memoria de programa cuenta con 21 líneas de dirección y 16 líneas para instrucciones, mientras que el bus de memoria de datos posee 12 líneas de dirección y 8 líneas de datos.
set_tris_A (0x7F) // Puerto A como entradas
set_tris_B (0x00) // Puerto B como salidas
set_tris_C (0b11110000) //Pines RC0..RC3 salidas y RC4..RC7 entradas
Registro LAT: Mediante este registro se puede leer o establecer.
Registro PORT: Mediante este registro se puede leer el nivel de pin de E/S y se puede establecer el valor del latch de salida.
Registro TRIS: Mediante este registro se configuran cada una de las líneas de E/S del puerto como ENTRADA (bit correspondiente a ‘1’) o como SALIDA (bit correspondiente el ‘0’).
OSCILADOR
Por la tercera ruta, la frecuencia del cristal llega al Oscilator Postscaler. En el diagrama vemos otro CPUDIV. ¿Por qué no es la frecuencia de reloj para el procesador?. La respuesta es que al configurar el fuse HSPLL estamos indicando que hacemos uso de un cristal con frecuencia superior a 4 MHz (HS) y que lo hacemos por mediación del PLL (HSPLL), por lo que CPUDIV queda deshabilitado. En este nuevo divisor los cocientes pueden ser 1, 2, 3 ó 4. Una vez dividida la frecuencia, la señal accede hasta el switch FOSC3:FOSC0. Finalmente, las frecuencias resultantes se usarán como reloj para el funcionamiento del procesador.
La segunda ruta obedece a la conexión en el oscilador de partida de un cristal compatible, pero de frecuencia diferente a 48MHz. La frecuencia de oscilación, al llegar al PLL Prescaler, se divide entre 1, 2, 3, 4, 5, 6, 10 ó 12, de manera que a la salida del multiplexor PLLDIV siempre haya 4MHz. Estos se convertirán en 96MHz a la salida de PLL. El switch USBDIV permite el paso de la frecuencia dividida entre 2 (48MHz) seleccionando su “entrada 1” (USBDIV1). En particular, en este caso en que se parte de un cristal de 20MHz, la frecuencia se divide entre 5 (PLL5), y da lugar a 4MHz a la salida del multiplexor.
Una ruta alternativa a la salida del 96 MHz PLL es dirigirse hacia el PLL Postscaler; allí, la frecuencia de oscilación de 96MHz se puede dividir entre 2, 3, 4 ó 6 (CPUDIV X), obteniéndose frecuencias de reloj de 16MHz, 24MHz, 32MHz ó 48MHz.
La línea superior acaba directamente en el switch USBDIV que (seleccionando su “entrada 0”) comunica directamente la frecuencia del oscilador de entrada con la salida. Este caso es el resultado de conectar directamente un cristal de 48MHz en el oscilador inicial.
INTERRUPCIONES
Bit de prioridad de interrupción: establece si la interrupción es de alta o de baja prioridad (no está disponible para la interrupción externa 0).
Flag de interrupción: se pone a ‘1’ cuando se produce la condición de interrupción independientemente de si la interrupción está habilitada o no. Debe ponerse a ‘0’ por software cuando se procesa la interrupción.
Bit de habilitación de interrupción: permite habilitar a nivel individual la interrupción.
REGISTRO FUNCIÓN ESPECIAL
MEMORIAS
DATOS
El microcontrolador PIC182550 tienen hasta un total de 4 KBytes agrupados en 16 bancos, con 256 bytes cada uno. Como en el resto de las gamas, existen los registros de propósito general (GPRs), los cuales pueden ser utilizados por el usuario; y registros de función especial (SFRs), con los cuales se puede monitorizar y/o controlar el funcionamiento de la CPU y de las unidades funcionales del PIC; éstos últimos se sitúan en la zona más alta (desde F60h hasta FFFh). El PIC18F2550 dispone una memoria RAM de datos 1.536 bytes (6 bancos de 256 bytes). Además dispone de 126 bytes dedicados a los registros de función especial (SFRs) situados en la parte alta del banco 15, como se muestra en la figura.
La memoria de datos tipo EEPROM del PIC18F2550 dispone una capacidad de 256 bytes. Al ser una memoria no volátil, los datos almacenados en ella se mantienen en ausencia de tensión de alimentación.
PROGRAMA
PILA: La Pila es un bloque de memoria RAM independiente de 31 palabras de 21 bits y un puntero de 5 bits, que sirve para almacenar temporalmente el valor del PC cuando se produce una llamada a una subrutina o interrupción. El "Top Of Stack"" es accesible se puede leer y escribir (será conveniente quitar previamente las interrupciones). El puntero de pila (contenido en el registro STKPTR) es un contador de 5 bits que indica la posición actual del final de pila. El contenido del final de pila es accesible mediante los registros TOSU, TOSH, TQSL.
CONTADOR DE PROGRAMA: El PC (contador de programa) tiene 21 bits (PCU, PCH y PCL). El bit menos significativo del PC apunta a BYTEs, no a WORDs, por lo que es "0". El PC se incrementa de dos en dos. Se dispone de los correspondientes registros auxiliares PCLATU y PCLATH para actuar de forma combinada con el PC cuando éste se escribe o se lee.
ARQUITECTURA
Bus de la memoria de datos: 12 líneas de dirección y 8 líneas de datos.
Bus de la memoria de programa: 21 líneas de dirección y 16 líneas para instrucciones).
CONFIGURACIÓN DE PINES
CARACTERÍSTICAS
Periférico de comunicación serial: EUSART, I2C, SPI y
USB v 2.0.
Módulo comparador analógico
Módulo ADC de 10-bits
tema
Módulo de Captura/Comparacion/PWM.
Múltiples fuentes de interrupción.
Temporizadores: TMR0, TMR1, TMR2 y TMR3.
Pila de 32 niveles.
Frecuencia máxima de reloj 48 MHz. Oscilador interno desde 31KHz hasta 8 MHz.
16 KB de RAM y 256 Bytes de EEPROM.
Multiplicador Hardware 8x8.
77 instrucciones. Hasta 16 K x16 de memoria de programa.
Arquitectura RISC avanzada, hardware de 16 bits con 8 bits de datos.