Prosty kod dla 8051
Masz problem? Zapytaj na forum elektroda.pl
From: "Zbych" <zbigzdroje1_at_nospam_wp.pl>
Subject: Prosty kod dla 8051
Date: Sun, 30 Oct 2005 18:27:24 +0100
Witam
Ten bardzo prosty kod asm dla 8051 zajmuje mi w C kilkadziesiąt bajtów. Albo
mam zaćmienie albo????? nic już nie wiem:
0xE5,&H,
0x24,0x01,
0xD4,
0xF5,&H
Czy ktoś cós ma prostszego, oczywiście w C.
--
Pozdrowienia Zbych
From: Marcin E. Hamerla <Xmeh4njusy_at_nospam_Xpoczta.Xonet.Xpl.removeX>
Subject: Re: Prosty kod dla 8051
Date: Sun, 30 Oct 2005 18:27:43 +0100
Zbych napisal(a):
Witam
Ten bardzo prosty kod asm dla 8051 zajmuje mi w C kilkadziesiąt bajtów. Albo
mam zaćmienie albo????? nic już nie wiem:
0xE5,&H,
0x24,0x01,
0xD4,
0xF5,&H
Czy ktoś cós ma prostszego, oczywiście w C.
Hmm, dlaczego nie rzuciles mnemonikow? Kto by jeszcze pamietal kody
hexa rozkazow??
P.S.
Sa oczywiscie rzeczy, ktore w C zajma znacznie wiecej rozkazow. Na
przyklad Swap.
--
Pozdrowienia, Marcin E. Hamerla
"Every day I make the world a little bit worse."
From: "Zbych" <zbigzdroje1_at_nospam_wp.pl>
Subject: Re: Prosty kod dla 8051
Date: Sun, 30 Oct 2005 18:38:52 +0100
Witam
Masz rację; mnemoniki są czytelne:
Dopisuję
0xE5,&H, MOV A, (adres)
0x24,0x01, ADD A, #dana
0xD4, DA A
0xF5,&H MOV (adres), A
Czy ktoś cós ma prostszego, oczywiście w C.
Hmm, dlaczego nie rzuciles mnemonikow? Kto by jeszcze pamietal kody
hexa rozkazow??
Dzięki za zainteresowanie.
--
Pozdrowienia Zbych
From: Adam Dybkowski <adybkows123_at_nospam_amwaw.edu.pl>
Subject: Re: Prosty kod dla 8051
Date: Sun, 30 Oct 2005 23:55:56 +0100
Zbych wrote:
0xE5,&H, MOV A, (adres)
0x24,0x01, ADD A, #dana
0xD4, DA A
0xF5,&H MOV (adres), A
Czy ktoś cós ma prostszego, oczywiście w C.
Będzie ciężko, bo C trudno przekonać do obliczeń BCD i nie ma chyba
sensownego sposobu na zmuszenie kompilatora do wygenerowania rozkazu
poprawki po dodawaniu BCD (DAA). Zrób sobie funkcję inline napisaną w
asemblerze nazwaną np. increment_bcd i używaj kiedy trzeba.
--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/
Uwaga: przed wysłaniem do mnie maila usuń "123" z adresu.
From: "Zbych" <zbigzdroje1_at_nospam_wp.pl>
Subject: Re: Prosty kod dla 8051
Date: Wed, 2 Nov 2005 04:21:31 +0100
Witam
Będzie ciężko, bo C trudno przekonać do obliczeń BCD i nie ma chyba
sensownego sposobu na zmuszenie kompilatora do wygenerowania rozkazu
poprawki po dodawaniu BCD (DAA). Zrób sobie funkcję inline napisaną w
asemblerze nazwaną np. increment_bcd i używaj kiedy trzeba.
Oto co udało mi się wykoncypować:
void Licznik_BCD(unsigned char idata *adres)
{
unsigned char j;
j=*adres;
j++;
if ((j&0x0F)>9) j+=6;
*adres=j;
}
Czy ktoś ma prostszy kod? Mój zawiera 20B w ASM.
--
Pozdrowienia Zbych
From: Zbych <abuse_at_nospam_onet.pl>
Subject: Re: Prosty kod dla 8051
Date: Wed, 02 Nov 2005 21:30:24 +0100
Zbych przemówił ludzkim głosem:
Oto co udało mi się wykoncypować:
[ciach]
Czy ktoś ma prostszy kod? Mój zawiera 20B w ASM.
A co ze starszym niblem w bajcie ? (rozumiem, że chcesz operować na
spakowanym BCD). Np. 0x99, po inkrementacji 0x9A, po twojej korekcji
0xA0. Przydałoby się dodać jeszcze 0x60 w przypadku przeniesienia na CY.
From: "Zbych" <zbigzdroje1_at_nospam_wp.pl>
Subject: Re: Prosty kod dla 8051
Date: Thu, 3 Nov 2005 00:06:12 +0100
Witam
A co ze starszym niblem w bajcie ? (rozumiem, że chcesz operować na
spakowanym BCD). Np. 0x99, po inkrementacji 0x9A, po twojej korekcji 0xA0.
Przydałoby się dodać jeszcze 0x60 w przypadku przeniesienia na CY.
To ma być licznik BCD do max 99. Czyli nie grozi po 99 -->A0. W związku, z
powyższym związkiem, mam dalej prośbę o krótszy kod.
Od mojego ostatniego postu skróciłem kod o 1B.(teraz 19B w ASM).
--
Pozdrowienia Zbych
From: "Zbych" <zbigzdroje1_at_nospam_wp.pl>
Subject: Re: Prosty kod dla 8051
Date: Thu, 3 Nov 2005 01:43:02 +0100
Witam
Ćwiczenia dają jakieś tam efekty. Znów skróciłem troszkę kod. Teraz to już
16B. Jedyną wadą jest to, że w czasie przejścia z 9-->10(19--20)... chwilowo
pojawia się 1A(2A)...
Czy ktoś to skróci???
--
Pozdrowienia Zbych
From: "Zbych" <zbigzdroje1_at_nospam_wp.pl>
Subject: Re: Prosty kod dla 8051
Date: Thu, 3 Nov 2005 01:48:14 +0100
Witam
Zapomniałem dołączyć kod
Czy ktoś to skróci???
void Licznik_BCD(unsigned char idata *adres)
{
(*adres) = (*adres)+1;
if (((*adres)&0x0F)>9) (*adres)+=6;
}
--
Pozdrowienia Zbych
From: "Piotrek Sz." <zumek.SKASUJ_at_nospam_gazeta.pl>
Subject: Re: Prosty kod dla 8051
Date: Thu, 3 Nov 2005 14:17:14 +0000 (UTC)
Zbych <zbigzdroje1_at_nospam_wp.pl> napisał(a):
Witam
Zapomniałem dołączyć kod
Czy ktoś to skróci???
void Licznik_BCD(unsigned char idata *adres)
{
(*adres) = (*adres)+1;
if (((*adres)&0x0F)>9) (*adres)+=6;
}
To jakieś zawody ?-)
(*adres)=(*adres)+1;
if(((*adres) & 0x0F)==0x0A ) (*adres)+=6;
Piotrek
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
From: Marcin E. Hamerla <Xmeh4njusy_at_nospam_Xpoczta.Xonet.Xpl.removeX>
Subject: Re: Prosty kod dla 8051
Date: Thu, 03 Nov 2005 09:01:54 +0100
Zbych napisal(a):
Ćwiczenia dają jakieś tam efekty. Znów skróciłem troszkę kod. Teraz to już
16B. Jedyną wadą jest to, że w czasie przejścia z 9-->10(19--20)... chwilowo
pojawia się 1A(2A)...
Czy ktoś to skróci???
Nie chcesz zrobic inline asm?
--
Pozdrowienia, Marcin E. Hamerla
"Every day I make the world a little bit worse."
From: "Zbych" <zbigzdroje1_at_nospam_wp.pl>
Subject: Re: Prosty kod dla 8051
Date: Thu, 3 Nov 2005 23:09:10 +0100
Witam
Nie chcesz zrobic inline asm?
--
> Pozdrowienia, Marcin E. Hamerla
>
Uczę się Keil'a c51(uVision2) a mam na razie wersję demo w której nie
działają wstawki ASM i do dyspozycji tylko 88B. Dlatego piszę wszystko w C.
Chyba, że jest jakiś ulepszacz na tą niedogodność.
--
Pozdrowienia Zbych