1
« 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