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 obsłużyć przerwanie RS232 w Visual C++ dla mikroprocesora 89C51?

limak84 30 Maj 2004 20:51 3925 5
REKLAMA
  • #1 667436
    limak84
    Poziom 11  
    Posty: 24
    Ocena: 2
    Pisze wlasnie program w Visual C++, ktory ma odbierac dane wyslane przez port 2 (oczywiscie rs232) z mikroprocesora (89C51). Chodzi mi o wywolanie procedury odczytujacej dane zaraz po uzyskaniu przerwania, ze dane "dotarly". Jak obsluzyc to przerwanie???
    Wykorzystuje klase CSerial z ksiazki Visual C++ 6 Vademecum Profesjonalisty, autorow: Archer i Leinecker. Dodalem ta klase w zalaczniku.

    Uzyty kod:

    CSerial serial;
    if (serial.Open(1, 2400))
    {
    char* lpBuffer = new char[500];
    int nBytesRead = serial.ReadData(lpBuffer, 500);
    m_tekst= lpBuffer;
    UpdateData(FALSE);

    delete []lpBuffer;
    }
    else
    AfxMessageBox("Failed to open port!");

    Jak narazie wyskakuja mi krzaki.
    Aha wysylanie napewno dziala bo sprawdzalem czy dochodzi informacja z mikroprocka w hyper terminal'u i wszystka dziala dobrze.

    Pozdrawiam
    Załączniki:
    • Serial.zip (1.76 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #2 670350
    limak84
    Poziom 11  
    Posty: 24
    Ocena: 2
    naprawde nikt nie wie jak moge obsluzyc ten port???
    patrzylem na zrodla w necie ale ta moja klasa wydaje sie najlatwiejsza tylko zeby chodzila...
    moze ktos z Was ma, w dosyc prosty sposob zrealizowany, program do odbierania z rs232 (koniecznie w VC++)
  • REKLAMA
  • #3 2248225
    deavt
    Poziom 12  
    Posty: 49
    Pomógł: 1
    Ocena: 5
    Witam!
    Nie potrafie ci pomóc, ale może ty pomozesz mi.
    Jak w VC++ wysyła się dane do portu równoległego? Chcę napisać program sterujący moim robocikiem, ale nie wiem jak mam wysłać do niego dane.
    Prubowałem przez wstawki asm , ale gdy wpisuje procedurę "out" to wyskakuje mi że "program wykonał nieprawidłową operację".
    Mam WinXP.
    Słyszałem gdzieś że dostęp do portów i przerwań, w tym Windowsie jest niebezpośredni. Ale nie wiem co w związku z tym trzeba zrobić.
  • REKLAMA
  • #4 2248367
    ArtXs
    Poziom 24  
    Posty: 468
    Pomógł: 93
    Ocena: 112
    Witam
    Nie wiem jak to się robi w VC++ ale mogę ci powiedzieć jak to robiłem w BC++.
    Korzystałem z biblioteki ComPort Library 3.0. Wysyłanie przez RSa sprowadza się tam do jednej linijki w w kodzie programu a do odbioru służyć może również polecenie lub specjalna klasa. Polecenia w tej klasie są wykonywane kiedy w buforze portu zostanie odebrany znak.
    Wykorzystywałem tą bibliotekę przy pisaniu aplikacji do magisterki i jej zastosowaniu bardzo uprościło cały projekt. Nie ma problemów z XP ani nie trzeba kombinować z portami wszystko chodzi ok również z dodatkową kartą I/O na PCI. Swoją drogą przy eksperymentach na RSie polecam zaopatrzyć się w taką kartę z dodatkowymi portami. kosztuje około 50zł i nie trzeba czekać na reklamację jak się uwali port w płycie co mi się zdarzyło :).
    Jest jeszcze jedna biblioteka TMS Async32 1.3 która ma większe możliwości ale tu już trzeba się dobrze znać. Ja miałem kłopoty z jej obsługą i zrezygnowałem.

    Swoją drogą nie wiem czemu do VC++ jest strasznie mało dodatków. Do BC++ i Delhi jest też biblioteka powiedziałbym stworzona dla elektroników. Zawiera wszelkiego rodzaju mierniki cyfrowe i wychyłowe, bargrafy, kontrolki przyciski wyświetlacze sówaki i wiele innych. Jeżeli ktoś będzie nią zainteresowany to mogę wrzucić na forum.
    Załączniki:
    • TMS Async32 1.3.ZIP (1.25 MB) Musisz być zalogowany, aby pobrać ten załącznik.
    • ComPort Library 3.0.zip (216.46 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #5 2251493
    duzamasa
    Poziom 14  
    Posty: 99
    Pomógł: 5
    Ocena: 1
    Aby przeczytać znaki z bufora, to one wszystkie tam muszą być. Jeżeli jest tylko część, to funkcja je odczyta, ale tylko te, które są aktualnie w buforze. Funkcja
    ReadDataWaiting
    sprawdza, ile jest nieprzeczytanych danych w buforze. Przed odczytem danych zawsze powinieneś sprawdzić ile tych danych jest. W twoim przypadku czas oczekiwania na znaki wynosi 500 * 10 / 2400 = 2,08 s czyli całkiem sporo więc może za szybko chcesz je odczytać.

    Dodano po 4 [minuty]:

    ArtXs napisał:
    Swoją drogą nie wiem czemu do VC++ jest strasznie mało dodatków. Do BC++ i Delhi jest też biblioteka powiedziałbym stworzona dla elektroników. Zawiera wszelkiego rodzaju mierniki cyfrowe i wychyłowe, bargrafy, kontrolki przyciski wyświetlacze sówaki i wiele innych.

    Do VC++ także są dodatki ale innych producentów np. http://www.ni.com/mstudio/
  • #6 2251885
    Tommy82
    Poziom 41  
    Posty: 12141
    Pomógł: 455
    Ocena: 1073
    poszukal W lpt faq na elce na bank znajdziesz albo w szukaj wpisz lpt
    NAjlepiej pod xp uzywac userporta i asemblera
REKLAMA