sábado, 27 de julio de 2013

Instrucciones Aritméticas

Y continuemos con las instrucciones aritméticas.


Instrucciones de Carga

En el siguiente vídeo se habla muy bien sobre como funcionan las instrucciones de carga y bits.

Ejercicio 03 Función Sleep

;***************FUNCION SLEEP**************
;BAJO CONSUMO DE CORRIENTE

;ZONA DE DATOS*********************************************************************
    __CONFIG _CP_OFF& _WDT_OFF& _PWRTE_ON& _XT_OSC ;CONFIGURACION PALABRA DE CONTROL

            LIST P=16F84A   ;MICROCONTROLADOR UTILIZADO
            INCLUDE <P16F84A.INC>   ;ETIQUETAS DEL MICROCONTROLADOR ESPECIFICADO



;ZONA DE CODIGOS*********************************************************************

            ORG 0           ;INCIO DE PROGRAMA EN LA DIRECCION 0 DE MEMORIA DE PROGRAMA

INICIO
            BSF STATUS,RP0  ;FIJA A 1 EL BIT 5 DEL REGISTRO STATUS PARA ACCESAR AL BANCO 1
            CLRF TRISB      ;LIMPIA LAS LINES DEL PTO B PARA CONFIGURARLO COMO SALIDA
            MOVLW B'00011111'
            MOVWF TRISA     ;CARGAMOS EL CONTENIDO DEL REGISTRO DE TRABAJO W A TRIS A PARA CONFIGURARLO COMO ENTRADA
            BCF STATUS,RP0  ;FIJA A 0 EL BIT 5 DEL REGISTRO STATUS PARA REGRESAR AL BANCO 0
PRINCIPAL
            MOVF PORTA,W     ;EL VALOR QUE CONTIENE EL PUERTO A SE MUEVE AL REGISTRO DE TRABAJO W
            MOVWF PORTB     ;EL VALOR DEL REGISTRO W SE MUEVE AL PUERTO B
            SLEEP           ;EL PROGRAMA ENTRA EN MODO BAJO CONSUMO DEL CUAL NO PODRA SALIR
            END             ;FIN DEL PROGRAMA

Ejercicio 02 Puertos de Entrada y Salida

;***************02PUERTOS_IN_OUT**************
;LOS DATOS INSTRODUCIDOS POR EL PUERTO A DEBERAN SALIR POR EL PUERTO B


;ZONA DE DATOS*********************************************************************
    __CONFIG _CP_OFF& _WDT_OFF& _PWRTE_ON& _XT_OSC ;CONFIGURACION PALABRA DE CONTROL

            LIST P=16F84A   ;MICROCONTROLADOR UTILIZADO
            INCLUDE <P16F84A.INC>   ;ETIQUETAS DEL MICROCONTROLADOR ESPECIFICADO



;ZONA DE CODIGOS*********************************************************************

            ORG 0           ;INCIO DE PROGRAMA EN LA DIRECCION 0 DE MEMORIA DE PROGRAMA

INICIO
            BSF STATUS,RP0  ;FIJA A 1 EL BIT 5 DEL REGISTRO STATUS PARA ACCESAR AL BANCO 1
            CLRF TRISB      ;LIMPIA LAS LINES DEL PTO B PARA CONFIGURARLO COMO SALIDA
            MOVLW B'00011111'
            MOVWF TRISA     ;CARGAMOS EL CONTENIDO DEL REGISTRO DE TRABAJO W A TRIS A PARA CONFIGURARLO COMO ENTRADA
            BCF STATUS,RP0  ;FIJA A 0 EL BIT 5 DEL REGISTRO STATUS PARA REGRESAR AL BANCO 0
PRINCIPAL
            MOVF PORTA,W     ;EL VALOR QUE CONTIENE EL PUERTO A SE MUEVE AL REGISTRO DE TRABAJO W
            MOVWF PORTB     ;EL VALOR DEL REGISTRO W SE MUEVE AL PUERTO B
            GOTO PRINCIPAL  ;SE CREA UN BUCLE CERRADO E INFINITO
            END             ;FIN DEL PROGRAMA

Ejemplo 01 Constante



;***************01CONSTANTE**************
;CREAR UNA CONSTANTE Y ASIGNAR UN VALOR ENTRE 0 - 255


;ZONA DE DATOS*********************************************************************
    __CONFIG _CP_OFF& _WDT_OFF& _PWRTE_ON& _XT_OSC ;CONFIGURACION PALABRA DE CONTROL

            LIST P=16F84A   ;MICROCONTROLADOR UTILIZADO
            INCLUDE <P16F84A.INC>   ;ETIQUETAS DEL MICROCONTROLADOR ESPECIFICADO

CONSTANTE   EQU H'01'        ;SE CARGA LA VARIABLE CONSTANTE CON EL VALOR 01 HEXADECIMAL

;ZONA DE CODIGOS*********************************************************************

            ORG 0           ;INCIO DE PROGRAMA EN LA DIRECCION 0 DE MEMORIA DE PROGRAMA

INICIO
            BSF STATUS,RP0  ;FIJA A 1 EL BIT 5 DEL REGISTRO STATUS PARA ACCESAR AL BANCO 1
            CLRF TRISB      ;LIMPIA LAS LINES DEL PTO B PARA CONFIGURARLO COMO SALIDA
            BCF STATUS,RP0  ;FIJA A 0 EL BIT 5 DEL REGISTRO STATUS PARA REGRESAR AL BANCO 0
            MOVLW CONSTANTE ;CARGA EL REGISTRO DE TRABAJO W CON EL VALOR DE CONSTANTE EL CUAL ES H'01'
PRINCIPAL
            MOVWF PORTB     ;EL VALOR QUE CONTIENE EL REGISTRO DE TRABAJO W SE MUEVE AL PTO B
            GOTO PRINCIPAL  ;SE CREA UN BUCLE CERRADO E INFINITO
            END             ;FIN DEL PROGRAMA

Diagrama de Circuito Entrenador PIC16F84A en Proteus

Diagrama de Circuito Entrenador PIC16F84A en Proteus



viernes, 26 de julio de 2013

Estructura de un programa en ensamblador


  • Los ficheros de código fuente llevarán la extensión *.ASM
  • Los ficheros de listado llevarán la extensión *.LST
  • Los ficheros de código objeto llevarán la extensión *.OB]
  • Los ficheros de errores llevarán la extensión *.ERR
  • Los ficheros ejecutables en formato Intel Hex llevarán la extensión *.HEX
  • Comentario descriptivo del programa (utilizar una cabecera estandarizada).
  • Definir el microcontrolador que se usará (con las directivas LIST e INCLUDE).
  • Introducir las opciones de compilación (que serán vistas más adelante) (opcional).
  • Establecer las constantes que se usarán (con la directiva EQU).
  • Reservar espacios de memoria (directiva RES) (si es necesario).
  • Configurar los puertos.
  • Desarrollar el programa con comentarios, en lo posible explicando cada línea de código..
  • Los mnemónicos escritos en minúscula y las constantes y variables en mayúscula hacen que el código escrito sea más visible.
  • Colocar las rutinas en el mismo sitio, todas contiguas.
  • Dibujar diagramas de flujo o escribir seudocódigo.
    Su estructura en un programa ejemplo muy simple:



   Hemos visto la estructura general. Ahora veremos la posición de los elementos del código por 4 columnas:
  • Columna 1: Etiquetas. Las etiquetas se rigen por las siguientes normas:
    • Debe situarse en la primera columna.
    • Debe contener únicamente caracteres alfanuméricos.
    • El máximo de caracteres es de 31.
  • Columna 2: Operación. En esta columna se situarán las instrucciones. El campo del código de operación es el único que nunca puede estar vacío; éste siempre contiene una instrucción o una directiva del ensamblador.
  • Columna 3: Operandos El campo de operandos o de dirección puede contener una dirección o un dato, o puede estar en blanco. Normanmente contendrá registros o literales con los que se operará (f, l o k , b y w).
  • Columna 4: Comentario. El campo del comentario o de etiquetas es opcional. Aquí se situará cualquier comentario personalizado que deseemos. Estos son útiles para saber qué hace un programa sin tener que descifrar el código entero. El compilador (ensamblador) ignorará todo texto más allá del carácter punto y coma ";".
    Los comentarios generalmente se sitúan en la cuarta columna para describir la acción de una línea de código, pero pueden situarse en cualquier parte de programa para describir cualquier otro evento, siempre que estén después del carácter ";" (semicolon en inglés).
    Normalmente las columnas son separadas por una tabulación. El espacio mínimo entre dos columnas es de un carácter, que puede ser un espacio en vez de una tabulación.

El lenguaje ensamblador del PIC16F84A 

http://perso.wanadoo.es/pictob/ensamblador.htm#estructura_de_un_programa_en_ensamblador