Asembler 8051 - problemy.

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.

Reply to
Robert R
Loading thread data ...

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.

Reply to
Irek_K

Robert R pisze:

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

Adam

Reply to
invalid unparseable

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

w 8051? Jeszcze jakies dobre rady?

Reply to
Marek Lewandowski

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.

Reply to
Robert R

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

J.

Reply to
J.F.

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.

Reply to
Robert R

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.

Reply to
Robert R

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.

Reply to
J.F.

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

Reply to
invalid unparseable

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

Reply to
Irek_K

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.