Programowanie plytki z 8051 - problem
Masz problem? Zapytaj na forum elektroda.pl
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
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.
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
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.
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
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
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