8051 - SREDNIA 4 LICZB 12-BITOWYH.
Masz problem? Zapytaj na forum elektroda.pl
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
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
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
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
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
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. !]
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
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 ;->>>
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