Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Kategoria: Kamery IP / Alarmy / Automatyka Bram
Montersi
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Re: Komunikacja pomiędzy dwoma 8051 przez RS232

mati_sh 15 Maj 2017 11:26 1098 9
  • #1 15 Maj 2017 11:26
    mati_sh
    Poziom 7  

    Cześć, mam zadanie na studiach zrobić komunikacje pomiędzy dwoma mikrokontrolerami, płytka Easy8051 v6 przez RS232. Jedna ma działać jako master druga slave, tylko odbierać sygnał. Klikamy przycisk na master, wtedy na slave ma się zaświecić dioda, która zgaśnie po kolejnym kliknięciu. Program ma być napisany w assemblerze. Mam pytanie co powinienem wiedzieć na ten temat, tylko raz programowaliśmy mikrokontrolery. Czy ktoś mógłby wytłumaczyć jak wykonać takie ćwiczenie?

  • Pomocny post
    #2 15 Maj 2017 11:51
    viayner
    Poziom 31  

    Witam,
    podam ci ogolne podejscie do problemu (dawno juz sie nie bawilem 8051 i nie wiele pamietam szczegolow):
    - ten ktory jest master programujesz aby wykryl stan przycisku i po jego wykryciu wysyla dowolna ale z gory ustalona komende przez RS232 i to wszystko. Wypadalo by dodac programowa funcje likwidujaca drganie stykow jezeli nie ma tego w postaci hardwerowej.
    - ten slave dziala w petli az wykryje transmisje szeregow, odczytuje znak i jezeli to ustalony znak to zmienia stan wybranego portu czy pinu na przeciwny. W wersji uproszczonej nie sprawdzamy transmisji szeregowej tylko wykrywamy jej obecnosc - jak pamietam ktoras z flag bedzie ustawiona.
    Pozdrawiam

  • #3 15 Maj 2017 12:02
    mati_sh
    Poziom 7  

    Dziękuje. Pewnie to banalne pytanie ale czy ktoś mógłby wytłumaczyć w jaki sposób wysłać komendę w assemblerze przez rs232, jak to się w ogóle odbywa? Próbuje szukać czegoś w internecie ale jakoś ciągle tego nie czaje.

  • #4 15 Maj 2017 12:21
    Piotrus_999
    Poziom 39  

    mati_sh napisał:
    ytłumaczyć w jaki sposób wysłać komendę w assemblerze przez rs232
    A co to znaczy wysłać komendę w asembplerze przez RS-232/ Czy chodzi Ci o wysłanie tekstu rozkazu asemblera np. "MOV P1, P2"?

  • #5 15 Maj 2017 12:25
    mati_sh
    Poziom 7  

    tak, chodzi np o "MOV P1, P2" tak aby zapalić diodę na drugiej płytce. Na jakiej zasadzie to się ma odbywać?

  • #6 15 Maj 2017 12:29
    Piotrus_999
    Poziom 39  

    No jezeli MOV P1, P2 ma zapalić diodę na drugim to wysyłasz po kolei 'M','O','V',' ','P','1',',',' ','P','2' a na odbirczym badaj czy dotarło. Jak tak to zapalaj :)

  • Pomocny post
    #7 15 Maj 2017 13:20
    krzysiek_krm
    Poziom 28  

    Witam,

    Piotrus_999 napisał:
    A co to znaczy wysłać komendę w asembplerze przez RS-232/ Czy chodzi Ci o wysłanie tekstu rozkazu asemblera np. "MOV P1, P2"?

    Piotrus_999 napisał:
    No jezeli MOV P1, P2 ma zapalić diodę na drugim to wysyłasz po kolei 'M','O','V',' ','P','1',',',' ','P','2' a na odbirczym badaj czy dotarło. Jak tak to zapalaj

    nie wydaje mi się, żeby epatowanie miałkimi dowcipasami było jakąś świetną sprawą, znów będziesz zdziwiony, że mnóstwo ludzi uważa Cię za buca, niektórzy mają jeszcze czelność donosić na Ciebie do moderatorów, podłość ludzka nie zna granic.

    Moderowany przez dondu:

    Niestety w tym przypadku odpowiedź kol. Piotrus_999 jest zgodna ze wcześniejszymi postami kol. mati_sh, z których wynika, że przez RS-232 chce przesłać tekst "MOV P1, P2" :)

    Koledze natomiast zwracam uwagę, by stosował się do punktu 3.1.9 regulaminu.




    Ale do rzeczy, już do autora tematu.
    W porównaniu ze współczesnymi układami, 8051 jest dosyć prosty i banalny.
    Spróbuj przejrzeć, na przykład to:
    http://ftp.forum.softpol.com.pl/MI_procesor_8051/mikrokomputery_51.pdf
    prawdopodobnie zostaniesz ekspertem.

    Pozdrawiam

  • Pomocny post
    #8 15 Maj 2017 20:19
    JarekC
    Poziom 27  

    >dondu
    Autor tematu w pierwszym poście nic nie pisał o przesyłaniu komend assemblera a jedynie w następnym poście potwierdził sugestię Piotrus_999 która w tym przypadku jest błędna a autor wątku przyjął to za dobra monetę.
    Piotrus_999 nie wie jak jest skonfigurowany moduł Easy8051 więc pianie o rozkazie MOV P1,P2 nie ma żadnych podstaw merytorycznych.
    Wpis Piotrus_999 w żaden sposób nie pomaga autorowi wątku a wręcz kieruje go na zły tor.

    Moderowany przez dondu:


    Piotrus_999 upewniał się o co autorowi chodzi:

    Piotrus_999 napisał:
    mati_sh napisał:
    ytłumaczyć w jaki sposób wysłać komendę w assemblerze przez rs232
    A co to znaczy wysłać komendę w asembplerze przez RS-232/ Czy chodzi Ci o wysłanie tekstu rozkazu asemblera np. "MOV P1, P2"?

    i otrzymał odpowiedź:
    mati_sh napisał:
    tak, chodzi np o "MOV P1, P2" tak aby zapalić diodę na drugiej płytce.

    Choć jesteśmy świadomi, że autor raczej nie tworzy komendy w rodzaju komendy AT używając ciągu znaków "MOV P1, P2", to jednak autor tematu musi nauczyć się, że ta dziedzina to logiczne myślenie i wyrażanie tego co chce się przekazać innym. Dlatego też działanie Piotrus_999, który upewniał się o co chodzi autorowi jest moim zdaniem prawidłowe i logiczne, bo zmusza do myślenia.

    Jeśli natomiast autor tematu tworzy coś w rodzaju komend AT odpowiedź Piotrus_999 jest jak najbardziej prawidłowa.



    >mati_sh
    Ogólnie program master może wyglądać tak:
    1 zainicjowanie procesora (stosu) oraz portu RS232
    2 pętla programu w której sprawdzamy czy został naciśnięty przycisk
    (warto zapoznać się z tematem eliminacji drgań styków)
    3 jeżeli przycisk został naciśnięty to na przykład poprzez RS232 wysyłany znak '+'
    i wracamy do punktu 2

    Program slave może wyglądać tak:
    1 zainicjowanie procesora (stosu) oraz portu RS232
    2 pętla programu w której sprawdzamy czy przyszedł znak poprzez port RS232
    3. Jeżeli tak to odbieramy znak sprawdzamy czy jest to znak "+, jeżeli tak to zmieniamy
    stan bitu portu do którego jest podłączony LED na przeciwny (raz zapalenie raz zgaszenie diody)
    Wracamy do punktu 2.

    Ogólnie dałeś za mało informacji typu:
    - gdzie są podłączone przyciski
    - gdzie są podłączone LEDy
    - w jakim środowisku piszecie program
    - czy macie dostępne gotowe procedury np. do odczytu przycisków
    - itp.

    JarekC

  • #9 15 Maj 2017 20:48
    mati_sh
    Poziom 7  

    Program ma wykorzystywać przerwania, czy poniższy fragment kodu jest dobry? Dobrze rozumiem, że on jest zarówno dla slave i dla master?

    Code:

    org 0
    sjmp st

    org 23h ; adres obsługi przerwan w pamieci programu dla portu szeregowego: 0023h
    ajmp seriali

    st:

    mov tmod, #20h ; tutaj mam wątpliwości dlaczego 20h?
    mov th1, #0fah ; 9600bound

    setb sm1 ; tryb 1  Transmisja asynchroniczna, znaki osmiobitowe
    setb ren ; Ustawienie w stan 1 wlacza (uaktywnia) odbiornik – umozliwia odbiór danych.

    setb ea ;wł przerwania \EA – ogólne zezwolenie na przerwania,
    setb es  ;ES – zezwolenie na przerwanie z transmisji szeregowej,

    setb tr1 ;;wl. timer, start timera 1

    guzik:
    jb p1.0, guzik
    mov SBUF ,#041h

    lop:
    jnb p1.0, lop
    sjmp guzik

    seriali:
    jnb ri, transmission ;
    mov a, SBUF ; odczytanie znaku

    mozea:
    cjne a, #041h, koniec ;
    cpl p3.1

    koniec:
    clr ri
    reti

    transmission:
    jnb ti, exit
    clr ti ;

    exit: reti

    end

  • #10 15 Maj 2017 21:14
    JarekC
    Poziom 27  

    Tak program jest jednocześnie Masterem i Slavem.
    Prawdopodobnie linie TX i RX są ze sobą połączone.
    Program będzie działał ale będą problemy z:
    - poprawną reakcja na przyciśnięcie przełącznika ze względu na brak eliminacji drgań, samo oczekiwanie na puszczenie to za mało
    - przed wpisaniem nowej danej do rejestru SBUF należałoby sprawdzić czy zakończyła się poprzednia transmisja (znacznik TI)

    JarekC

 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME