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

De Wikitronica
Saltar a: navegación, buscar
 
 
(No se muestran 13 ediciones intermedias de 2 usuarios)
Línea 1: Línea 1:
 +
 
[[Categoría: EC2721 - Arquitectura del Computador 1]]
 
[[Categoría: EC2721 - Arquitectura del Computador 1]]
[[Categoría: EC3731 - Arquitectura del Computador 2]]
 
 
[[Categoría:MC9S08QE128]]
 
[[Categoría:MC9S08QE128]]
 +
[[Categoría:DEMOQE128]]
 +
 +
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.
 +
 
<syntaxhighlight lang="asm">
 
<syntaxhighlight lang="asm">
 
;********************************************************************
 
;********************************************************************
;* Código ejemplo para escribir programas en assembler.             *
+
;* Código ejemplo para escribir programas en assembler:             *
 
;* Programa sencillo que inicializa puertos de entrada y salida,    *
 
;* Programa sencillo que inicializa puertos de entrada y salida,    *
 
;* crea una variable que aumenta cada vez que se presiona un botón, *
 
;* crea una variable que aumenta cada vez que se presiona un botón, *
Línea 20: Línea 24:
  
 
; -------------------------------------------------------------------
 
; -------------------------------------------------------------------
; Definición de variables (ds: byte por defecto)
+
; Definición de variables
 
             ORG    Z_RAMStart         
 
             ORG    Z_RAMStart         
contador:  DS.B  1                 ; variable que guarda la cuenta
+
contador:  DS.B  1               ; variable que guarda la cuenta
  
 
;
 
;
; code section
+
; El codigo comienza aqui
 
;
 
;
 
             ORG    ROMStart
 
             ORG    ROMStart
  
 
Inicio:
 
Inicio:
             LDHX  #RAMEnd+1        ; initialize the stack pointer
+
             LDHX  #RAMEnd+1        ; inicializa el stack pointer
 
             TXS
 
             TXS
 
             ;--------------------------------------------------------
 
             ;--------------------------------------------------------
             ;Configuracion de los pines del Demoqe128
+
             ; Configuracion de los pines del Demoqe128
 
+
 
             BSR    Configurar_GPIO
 
             BSR    Configurar_GPIO
 
 
             ;--------------------------------------------------------
 
             ;--------------------------------------------------------
 
+
             ; Inicializo contador
             ;Inicializo contador
+
 
             CLR    contador
 
             CLR    contador
  
 
mainLoop:
 
mainLoop:
 
+
             BRCLR 2,PTAD,Incremento  ; encuesto pin para
     
+
                                         ;..saber si fue presionado
 
+
             BRCLR   5,PTAD,Incremento  ; encuesto pin para
+
 
+
                                         ; saber si fue presionado
+
 
+
 
             feed_watchdog
 
             feed_watchdog
 +
            BRA    mainLoop          ; Halt
  
            BRA      mainLoop          ; Halt
 
 
Incremento:
 
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
  
        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
 
;            Subrutinas de Configuracion
;**************************************************************
+
;********************************************************************
  
Configurar_GPIO:                   ;;General Port Input/Output
+
Configurar_GPIO:           ; General Port Input/Output
             LDA #$3F
+
             LDA #%00111111
             STA PTCDD               ;;6Bits (LSB) PTC - habilitados como salida
+
             STA PTCDD     ; 6Bits(LSB) PTC - habilitado  como Salida
             LDA #$C0
+
             LDA #%11000000
             STA PTEDD               ;;2Bits (MSB) PTE - habilitados como salida
+
             STA PTEDD     ; 2Bits(MSB) PTE - habilitado  como salida
 
                          
 
                          
             LDA #$3F
+
             LDA #%00111111
             STA PTCD               ;;Cero a la salida (logica negada)
+
             STA PTCD       ; Inicializo como cero (log. negada)
             LDA #$C0
+
             LDA #%11000000
             STA PTED               ;;Cero a la salida (logica negada)        
+
             STA PTED       ; Inicializo como cero (log. negada)
 
              
 
              
             LDA #$00                
+
             LDA #%00000000                
             STA PTADD               ;;Puerto A - habilitado como entrada
+
             STA PTADD     ; Puerto A - habilitado como entrada
             LDA #$FF
+
             LDA #%11111111 ; Pull Up enable para que el boton
             STA PTAPE              
+
             STA PTAPE     ;..reconozca la entrada       
 
              
 
              
 
             RTS
 
             RTS
 
  
 
;**************************************************************
 
;**************************************************************
Línea 108: Línea 101:
 
             DC.W  spurious          ;
 
             DC.W  spurious          ;
 
             DC.W  spurious          ; SWI
 
             DC.W  spurious          ; SWI
             DC.W  Inicio             ; Reset
+
             DC.W  Inicio           ; Reset
 
</syntaxhighlight>
 
</syntaxhighlight>

Revisión actual del 11:32 15 may 2013


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