Programowanie plytki z 8051 - problem



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "abs" <abs_at_nospam_alpha.net.pl>
Subject: Programowanie plytki z 8051 - problem
Date: Fri, 22 Mar 2002 08:05:41 +0100


Taki problem: mam tablice
tab_dane: ds 0h, 9h, 10h, 19h
i zmienna o nazwie arg_1.

Chce wartosc tej zmiennej porownywac z kolejnymi elemetami tablicy.
Chcialbym zrobic tak:
mov A, arg_1
mov r0, #3
petla:
mov r1,tab_dane + r0 ;tu zglasza blad
potem jakies porwnanie r1 i A
dec r0
jesli r0 =! 0 to skok do petla.
Czyli nie wiem jak prawidlowo przeniesc element tablicy o indeksie w r0 do
rejestru r1. Da sie jakos ?

Wielkie dzieki za pomoc.
ABS



Poprzedni Następny
Wiadomość
Spis treści
From: "megaraptor" <megaraptor_at_nospam_wp.pl>
Subject: Re: Programowanie plytki z 8051 - problem
Date: Fri, 22 Mar 2002 08:24:14 +0100


Chce wartosc tej zmiennej porownywac z kolejnymi elemetami tablicy.
Chcialbym zrobic tak:
mov A, arg_1
mov r0, #3
petla:
mov r1,tab_dane + r0 ;tu zglasza blad
potem jakies porwnanie r1 i A
dec r0
jesli r0 =! 0 to skok do petla.
Czyli nie wiem jak prawidlowo przeniesc element tablicy o indeksie w r0 do
rejestru r1. Da sie jakos ?

Jeszcze powiedz w jakiej pamięci jest umieszczona ta tablica.
W pamięci programu czy danych i wewnętrznej czy zewnętrznej ??

Pzdr
D.D.




Poprzedni Następny
Wiadomość
Spis treści
From: "abs" <abs_at_nospam_alpha.net.pl>
Subject: Re: Programowanie plytki z 8051 - problem
Date: Fri, 22 Mar 2002 08:52:19 +0100


Jeszcze powiedz w jakiej pamięci jest umieszczona ta tablica.
W pamięci programu czy danych i wewnętrznej czy zewnętrznej ??

Hmm... zdaje sie, ze danych (sorki, jestem poczatkujacym) Moj segment (?)
zmiennych wyglada tak:

dseg at 20h

arg_1: ds 1
arg_2: ds 1
spoprz: ds 1

tab_dane: ds 0h, 9h, 10h, 19h
tab_wynik: ds 0h, 3h, 4h, 5h

a potem juz zaczyna sie program czyli cseg at 8000h i reszta.

Dzieki za pomoc,
ABS



Poprzedni Następny
Wiadomość
Spis treści
From: "megaraptor" <megaraptor_at_nospam_wp.pl>
Subject: Re: Programowanie plytki z 8051 - problem
Date: Fri, 22 Mar 2002 11:56:57 +0100


Hmm... zdaje sie, ze danych (sorki, jestem poczatkujacym) Moj segment (?)
zmiennych wyglada tak:

dseg at 20h

arg_1: ds 1
arg_2: ds 1
spoprz: ds 1

tab_dane: ds 0h, 9h, 10h, 19h
tab_wynik: ds 0h, 3h, 4h, 5h

a potem juz zaczyna sie program czyli cseg at 8000h i reszta.

Jeżeli danych to:

MOV R0,#tab_dane
MOV R1,_at_nospam_R0 -> R0 jako rejestr indeksowy


Pzdr.
D.D.




Poprzedni Następny
Wiadomość
Spis treści
From: "Maciej Gruszecki" <Maciej.Gruszecki_at_nospam_jtc.biz.pl>
Subject: Re: Programowanie plytki z 8051 - problem
Date: Fri, 22 Mar 2002 09:33:15 +0100


Użytkownik "abs" <abs_at_nospam_alpha.net.pl> napisał w wiadomości
news:a7el3t$9ic$1_at_nospam_news.tpi.pl...
Taki problem: mam tablice
tab_dane: ds 0h, 9h, 10h, 19h
i zmienna o nazwie arg_1.

Chce wartosc tej zmiennej porownywac z kolejnymi elemetami tablicy.
Chcialbym zrobic tak:
mov A, arg_1
mov r0, #3
petla:
mov r1,tab_dane + r0 ;tu zglasza blad
potem jakies porwnanie r1 i A
dec r0
jesli r0 =! 0 to skok do petla.
Czyli nie wiem jak prawidlowo przeniesc element tablicy o indeksie w r0 do
rejestru r1. Da sie jakos ?

Powinno być mniej więcej tak:

mov a,#3
mov dptr,#tab_dane
petla: push acc
movc a,_at_nospam_a+dptr
;potem jakieś równanie a i arg_1
inc dptr
pop acc
djnz acc,petla

Pamiętaj o ustawieniu stosu! Jeśli jeszcze nie wiesz co to stos, to na
wszelki wypadek użyj tej wersji:

mov r0,#3
mov dptr,#tab_dane
petla: mov a,r0
movc a,_at_nospam_a+dptr
;potem jakieś równanie a i arg_1
inc dptr
djnz r0,petla

W obu powyższych przykładach jest jednak mały błąd :) Zmienna arg_1 nie
zostanie porównana z elementem tablicy o indeksie 0. Poprawnie powinno być:

mov r0,#4
mov dptr,#tab_dane
petla: dec r0
mov a,r0
movc a,_at_nospam_a+dptr
;potem jakieś równanie a i arg_1
inc dptr
mov a,r0
jnz petla

Miłej zabawy.

Pear



Poprzedni Następny
Wiadomość
Spis treści
From: "abs" <abs_at_nospam_alpha.net.pl>
Subject: Re: Programowanie plytki z 8051 - problem
Date: Fri, 22 Mar 2002 17:17:10 +0100


Poprawnie powinno być:

mov r0,#4
mov dptr,#tab_dane
petla: dec r0
mov a,r0
movc a,_at_nospam_a+dptr
;potem jakieś równanie a i arg_1
inc dptr
mov a,r0
jnz petla

Dzieki. Ale po co komenda inc dptr ? Dzieki niej w kazdej iteracji petli
po komendzie movc a,_at_nospam_a+dptr w akumulatorze ladowala mi ostatnia komorka
tablicy czyli 19h. Po wywaleniu inc dptr jest wreszcie ok.

Dziekuje bardzo wszystkim, ktorzy odpowiedzieli na mojego posta.
ABS



Poprzedni Następny
Wiadomość
Spis treści
From: "Maciej Gruszecki" <pear_at_nospam_silesianet.pl>
Subject: Odp: Programowanie plytki z 8051 - problem
Date: Sun, 24 Mar 2002 18:29:34 +0100


Użytkownik "abs" <abs_at_nospam_alpha.net.pl> napisał w wiadomości
news:a7fljf$mtn$1_at_nospam_news.tpi.pl...
Poprawnie powinno być:

mov r0,#4
mov dptr,#tab_dane
petla: dec r0
mov a,r0
movc a,_at_nospam_a+dptr
;potem jakieś równanie a i arg_1
inc dptr
mov a,r0
jnz petla

Dzieki. Ale po co komenda inc dptr ? Dzieki niej w kazdej iteracji petli

No fakt. Mój błąd :))

Pear