Ejemplo Básico Assembler: Prender y Apagar Led

De Wikitronica
Revisión del 18:02 10 may 2013 de Mrojas (Discusión | contribuciones) (Página creada con «Categoría: EC2721 - Arquitectura del Computador 1 Categoría: EC3731 - Arquitectura del Computador 2 Categoría:MC9S08QE128 <syntaxhighlight lang="asm"> ;*****...»)

(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar
;********************************************************************
;* 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 (ds: byte por defecto)
            ORG    Z_RAMStart         
contador:   DS.B   1                  ; variable que guarda la cuenta

;
; code section
;
            ORG    ROMStart

Inicio:
            LDHX   #RAMEnd+1        ; initialize the 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:

        lda      contador               ; incremento contador
        inca
        sta      contador
        
        lda      #$3F
        and      contador
        coma
        sta      PTCD
        
        lda      #$C0
        and      contador
        coma
        sta      PTED
        bra      mainLoop

;**************************************************************
;             Subrutinas de Configuracion
;**************************************************************

Configurar_GPIO:                    ;;General Port Input/Output
            LDA #$3F
            STA PTCDD               ;;6Bits (LSB) PTC - habilitados como salida
            LDA #$C0
            STA PTEDD               ;;2Bits (MSB) PTE - habilitados como salida
                        
            LDA #$3F
            STA PTCD                ;;Cero a la salida (logica negada)
            LDA #$C0
            STA PTED                ;;Cero a la salida (logica negada)         
            
            LDA #$00                
            STA PTADD               ;;Puerto A - habilitado como entrada
            LDA #$FF
            STA PTAPE               
            
            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