Divisione a 24 bit 8052 help

di il
4 risposte

Divisione a 24 bit 8052 help

Ciao a tutti, sono nuovo da queste parti!
ho un piccolo problema riguardo alla divisione a 24 bit...mi spiego meglio: ho fatto un programma che carica 4 numeri a 16 bit, fa la somma dei 4 numeri e infine la media! ora, il programma che ho fatto è il seguente:
; Scrivere un programma che faccia la somma di 4 numeri a 16 bit
; Fare la media di questi 4 numeri e inserirli nei registri R2:R3:R4

D_MAIN SEGMENT DATA
RSEG D_MAIN

N1L: DS 1 ;Creiamo dei registri in RAM ESTERNA
N1H:DS 1
N2L: DS 1
N2H: DS 1
N3L: DS 1
N3H: DS 1
N4L: DS 1
N4H: DS 1

C_MAIN SEGMENT CODE
RSEG C_MAIN

MAIN: MOV N1L,#0FFH ;Carichiamo all'interno di ogni registro un numero a 8 bit
MOV N1H,#0FFH
MOV N2L,#0FFH
MOV N2H,#0FFH
MOV N3L,#0FFH
MOV N3H,#0FFH
MOV N4L,#0FFH
MOV N4H,#0FFH

MOV R0,#N1L ;Mettiamo in R0 il primo numero(parte bassa)
MOV R1,#4 ;Numero ripetizioni CICLO
MOV R2,#0 ;Registro dove metteremo la parte alta del risultato
MOV R3,#0 ;Registro dove metteremo la parte media del risultato
MOV R4,#0 ;Registro dove metteremo la parte bassa del risultato

CICLO: MOV A,@R0 ;Mettiamo l'interno della locazione puntata dal registro R0 nell'Acc
ADD A,R4 ;Sommiamo ad A il risultato della parte bassa
MOV R4,A ;Mettiamo il risultato della somma in R4

INC R0 ;Incremento R0 (andando alla locazione N1H[parte alta])
MOV A,@R0 ;Mettiamo l'interno della locazione puntata dal registro R0 nell'Accumulatore
ADDC A,R3 ;Sommiamo ad A il risultato della parte media (ripetendo il ciclo avremo la somma delle 4 parti medie(H))
MOV R3,A ;Mettiamo il risultato della somma in R3

CLR A ;Mettiamo l'Accumulatore a 0
MOV A,R2 ;Spostiamo il risultato della parte alta nell'accumulatore
ADDC A,#0 ;Sommo 0 ad A+carry
MOV R2,A ;sposto il risultato in R2

INC R0 ;Incremento R0(andando alla locazione N2L[parte bassa del secondo numero])
DJNZ R1,CICLO ;Ripeto il ciclo. Ogni volta che incontrerà "INC R0" si sposterà verticalmente dall'alto verso il basso dei registri


MOV R1,#2 ;Numero ripetizioni CICLO2

CICLO2: CLR C ; Metto il carry a 0
MOV A,R2 ;Sposto la parte alta di R2 nell'accumulatore
RRC A ;divido per 2 il numero all'interno di A
MOV R2,A ;metto il numero diviso per 2 nel registro R2

MOV A,R3
RRC A
MOV R3,A ; Divido per 2 la parte media e la sposto in R3

MOV A,R4
RRC A
MOV R4,A ;Divido per 2 la parte bassa e la sposto in R4

DJNZ R1,CICLO2 ;Ripeto il ciclo

SJMP $
END.
nel CICLO2 ho fatto la media con l'istruzione RRC, quindi spostando i bit verso destra. il mio problema è: vorrei fare la divisione del risultato della somma dei 4 numeri a 16 bit con l'istruzione DIV, ma dopo vari tentativi non ne sono venuto a capo. la divisione a 8 bit riesco a farla, ma a 16 e 24 non so proprio da dove partire. ho il risultato della somma nei registri R2:R3:R4...come faccio a dividere il numero all'interno :4???
utilizzo il programma RIDE IDE (reisonance kit 6.0)

4 Risposte

Devi accedere o registrarti per scrivere nel forum
4 risposte