Proszę o sprawdzenie kodu w AVR Assembly do obliczeń V+100*(H+100*T)

=?ISO-8859-2?Q?Jaki=B6_b=B3=B1d?=





Poprzedni Następny
Wiadomość
Spis treści
From: dArek <darecki22_at_nospam_tenbit.pl_>
Subject: =?ISO-8859-2?Q?Jaki=B6_b=B3=B1d?=
Date: Sat, 09 Apr 2005 09:50:12 +0200


Piszę program w Avr asembler. Program jest prosty, ale robie jakiś błąd,
którego nie widzę. Czy ktoś mogłby to sprawdzić?

Zmienne V,H,T od 0 do 99

;Wynik=V+100*(H+100*T)
;pomocniczy rejestr R30
.def A1 = R16; A1 mlodszy bajt zmiennej A
.def A2 = R17; A2 starszy bajt zmiennej A
.def A3 = R18;
.def B1 = R19; B1 mlodszy bajt zmiennej B
.def B2 = R20; B2 starszy bajt zmiennej B
.def B3 = R21;
.def T = R25;
.def H = R26;
.def V = R27;
.def MSB = R2
.equ ccc = $45

zmienne:
ldi T,23
ldi H,36
ldi V,47
ldi R30,100
oblicz_adres:
mul T,R30;
mov A1,R0
mov A2,R1

mov B2,0
add A1,H
adc A2,B2
mul A1,R30
mov B1,R0
mov B2,R1
mul A2,R30
mov A1,R0
mov A2,R1

ldi R29,0
add A1,B2
adc R23,R27
cpi R23,0
breq skok
ldi R29,1
add A2,R29
skok:
add B1,V

;Wynik znajduje się w A2 - najstarszy bajt; A1 - mlodszy, B1 - najmlodszy
koniec:
rjmp koniec


Efekt jest taki, ze cos przeklamuje. Moze ktos znajdzie chwilke zeby to
sprawdzic, bo nie mam wprawy w takich dzialaniach.
Dzialanie jest takie Wynik=V+100*(H+100*T) a wynik musi byc w trzech
rejestrach.

pozdrawiam, dArek

Poprzedni Następny
Wiadomość
Spis treści
From: dArek <darecki22_at_nospam_tenbit.pl_>
Subject: Re: =?ISO-8859-2?Q?Jaki=B6_b=B3=B1d?=
Date: Sat, 09 Apr 2005 15:02:31 +0200


dArek wrote:
Piszę program w Avr asembler. Program jest prosty, ale robie jakiś błąd,
którego nie widzę. Czy ktoś mogłby to sprawdzić?

Zmienne V,H,T od 0 do 99

;Wynik=V+100*(H+100*T)
;pomocniczy rejestr R30
.def A1 = R16; A1 mlodszy bajt zmiennej A
.def A2 = R17; A2 starszy bajt zmiennej A
.def A3 = R18;
.def B1 = R19; B1 mlodszy bajt zmiennej B
.def B2 = R20; B2 starszy bajt zmiennej B
.def B3 = R21;
.def T = R25;
.def H = R26;
.def V = R27;
.def MSB = R2
.equ ccc = $45

zmienne:
ldi T,23
ldi H,36
ldi V,47
ldi R30,100
oblicz_adres:
mul T,R30;
mov A1,R0
mov A2,R1

mov B2,0
add A1,H
adc A2,B2
mul A1,R30
mov B1,R0
mov B2,R1
mul A2,R30
mov A1,R0
mov A2,R1

ldi R29,0
add A1,B2
adc R23,R27
cpi R23,0
breq skok
ldi R29,1
add A2,R29
skok:
add B1,V

;Wynik znajduje się w A2 - najstarszy bajt; A1 - mlodszy, B1 - najmlodszy
koniec:
rjmp koniec


Efekt jest taki, ze cos przeklamuje. Moze ktos znajdzie chwilke zeby to
sprawdzic, bo nie mam wprawy w takich dzialaniach.
Dzialanie jest takie Wynik=V+100*(H+100*T) a wynik musi byc w trzech
rejestrach.

pozdrawiam, dArek
Znalazłem szmatę. Temat zamknięty.

pozdrawiam, dArek

Poprzedni Następny
Wiadomość
Spis treści
From: "Krzysiek." <_at_nospam_dla.zaufanych.zapytaj>
Subject: =?iso-8859-2?B?UmU6IEpha2m2IGKzsWQ=?=
Date: Sat, 9 Apr 2005 15:43:17 +0200



Znalazłem szmatę. Temat zamknięty.

pozdrawiam, dArek

napisz gdzie...


Poprzedni Następny
Wiadomość
Spis treści
From: dArek <darecki22_at_nospam_tenbit.pl_>
Subject: Re: =?ISO-8859-2?Q?Jaki=B6_b=B3=B1d?=
Date: Sat, 09 Apr 2005 15:59:36 +0200


Krzysiek. wrote:
Znalazłem szmatę. Temat zamknięty.

pozdrawiam, dArek


napisz gdzie...

Błąd polega na kolejności działania. Najpierw zrobiłem działania na
starszym bajcie o poten na młodszym. Każdy wie, że robi się na odwrót.
No ale pisałem to późnym wieczorem. Szukałem błędu a to nie sposób.
Czasami warto napisać coś jeszcze raz. Wtedy szybciej się człowiek z tym
upora. Operacje są ok, tylko ta kolejność była nie taka.

Poprzedni Następny
Wiadomość
Spis treści
From: J.F. <jfox_xnospamx_at_nospam_poczta.onet.pl>
Subject: Re: Jakiś błšd
Date: Sat, 09 Apr 2005 13:56:39 +0200


On Sat, 09 Apr 2005 09:50:12 +0200, dArek wrote:
Piszę program w Avr asembler. Program jest prosty, ale robie jakiś błąd,
którego nie widzę. Czy ktoś mogłby to sprawdzić?
[...]
ldi R29,0
add A1,B2
adc R23,R27

Ja tam nie wiem .. ale co bylo wczesniej w R23, i czy na pewno 0 ?
BO to jest jego pierwsze wystapienie w programie ..


J.


Poprzedni Następny
Wiadomość
Spis treści
From: dArek <darecki22_at_nospam_tenbit.pl_>
Subject: Re: =?UTF-8?B?SmFrae+/vSBixYLFoWQ=?=
Date: Sat, 09 Apr 2005 14:33:01 +0200


J.F. wrote:
On Sat, 09 Apr 2005 09:50:12 +0200, dArek wrote:

Piszę program w Avr asembler. Program jest prosty, ale robie jakiś błąd,
którego nie widzę. Czy ktoś mogłby to sprawdzić?

[...]

ldi R29,0
add A1,B2
adc R23,R27


Ja tam nie wiem .. ale co bylo wczesniej w R23, i czy na pewno 0 ?
BO to jest jego pierwsze wystapienie w programie ..


J.

To jest sumowanie 8 bitowej liczby do 16 bitowej z przeniesieniem. W B2
jest 8 bitowa liczba a R27=0 znaczy, ze starszy bajt jest zero. To tak
jakby 16bitowa liczba tylko starszy bajt rowny zero - czyli 8 bitowa. :)
namieszalem?