You are on page 1of 6

Problema 3

a) Programacin en MPLab
;Declaracin variables y subprocesos
.global _main ;creamos la etiqueta main
.text
; Comenzamos con la programacin principal
_main:

mov #0xFFFF,w0
mov w0, ADPCFG ;convierte entrada analgica
A0 a entrada digital
mov #0x07E0,w0
mov w0, TRISB

mov #0x0000, w0
mov w0, PORTB ;movemos el Wo al
puerto B

x1: btss PORTB, #0xA ;Generamos un salto si a la


funcin #0xA ser en 1
goto x1 ;va a la rutina "x1"
x2: btsc PORTB, #0xA ;Generamos un salto si a la
funcin #0xA ser en 0
goto x2 ;nos lleva a la rutina "x2"

mov PORTB, w0

mov w0, w1 ;w0=w1

;muevo 7 veces a w1
rrc w1, w1
rrc w1, w1
rrc w1, w1
rrc w1, w1
rrc w1, w1
rrc w1, w1
rrc w1, w1

and w1, #0x0003,w1 ;w1=w1*0x0003

mov w0, w2 ;w0=w2

;muevo 7 veces a w2
rrc w2, w2
rrc w2, w2
rrc w2, w2
rrc w2, w2
rrc w2, w2

and w2, #0x0003,w2 ;w2=w2*0x0003

sub w1,w2,w0 ;w0=w1-w2


bra nc, fibonacci ;Si es negativo salta a
"fibonacci"
sub w1,w2,w0 ;w0=w1-w2
bra z, contador ;Si es cero salta a
"contador"
goto finish ;va la rutina "finish"
fibonacci:

x3: call testear ;Llama rutina "testear"

mov #0x0001, w6
mov w6, PORTB
call retardo1 ;llama rutina "retardo1"
call testear ;llama rutina "testear"
call retardo1 ;llama rutina "retador1"
call testear ;llama rutina "testear"

mov #0x0002, w7
mov w7, PORTB
call retardo1 ;llama rutina "retardo1"

x4: call testear ;llama rutina "testear"

add w6,w7,w8 ;w8=w6+w7


mov w8, PORTB
call retardo1 ;llama rutina "retardo1"

sub w8, #0x0015,w0 ;w8-21=w0


bra z, deregreso0 ;Si es cero salta a
"deregreso0"

mov w8, w6 ;w8=w6

add w6,w7,w8 ;w8=w6+w7


mov w8, PORTB
call retardo1 ;llama rutina "retardo1"

mov w8,w7 ;w8=w7


goto x4 ;va a x4

deregreso0:

call testear ;llama rutina "testear"

mov w7, PORTB


call retardo1 ;llama la rutina
"retardo1"
call testear ;llama rutina "testear"

mov w6, PORTB


call retardo1 ;llama la rutina "retardo1"
call testear ;llama rutina "testear"

sub w7,w6,w8 ;w8=w7-w6


mov w8, PORTB
call retardo1 ;Llama la rutina
"retardo1"
call testear ;llama rutina "testear"

sub w6,w8,w7 ;w7=w6-w8


mov w7, PORTB
call retardo1 ;llama rutina "retardo1"
call testear ;llama rutina "testear"

mov #0x0002, w0
mov w0, PORTB
call retardo1 ;llama rutina "retardo1"
call testear ;llama rutina "testear"

mov #0x0001, w0
mov w0, PORTB
call retardo1 ;llama rutina
"retardo1"
call testear ;llama rutina "testear"

mov #0x0001, w0
mov w0, PORTB
call retardo1 ;llama rutina
"retardo1"
call testear ;llama rutina "testear"
goto x3 ;va a la rutina "x3"

contador:

deida1:
mov #0x0000,w6

x8: call testear ;llama rutina


"testear"

mov w6, PORTB


call retardo1 ;llama rutina
"retardo1"
sub w6,#0x001E,w1 ;w1=w6-#0x001E
bra z, deregreso1 ; si es cero salta a
"deregreso1"
inc w6,w6 ;w6=w6+1
goto x8 ;va a la rutina "x8"

deregreso1:
mov #0x001F,w6

x9: call testear ;llama rutina "testear"

mov w6, PORTB


call retardo1 ;llama a la rutina
"retardo1"
sub w6,#0x0001,w1 ;w1=w6-#0x001E
bra z, deida1 ;si es cero salta a
"deida1"
dec w6,w6 ;w6=w6-1
goto x9 ;va a la rutina
"x9"

retardo0: mov #0xFFFF, W0


back0: nop ;No operacin
dec w0,w0 ;w0=w0-1
bra nz, back0 ;si no es cero salta a
"back0"
return

retardo1: mov #0x0008, W1 ;move 16bit


literal to w1
back1: call retardo0 ;Llama a la rutina
"retardo0"
nop ;No operacin
dec w1,w1 ;w1=w1-1
bra nz, back1 ;si no es cero salta a
"back0"
return

testear:
tst: btss PORTB, #0x9 ;Bit test f, skip if set
goto tst ;va la rutina "tst"
return
finish:
.end

b) Diagrama de flujo
c) Simulacin en proteus
CONCLUSIONES
En este laboratorio se tuvo que aprender la manera correcta de
crear un proyecto en el compilador ASM30 que nos provee el
MPLAB para la programacin en ensamblador de los diversos
PICs o DSPICs.
As mismo; nos sirvi para conocer las instrucciones bsicas del
ensamblador, el cual es un lenguaje de ms bajo nivel y por lo
tanto requiere ms lneas de cdigo para hacer programas que
otros lenguajes.
Posteriormente y luego de compilar y crear el archivo .hex, se
realiz la simulacin en Proteus con el PIC DS33FJ12GP202

You might also like