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

Turbo Pascal – jak zmienić obsługę portu COM3 ($3E8) na COM5 ($2F0) w kodzie?

24 Lut 2008 15:31 3908 9
REKLAMA
  • #1 4840990
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • Pomocny post
    #2 4841238
    mietekn
    Poziom 35  
    Posty: 1983
    Pomógł: 400
    Ocena: 161
    Powinna wystarczyć zmiana
    COM3 = $3E8;
    na
    COM3 = $2F0;

    MoZna też dla porządku zmienić wszystkie napisy COM3 na COM5

    Procedura Init ustawia parametry portu szeregowego prędkość transmisji itp.
    Opis znajdziesz np w http://www.fizyka.umk.pl/~ptarg/labview/folie/RS232.pdf

    można na jego postawie wywnioskować że:

    -Port[COM3 + 3] := $83; 8bitów, 0bitów stopu,bez parzystości, tryb ustawiania prędkości

    -Port[COM3 + 0] := 48;
    i Port[COM3 + 1] := 0; prędkośc 2400 bit/s

    -Port[COM3 + 3] := $03; 8bitów, 0bitów stopu,bez parzystości, normalny tryb pracy
  • REKLAMA
  • #3 4841333
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • Pomocny post
    #4 4841445
    mietekn
    Poziom 35  
    Posty: 1983
    Pomógł: 400
    Ocena: 161
    Możliwe ze problemem wiąże sie z brakiem ustawienia linii RTS i DTR (żądanie nadawania i gotowość do nadawania)
    Adres bazowy + 4 (modem control register MCR)
    Modem nie reaguje bo kontroluje stan tych linii. Proponuje przed nadawaniem ustawić
    Port[COM5 + 4] := 3;
  • #5 4841500
    Konto nie istnieje
    Konto nie istnieje  
  • Pomocny post
    #6 4841542
    Konto nie istnieje
    Konto nie istnieje  
  • Pomocny post
    #7 4841579
    mietekn
    Poziom 35  
    Posty: 1983
    Pomógł: 400
    Ocena: 161
    najprosciej na końcu procedury INIT by wyglądała tak:

    procedure init;
    begin
    Port[COM5 + 3] := $83;
    Port[COM5 + 0] := 48;
    Port[COM5 + 1] := 0;
    Port[COM5 + 3] := $03;
    Port[COM5 + 4] := 3;
    end;
  • REKLAMA
  • #8 4841674
    Konto nie istnieje
    Konto nie istnieje  
  • Pomocny post
    #9 4842119
    mietekn
    Poziom 35  
    Posty: 1983
    Pomógł: 400
    Ocena: 161
    Faktycznie jak wspomniał _h problem może wynikać z blokowania przez systemy oparte na NT. Pobierz program (sterownik) "userport" umożliwiający bezpośrednie adresowanie portów komputera (zapis/odczyt) pod systemami Windows NT (NT 4.0, 2K, XP) np z adresu: http://ajpic.zonk.pl/download/userport.zip

    Opis instalacji znajduje sie w userport.pdf. W skrócie należy:
    -rozpakować jego zawartość do c:\windows\system32\drivers
    -uruchomić userport.exe i dodać w nim adresy 0x2f0-0x2f7
    Zauważyłem ze po potwierdzeniu zmian i kliknięciu start pojawia sie niebieski ekran dla tego najlepiej tego nie robić tylko ponownie uruchomić komputer by wczytał zmienione ustawienia.
  • #10 4842157
    Konto nie istnieje
    Konto nie istnieje  

Podsumowanie tematu

✨ Dyskusja dotyczy modyfikacji programu w Turbo Pascalu obsługującego port COM3 o adresie bazowym $3E8 na port COM5 o adresie $2F0. Podstawowa zmiana polega na zastąpieniu stałej COM3 wartością $2F0 oraz zamianie wszystkich wystąpień COM3 na COM5 w kodzie. Procedura INIT konfiguruje parametry portu szeregowego, takie jak prędkość transmisji (2400 bit/s), format danych (8 bitów, brak bitów stopu i parzystości) oraz tryb pracy. Problem z brakiem reakcji modemu na COM5 może wynikać z nieustawienia linii sterujących RTS i DTR, które można aktywować przez zapis wartości 3 do rejestru MCR (adres bazowy + 4). Dodatkowo, na systemach Windows NT i nowszych porty mogą być zablokowane, co wymaga użycia sterownika UserPort umożliwiającego bezpośredni dostęp do portów sprzętowych. Próby użycia Delphi z modułem ZlportIO do sterowania portem LPT pokazują alternatywne podejście do komunikacji z portami, jednak problem z portem COM5 pozostaje. Zalecane jest umieszczenie ustawienia linii RTS i DTR na końcu procedury INIT oraz sprawdzenie blokad systemowych portów.
Wygenerowane przez model językowy.
REKLAMA