Descargue como PDF, TXT o lea en línea desde Scribd
Descargar como pdf o txt
Está en la página 1de 10
PIC16F628A
CARACTERISTICAS DEL PIC 16F628A
DIAGRAMA DE PINES
Fig1.2 Diagrama de pines.
Fig.1.3 Pines principales. Propiedad Memoria de programa 1 KBytes) Memoria SRAM 224 Bytes Memoria EEPROM 128 Bytes Pines de E/ S 16 Entradas analgicas (ADC) No Salidas PWM 2 SPI No I2C No USART Si Temporizadores de 8 Bits 2 Temporizadores de 16 Bits 1 Comparadores 2 Oscilador Frecuencia mxima: 20 MHz Oscilador interno de 4 MHz. Nmero de pines 18 Encapsulado PDIP, SOIC, SSOP, QFN 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 tambin la memoria RAM.
Diagrama de bloques del PIC16F628A.
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.
INSTRUCCIONES DEL ENSAMBLADOR MPASM.
Estas 35 instrucciones son las mismas para toda la gama media de los microcontroladores pic as que si ms adelante se quiere realizar un programa para un pic 16F877 se usaran las mismas instrucciones.
Fig1.6 Proceso del ensamblador.
Antes de continuar es necesario definir algunos trminos que se usaran para explicar las instrucciones:
f: cualquier registro del microcontrolador W: registro de trabajo b: posicion de un bit en el registro 'f' d: destino, puede ser 'f' (d=1) o 'W' (d=0) etiqueta: grupo de caracteres que marcan el inicio de una parte del programa []: Opcional : Posicion de un bit dentro de un registro
Instrucciones orientadas a registros.
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 Operacin: (W) + (f) --> (destino) Flags afectados: C, DC, Z Ejemplo: ADDWF REG,1 Antes de la instruccin: W=0x03, REG=0x04 Despus de la instruccin: W=0x03, REG=0x07
ANDWF: (W AND f) Realiza la operacin lgica 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 Operacin: (W) AND (f) --> (destino) Flags afectados: Z Ejemplo: ANDWF REG,1 Antes de la instruccin: W=0x17, REG= 0xC2 Despus de la instruccin: W=0x17, REG= 0x02
CLRF: (Borra un registro) Borra el contenido del registro 'f' y se activa el flag Z. Sintaxis: [etiqueta] CLRF f Flags afectados: Z Ejemplo: CLRF REG Antes de la instruccin: REG=0x54 Despus de la instruccin: REG=0x00, Z=1
CLRW: (Borra el registro de trabajo W) Borra el contenido del registro 'W' y se activa el flag Z. Esta instruccin no tiene operandos. Sintaxis: [etiqueta] CLRW Flags afectados: Z Ejemplo: CLRW Antes de la instruccin: W=0x54 Despus de la instruccin: W=0x00, Z=1
COMF (Complementa el registro f) El contenido del registro 'f' se complementa. Si d=0 el resultado se almacena en el registro W. Si d=1 el resultado se almacena en el registro 'f'. Sintaxis: [etiqueta] COMF f,d Flags afectados: Z Ejemplo: COMF REG,0 Antes de la instruccin: REG=0x13 Despus de la instruccin: REG=0x13, W=0xEC
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 instruccin: CONT=0x01, Z=0 Despus de la instruccin: CONT=0x00, Z=1
DECFSZ: (Decrementa en 1 y salta si el resultado es 0) El contenido del registro 'f' se decrementa. Si 'd=0, el resultado se coloca en el registro W. Si d=1, el resultado se coloca en el registro 'f'. Si el resultado es 0, se salta la siguiente instruccin y se contina con la ejecucin. Sintaxis: [etiqueta] DECFSZ f,d Flags afectados: Ninguno
INCF: (Incrementa el registro f) Incrementa 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: [label] INCF f,d Flags afectados: Z Ejemplo: INCF CONT,1 Antes de la instruccin: CONT=0xFF, Z=0 Despus de la instruccin: CONT=0x00, Z=1
INCFSZ: (Incrementa en 1 y salta si el resultado es 0) El contenido del registro 'f' se incrementa. Si d=0, el resultado se coloca en el registro W. Si d=1, el resultado se coloca en el registro 'f'. Si el resultado es 0, se salta la siguiente instruccin y se contina con la ejecucin. Sintaxis: [etiqueta] DECFSZ f,d Flags afectados: Ninguno
IORWF: (W OR f) Realiza la operacin lgica OR entre el registro W y el registro 'f'. Si d=0 el resultado se almacena en el registro W. Si d=1, el resultado se almacn en el registro 'f'. Sintaxis: [etiqueta] IORWF f,d Flags afectados: Z Ejemplo: IORWF REG,0 Antes de la instruccin: REG=0x13, W=0x91 Despus de la instruccin: REG=0x13, W=0x93
MOVF: ( Mover el registro 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 Despus de la instruccin: W=REG
RLF: (Rota el registro f a la izquierda) El contenido del registro 'f' se rota una posicin a la izquierda. El bit de ms 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 instruccin: REG=b'11100110', C=0 Despus de la instruccin: REG=b'11001100', C=1
RRF: ( Rota el registro f a la derecha) El contenido del registro 'f' se rota una posicin a la derecha. El bit de menos peso pasa al carry y el carry se introduce por el bit de ms 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 instruccin: REG=b'11100110', C=0 Despus de la instruccin: 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 instruccin: REG=0x01, W=0x02 Despus de la instruccin: 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 instruccin: REG=0x54 Despus de la instruccin: REG=0x45
XORWF: (W XOR f) Realiza la funcin lgica OR exclusiva entre el contenido del registro W y el registro 'f'. Si d=0, el resultado se almacena en el registro W. Si d=1 el resultado se almacena en el registro 'f'. Sintaxis: [etiqueta] XORWF f,d Flags afectados: Z Ejemplo: XORWF REG,1 Antes de la instruccin: REG=0xAF, W=0xB5 Despus de la instruccin: REG=0x1A, W=0xB5
NOP: (No operacin) No realiza ninguna operacin, solo consume un ciclo de reloj Sintaxis: [etiqueta] NOP
INSTRUCCIONES ORIENTADAS A BITS:
BCF: (Borra un bit) Borra el bit 'b'del registro 'f' Sintaxis: [etiqueta] BCF f,b Ejemplo: BCF REG,0 Antes de la instruccin: REG=b'01101101' Despus de la instruccin: REG=b'01101100'
BSF: (Activa un bit) Activa el bit 'b' del registro 'f' Sintaxis: [etiqueta] BSF f,b Ejemplo: BSF REG,2 Antes de la instruccin: REG=b'01001001' Despus de la instruccin: REG=b'01001011'
BTFSC: (Checa un bit y salta si es 0) Si el bit "b" del registro "f" es 0, se salta una instruccin y se contina con la ejecucin. Sintaxis: [etiqueta] BTFSC f,b
BTFSS: (Checa un bit y salta si es 1) Si el bit "b" del registro "f" es 1, se salta una instruccin y se contina con la ejecucin. Sintaxis: [etiqueta] BTFSS f,b
INSTRUCCIONES ORIENTADAS A CONSTANTES Y DE CONTROL ANDLW: (W AND literal) Realiza la operacin lgica AND entre el registro W y la constante "k". El resultado se almacena en el registro W. Sintaxis: [label] ANDWL k Flags afectados: Z Ejemplo: ANDLW 0x5F Antes de la instruccin: W=0xA3 Despus de la instruccin: W=0x03
CALL: (Llamada a subrutina) Llamada y salto a subrutina. La direccin de retorno se guarda en el stack. La constante "k" de 8 bits forma la direccin de salto y se carga en los bits del PC. Los bits del PC se cargan con los bits del registro "STATUS". PC se pone a 0. Sintaxis: [etiqueta] CALL k Ejemplo: INICIO CALL DESTINO Antes de la instruccin: PC=INICIO Despus de la instruccin: PC=DESTINO
CLRWDT: (Borra el watchdog timer) Esta instruccin 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
GOTO: (Salto incondicional) Se trata de un salto incondicional. Los 9 bits de la constante "k" que forman la instruccin, se cargan en los bits del PC y forman la direccin de salto. Los bits del PC se cargan con los bits del registro de estado. Sintaxis: [etiqueta] GOTO k Ejemplo: INICIO GOTO DESTINO Antes de la instruccin: PC=0 Despus de la instruccin: PC=DESTINO
IORLW: (W OR literal) Se realiza la funcin lgica OR entre el registro W y la contante "k". El resultado se almacena en el registro W. Sintaxis: [etiqueta] IORLW k Flags afectados: Z Ejemplo: IORLW Ox35 Antes de la instruccin: W=0x9A Despus de la instruccin: W=0xBF
MOVLW: (Carga un literal en W) El registro W se carga con el valor de 8 bits expresado mediante la literal "k". Sintaxis: [etiqueta] MOVLW k Ejemplo: MOVLW 0x5A Despus de la instruccin: W=0x5A
RETURN: (Regresa de una subrutina) El programa regresa de la subrutina y ejecuta la instruccin que sigue a CALL Sintaxis: [etiqueta] RETURN
RETLW: Regresa de una subrutina y carga el valor K en W El programa regresa de la subrutina y carga el valor de 8 bits del registro k en el registro W Sintaxis: [etiqueta] RETLW, k Ejemplo: RETLW, 0x45 Antes de la instruccin: W=xx Despus de la instruccin: W=0x45
RETFIE: (Regresa de la rutina de servicio) Sintaxis: [etiqueta] RETFIE
SLEEP: (Entra en estado de reposo) Al salir, activa el bit de estado TO y borra el PD. El WDT y el prescaler se borran. Al entrar en el modo SLEEP, se detiene el oscilador. Sintaxis: [etiqueta] SLEEP Flags afectados: TO, PD, GPWUF
XORLW: ( W XOR literal) Realiza la funcin lgica OR exclusiva entre el contenido del registro W y la constante "k" de 8 bits. El resultado se almacena en el registro W. Sintaxis: [etiqueta] XORLW k Flags afectados: Z Ejemplo: XORLW 0xAF Antes de la instruccin: W = 0xB5 Despus de la instruccin: W = 0x1A
SUBLW: (Resta L W) A una constante "k" de 8 bits se le resta el registro W. El resultado es guardado en el mismo registro W. Sintaxis: [etiqueta] SUBLW k Flags afectados: C,DC,Z
MOVWF: (Mover el valor del registro W al registro f) El contenido del registro W se mueve al registro f. Sintaxis: [etiqueta] MOVWF f Flags afectados: Ninguno Ejemplo: MOVWF REG Antes de la instruccin: REG=0x03, W=0xA4 Despus de la instruccin: REG=0xA4, W=0xA4
Y estas son las 35 instrucciones que podemos utilizar para programar los microcontroladores PIC. La razn para que solo se utilicen 35 instrucciones en la programacin es que los PIC son microcontroladores RISC, y estas instrucciones estn bien optimizadas para tener una mayor velocidad de trabajo, una arquitectura ms simple y un cdigo ms compacto.
PROGRAMADOR MPLAB UTILIZADO PARA ESTE TIPO DE PIC. MPLAB es un editor IDE gratuito, destinado a productos de la marca Microchip. Este editor es modular, permite seleccionar los distintosmicrocontroladores soportados, adems de permitir la grabacin de estos circuitos integrados directamente al programador. Es un programa que corre bajo windows y como tal, presenta las clsicas barras de programa, de men, de herramientas de estado, etc. El ambiente MPLAB posee editor de texto, compilador y simulacin (no en tiempo real). Para comenzar un programa desde cero para luego grabarlo al C en MPLAB v7.XX los pasos a seguir son:
1. Crear un nuevo archivo con extensin .ASM y nombre cualquiera 2. Crear un Proyecto nuevo eligiendo un nombre y ubicacin 3. Agregar el archivo .ASM como un SOURCE FILE 4. Elegir el microcontrolador a utilizar desde SELECT DEVICE del men CONFIGURE
A continuacin se muestra un programa hecho en el MLAB, utilizando las algunas instrucciones que acabamos de mencionar, dicho programa es para encender 10 luces (led) secuencialmente.