Este programa está orientado a la elaboración de una subrutina simple en MPASM.
Para la realización de este programa, se ha utilizado el microcontrolador PIC16F505, cuyas características expuestas por Microchip, se pueden observar en la siguiente dirección: PIC16F505.
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:      Ejemplo8.asm                                      *
;    Date:          19-Julio-08                                       *
;    File Version:  vs0.0                                             *
;                                                                     *
;    Author:        Manuel Caballero                                  *
;    Company:       Hades                                             *
;                                                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Files Required: P16F505.INC                                      *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Notes: Como hacer una subrutina.                                 *
;                                                                     *
;**********************************************************************
   list      p=16F505              ; Directiva para definir el procesador
   #include < p16F505.inc >        ; Registros especificas del procesador
   __CONFIG   _MCLRE_ON & _CP_OFF & _WDT_OFF & _IntRC_OSC_RB4EN
; _MCLRE_ON:        Reset externo ACTIVADO.
; _CP_OFF:          Protección del código DESACTIVADO.
; _WDT_OFF:         Watchdog DESACTIVADO.
; _IntRC_OSC_RB4EN: Oscilador interno de 4MHz: Pin RB4 E/S.
;***** DEFINICIÓN DE VARIABLES
   CBLOCK   0x08
   Operador1
   Operador2
   Resultado
   ENDC
;**********************************************************************
   ORG     0x03FF      ; Valor del oscilador interno
; El valor del oscilador interno se localiza en la dirección 0xFF
; como una instrucción movlw k, donde k es el valor de configuración del oscilador.
  ORG     0x0000       ; Inicio de código
  movwf   OSCCAL       ; Actualiza el valor del oscilador interno a 4MHz 
  movlw   b'11011111' 
  OPTION               ; Transición del TMR0 interna
  clrf    PORTB
  clrf    PORTC
  movlw   0xFF         ; Puertos B y C...
  TRIS    PORTC 
  TRIS    PORTB        ; ...configurados como entrada.
Inicio
  movf    PORTC,W 
  movwf   Operador1    ; Operador1 = PORTC
  movf    PORTB,W
  movwf   Operador2    ; Operador2 = PORTB
  call    Suma         ; Llama a la subrutina de nombre Suma
  goto    Inicio
;**********************************************************************
;                                                                     *
;    Subrutina: Suma                                                  *
;                                                                     *
;**********************************************************************
;                                                                     *
;    Date:              19-Julio-08                                   *
;    File Version:      vs0.0                                         *
;                                                                     *
;    Author:            Manuel Caballero                              *
;    Company:           Hades                                         *
;                                                                     *
;**********************************************************************
;                                                                     * 
;    NOTAS: Realiza la suma de dos variables definidas, el resultado  *
;           se almacena en otra variable llamada Resultado.           *
;                                                                     *
;    Datos de Entrada:                                                *
;     · Operador1                                                     *
;     · Operador2                                                     *
;                                                                     *
;    Datos de Salida:                                                 *
;     · Resultado                                                     *
;                                                                     *
;**********************************************************************
Suma
  movf    Operador1,W
  addwf   Operador2,W  ; W = Operador1 + Operador2
  movwf   Resultado    ; Resultado = W
  retlw   0            ; Fin de la subrutina: W = 0
  END                  ; directiva 'fin de programa'
cblock---endc
Dichas variables son Operador1 y Operador2 que albergarán la lectura de los puertos C y B respectivamente, y la variable Resultado que almacenará la suma de las dos anteriores variables.
El propósito de este programa es hacer una lectura de los puertos B y C y almacenar el resultado en dos variables definidas en memoria RAM, posteriormente, sumar dichas variables y almacenar el resultado en otra variable.
Lo interesante de este programa es que dicha suma se realice mediante una subrutina que se llamará Suma.
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 Operador1, Operador2 y Resultado, y el la categoría de SFR, los registros WREG, PORTB y PORTC.
Como en este programa se va a leer el contenido de los puertos B y C, es necesario poder simularlos, es decir, darles valores manualmente para poder observar a posteriori como se ejecuta la subrutina Suma.
Para poder ingresar datos a los puertos, estando éstos configurados como entrada, se hace click en el menú de herramientas en Debugger, posteriormente seleccionamos Stimulus y finalmente la opción New Workbook.
Pulsaremos sobre PIN/SFR y seleccionaremos todos los pines del puerto B y del puerto C, la configuración se determina en Action, la cual elegiremos Toggle.
La función Toggle hace que cada vez que pulsemos sobre Fire (el símboolo de la izquierda >), el pin en cuestión cambie de estado.
Por ello, es muy útil ya que podremos simular distintos estados de los pines de los puertos B y C para poder ver la suma de dichos valores que ejecuta en la subrutina.
La forma de funcionamiento es la siguiente: pulsar sobre el símbolo > de la izquierda de la ventana de Stimulus y en la ventana de Watch, podremos ver que el pin que hemos pulsado en Stimulus cambia de estado.
Se puede observar en el siguiente vídeo todo lo explicado anteriormente:
Este proyecto se puede descargar en la siguiente dirección:
|  |  | Ejemplo 8. | 
|  |  | Ejemplo 8. | 
 
 








0 comentarios:
Publicar un comentario