Hola:
Código:
[COLOR=#006600][COLOR=#006600];**********************************************************************
[COLOR=#006600]; AqueronteBlog@gmail.com *[/COLOR]
[COLOR=#006600]; *[/COLOR]
[COLOR=#006600]; Este archivo es propiedad intelectual del blog Aqueronte, *[/COLOR]
[COLOR=#006600]; cuya dirección web, es la siguiente: *[/COLOR]
[COLOR=#006600]; *[/COLOR]
[COLOR=#006600]; http://unbarquero.blogspot.com/ *[/COLOR]
[COLOR=#006600]; *[/COLOR]
[COLOR=#006600]; Se permite cualquier modificación del archivo siempre y cuando *[/COLOR]
[COLOR=#006600]; se mantenga la autoría del autor. *[/COLOR]
[COLOR=#006600]; *
; El autor no se responsabiliza de las consecuencias que pueda *
; ocasionar éste código debido a un uso inadecuado del mismo. *
[/COLOR][COLOR=#006600];**********************************************************************[/COLOR]
[COLOR=#006600]; *[/COLOR]
[COLOR=#006600]; Filename: Ejemplo2.asm *[/COLOR]
[COLOR=#006600]; Date: 6-Octubre-08 *[/COLOR]
[COLOR=#006600]; File Version: vs0.0 *[/COLOR]
[COLOR=#006600]; *[/COLOR]
[COLOR=#006600]; Author: Manuel Caballero *[/COLOR]
[COLOR=#006600]; Company: Hades *[/COLOR]
[COLOR=#006600]; *[/COLOR]
[COLOR=#006600]; *[/COLOR]
[COLOR=#006600];**********************************************************************[/COLOR]
[COLOR=#006600]; *[/COLOR]
[COLOR=#006600]; Files Required: P16F628A.INC *[/COLOR]
[COLOR=#006600]; *[/COLOR]
[COLOR=#006600];**********************************************************************[/COLOR]
[COLOR=#006600]; *[/COLOR]
[COLOR=#006600]; Notes: Manejar instrucciones de operaciones. *[/COLOR]
[COLOR=#006600]; *[/COLOR]
[COLOR=#006600];**********************************************************************[/COLOR]
[COLOR=#000099] list[/COLOR] [COLOR=#330033]p=16F628A[/COLOR] [COLOR=#006600]; Directiva para definir el procesador[/COLOR]
[COLOR=#000099] #include[/COLOR] < [COLOR=#330033]p16F628A.inc[/COLOR] > [COLOR=#006600] ; Registros especificas del procesador[/COLOR]
[COLOR=#000099] __CONFIG [COLOR=#330033]_BOREN_OFF & _CP_OFF & _DATA_CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _INTOSC_OSC_NOCLKOUT[/COLOR][/COLOR]
[COLOR=#006600][/COLOR]
[COLOR=#006600]; _BOREN_OFF: Reset por Brown-out DESACTIVADO.
; _CP_OFF: Protección de código DESACTIVADO.
; _DATA_CP_OFF: Protección de datos DESACTIVADO.
; _PWRTE_ON: Retraso al reset ACTIVADO.[/COLOR]
[COLOR=#006600][COLOR=#006600]; _WDT_OFF: Watchdog DESACTIVADO.
; _LVP_OFF: Programación en bajo voltaje DESACTIVADO.
; _MCLRE_ON: Pin de reset externo ACTIVADO.
; _INTOSC_OSC_NOCLKOUT: Oscilador interno sin salida CLK.[/COLOR][/COLOR]
[COLOR=#006600];***** DEFINICIÓN DE VARIABLES[/COLOR]
[COLOR=#000099][/COLOR] [COLOR=#000099]CBLOCK[/COLOR] [COLOR=#000066]0x20 [COLOR=#006600]; Inicio dirección memoria de datos del Banco 0[/COLOR][/COLOR]
[COLOR=#330033] Numero[/COLOR]
[COLOR=#000099] ENDC[/COLOR]
[COLOR=#006600];**********************************************************************[/COLOR]
[COLOR=#000099] ORG 0x000 [/COLOR] [COLOR=#006600]; Inicio de código[/COLOR]
[COLOR=#000099] bsf[/COLOR] [COLOR=#663366]STATUS,RP0[/COLOR] [COLOR=#006600]; Banco 1[/COLOR]
[COLOR=#000099] bsf [/COLOR] [COLOR=#663366]PCON,OSCF[/COLOR] [COLOR=#006600]; Oscilador interno a 4MHz[/COLOR]
[COLOR=#000099] bcf[/COLOR] [COLOR=#663366]STATUS,RP0[/COLOR] [COLOR=#006600]; Banco 0[/COLOR]
[COLOR=#006600] [COLOR=#000066] goto[/COLOR] [COLOR=#663366]Inicio[/COLOR] ; Salta a programa principal
[/COLOR][COLOR=#006600][COLOR=#000099] ORG 0x0004 [COLOR=#006600]; Vector de Interrupción[/COLOR][/COLOR][/COLOR][COLOR=#006600]; El vector de interrupción se encuentra en la dirección 0x0004
; En este ejemplo no se usará interrupciones.
[COLOR=#000099] retfie[/COLOR]
[/COLOR]
[COLOR=#663366]Inicio[/COLOR]
[COLOR=#000066] [COLOR=#000099] movlw 0x03[COLOR=#330033][/COLOR] [COLOR=#006600]; 3 -> (W)[/COLOR][/COLOR] [COLOR=#000099]
movwf [COLOR=#330033]Numero[/COLOR] [COLOR=#006600]; (W) -> Numero[/COLOR] [/COLOR]
[COLOR=#663366]Bucle_Dec[/COLOR]
[COLOR=#000099] decfsz [COLOR=#663366]Numero,F[/COLOR] [COLOR=#006600]; --Numero, Salta si Numero = 0[/COLOR]
goto [COLOR=#663366]Bucle_Dec[/COLOR] [COLOR=#006600]; Si Numero != 0 vuelve a Bucle_Dec[/COLOR]
subwf [COLOR=#663366]Numero,F[/COLOR] [COLOR=#006600]; Numero = Numero - W[/COLOR]
[COLOR=#663366]Bucle_Inc[/COLOR]
incfsz [COLOR=#663366]Numero,F[/COLOR] [COLOR=#006600]; ++Numero, Salta si Numero = 0[/COLOR]
goto [COLOR=#663366]Bucle_Inc[/COLOR] [COLOR=#006600] ; Si Numero != 0 vuelve a Bucle_Inc[/COLOR][/COLOR][COLOR=#000099]
[COLOR=#006600][/COLOR][/COLOR][COLOR=#330033][COLOR=#000099][/COLOR][/COLOR][COLOR=#000099]
goto [COLOR=#663366]Inicio[/COLOR][/COLOR][/COLOR] [COLOR=#006600]; Vuelve a Inicio[/COLOR]
[COLOR=#000099] END[/COLOR] [COLOR=#006600]; directiva 'fin de programa'[/COLOR][/COLOR][/COLOR]
Para la realización de este programa, se ha empleado una variable definida en memoria RAM. Para tal propósito, se ha usado la instrucción:
cblock---endc
En este caso, el PIC 16F628A comienza la dirección de memoria de datos en la dirección
0x20, se declarará la variable
Numero.
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 utilizan las instrucciones de decremento e incremento con posibilidad de salto y también se muestra como usar la instrucción de resta entre un registro y W.
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
Numero, y el la categoría de
SFR, el registro
WREG.
Simulamos el código paso a paso.
Se puede apreciar como el valor de la constante se almacena en el registro de trabajo W, después se iniciará la variable
Numero con el valor contenido en W, y a partir de ahí, el programa decrementa la variable
Numero hasta que sea cero su valor, posteriormente, se incrementara dicha variable hasta que sea cero su valor.
http://unbarquero.blogspot.com/2008/10/mid-range-pic-ejemplo-2.html
http://unbarquero.blogspot.com/2008/07/subwf.html
Saludo.