Como Funciona PIC16F628A
Como Funciona PIC16F628A
Como Funciona PIC16F628A
La electrónica ha evolucionado mucho. Casi todo lo que hasta hace unos años se realizaba
mediante un grupo (a veces muy numeroso) de circuitos integrados conectados entre sí, hoy
se puede realizar utilizando un microcontrolador y unos pocos componentes adicionales.
Los microcontroladores mas utilizados hoy en día, son los del fabricante MICROCHIP, por
la amplia variedad de microcontroladores que nos ofrece, y la información de cada uno de
los microcontroladores que nos proporciona sin ningún costo alguno.
El lenguaje nativo de estos microcontroladores es el ASM, y en el caso de la familia “16F”
solo posee 35 instrucciones. Pero el ASM es un lenguaje que está mucho más cerca del
hardware que del programador, y gracias a la miniaturización que permite incorporar cada
vez más memoria dentro de un microcontrolador sin aumentar prácticamente su costo, han
surgido compiladores de lenguajes de alto nivel. Entre ellos se encuentran varios dialectos
BASIC y C.
“CONCEPTOS DE UN MICROCONTROLADOR”
Un microcontrolador es como un ordenador en pequeño: dispone de una memoria donde se
guardan los programas, una memoria para almacenar datos, dispone de puertos de entrada y
salida, etc. A menudo se incluyen puertos seriales (RS-232), conversores analógico/digital,
generadores de pulsos PWM para el control de motores, bus I2C, y muchas cosas más. Por
supuesto, no tienen ni teclado ni monitor, aunque podemos ver el estado de teclas
individuales o utilizar pantallas LCD o LED para mostrar información.
Propiedad
Memoria de programa 1 KBytes)
Memoria SRAM 224 Bytes
Memoria EEPROM 128 Bytes
Pines de E/S 16
Entradas analógicas (ADC) No
Salidas PWM 2
SPI No
I2C No
USART Si
Temporizadores de 8 Bits 2
Temporizadores de 16 Bits 1
Comparadores 2
Frecuencia máxima: 20 MHz
Oscilador
Oscilador interno de 4 MHz.
Número de pines 18
Encapsulado PDIP, SOIC, SSOP, QFN
“DIAGRAMA DE PINES”
Como podemos ver, los pines 1, 2, 3, 4, 15, 16, 17 y 18 tienen el nombre de RAx. Esos
pines conforman el puerto A, “PORTA” de ahora en más. Los pines 6 al 13 forman parte
del puerto B (“PORTB”). El pin 5 es el que se conectara al negativo de la fuente de
alimentación. El 14 irá conectado a 5V.
Como habrán notado, muchos de los pines tienen más de una descripción. Esto se debe
a que pueden utilizarse de varias maneras diferentes, seleccionables por programa.
Por ejemplo, el pin 4 sirve como parte del PORTA, como RESET (MCLR = Máster
Clear) y como tensión de programación (Vpp)
Diagramas de pines del PIC16F628A.
Mapa de memoria del PIC16F628A.
Como vemos en la figura 1.4 el mapa de memoria se encuentra dividida en 4 bancos en estos bancos se
encuentra los registros de control así como también la memoria RAM
.
En la figura 1.5 se muestra el diagrama de bloques del pic16f628a como vemos los puertos a y
b son direccionales, o sea se les puede configurara como entrada o salida digital.
¿COMO CARGAREMOS UN PROGRAMA AL
MICROCONTROLADOR?
Utilizaremos la aplicación llamada MPLAB, en el cual cargaremos las instrucciones que
deseemos, que nuestro Pic realice, esto se llevara a cabo con un lenguaje C.
Antes de continuar es necesario definir algunos términos que se usaran para explicar
las instrucciones:
ADDWF: Suma W y f
Suma el contenido del registro 'W' y el registro 'f'. Si "d" es 0, el resultado se
almacena en el registro W. Si 'd' es 1 el resultado se almacena en el registro 'f'.
Sintaxis: [etiqueta] ADDWF f,d
Operación: (W) + (f) --> (destino)
Flags afectados: C, DC, Z
Ejemplo: ADDWF REG,1
Antes de la instrucción: W=0x03, REG=0x04
Después de la instrucción: W=0x03, REG=0x07
ANDWF: (W AND f)
Realiza la operación lógica AND entre el registro W y el registro "f". Si "d" es 0 el
resultado se almacena en el registro W. Si "d" es 1, el resultado se almacena en el
registro "f".
Sintaxis: [etiqueta] ANDWF f,d
Operación: (W) AND (f) --> (destino)
Flags afectados: Z
Ejemplo: ANDWF REG,1
Antes de la instrucción: W=0x17, REG= 0xC2
Después de la instrucción: W=0x17, REG= 0x02
Borra el contenido del registro 'W' y se activa el flag Z. Esta instrucción no tiene
operandos.
Sintaxis: [etiqueta] CLRW
Flags afectados: Z
Ejemplo: CLRW
Antes de la instrucción: W=0x54
Después de la instrucción: W=0x00, Z=1
DECF: (Decrementa f en 1)
De decrementa en uno el contenido del registro 'f'. Si d=0, el resultado se almacena en
W. Si d=1, el resultado se almacena en 'f'.
Sintaxis: [etiqueta] DECF f,d
Flags afectados: Z
Ejemplo: DEC CONT, 1
Antes de la instrucción: CONT=0x01, Z=0
Después de la instrucción: CONT=0x00, Z=1
IORWF: (W OR f)
El contenido del registro 'f' se mueve al destino 'd'. Si d=0, el destino es el registro W.
Si d=1, el destino es el propio registro 'f'.
Sintaxis: [etiqueta] MOVF f,d
Flags afectados: Z
Ejemplo: MOVF REG,0
Después de la instrucción: W=REG
El contenido del registro 'f' se rota una posición a la izquierda. El bit de más peso pasa
al carry y el carry se introduce por el bit de menos peso de 'f'. Si d=0, el resultado se
coloca en el registro W. Si d=1, el resultado queda en el registro 'f'.
Sintaxis: [etiqueta] RLF f,d
Flags afectados: C
Ejemplo: RLF REG,1
Antes de la instrucción: REG=b'11100110', C=0
Después de la instrucción: REG=b'11001100', C=1
RRF: ( Rota el registro f a la derecha)
El contenido del registro 'f' se rota una posición a la derecha. El bit de menos peso
pasa al carry y el carry se introduce por el bit de más peso de 'f'. Si d=0, el resultado se
coloca en el registro W. Si d=1, el resultado queda en el registro 'f'.
Sintaxis: [etiqueta] RLF f,d
Flags afectados: C
Ejemplo: RLF REG,1
Antes de la instrucción: REG=b'11100110', C=0
Después de la instrucción: REG=b'01110011', C=0
SUBWF: (Resta f – W)
Resta el contenido del registro 'f' menos el contenido del registro W. Si d=0, el
resultado se almacena en el registro W. Si d=1, el resultado se almacena en el registro
'f'.
Sintaxis: [etiqueta] SUBWF f,d
Flags afectados: C, DC, Z
Ejemplo: SUBWF REG,1
Antes de la instrucción: REG=0x01, W=0x02
Después de la instrucción: REG=0xFF, W=0x02
SWAPF: (Intercambio de f)
El nibble bajo del registro 'f' se intercambia con el nibble alto del mismo. Si d=0, el
resultado se coloca en el registro W. Si d=1, el resultado queda en el registro 'f'.
Sintaxis: [etiqueta] SWAPF f,d
Flags afectados: Ninguno
Ejemplo: SWAPF REG,1
Antes de la instrucción: REG=0x54
Después de la instrucción: REG=0x45
XORWF: (W XOR f)
Si el bit "b" del registro "f" es 0, se salta una instrucción y se continúa con la
ejecución.
Sintaxis: [etiqueta] BTFSC f,b
Si el bit "b" del registro "f" es 1, se salta una instrucción y se continúa con la
ejecución.
Sintaxis: [etiqueta] BTFSS f,b
Esta instrucción borra tanto el "watchdog" como el prescaler. Los bits TO y PD del
registro de estado se ponen a "1".
Sintaxis: [label] CLRWDT
Flags afectados: TO, PD
IORLW: (W OR literal)
SUBLW: (Resta L – W)
Y estas son las 35 instrucciones que podemos utilizar para programar los
microcontroladores PIC. La razón para que solo se utilicen 35 instrucciones en la
programación es que los PIC son microcontroladores RISC, y estas instrucciones están
bien optimizadas para tener una mayor velocidad de trabajo, una arquitectura más
simple y un código más compacto.