Documente Academic
Documente Profesional
Documente Cultură
; ******************************************************************************
; PROGRAMA : Nombre de programa (v?.?)
; TARGET : Donde se va a ejecutar el código (ej.MSP430F169 en simulador)
; DESCRIPCION : Función que realiza el programa.
; AUTOR : XXXXXX YYYYYYY
; FECHA : XX-YY-ZZ
; ESQUEMA : (No hace falta conectar a la placa)
; ******************************************************************************
; ------------------------------------------------------------------------------
; PROGRAMA PRINCIPAL
; ------------------------------------------------------------------------------
ORG DIRFLASH ; Programa en FLASH
Main mov.w #DIRRAM,SP ; Inicializa base pila
mov.w #WDTPW+WDTHOLD, &WDTCTL ; Desactiva WDT
; Inicialización de modo de funcionamiento, periféricos, variables…
……
; Código principal
……
; Bucle infinito(1) o modo de espera a interrupción en bajo consumo(2)
eint
fin jmp fin ; Bucle sin fin(opción 1)
; ------------------------------------------------------------------------------
; SUBRUTINAS (se llaman con “call #subrutinaX”)
; ------------------------------------------------------------------------------
subrutina1 código subrutina1
……
ret ; Vuelve al programa principal
subrutina2 código subrutina2
……
ret ; Vuelve al programa principal
……
; ------------------------------------------------------------------------------
; RUTINAS DE INTERRUPCIÓN (ISRs ó RTIs)
; ------------------------------------------------------------------------------
RTIPeriferico1 código RTI/ISR
……
reti
RTIPeriferico2 código RTI/ISR
……
reti
……
; ------------------------------------------------------------------------------
; DEFINICIÓN DE VARIABLES
; ------------------------------------------------------------------------------
ORG DIRRAM ; Dirección en RAM (no solapar con pila)
variable1word DC16 val1word ; Variable Word en RAM con valor inicial
variable2byte DC8 val2byte ; Variable Byte en RAM con valor inicial
variablesbyte DS.B N ; N bytes sin inicializar
variablesword DS.W M ; M words sin inicializar
; ------------------------------------------------------------------------------
; VECTORES DE INTERRUPCIÓN
; ------------------------------------------------------------------------------
ORG 0FFE0h+RESET_VECTOR ; Reset
DW Main
1
Partes del “esqueleto”:
MM=16.
desactiva el WDT.
2
variables que se vayan a utilizar (clr variable1 ó mov.b #50,variable2, por
ejemplo).
3
ejemplo, RTI_TIMERA0), y esta etiqueta colocarse en el vector de interrupción
de la interrupción a la que responde la RTI. Esto se hace con la directiva ORG
FFFEh+OFFSET seguido de la directiva DW ETIQUETA_RTI. OFFSET está
relacionado con el origen de la interrupción a la que se asocie la etiqueta;
normalmente hay unos nombres definidos en el fichero “msp430x16x.h” , por
ejemplo “PORT1_VECTOR” para el puerto 1, RESET_VECTOR para la int de
RESET, TIMERA0_VECTOR para la 1era int. del TIMERA…..
DW RTI_PORT1
• DEFINICION DE VARIABLES. (Hay gente que coloca esta sección antes incluso
del programa principal). ORG DirRAM para que las variables estén colocadas en
memoria RAM. Cuidado con no solapar la zona de variables con la pila!!
Recordad además que la pila crece hacia direcciones mas bajas y las variables
se definen hacia direcciones mas altas, por eso colocar la pila desde la dirección
280h, y las variables en la 200h sería una mala idea…..Para definir una variable
utilizar la directiva DCXX valor(con XX=16 para una Word y XX=8 para un byte, y
valor el valor inicial de la variable). Se recomienda colocar una etiqueta y acceder
a la variable mediante esa etiqueta. (por ejemplo, contador DC16 50, define una
variable contador con un valor inicial de 50 ). Se pueden definir varias variables
vacías de golpe con DS.X num (con X=W para num variables tamaño WORD, y
X=B para num variables tamaño BYTE) Si colocamos una etiqueta, podremos
acceder a la primera variable definida a través de ella, para acceder al resto de
variables se puede usar el modo de direccionamiento indexado.
• END: Siempre es necesario colocarlo al final del código. Cualquier cosa que
aparezca después no será tenida en cuenta.