Ejemplo Básico Assembler: Prender y Apagar Led
De Wikitronica
(Redirigido desde «Assembler»)
Programa de ejemplo en lenguaje ensamblador para el microcontrolador MC9S08QE128 (ISA HC08) en la tarjeta de desarrollo DEMOQE128. El programa inicializa los puertos de entrada salida del microcontrolador para utilizar los LEDS de la tarjeta de desarrollo. Una variable que aumenta cada vez que se presiona uno de los botones de la tarjeta se muestra por los LEDS del microcontrolador de manera continua.
;********************************************************************
;* 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 2,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