Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 24

EN ASSEMBLER: tener instalado el MPLABX 3.55 y el compilador dspic v3.31.

abrimos el MPLABX:

File

New Project

Next, luego escogemos el dspic, (de preferencia uno que se puede simular en proteus como este):
Escogemos simulador, Next

Escogemos para ensamblador ASM30:


Escogemos una dirección y nombre de la carpeta proyecto (se creará una carpeta así), luego FINISH:

Nos quedaría así: Pero tal como está así no funcionara ningún código, por tanto buscamos el archivo linker
.gld en la dirección de la instalación de nuestro MPLABC30 (el cual incluye assembler)
Le damos en seleccionar:
Luego agregamos una página de extensión. s que será nuestro código principal:
Le damos en finish, luego nos ubicamos en esta parte del código que esta prediseñado y cambiamos al pic
que usaremos:

Luego ingresamos las declaraciones globales que vamos a usar (lo que está marcado):
Luego nos ubicamos en esta parte del código prediseñado; Es a partir de acá que podemos meter nuestro
código:

INGRESAMOS ESTE CODIGO:

;Programa principal

_main:

;--------------------------------------------------------------------------------

;Almacenamiento de valores iniciales en registros de 16 bits W0,W1,W2,W3 :

mov #0x0100,W0; ;poner literal 256 en W0 W0 = 0000 0001 0000 0000

mov #0x0029,W1; ;poner literal 41 en W1 W1 = 0000 0000 0010 1001

mov #0x0000,W2; ;poner literal 0 en W2 W2 = 0000 0000 0000 0000

;--------------------------------------------------------------------------------

;Configuración del puerto B

mov W0,TRISB; ;configura I/0 en el SFR( registro de funcion especial) TRISB

;TRISB = 0000 0001 0000 0000


;como entrada (1) pin 8 , el resto como salidas (0).

;--------------------------------------------------------------------------------

;Encendido de Leds

mov W1,LATB ;configura el valor digital en el SFR LATB

;el cual representa el valor digital del puerto B

;LATB = W1 = 0000 0000 0010 1001

;y se muestra al exterior a través de leds

;--------------------------------------------------------------------------------

;registro para 50 iteraciones:

mov #0x0032,W3 ;poner literal 50 en W3

;--------------------------------------------------------------------------------

; Subrutina de Retardo en alto:

_delay: ;primera función de retardo

; decremento de W3: desde W3=50 hasta W3=1

dec W3,W4 ;W4=W3-1 ;para la primera vez: W4=50-1=49

mov W4,W3 ;W3=W4 ;para la primera vez: W3=49

; Repetición mil veces

repeat #0x03E8 ; repite 1000 veces la próxima instrucción ( nop )

; que dura 1 ciclo de instrucción por vez

nop ; no hace operación alguna, tiempo muerto

CP0 W4 ; compara si el registro W4 es cero ... W4=0?

bra NZ,_delay ;"branch if not zero" : redirige a _delay SI W4 NO ES CERO

;---------------------------------------------------------------------------------

;Apagado de leds

mov W2,LATB ;valor digital del puerto B


; LATB = W2 = 0000 0000 0000 0000

;---------------------------------------------------------------------------------

;Recarga del registro

mov #0x0032,W3 ;poner literal 50 en W3

;---------------------------------------------------------------------------------

; Subrutina de Retardo en bajo

_delay1: ; segunda función de retardo

; decremento de W3: desde W3=50 hasta W3=1

dec W3,W4 ;W4=W3-1 ;para la primera vez: W4=50-1=49

mov w4,w3 ;W3=W4 ;para la primera vez: W3=49

;Repetición mil veces

repeat #0x3E8 ; repite 1000 veces la proxima instruccion ( nop )

; que dura 1 ciclo de intruccion por vez

nop ; no hace operacion alguna, tiempo muerto

CP0 W4 ; compara si el registro W4 es cero ... W4=0?

bra NZ,_delay1 ;"branch if not zero" : redirije a _delay1 SI W4 NO ES CERO

;----------------------------------------------------------------------------------

;Bucle principal

bra _main ;"branch always”: llegado acá, siempre redirije a _main

;----------------------------------------------------------------------------------
Luego de ingresado el código agregamos un archivo fuente. s ponemos:
Cambiamos el nombre para recordar de que se trata, luego finish:

Luego vamos a configuration bits:


Cambiamos los fusibles, lo principal, como es que cristal usar , watchdog etc.

Le damos a generate source code to output, y luego copiamos lo que ha creado:


Luego pegamos todo en configuration bits.s:

A continuación, compilamos:

Finalmente obtenemos la salida satisfactoria, y el archivo que sirve para quemar el pic (o para simular): .hex:
Para simular el comportamiento del microcontrolador, de los registros SFR ,entre otros usamos las
herramientas que tiene el MPLAB X:

Vamos a propiedades de proyecto:


Luego en instruction frequency colocamos: Por ejemplo si uso un cristal de 20MhZ (configurado
previamente el fusible como HS) , entonces la frecuencia de instrucción seria FCY =20M/4 = 5MhZ

Colocamos así entonces para la simulación, luego OK:

Luego vamos vamos a variables y seleccionamos las variables a las que queremos analizar:
Abajo aparecerá una pestaña, damos New watch:

Escogemos los registros de funciones especiales que estamos usando y que nos interesan:
Colocamos en un lugar conveniente con clic izquierdo un breakpoint, desde donde correra el DEBUGGER.

Luego damos a Debug Main Project :


Luego vamos a Debug y corremos con step over o pulsamos f8 simplemente:

Se puede observar los valores iniciales de los registros SFR.


Al pulsar 7 veces F8, nos sale que los valores de estos registros SFR cambian, ya que así lo hemos programado

Para detener la simulación poner finish debugger session:


Si queremos ver qué tiempo demoran las instrucciones:

Nos ubicamos y hacemos clic izquierdo en un lugar del código, de interés:

Luego damos a Debug Main Project :


Observamos que al presionar cada vez F8 ¡transcurren 0,2us! la instrucción repeat hace que nop se
reproduzca 0x03E8 veces, o que es lo mismo 1000 veces.

Esto es correcto, pues se está usando un oscilador de cristal de 20MHz, por tanto, el ciclo de instrucción
FCY=20M/4= 5MHz, y el periodo seria la inversa de la frecuencia: T. Instrucción = 1/FCy = 1/5M = 0,2us.
SIMULACION:

Seleccionamos el microcontrolador en el proteus 8.5 SP0. como se puede observar solo esta parte de la
familia dspic30F.

Clic derecho propiedades:


En program file buscamos nuestro fichero. hex en la carpeta de nuestro proyecto, luego en clock frequenzy
colocamos 20MHz.

Para efectos de simulación no se requiere que en la simulación este presente el cristal, pero al llevarlo a
físico si debe estar.

Luego le damos a play y corre la simulación; el botón de entrada está configurado como entrada, pero no se
le asigno alguna tarea en especial, mientras que los tres leds prenden y apagan.

También podría gustarte