• Viernes 8 de Noviembre de 2024, 23:04

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - wzero

Páginas: [1]
1
Microcontroladores MOTOROLA / Programa
« en: Domingo 28 de Octubre de 2007, 17:21 »
Hola a todos, este es mi primer post espero que no sea el ultimo.
Bien yo estoy empezando con los microcontroladores y aun no lo pillo del todo.

Tengo que hacer dos programas.
El micro es el de la familia HCS08 en concreto el MC9S08QG8 <<- de 8bis

Problema1.- Que sume dos numeros de 16 Bits, dixos numeros estan almacenados en las direcciones $0100,$0101 y $0102,$0103 suponiendo que k primero se alamacena la parte alta y luego la baja.
El resultado se debe almacenar en la $0103 y 0104$.

  mi solucion es esta.

;Datos en RAM
       org $0100
       dc.b $1D,$C9,$22,$A8  ;Numeros

N1_H    equ $0100
N1_L    equ $0101
N2_H    equ $0102
N2_L    equ $0103
Resul_H equ $0104
Resul_L equ $0105

       
;Programa principal
       org $E000
       
main:  lda N1_L         ;Lee parte baja de N1
       adc N2_L         ;Suma parte baja de N2
       sta Resul_L      ;Guarda resultad parte baja
       
       
       lda N1_H            ;Lee parte alta de N1
       BLO SumaConCarry    ;si carry=1 entonces salta
       add N2_H
       sta Resul_H
       
SumaConCarry     add N2_H
                 inca
                 sta Resul_H
                             
       
bucle  bra bucle ;bucle infinito

;vector de Reset
       org $FFFE
       dc.w $E000



Problema 2

Suma 3 numeros  de 8bits alamacenados en las direcciones $0100,$0101,$0102. El resultado sera un numero de 16 bits que guardaremos en $0103,$0104.

mi casi solucion:

;Ejemplo que suma dos Numeros de 16 bits

;Datos en RAM
       org $0100
       dc.b $1D,$C9,$22,$A8  ;Numeros

N1_H    equ $0100
N1_L    equ $0101
N2_H    equ $0102
N2_L    equ $0103
Resul_H equ $0104
Resul_L equ $0105

       
;Programa principal
       org $E000
       
main:  lda N1_L         ;Lee parte baja de N1
       adc N2_L         ;Suma parte baja de N2
       sta Resul_L      ;Guarda resultad parte baja
       
       
       lda N1_H            ;Lee parte alta de N1
       BLO SumaConCarry    ;si carry=1 entonces salta
       add N2_H
       sta Resul_H
       
SumaConCarry     add N2_H
                 inca
                 sta Resul_H
                             
       
bucle  bra bucle ;bucle infinito

;vector de Reset
       org $FFFE
       dc.w $E000
;****************************


La dificultad que tengo es que no se como almacenar el CARRY de las sumas .
Supongo que para alguien con experiencia le sera facil.
Gracias

Páginas: [1]