logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak zrealizować komunikację RS232 między dwoma 8051 na płytce Easy8051 v6?

mati_sh 15 Maj 2017 11:26 2445 9
REKLAMA
  • #1 16476995
    mati_sh
    Poziom 10  
    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?
  • REKLAMA
  • Pomocny post
    #2 16477026
    viayner
    Poziom 43  
    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 16477053
    mati_sh
    Poziom 10  
    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.
  • REKLAMA
  • #4 16477089
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #5 16477098
    mati_sh
    Poziom 10  
    tak, chodzi np o "MOV P1, P2" tak aby zapalić diodę na drugiej płytce. Na jakiej zasadzie to się ma odbywać?
  • #6 16477105
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • Pomocny post
    #7 16477216
    krzysiek_krm
    Poziom 40  
    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 16477942
    JarekC
    Poziom 32  
    >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 16478033
    mati_sh
    Poziom 10  
    Program ma wykorzystywać przerwania, czy poniższy fragment kodu jest dobry? Dobrze rozumiem, że on jest zarówno dla slave i dla master?

    
    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 16478103
    JarekC
    Poziom 32  
    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
REKLAMA