Jak poprawić błędy w kodzie asemblera 8051 z kursu EdW (AVT-2250)?

maly problem z ASM na 51





Poprzedni Następny
Wiadomość
Spis treści
Date: Thu, 05 Sep 2002 22:18:24 +0200
From: badworm <nospam_at_nospam_post.pl>
Subject: maly problem z ASM na 51


Zacząłem się uczyć asemblera 8051 na bazie kursu z EdW(AVT-2250) i
napotkałem pewien problem. Wydaje mi się, że w pewnym fragmencie
programu timera jest błąd:
DECACC:
jnz niero
mov A,#99h
ret
niero:
clr C
subb A,#1
push Acc
anl A,0Fh
cjne A,#0Fh,nieOF
pop Acc
anl A,#F0h
orl A,#9
ret

nieOF:
pop
Acc
ret
Moje obawy budzi linia "clr C" oraz "pop Acc" z procedury nieOF.
Przecież jeśli program skoczy do tej procedury to przywróci zawartość
akumulatora ze stosu a pop powrocie do głównej programu po raz kolejny
zdejmie ze stosu zawartość akumlatora. Ale wiem, że w programie jest
błąd-przedstawiony powyżej fragment ma zmniejszać zawartość akumulatora
z korekcją dziesiętną(czyli po 50h ma być 49h itd :-)) a program i tak
liczy w normalnym hex'ie :-((( Może mi ktoś pomóc???
--
Pozdrawiam Bad Worm badworm<małpa>post<kropka>pl
http://www.gusnet.prv.pl GG# 2400455(około 22)
"All in all you're just another brick in the wall"
Tnijcie cytaty i sygnaturki!


Poprzedni Następny
Wiadomość
Spis treści
From: zielpro_at_nospam_cavern.pl (ziel)
Subject: Re: maly problem z ASM na 51
Date: 6 Sep 2002 10:27:19 +0200


Zacząłem się uczyć asemblera 8051 na bazie kursu z EdW(AVT-2250) i
napotkałem pewien problem. Wydaje mi się, że w pewnym fragmencie
programu timera jest błąd:
DECACC:
jnz niero
mov A,#99h
ret
Pierwszy przypadek - wyjscie z pętli z dwoma 9 w akumulatorze.

niero:
clr C
subb A,#1
push Acc
anl A,0Fh
Tutaj bez #?

cjne A,#0Fh,nieOF
Skok jeśli liczba mniejsza od 15

pop Acc
anl A,#F0h
orl A,#9
ret
Trzeci przypadek w akumulatorze jest x9

nieOF:
pop
Acc
powinno być w jednej linni - pop Acc
ret
Drugi przypadek jeśli liczba jest mniejsza od 15

Moje obawy budzi linia "clr C" oraz "pop Acc" z procedury nieOF.
Przecież jeśli program skoczy do tej procedury to przywróci
zawartość
akumulatora ze stosu a pop powrocie do głównej programu po raz
kolejny
zdejmie ze stosu zawartość akumlatora. Ale wiem, że w programie jest
błąd-przedstawiony powyżej fragment ma zmniejszać zawartość
akumulatora
z korekcją dziesiętną(czyli po 50h ma być 49h itd :-)) a program i
tak
liczy w normalnym hex'ie :-((( Może mi ktoś pomóc???
clr C musi być.
pop Acc jest dobrze.
Ale żeby określić czy program rzeczywiście robi to co ma robić
potrzebny
jest większy kawałek.

pzdr
Artur

--
Archiwum grupy: http://niusy.onet.pl/pl.misc.elektronika


Poprzedni Następny
Wiadomość
Spis treści
From: "Funak" <funak_at_nospam_wp.pl>
Subject: Re: maly problem z ASM na 51
Date: Fri, 6 Sep 2002 21:49:19 +0200


Witam!!!


| > cjne A,#0Fh,nieOF
| Skok jeśli liczba mniejsza od 15

Autopoprawka:

Jeśli akumulator jest różny od 15 to skok.
(to tak nawiasem)

Pozdrawiam

--
Funak
www: http://strony.wp.pl/wp/funak/index.htm - SWAG32 zawieszony do 5
września
GG-2949256



Poprzedni Następny
Wiadomość
Spis treści
From: zielpro_at_nospam_cavern.pl (ziel)
Subject: Re: maly problem z ASM na 51
Date: 7 Sep 2002 23:26:04 +0200


| > cjne A,#0Fh,nieOF
| Skok jeśli liczba mniejsza od 15

Autopoprawka:

Jeśli akumulator jest różny od 15 to skok.
(to tak nawiasem)
No oczywiście, że masz rację.
W czasie pisania rozważałem możliwości zawartości Acc
i akurat byłem przy opcji co będzie jeśli będzie mniej,
no tak mi się napisało. ;-)
pzdr
Artur

--
Archiwum grupy: http://niusy.onet.pl/pl.misc.elektronika


Poprzedni Następny
Wiadomość
Spis treści
Date: Fri, 06 Sep 2002 23:13:33 +0200
From: badworm <nospam_at_nospam_post.pl>
Subject: Re: maly problem z ASM na 51


ziel wrote:
> Tutaj bez #?
No właśnie! Przyjrzałem się dzisiaj jeszcze raz uważnie listingowi i
znalazłem ten błąd. Nsjwyraźniej nie służy mi przesiadka z Bascoma na
Notatnik+ ;-)) No i chyba już wiem co to znaczy szukać buga w ASM-w
innym miejscu programu miałem zamiast #0Fh #F0h :-(
--
Pozdrawiam Bad Worm badworm<małpa>post<kropka>pl
http://www.gusnet.prv.pl GG# 2400455(około 22)
"All in all you're just another brick in the wall"
Tnijcie cytaty i sygnaturki!


Poprzedni Następny
Wiadomość
Spis treści
From: Milosz Skowyra <miloszek_at_nospam_fido.net.org.pl>
Subject: Re: maly problem z ASM na 51
Date: Fri, 06 Sep 2002 10:50:02 +0200


badworm wrote:

Zacząłem się uczyć asemblera 8051 na bazie kursu z EdW(AVT-2250) i
napotkałem pewien problem. Wydaje mi się, że w pewnym fragmencie
programu timera jest błąd:
DECACC:
jnz niero
mov A,#99h
ret
niero:
clr C
subb A,#1
push Acc
anl A,0Fh
cjne A,#0Fh,nieOF
pop Acc
anl A,#F0h
orl A,#9
ret

nieOF:
pop
Acc
ret
Moje obawy budzi linia "clr C" oraz "pop Acc" z procedury nieOF.

Clr C, po to zebu odjac jeden a nie jeden plus zawartosc CY. To jest ok.

Przecież jeśli program skoczy do tej procedury to przywróci zawartość
akumulatora ze stosu a pop powrocie do głównej programu po raz kolejny
zdejmie ze stosu zawartość akumlatora.

Nie tak. Zdejmie ze stosu wartosc akumulatora po wykonaniu odejmowania.

Ale wiem, że w programie jest
błąd-przedstawiony powyżej fragment ma zmniejszać zawartość akumulatora
z korekcją dziesiętną(czyli po 50h ma być 49h itd :-)) a program i tak
liczy w normalnym hex'ie :-((( Może mi ktoś pomóc???

Nie chce mi sie sprawdzac, wiec podelse ci moj kawalek kodu.
Sprawdzony, dziala ;-)))

;===============================================================
; MAKING DECIMAL ADJUST OF ACC IN CASE OF SUBSTRACT
;
;===============================================================
BCD_SUBB_DECIMAL_ADJUST:PUSH ACC
ANL A,#00001111B
CJNE A,#00001111B,BCD_SUBB_DEC_ADJ_END
POP ACC
ANL A,#11111001B
RET
BCD_SUBB_DEC_ADJ_END: POP ACC
RET

Proceduka dziala tak samo jak DA A dla dodawania.
Hmmmm wlasnie zaczalem widziec dlaczego twoj nie dziala ;-)))
--
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 |
|-----------------------------------------------------|
Siala baba mak i dostala dozywocie...