Ejemplo Básico Assembler: Prender y Apagar Led

De Wikitronica
Saltar a: navegación, buscar


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

Contributors

Mrojas, Racuna