8051 - SREDNIA 4 LICZB 12-BITOWYH.



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "sanczo" <elpablo_at_nospam_bobo.ds5.agh.edu.pl>
Subject: 8051 - SREDNIA 4 LICZB 12-BITOWYH.
Date: Sun, 24 Nov 2002 20:10:35 +0100


Witam.
Mam problem, potrzebuje usrednic wyniki 4-ro krotnego przetwarzania A/C
(12-bitowego).
Zalozmy ze wyniki w kazdym cyklu przetwarzania sa umieszczone w rejestrach
R0, R1 (R0 starszy bajt). Calosc stanowi liczbe zapisana w kodzie NB. Trzeba
dodac 4 liczby 12-bitowe i podzielic przez 4.
Trzeba zrobic to dodawania aby nie tracic wyniku przy duzych wartosciach -
wynik nie zmiesci sie na 2 bajtach.
Czy dzielenie najlepiej realizowac przesunieciem ACC w prawo? Czy moze jakas
konwersja i dalej DIV ?

Czy moze mi ktos pomoc? Moze jakas gotowa procedura?

sanczo



Poprzedni Następny
Wiadomość
Spis treści
From: "IYIS" <m__s_at_nospam_wp.pl>
Subject: Re: 8051 - SREDNIA 4 LICZB 12-BITOWYH.
Date: Sun, 24 Nov 2002 20:39:21 +0100


Zalozmy ze wyniki w kazdym cyklu przetwarzania sa umieszczone w rejestrach
R0, R1 (R0 starszy bajt). Calosc stanowi liczbe zapisana w kodzie NB.
Trzeba
dodac 4 liczby 12-bitowe i podzielic przez 4.
Trzeba zrobic to dodawania aby nie tracic wyniku przy duzych wartosciach -
wynik nie zmiesci sie na 2 bajtach.

hmm... dlaczego się nie zmieści ?


--
_
|\ /| (_ m__s_at_nospam_wp.pl
| | ___) G-G 531829
___________________________
Ziemia jest piekłem innego świata




Poprzedni Następny
Wiadomość
Spis treści
From: "sanczo" <elpablo_at_nospam_bobo.ds5.agh.edu.pl>
Subject: Re: 8051 - SREDNIA 4 LICZB 12-BITOWYH.
Date: Sun, 24 Nov 2002 21:08:32 +0100


hmm... dlaczego się nie zmieści ?

OK. Dla 12-bit zmiesci sie, w zalozeniu mial to byc przetwornik 16-bit i
dlatego mialem takie watpliwosci.

sanczo



Poprzedni Następny
Wiadomość
Spis treści
From: "Marek Dzwonnik" <mdz_at_nospam_message.pl>
Subject: Re: 8051 - SREDNIA 4 LICZB 12-BITOWYH.
Date: Sun, 24 Nov 2002 20:57:03 +0100


Użytkownik "sanczo" <elpablo_at_nospam_bobo.ds5.agh.edu.pl> napisał w wiadomości
news:arr876$dnd$1_at_nospam_bobo.ds5.agh.edu.pl...
Witam.
Mam problem, potrzebuje usrednic wyniki 4-ro krotnego przetwarzania A/C
(12-bitowego).
Zalozmy ze wyniki w kazdym cyklu przetwarzania sa umieszczone w rejestrach
R0, R1 (R0 starszy bajt). Calosc stanowi liczbe zapisana w kodzie NB.
Trzeba
dodac 4 liczby 12-bitowe i podzielic przez 4.
Trzeba zrobic to dodawania aby nie tracic wyniku przy duzych wartosciach -
wynik nie zmiesci sie na 2 bajtach.
Czy dzielenie najlepiej realizowac przesunieciem ACC w prawo? Czy moze
jakas
konwersja i dalej DIV ?

Hmmm?
Suma 4 liczb 12-bitowych nie przekroczy 16bitów (a nawet nie przekroczy 14
). Czyli robisz 4 dodawania (16bit) po czym 16-bitowy wynik przesuwasz o 2
miejsca w prawo.

MDz




Poprzedni Następny
Wiadomość
Spis treści
From: "sanczo" <elpablo_at_nospam_bobo.ds5.agh.edu.pl>
Subject: Re: 8051 - SREDNIA 4 LICZB 12-BITOWYH.
Date: Mon, 25 Nov 2002 00:46:02 +0100


Suma 4 liczb 12-bitowych nie przekroczy 16bitów (a nawet nie przekroczy 14
). Czyli robisz 4 dodawania (16bit) po czym 16-bitowy wynik przesuwasz o
2
miejsca w prawo.

Napisalem cos takiego, tylko nie za bardzo dziala. Czy ktos widzi blad ?

; R0 - starszy bajt probki
; R1 - mlodszy bajt probki
; R2 - liczba konwersji (4)
; R3 - starszy bajt wyniku
; R4 - mlodszy bajt wyniku

; MOV R0,#00001000B
; MOV R1,#10000001B
; MOV R3,#00000100B
; MOV R4,#11101111B
; MOV R2,#1

CLR A
MOV R3,A
MOV R4,A
MOV R2,#4

ADD12BIT:
MOV A,R4
ADDC A,R1
JC FIX
MOV R4,A
MOV A,R3
ADD A,R0
MOV R3,A
SJMP DIV4
FIX:
MOV R4,A
MOV A,R4
ADD A,#1
MOV R4,A
MOV A,R3
ADD A,R0
MOV R3,A
DIV4:
MOV A,R3 ; NAJPIERW /2
CLR C
RRC A
MOV R3,A
MOV A,R4
RR A
MOV R4,A

MOV A,R3 ; I JESZCZE RAZ /2
CLR C
RRC A
MOV R3,A
MOV A,R4
RR A
MOV R4,A

DJNZ R2,ADD12BIT
MOV R2,#4
; RET
END





Poprzedni Następny
Wiadomość
Spis treści
From: Marek Lewandowski <nospamabuse_at_nospam_poczta.onet.pl>
Subject: Re: 8051 - SREDNIA 4 LICZB 12-BITOWYH.
Date: Mon, 25 Nov 2002 07:49:35 +0100


sanczo wrote:

Suma 4 liczb 12-bitowych nie przekroczy 16bitów (a nawet nie przekroczy 14
). Czyli robisz 4 dodawania (16bit) po czym 16-bitowy wynik przesuwasz o
2
miejsca w prawo.

Napisalem cos takiego, tylko nie za bardzo dziala. Czy ktos widzi blad ?

primo zapomniałeś o instrukcji ADDC.
Po drugie 4 razy dodajesz to samo, bo jako nie widzę, gdzie ma zachodzić
konwersja ADC...
--
Marek Lewandowski ICQ# 10139051/GG# 154441
locustXpoczta|onet|pl
http://locust.republika.pl
[! Odpowiadaj pod cytatem. Tnij cytaty. Podpisuj posty. !]

Poprzedni Następny
Wiadomość
Spis treści
From: "Marek Dzwonnik" <mdz_at_nospam_message.pl>
Subject: Re: 8051 - SREDNIA 4 LICZB 12-BITOWYH.
Date: Mon, 25 Nov 2002 12:08:23 +0100


Użytkownik "sanczo" <elpablo_at_nospam_bobo.ds5.agh.edu.pl> napisał w wiadomości
news:arrobl$77p$1_at_nospam_bobo.ds5.agh.edu.pl...

Napisalem cos takiego, tylko nie za bardzo dziala. Czy ktos widzi blad ?

ADDC A,R1
...
ADD A,R0

Dodawanie liczb dwybajtowych:
1) Najpierw dodajesz do siebie młodsze bajty (ADD, przeniesienie ląduje w
CY)
2) Następnie dodajesz do siebie starsze bajty + bit przeniesienia z
młodszego bajtu (ADDC)
3) Nie załapałem o co chodzi z JC FIX, ale może pora zbyt wczesna ;)

DIV4:

Dzielenie liczby dwubajtowej /2 czyli przesuwanie o jedną pozycje w prawo:
1) Najpierw przesuwasz starszy bajt (MSB) w prawo. Musisz uzyskać:
MSB.7 = 0 ; pobierane z wyzerowanego CY
MSB.(N-1) = MSB.N
CY = MSB.0 ; przechowujemy w CY do przesuwania LSB
czyli wykonujesz:
CLR C
RRC A
--> to jest Ok

2) przesuwasz mlodszy bajt (LSB)
LSB.7 = CY ; (czyli początkowo msb.0)
LSB.(N-1) = LSB.N
CY = LSB.0 ; ten bit na straty

czyli ponownie:
RRC A ; Rotate Right through Carry
a nie (tak jak napisałeś):
RR A ; Rotate Right

MDz




Poprzedni Następny
Wiadomość
Spis treści
From: Milosz Skowyra <miloszek_at_nospam_fidonet.org.pl>
Subject: Re: 8051 - SREDNIA 4 LICZB 12-BITOWYH.
Date: Sun, 24 Nov 2002 23:41:57 +0100


Marek Dzwonnik wrote:

Suma 4 liczb 12-bitowych nie przekroczy 16bitów (a nawet nie przekroczy 14
). Czyli robisz 4 dodawania (16bit) po czym 16-bitowy wynik przesuwasz o 2
miejsca w prawo.

Dla swietego spokoju jak po przesunieciu CY=1 to do wyniku dodac
jedynke.
Niby takie nic, ale daje sie odczuc ;-)
--
Regards. Przy odpowiedzi usun "." przed "net" z adresu!!!
|-----------------------------------------------------|
| Milosz Skowyra GSM Mobile +48 600 95 35 72 |
| miloszek_at_nospam_fido.net.org.pl 2:484/2.47 on fidonet |
|-----------------------------------------------------|
"Zaprojektowany do lubudubu" - (C) Marek Dzwonnik ;->>>

Poprzedni Następny
Wiadomość
Spis treści
From: "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_hoga.pl>
Subject: Re: 8051 - SREDNIA 4 LICZB 12-BITOWYH.
Date: Sun, 24 Nov 2002 22:13:02 +0100


sanczo wrote:


Trzeba zrobic to dodawania aby nie tracic wyniku przy duzych wartosciach -
wynik nie zmiesci sie na 2 bajtach.

log_2(4*n) = 2 + log_2(n) -- 14 bitow maksymalnie, zmiesci sie bez problemu.

Pozdrawiam
Piotr Wyderski