Ejemplo Básico Assembler: Prender y Apagar Led
De Wikitronica
Revisión del 18:18 10 may 2013 de Mrojas (Discusión | contribuciones)
;********************************************************************
;* Código ejemplo para escribir programas en assembler. *
;* Programa sencillo que inicializa puertos de entrada y salida, *
;* crea una variable que aumenta cada vez que se presiona un botón, *
;* el resultado se muestra por los leds *
;********************************************************************
; -------------------------------------------------------------------
; Include files
INCLUDE 'derivative.inc'
;
; export symbols
;
XDEF Inicio
ABSENTRY Inicio
; -------------------------------------------------------------------
; Definición de variables
ORG Z_RAMStart
contador: DS.B 1 ; variable que guarda la cuenta
;
; El codigo comienza aqui
;
ORG ROMStart
Inicio:
LDHX #RAMEnd+1 ; inicializa el stack pointer
TXS
;--------------------------------------------------------
; Configuracion de los pines del Demoqe128
BSR Configurar_GPIO
;--------------------------------------------------------
; Inicializo contador
CLR contador
mainLoop:
BRCLR 5,PTAD,Incremento ; encuesto pin para
;..saber si fue presionado
feed_watchdog
BRA mainLoop ; Halt
Incremento:
; Incremento contador
INC contador
; Paso contador a los puertos/leds PTC y PTE
LDA #%00111111 ; mascara para contador
AND contador ;..el resultado queda en Acc
COMA ; compl-1, los leds trabajan
;..con logica negada
STA PTCD
lda #%11000000
AND contador ;...
COMA ;...
STA PTED
BRA mainLoop
;********************************************************************
; Subrutinas de Configuracion
;********************************************************************
Configurar_GPIO: ; General Port Input/Output
LDA #%00111111
STA PTCDD ; 6Bits(LSB) PTC - habilitado como Salida
LDA #%11000000
STA PTEDD ; 2Bits(MSB) PTE - habilitado como salida
LDA #%00111111
STA PTCD ; Inicializo como cero (log. negada)
LDA #%11000000
STA PTED ; Inicializo como cero (log. negada)
LDA #%00000000
STA PTADD ; Puerto A - habilitado como entrada
LDA #%11111111 ; Pull Up enable para que el boton
STA PTAPE ;..reconozca la entrada
RTS
;**************************************************************
;* spurious - Spurious Interrupt Service Routine. *
;* (unwanted interrupt) *
;**************************************************************
spurious: ; placed here so that security value
NOP ; does not change all the time.
RTI
;**************************************************************
;* Interrupt Vectors *
;**************************************************************
ORG Virq
DC.W spurious ;
DC.W spurious ; SWI
DC.W Inicio ; Reset