You are on page 1of 2

DESARROLLO DEL PROGRAMA EN ASSEMBLER PARA CONTROLAR EL GIRO DEL MOTOR DC

;***********************************************************
; ENCABEZADO DE PROGRAMA
;***********************************************************
.equ __30f4013,1
.include "p30f4013.inc"
;***********************************************************
; CONFIGURACION DEL OSCILADOR, DEL RESET, STACK Y WATCHDOG
;***********************************************************
config __FOSC,CSW_FSCM_OFF&XT_PLL4 ;use cristal oscilador con el 4x PLL
config __FWDT,WDT_OFF ;Desabilitado Watchdog Timer
config __FBORPOR,PBOR_ON&MCLR_EN
config __FGS,CODE_PROT_OFF ;Desabilitado protecion de codigo
;***********************************************************
; GENERACION DE ETIQUETAS
.equ cont,#0x0810 ; VARIABLE cont en puntero #0x0810
.equ cont1,#0x0812 ; VARIABLE cont1 en puntero #0x0812
.global xx ; Etiqueta xx
.global yy ; Etiqueta yy
.global zz ; Etiqueta zz
.global __reset ; Activando función RESET
.text ; Inicio de programa
;***********************************************************
;PROGRAMA PRINCIPAL
;***********************************************************
__reset:
goto main ; Salta a main
.org 100 ; Inicia programa en registro de memoria 100

main:
; mov #_SP_init,W15 ;inicializa el SP
; mov #_SPLIM_init,W0
; mov W0,SPLIM
nop
;***********************************************************
; CONFIGURACION DE PUERTOS
;***********************************************************

mov #0x0000,W0 ; Guardamos el literal #0x0000 en W0


mov W0,TRISB ; puerto B como salida
mov #0x0001,W0 ; Guardamos el literal #0x0001 en W0
mov W0,TRISD ; RD1 será entrada
;***********************************************
;RUTINAS PARA GIRO Y STOP
;***********************************************
bucle: ; verifica el estado del interruptor abierto o cerrado?
BTSC PORTD,#0 ; Revisa el bit 0 del puerto B
bra detener ; si no es 0 salta a “detener”
bra giro ; caso contrario salta a esta instruccion

detener:
call zz ; Llama a subrutina zz
bra bucle ; Regresa a bucle

giro:
call xx ; Llama a subrutina xx
call yy ; Llama a subrutina yy
bra bucle ; Regresa a bucle
;***********************************************
;RUTINAS PARA XX, YY Y ZZ
;***********************************************
xx:
mov #0x0001,W1 ; Guardamos el literal #0x0001 en W1
mov W1,PORTB ; Movemos W1 a PORTB
call delay ; Salta a Delay
return
yy:
mov #0x0002,W1 ; Guardamos el literal #0x0002 en W1
mov W1,PORTB ; Movemos W1 a PORTB
call delay ; Salta a Delay
return
zz:
mov #0x0000,W1 ; Guardamos el literal #0x0000 en W1
mov W1,PORTB ; Movemos W1 a PORTB
return
;***********************************************
;RUTINAS PARA RETARDOS
;***********************************************
delay: ;Subrutina de Retardo en dos lazos
mov # 0xffff ,W2
mov W2,cont
YY:
mov # 0x001F, W1
mov W1,cont1
XX:
dec cont1 ; cont1-1=cont1
bra NZ,XX
BTSC PORTD,#0 ; chequear interruptor salta si es cero o cerrado
bra bucle
dec cont ; cont-1=cont
bra NZ,YY
return
;****************************************************
.end

You might also like