Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

AT89C2051 - Pierwszy program w Assemblerze nie działa

sebek99 07 Lut 2015 13:57 615 5
  • #1 07 Lut 2015 13:57
    sebek99
    Poziom 15  

    Witam
    Uczelnia wymusza na mnie naukę Assemblera dla procesorów serii C51.

    Zorganizowałem płytkę przystosowaną głównie pod Atmegę i zamontowałem w niej w adapterze AT89C2051.

    Sam program próbuję napisać w edytorze: MCU 8051 IDE v1.4.7 firmy Moravia Microsystems.

    Napisałem wstępnie coś co miesza rejestrami:

    Kod: asm
    Zaloguj się, aby zobaczyć kod


    W symulatorze edytora program niby działa - kończy się określonym stanem na poszczególnych pinach P1.

    Po zaprogramowaniu uC cały port P1 jest w stanie 0 zaraz po włączeniu.


    W edytorze wybieram AT89C2051.

    Edytor kompiluje na kod maszynowy - powstaje plik bin, który wgrywam Beeprogiem+.

    Reset uC realizuję przez C 10uF z +5V i R 10k do masy. Kwarc 12MHz.


    Na pinie 4 (XTAL2) mam ładny przebieg sinusoidalny o amplitudzie 2V.
    Offset linii przejścia przebiegu przez 0, względem masy jest również na poziomie 2V.

    Na pinie 5(XTAL1) mam napięcie stałe: 1,4V

    Czy może ktoś mi napisać prosty program, który miga ledem i na pewno działa w uC?

    0 5
  • Pomocny post
    #2 07 Lut 2015 15:28
    Badmaneq
    Poziom 23  

    1. Piny P1.0 i P1.1 są wejściem komparatora, aby działały jak zwykły pin I/O musisz je podciągnąć do Vcc przez restystor.

    2. Piszę z głowy, nie testowałem

    Kod: asm
    Zaloguj się, aby zobaczyć kod

    0
  • #3 07 Lut 2015 18:54
    BlueDraco
    Specjalista - Mikrokontrolery

    A jakiego efektu działania tego programu oczekujesz? Na moje oko ma on zapisać zera do portu P1, chyba, że coś przeoczyłem.

    Zwróć też uwagę na to, ż emikrokontroler nie ma dyrektywy END. On po prostu będzei wykonywał z pamięci kolejne instrukcje, a będą tam zapisane bajty złożone z samych jedynek. Nie pamiętam już, co to za instrukcja, bo 51 nie programuję już od jakichś 14 lat.

    0
  • #4 07 Lut 2015 21:20
    sebek99
    Poziom 15  

    Dziękuję wszystkim za odzew. Samo działanie mojego programu jak i Badmaneq jest dla mnie jasne. Tak samo pokazuje symulator na komputerze.
    To Beeprog dopisuje podczas ładowania kilka bitów i tu prawdopodobnie jest problem.

    Najlepiej jakby kompilator generował obraz całej pamięci a nie tylko kawałek z faktycznymi instrukcjami.

    Jakie wartości w pamięci uC powinny być w miejscach gdzie nie ma instrukcji 00 czy FF?

    0
  • #5 07 Lut 2015 21:55
    marekzs3
    Poziom 19  

    Najczęściej FF przy skasowaniu. (dla C2051 na pewno)

    0
  • #6 07 Lut 2015 22:04
    BlueDraco
    Specjalista - Mikrokontrolery

    Wszędzie są instrukcje, tylko nie wszędzie są te, które zapisałeś w programie. Procesor nigdy nie kończy wykonania programu. Jeśli Ty chcesz go zakończyć - napisz na końcu pętlę nieskończoną - SJMP $, w które procesor pozostanie.

    Twój program zapisuje 0 do portu P1, więc jego zachowanie wygląda na poprawne.

    0