Prosty kod dla 8051

Oct 30, 2005 11 Replies

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.



Zbych napisal(a):

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.

Witam

Masz racjê; mnemoniki s± czytelne:

Dopisujê

Dziêki za zainteresowanie.

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.

Witam

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.

Zbych przemówił ludzkim głosem:

[ciach]

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.

Witam

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).

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???

Witam Zapomnia³em do³±czyæ kod

void Licznik_BCD(unsigned char idata *adres) { (*adres) = (*adres)+1; if (((*adres)&0x0F)>9) (*adres)+=6; }

Zbych napisal(a):

Nie chcesz zrobic inline asm?

Zbych snipped-for-privacy@wp.pl napisał(a):

To jakieś zawody ?-)

(*adres)=(*adres)+1; if(((*adres) & 0x0F)==0x0A ) (*adres)+=6;

Piotrek

Witam

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¶æ.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required