Asembler 8051 - problemy.

Nov 25, 2007 18 Replies

Witam,chciałem sobie poćwiczyć programowanie 51 w asm. Posiadam płytkę prototyopwą dla procesora 89c2051 i właśnie na tym ic chciałbym zrobić parę prostych rzeczy w asm.



Na początku natknąłem się na problem - prosty kod: mov P1 , #00001111b label: sjmp label end



kompilujący się bez błędów na kompilatorze Ride 6.1 daje hexa którym programuję procesor korzystając z bascoma 51 i programatora mcs flash programmer - wiesza procesor - same jedynki na 2 portach. Zawartość pliku hex: :0500000075900F80FE69 :00000001FF



Próby programowania w bascomie dają pozytywne wyniki. (P1 = 00001111b) ustawia stany na pinach proc. jak potrzeba. Próby z asemblerem asem5113 dają podobne, negatywne wyniki. W ridzie na początku doklejone są oczywiście rejestry 51. Dostawianie na początku kodu komendy org 0 nie zmienia nic. Gdzie robię błąd? Proszę o pomoc.


Robert R pisze:

Może pisanie do portu w pierwszym cyklu nie jest najlepszym pomysłem. Teoretycznie wszystko OK (przynajmniej symulatory nic nie wykazują). Praktycznie proponuję jednak odczekać kilka cykli zegarowych zanim zaczniesz pisać po portach i zacznij może standardowo od ORG 0 LJMP Start omijając obszar skoków do procedur obsługi przerwań. Bascom pewnie dopisuje mnóstwo śmieci na początku programu tak że zapis do portu odbywa się w n-astym cyklu.

A jaki jest schemat tej p³ytki (zw³aszcza uk³ad RESETa) ? To jaki¶ gotowiec, czy sam to "klei³e¶" ?

Roman P.S. Zgodnie z sugestiami kolegów daj na start programików trochê pustych instrukcji opó¼nieniaj±cych.

Robert R pisze:

A może by tak ustawić kierunek portów ?

Adam

On Nov 26, 12:32 pm, Górski Adam

w 8051? Jeszcze jakies dobre rady?

Znalazłem przyczynę problemów. Jak się okazało kompilator raisonance i drugi z którego korzystałem działają prawidłowo. Program obsługujący programator w bascomie wymaga plików wejściowych hex innych niż intel hex. Zamiana programem hexbin pliku wynikowego z hex-a do bin-a i zaprogramowanie kontrolera plikiem wynikowym bin rozwiązało problemy. Dziękuję za zainteresowanie,Pozdrawiam.

A daj moze tego hexa ktory sie poprawnie programuje ? Bo ten co dales wyglada jak najbardziej sensownie.

J.

Korzystam z tego hexa który dołączyłem w poście na początku,zamieniam go na bina, ponieważ programator obsługuje inny format hex-a najwidoczniej.

Mój błąd: Programator czyta do bufora tylko pliki bin. Ja zaznaczałem czytaj

*.* i ładowałem hex-a.Zasugerowałem się obrazowaniem wczytanego pliku w postaci szesnastkowej.

Jeśli mam wyłączone przerwania i z nich nie korzystam, to nie muszę omijać obszaru obsługi przerwań. Sekwencja:

org 0 sjmp Start

:start .... ....

nic mi nie da.

D¿izas ! Programator wczyta³ hex-a zamiast bin-a i nawet siê nie zaj±kn±³ ?, nie wys³a³ jakiego¶ ostrze¿enia?

Roman

A czemu mialby to robic ? programator/opcja jest tylko binarny, jesli miales kaprys nazwac sobie plik .hex, .txt, .xls to juz tylko twoj problem :-)

J.

Fakt - ka¿dy plik mo¿e byæ czytany jak binarny, zmy³ka gotowa ;-(

Roman

Marek Lewandowski pisze:

Sorry ale nie pamiętam już 8051. Wobec tego na jakiej zasadzie ustawiało się tam kierunek portów ? Czy one wymagały pull- up - ów?

Adam

Robert R pisze:

Teoretycznie masz rację. Gdyby jednak procek był uszkodzony i z jakiegoś powodu generował sobie przerwania to mając tam wpisane 0 czyli NOP "poleciałby" to Twojego fragmentu programu. Są nawet "szkoły programowania" mówiące, że niewykorzystane obszary pamięci należy wypełniać NOPami a kończyć je skokiem do jakieś procedury obsługi błędów. (Nie jestem jednak pewny czy z taką usterką mógłby wykonać jakikolwiek program z powodu przepełniania stosu adresami powrotu).

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required