grzechuk Opublikowano 5 Maja 2008 Zgłoś Opublikowano 5 Maja 2008 (edytowane) na poczatku male wyjasnienie: nie jestem informatykiem (wiec sorry za bledy w komentarzach), a programowanie mikrokontrolerow niestety musze przejsc... zrobilem zadanie i mysle, ze dzialac bedzie po malej korekcie, o ktora prosze (albo chociaz o wskazowke, bo juz zglupialem) ;-) zadanie: zadeklarowac tablice adr_c danych (dowolnych) i zakonczyc jak FFh (255d), napisac petle sprawdzajaca parzystosc kazdej danej i jesli jest parzysta - zapisac ja w tablicy adr_x, ktora zakonczyc tez FFh moj program: adr_x equ 0A0h ;lokalizacja tablicy2 z liczbami parzystymiorg 0hljmp startorg 40h ;przejscie z programem o 40 rejestrow dalejadr_c: db 04h, 080h, 0ah, 01d, 0ffh ;deklaracja tablicyorg 100h start:mov r0,#0 ;w tym rejestrze bedzie licznik odpowiadajacy za komorki w adr_cmov dptr,#adr_c ;ustawienie wskaznika na tablicyspr1:mov a,r0mov r3,@dptr ;zachowanie wartosci komorki (ale nie dziala przy kompilacji, a nie wiem jak uzyc dpl i dph;/)inc r0 ;czyli "i++"movc a,@a+dptr ;wpisanie do akumulatora wartosci z komorki "itej" tablicy (???)anl a,#0ffh ;sprawdzenie, czy to koniec tablicyjz wyjdzanl a,#00000001b ;sprawdzenie parzystoscijz zachowajsjmp spr1zachowaj:mov dptr,#adr_x ;ustawienie sie na poczatku tablicy2mov a,r3movx @dptr,a ;zapisanie do nowej tablicy liczby z r3inc dptr ;nastepna komorka (i tutaj mam watpliwosci czy nie zrobic skoku do zwiekszenia razem z r0)sjmp spr1wyjdz:mov dptr,#adr_xmov a,r3movx @dptr,asjmp $end pomoze ktos? Edytowane 5 Maja 2008 przez jekyl Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 5 Maja 2008 Zgłoś Opublikowano 5 Maja 2008 a nie można tego po prostu odpalić i zobaczyć czy działa? :) Ewentualnie dorwac jakiś symulator i puścić pracę krokową? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
grzechuk Opublikowano 5 Maja 2008 Zgłoś Opublikowano 5 Maja 2008 (edytowane) odpalalem to na makiecie i na symulatorze... do tablicy adr_x zapisuje tylko 33h (ktora nie jest ani parzysta ani nie jest w tablicy adr_c), komorki po tej z 33h pozostaja niezmienione (po wyzerowaniu, zostaja zera - zeby nie bylo ze nadpisuje tymi samymi liczbami) problem lezy na 90% w zlym operowaniu dptr... tyle tylko, ze ja nie wiem co jest zle... a na czuja to juz petle czasowe godzine robilem (12 linijek kodu, z czego przez 30min dobieralem wartosci zmienne w dwoch linijkach) Edytowane 5 Maja 2008 przez jekyl Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
K3310pH Opublikowano 8 Maja 2008 Zgłoś Opublikowano 8 Maja 2008 (edytowane) ogolnie to zdaje sie nie ma zwyczaju rozwiazywania uzytkownikom zadan domowych, jednakze napisany przeze mnie kawalek kodu nie daje zadnych gwrancji ze ruszy, gdyz ponizsze wypociny powstaly na podstawie listy mnemonikow 8051 i minimalnej (chybionej?) dedukcji (np czy Rx daja dostep do pamieci 0..255 bajtow) to ja bym to widzial mniej wiecej tak: mov r0, #adr_cmov r1, #adr_xspr1:cjne @r0, #0ffh, sprawdzaj; (R0) != 0FFh -> sprawdzajmov @r1, #0ff; zakoncz adr_x 0FFh sjmp koniec; to juz jest koniec, nie ma juz nic, jestesmy wolni, mozemy iscsprawdzaj:mov a, @r0; wpisz badana liczbe do akumulatoramov r3, a; zapamietaj badana liczbe do ewentualnego zapisuinc r0; zwieksz adres na kolejna liczbe wejsciowaanl a, #01h; sprawdz czy parzystajz zachowaj; parzysta to zapiszsjmp spr1; idz po nastepna liczbe do zbadaniazachowaj:mov a, r3; przypomnij sobie liczbe;]mov @r1, A; zapisz do nowej tablicyinc r1; zwieksz wskaznik nowej tablicy na ewentualna kolejna liczbesjmp spr1; idz po nastepna liczbe do zbadaniakoniec:end Edytowane 8 Maja 2008 przez K3310pH Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
grzechuk Opublikowano 8 Maja 2008 Zgłoś Opublikowano 8 Maja 2008 dzieki K3310pH, jak dorwe sie do keila to sprawdze czy dziala :rolleyes: Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
grzechuk Opublikowano 12 Maja 2008 Zgłoś Opublikowano 12 Maja 2008 niestety nie dziala to bo obie tablice wymagaja uzycia dptr czyli dph i dpl i nie mozna ich zapisac w 1 rejestrze bo sa za duze ;-/ Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...