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

De Wikitronica
Saltar a: navegación, buscar
 
(No se muestran 12 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 34: Línea 38:
 
             ;--------------------------------------------------------
 
             ;--------------------------------------------------------
 
             ; 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   5,PTAD,Incremento  ; encuesto pin para
+
             BRCLR 2,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 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