Diferencia entre revisiones de «Ejemplo Básico Assembler: Prender y Apagar Led»

De Wikitronica
Saltar a: navegación, buscar
Línea 40: Línea 40:
  
 
mainLoop:
 
mainLoop:
             BRCLR   5,PTAD,Incremento  ; encuesto pin para
+
             BRCLR 5,PTAD,Incremento  ; encuesto pin para
 
                                         ;..saber si fue presionado
 
                                         ;..saber si fue presionado
 
             feed_watchdog
 
             feed_watchdog
             BRA     mainLoop          ; Halt
+
             BRA   mainLoop          ; Halt
  
 
Incremento:
 
Incremento:
 
             ; Incremento contador
 
             ; Incremento contador
             INC     contador     
+
             INC   contador     
 
             ; Paso contador a los puertos/leds PTC y PTE
 
             ; Paso contador a los puertos/leds PTC y PTE
             LDA     #%00111111        ; mascara para contador
+
             LDA   #%00111111        ; mascara para contador
             AND     contador          ;..el resultado queda en Acc
+
             AND   contador          ;..el resultado queda en Acc
             COMA                       ; compl-1, los leds trabajan
+
             COMA                     ; compl-1, los leds trabajan
                                        ;..con logica negada
+
                                      ;..con logica negada
             STA     PTCD
+
             STA   PTCD
             lda     #%11000000
+
             lda   #%11000000
             AND     contador          ;...
+
             AND   contador          ;...
             COMA                       ;...
+
             COMA                     ;...
             STA     PTED
+
             STA   PTED
             BRA     mainLoop
+
             BRA   mainLoop
  
 
;********************************************************************
 
;********************************************************************

Revisión del 18:18 10 may 2013

;********************************************************************
;* 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

Contributors

Mrojas, Racuna