La intención de este programa es seguir practicando el diseño de una subrutina, y en este caso, se mostrará como es posible usar más de una subrutina.
Para la realización de este programa, se ha utilizado el microcontrolador PIC16F610, cuyas características expuestas por Microchip, se pueden observar en la siguiente dirección: PIC16F610.
El programa es el siguiente:
;**********************************************************************
;                      AqueronteBlog@gmail.com                        *
;                                                                     *
;   Este archivo es propiedad intelectual del blog Aqueronte,         *
;   cuya dirección web, es la siguiente:                              *
;                                                                     *
;                   http://unbarquero.blogspot.com/                   *
;                                                                     *
;   Se permite cualquier modificación del archivo siempre y cuando    *
;   se mantenga la autoría del autor.                                 *
;                                                                     *
;   El autor no se responsabiliza de las consecuencias que pueda      *
;   ocasionar éste código debido a un uso inadecuado del mismo.       *
;**********************************************************************
;                                                                     *
;    Filename:      Ejemplo10.asm                                     *
;    Date:          20-Octubre-08                                     *
;    File Version:  vs0.0                                             *
;                                                                     *
;    Author:        Manuel Caballero                                  *
;    Company:       Hades                                             *
;                                                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Files Required: P16F610.INC                                      *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Notes: Crear y usar más de una subrutina.                        *
;                                                                     *
;**********************************************************************
   list      p=16F610              ; Directiva para definir el procesador
   #include < p16F610.inc >        ; Registros especificas del procesador
   __CONFIG   _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
; _CP_OFF:      Protección de código DESACTIVADO.
; _PWRTE_ON:    Retraso al reset ACTIVADO.
; _WDT_OFF:     Watchdog DESACTIVADO.
; _XT_OSC:      Oscilador externo del tipo XT.
;***** DEFINICIÓN DE VARIABLES
      CBLOCK 0x40       ; Inicio dirección memoria de datos del Banco 0
      Operador_A
      Operador_B
      Resultado
      ENDC
;**********************************************************************
       ORG     0x0000      ; Inicio de código
       goto    Inicio      ; Salta a programa principal
       ORG     0x0004      ; Vector de Interrupción
; El vector de interrupción se encuentra en la dirección 0x0004
; En este ejemplo no se usará interrupciones.
       retfie
Inicio
       bsf      Operador_A,3    ; 0x08 -> Operador_A
       bsf      Operador_B,2    ; 0x04 -> Operador_B
       call     Sumar           ; Llamada a la subrutina Suma
       call     Retardo         ; Llamada a la subrutina Retardo
       sleep                    ; uC entra en modo Sleep
       goto     Inicio          ; Vuelve a Inicio
;**********************************************************************
;                                                                     *
;    Subrutina: Sumar                                                 *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Date:         16-Octubre-08                                      *
;    File Version: vs0.0                                              *
;                                                                     *
;    Author:       Manuel Caballero                                   *
;    Company:      Hades                                              *
;                                                                     *
;**********************************************************************
;                                                                     * 
;  NOTAS: Suma de dos números y el resultado se almacena una variable *
;                                                                     *
;  Datos de Entrada:                                                  *
;     · Operando_A                                                    *
;     · Operando_B                                                    *
;     · Resultado                                                     *
;                                                                     *
;  Datos de Salida:                                                   *
;     · Resultado                                                     *
;                                                                     *
;**********************************************************************
Sumar
       movfw   Operador_A    ; Operador_A -> (W)
 
       addwf   Operador_B,W  ; Operador_A + Operador_B -> (W)
 
       movwf   Resultado     ; (W) -> Resultado
 
       return                ; Fin de subrutina Sumar
;**********************************************************************
;                                                                     *
;    Subrutina: Retardo                                               *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Date:         20-Octubre-08                                      *
;    File Version: vs0.0                                              *
;                                                                     *
;    Author:       Manuel Caballero                                   *
;    Company:      Hades                                              *
;                                                                     *
;**********************************************************************
;                                                                     * 
;  NOTAS: Carga un literal al registro de trabajo W                   *
;                                                                     *
;  Datos de Salida:                                                   *
;     · W                                                             *
;                                                                     *
;**********************************************************************
Retardo
        nop
        nop
 
        retlw    d'15'        ; Fin de subrutina: 15 -> (W)
        END                   ; directiva 'fin de programa'
cblock---endc
En este caso, el PIC 16F6210 comienza la dirección de memoria de datos en la dirección 0x40 en el banco de memoria 0, se declarará la variable Operador_A, Operador_B y Resultado.
El propósito de este programa es familiarizarse con las instrucciones de programación en lenguaje ensamblador, donde se usará instrucciones que serán comunes en nuestros códigos.
En este programa se muestra como se diseña y se usa más de una subrutina en sí en un programa, concretamente se han usado las subrutinas del Ejemplo 8 y del Ejemplo 9.
Para ver el resultado, compilamos el código y seleccionamos el MPLAB SIM para poder simularlo.
Abrimos la ventana de Watch y seleccionamos en la categoría de Symbol la variable definida como Operador_A, Operador_B y Resultado, y el la categoría de SFR, el registro WREG.
Simulamos el código paso a paso.
El propósito de este programa es usar más de una subrutina, el programa principal llama a la primera subrutina cuya intención es sumar dos variables y almacenarla en otra variable, la segunda subrutina sirve para cargar un literal al registro de trabajo W.
Se puede observar en el siguiente vídeo todo lo explicado anteriormente:
Este proyecto se puede descargar en la siguiente dirección:
|  |  | Ejemplo 10. | 
|  |  | Ejemplo 10. | 
 
 








0 comentarios:
Publicar un comentario