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

Program na at89c2051. Komunikacja po RS232. Sprawdzanie urządzenia.

Bigbos 13 Mar 2005 13:15 2091 6
REKLAMA
  • #1 1311847
    Bigbos
    Poziom 12  
    Posty: 106
    Ocena: 3
    Problem polega na tym, że dopiero co zacząłem zabawę z bascomem a wcześniej programowałem w zwykłym asemblerze i na inną 51. Teraz chcę napisać program do komunikacji między urządzeniem zbudowanym na 89c2051 a sterownikiem. Komunikacja po rsie 232. Siedzę i męcze się z początkiem programu i jakoś mi nie idzie :( Na początek chciałbym napisać aplikację która sprawdza czy urządzenie jest połączone do sterownika. Pomyślałem że zrobię to w ten sposób że będę wysyłał komunikat "test" bo wtedy ze sterownika otrzymuje odpowiedź "ok" co będzie sygnalizować dioda podłączona do portu P1.5. Narazie udało mi się zrobić tyle że procedura przechodzi jedną pętlę i na tym się kończy :( Tzn reaguje na połączednie ze sterownikiem ale jeszcxe nie w taki sposób o jaki mi chodzi. Dodam że komunikacja jest 100% sprawna więc chodzi mi jedynie cvzysto o kwestię programową. O to mój listing programu proszę o jakieś podpowiedzi:

    $regfile = "89c2051.dat"
    $crystal = 11059200
    $baud = 9600
    Dim Buf As String * 3 , Dim A As Byte

    Do
    Waitms 500
    P1.5 = 0
    Print "AT"
    Input Buf Noecho

    If Buf = "AT " Or Buf = "ok " Then
    P1.5 = 0
    Wait 1
    P1.5 = 1
    Wait 1
    P1.5 = 0
    Wait 1
    End If

    P1.5 = 1
    Waitms 200
    P1.5 = 0
    Waitms 200
    P1.5 = 1
    Loop

    End

    Myślałem żeby może zrealizować to na przerwaniach ?? Następnie chcę program rozbudować żeby zależnie od stanu linii na poszczególnych wybranych portach wysyłał odpowiednie komendy do sterownika po rsie?? Bardzo proszę doświadczonych programistów Bascoma o pomoc :)
  • REKLAMA
  • #2 1312107
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    Witam.

    A jaką (dokładnie) odpowiedź wysyła Twój sterownik do procka :?:
    Czy korzystasz z terminala :?:
    Czy ten program wykonuje uC , czy Bascomowy symulator :?:

    Piotrek
  • REKLAMA
  • #3 1313584
    Bigbos
    Poziom 12  
    Posty: 106
    Ocena: 3
    Program ma znajdować się w at89c2051 i ten procek komunikuje się z innym sterownikiem poprzez rsa. Komp nie ma z tym nic wspólnego. Dziś zauważyłem w czym jest problem. Procek wysyła komende "AT" a sterownik w odpowiedzi wysyła "OK" i wszystko jest dobrze tylko że program po pierwszej pętli staje. Ale wiem dlaczego bo za drugimn razem ja wysyłana jest odpowiedź to procek zatrzymuje się w miejscu "Iput" i czeka a jak nie dostanie odpowiedzi to pomija warunki zawarte w "if". Rozwiązaniem byłoby podawanie procedury "print" tak żeby zgrywała się z procedurą input.
  • REKLAMA
  • #4 1313706
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    Bigbos napisał:
    Program ma znajdować się w at89c2051 i ten procek komunikuje się z innym sterownikiem poprzez rsa.

    A teraz gdzie się znajduje :?:
    Bigbos napisał:

    Komp nie ma z tym nic wspólnego. Dziś zauważyłem w czym jest problem. Procek wysyła komende "AT" a sterownik w odpowiedzi wysyła "OK" i ...

    A warunek " If Buf = "AT " Or Buf = "ok " Then" w Twoim programie , spodziewa się odpowiedzi "AT "[chr(65)],chr(84),chr(32)] lub "ok " [chr(111),chr(107),chr(32)] , więc powyższy warunek nie jest spełniony.
    Na dokładkę , aby zakończyć działanie funkcji INPUT musisz wysłać do uC znaki końca linii tzn. chr(13)+chr(10) bo inaczej INPUT będzie czekał do us.... śmierci lub skorzystać z opcji INPUT ... TIMEOUT xxxx o czym napisano w helpie Bascoma.

    Piotrek
  • REKLAMA
  • #5 1317968
    Bigbos
    Poziom 12  
    Posty: 106
    Ocena: 3
    Ok poradziłem sobie i już am gotowy program jaki chciałem z jednym ale :D jak to zawsze bywa. Bardzo dużym utrudnieniem jest dla mnie zmuszenie bascoma do wysyłania dokładnej komendy już mówię w czym rzecz, otórz chcę wysłać polecenie:
    Print "OK+EEKD="E"" i tu jest problem nie do rozwiązania ponieważ bascom automatycznie traktuje drugi cudzysłów przed E jako koniec wysyłanego tekstu i wrzuca mi spacje pomiedzy " a literą E. Poradziłęm sobie w ten sposób że zmieniam to już po wygenerowaniu kodu HEX zamieniam kod 20 na 22 i wszystko chodzi jak należy jednak jeśli nie wprowadezę zmian w kodzie maszynowym cały program transmisji się sypie. Nie byloby problemu jakby choidziło o jedno polecenie ale ja mam ich 100 :))) wiec jaka kolwiek zmiana czy edycja programu trwałaby w moim przypadku kilka dni :) Może ktoś podpowie jak rozwioązać ten problem.
  • #6 1318671
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    Bigbos napisał:

    ...
    Bardzo dużym utrudnieniem jest dla mnie zmuszenie bascoma do wysyłania dokładnej komendy już mówię w czym rzecz, otórz chcę wysłać polecenie:
    Print "OK+EEKD="E"" i tu jest problem nie do rozwiązania ponieważ bascom automatycznie traktuje drugi cudzysłów przed E jako koniec wysyłanego
    ...


    Ty GO nie zmuszaj , tylko wytłumacz MU o co Ci chodzi :wink:
    Np.
    PRINT "OK+EEKD=";Chr(34);"E";Chr(34)

    Piotrek
  • #7 1330885
    tom_85
    Poziom 14  
    Posty: 96
    Pomógł: 8
    Ocena: 5
    Witam wszystkich wtajemniczonych!

    Ja niestety nie umiem programować a potrzebuje pilnie program na procka at89c2051 który miałby wyswietlić napis na lcd. Potrzebuje to pilnie do pracy dyplomowej. Mam programator i szukam programu który móglbym zgrać na procka. Musi on być w pliku *.hex bo tylko taki plik moge zgrac na procka. Mam nadzieje że znajdzie sie ktoś kto może mi pomóc!

    Dzieki nara!!!!!!!!!

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy programowania mikrokontrolera AT89C2051 w Bascomie do komunikacji po interfejsie RS232 z innym sterownikiem. Problemem było zatrzymanie programu po pierwszej pętli podczas wymiany komend "AT" i odpowiedzi "OK". Wskazano, że funkcja INPUT w Bascomie oczekuje na znaki końca linii (CR+LF) lub zastosowania timeoutu, aby nie blokować programu. Poradzono także, jak poprawnie wysyłać tekst zawierający cudzysłowy, używając funkcji PRINT z funkcją Chr(34) zamiast bezpośrednich znaków cudzysłowu, co rozwiązuje problem automatycznego przerywania łańcucha znaków. Dodatkowo pojawiła się prośba o program wyświetlający tekst na LCD dla AT89C2051 w formacie pliku HEX do wgrania na mikrokontroler.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA