Documente Academic
Documente Profesional
Documente Cultură
;*******************************************************************
; Other Files Required: p30F2010.gld, p30f2010.inc
; Tools Used: MPLAB IDE : 8.92
;*******************************************************************
; ESTRUCTURA DEL PROGRAMA EN ENSAMBLADOR PARA UN DSPIC
.equ __30F2010, 1
.include "p30f2010.inc"
;Configuration bits:
;..............................................................................
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 & BORV_27 & PWRT_16 & MCLR_EN
;Set Brown-out Reset voltage and
;and set Power-up Timer to 16msecs
config __FGS, CODE_PROT_OFF ;Desabilitado protecion de codigo
;..............................................................................
;Declaraciones globales
;..............................................................................
.global __reset ;The label for the first line of code.
.global __T1Interrupt ;Declare Timer 1 ISR name global
;..............................................................................
;Unitialized storage in data space
;..............................................................................
.section .bss
Count: .space 2
;..............................................................................
;Constants stored in Program space
;..............................................................................
.section .asciitext, "x"
.palign 2 ;Align next word stored in Program space to an
;address that is a multiple of 2
Message:
.ascii "dsPIC Starter Demo Board"
;..............................................................................
;Code Section in Program Memory
;..............................................................................
.text ;Start of Code section
__reset:
MOV #__SP_init, W15 ;Initalize the Stack Pointer
MOV #__SPLIM_init, W0 ;Initialize the Stack Pointer Limit Register
MOV W0, SPLIM
NOP ;Add NOP to follow SPLIM initialization
CALL _wreg_init ;Call _wreg_init subroutine
clr Count ; Initialize the count variable used in ISR
InitPorts:
mov #0x003F,W0 ; Setup all analog pins for digital mode
mov W0,ADPCFG ; by writing ADPCFG register
clr LATB ; Clear all I/O port registers.
;l………………….
.end ;End of program code in this file
ALGUNOS COMANDOS USANDO EN ENSAMBLADOR PARA DSPICS
MOV W0,W1
Mueve el contenido del registro W0 al registro W1.
Como se sabe un dspics esta compuesto de 16 registros de trabajo desde W0, W1, W2... W15
de 16 bits de extensión de cada registro, por este esta instrucción se puede realizar entre
registros de trabajo ( registros W) y registros que disponga el dspic, también son validas las
siguientes instrucciones:
MOV WREG,0x0100
Al registro W0 también se lo conoce como WREG por ende aquí estamos moviendo el
contenido de W0 a la dirección de memoria 0x0100
MOV 0x0102,W6
Mueve la palabra ( 16 bits ) de la localización 0x0102 al registro W6.
MOV #0x0003,W0
Mueve un literal ( un numero) al registro WEG=W0
ADD W0,[W4],W5
Sumo el contenido de W0 mas el contenido de la dirección de memoria especificado por W4 y
el resultado lo coloco en el registro de W5 , la suma es en forma de palabra ( 16 bits)
ADD 0x0106,WREG
Suma W0 al contenido de la dirección de memoria especificado por 0x0106 y lo coloco el
resultado en W0
ADD RAM100
Sumo el contenido de la dirección de memoria ( variable) especificad por RAM100 al registro
W0 y el resultado lo deposito en la variable RAM100 mismo
PUSH.S
Guarda en la pila de datos el valor de W0, W1, W3, y del registro Status
PUSH W0
Guarda en la pila el valor de W0, esta instrucción es equivalente en lenguaje ensamblador con
mov a MOV W0,[W15++]
PUSH W8
Guarda en la pila de datos el valor de W8
POP.S
Retorna de la pila de datos el valor de W0, W1, W3, y del registro Status
POP W0
Retorna de la pila de datos el valor de W0, esta instrucción aquí descrita con mov es
equivalente a MOV [--W15],W0
BTSC SR,#Z
El BIT Z (zero) del registro estatus es cero? Si es salta una instrucción, sino continua con la
siguiente instrucción.
BSET PORTB,#3
Si el BIT 3 de la pórtico PORTB del Dspic30Fxxxx es 1? Si es salta una instrucción , sino continua
con la siguiente instrucción.
MOV 0xFF00, W0
MOV WO, TRISB
Configuro los pines 15:8 del port B como entradas y los pines 7:0 del port B del dspic como
salida
LAC W1,A
Muevo el contenido de W1 al registro acumulador del DSPIC
MPY W4*W5,A
Multiplique W4*W5 y el resultado coloquelo en acumulador, esta instrucción se ejecuta en
dos ciclos de reloj , he aquí en donde entra en operación las ventajas y características del dspic
SAC.R A,W0
Guarda Acumulador al registro W0
COMANDOS EN MPLAB
.bss
Ensambla las variables a usarse
.bss
B1: .space4 ; cuatro bytes reservado para B1
B2: .space1 ; 1 byte reservado par B1
Count: .space 2 ; 2 bytes reservado para Count
PINES DE UN DSPIC30F4011
EN LOS pines 13, y 14 van conectados el oscilador de cristal de 4, 10, 16, 20 MHZ tal como se
les conecta cuando se trabaja con los microcontroladores pudiendo por software incrementar
esta velocidad hasta 16 veces ya que dispone de un PLL
También se pueden definir secciones por los usuarios ( con la directiva section ,son
diferentes atributos que no son mas que extensiones de las tres básicas).
.xbss sección de datos no inicializados en la zona de memoria x
x.data sección de datos inicializados en la zona de memoria x
.nbss seccion de datos no inicializados en la zona de memoria near
.ndata seccion de datos inicializados en la zona de memoria near.
.ybss seccion de datos no inicializados en la zona de memoria y
.ydata seccion de datos inicializados en la zona de memoria y
.section
.xdata,data,xmemory : variables inicializadas en la memoria de datos x
var:
.hword 0x1111,0x2222,0x3333,0x2376 ; hword hace que las variables introducidas
sean colocadas en forma consecutiva.
.section
.ybss,bss,ymemory ; variables no inicializadas en la memoria de datos y
var:
.space 8 ; se reserva 8 bytes
.section
.ydata,data,ymemory : variables inicializadas en la memoria de datos y
matriz:
.hword 0x1411,0x2522,0x3339,0x2376
.section
.nbss,bss,near
var:
.space 8 ; se reserva 8 bytes no inicializados en memoria near