ZXNet эхоконференция «code.zx»


тема: Serial Port Programming



от: 500:812/22.01
кому: All
дата: 07 May 1998


├┤i All !

Kто мне может подсказать как с Serial Port разбираться ?
Я имею в виду хайес. По кондратьевской схеме. Там целых
8 портов, но как я понял используются только 4.

Я выясил, что должены быть следующие порты или сигналы:
Transmit Data, Receive Data, Ready To Send, Clear To Send,
Data Set Ready, Carrier Detect, Data Terminal Count, Ring Indicator.

Итого: 8 штук. И что с ними делать, вернее где их взять ?

И как осуществлять обмен данными с модемом ?


Wi7h be57 Wi5he5, FK0.

-+- SMM version 1.08

от: Michael Kondratyev
кому: Kirill Frolov
дата: 01 Jun 1998
Hi Kirill,

In a message of to All (), you wrote:

KF> Kто мне может подсказать как с Serial Port разбираться ?

вот немножко об этом:

====================
In the following chart, pb+n is one of 3f8H+n, 2f8H+n, 3e8H+n, 2e8H+n,
depending upon the port. For instance, for COM1, pb+3=3fbH.

Port Description
▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
pb+0 Write: transmitter holding register. 8 bits of character to be sent.
Read: receiver buffer register. 8 bits of character received.

Write: (if DLAB=1) divisor latch low byte Baud Divisor▐▌Baud Divisor
After OUT pb+3,80H this port holds ▀▀▀▀ ▀▀▀▀▀▀▀▐▌▀▀▀▀ ▀▀▀▀▀▀▀
the low byte of the clock divisor 110 1040▐▌1200 96
which, together with the high byte 150 768 ▐▌2400 48
(port pb+1) constitute 16-bit value 300 384 ▐▌4800 24
that sets the baud rate as shown: 600 192 ▐▌9600 12
──── ───────────────────────────────────────────────────────────────────────
pb+1 Write: divisor latch high byte (when DLAB=1; i.e., after OUT pb+3,80H)
Write: interrupt enable register
╓7┬6┬5┬4┬3┬2┬1┬0╖
║0 0 0 0│ │ │ │ ║
╙─┴─┴─┴─┴╥┴╥┴╥┴╥╜ bit
║ ║ ║ ╚═. 0: 1=enable interrupt when rec'd data is available
║ ║ ╚═══. 1: 1=enable interrupt when transmit buffer is empty
║ ╚═════. 2: 1=enable int on rec'r line status (err or break)
╚═══════. 3: 1=enable int on modem status (CTS,DSR,RI,RLSD)
──── ───────────────────────────────────────────────────────────────────────
pb+2 Read: interrupt identification reg. When an interrupt occurs, read
this register to find what caused it.
╓7┬6┬5┬4┬3┬2┬1┬0╖
║ │0 0│ │ │ ║
╙─┴─┴─┴─┴╥┴─┴─┴╥╜ bit
╚╦╝ ║ ╚╦╝ ╚═. 0: 1=no interrupt pending; can be used in polling
║ ║ ╚════.1-2: 00=receiver line status interrupt. Occurs on:
║ ║ overrun, parity, or framing error, or break
║ ║ Reset by reading line status (port pb+5)
║ ║ 01=transmitter buffer empty
║ ║ Reset by writing transmitter buffer (pb+0)
║ ║ 10=received data available
║ ║ Reset by reading receiver buffer (port pb+0)
║ ║ 11=modem status. Occurs upon:
║ ║ Clear To Send, Data Set Ready, Ring Ind, or
║ ║ Rec'd Line Signal Detect.
║ ║ Reset by reading modem status (port pb+6).
║ ╚═══════. 3: (16550 UARTs) 1=Receiver FIFO time-out
╚══════════════.6-7: (16550 UARTs) 00=FIFOs disabled (or old 8250)
11=FIFOs enabled
01=FIFOs enabled and DMA mode

Write: (16550 UARTs) FIFO control register (write only)
╓7┬6┬5┬4┬3┬2┬1┬0╖
║ │0 0│ │ │ │ ║
╙─┴─┴─┴─┴╥┴╥┴╥┴╥╜ bit
╚╦╝ ║ ║ ║ ╚═. 0: 1=enable FIFO mode
║ ║ ║ ╚═══. 1: 1=clear receiver FIFO
║ ║ ╚═════. 2: 1=clear transmit FIFO
║ ╚═══════. 3: DMA mode select
╚══════════════.6-7: FIFO interrupt triggger level: 00=1 byte;
01=four bytes; 10=8 bytes; 11=16 bytes
──── ───────────────────────────────────────────────────────────────────────
pb+3 Read/Write: line control register
╓7┬6┬5┬4┬3┬2┬1┬0╖
║ │ │ │par│s│len║
╙╥┴╥┴╥┴─┴─┴╥┴─┴─╜ bit
║ ║ ║ ╚╦╝ ║ ╚═╩═. 0-1: word length: 00=5, 01=6, 10=7, 11=8
║ ║ ║ ║ ╚═════. 2: stop bits: 0=1,1=2 (some oddball exceptions)
║ ║ ║ ╚══════. 3-4: parity: x0=None, 01=Odd, 11=Even
║ ║ ╚═══════════. 5: stuck parity (not used by BIOS)
║ ╚═════════════. 6: enable break control. 1=start sending 0s (spcs)
╚═══════════════. 7: DLAB (Divisor Latch Access Bit) Determines mode
of ports pb+1 and pb+2. 1=set baud, 0=normal
──── ───────────────────────────────────────────────────────────────────────
pb+4 Write: modem control register
╓7┬6┬5┬4┬3┬2┬1┬0╖
║0 0 0│ │ │ │ │ ║
╙─┴─┴─┴╥┴╥┴╥┴╥┴╥╜ bit
║ ║ ║ ║ ╚═. 0: 1=activate -DTR (-data trmnl rdy), 0=deactivate
║ ║ ║ ╚═══. 1: 1=activate -RTS (-request to send), 0=deactivate
║ ║ ╚═════. 2: 1=activate -OUT1 (spare, user-designated output)
║ ╚═══════. 3: 1=activate -OUT2
╚═════════. 4: 1=activate loopback for diagnostic testing
──── ───────────────────────────────────────────────────────────────────────
pb+5 Read: line status register
╓7┬6┬5┬4┬3┬2┬1┬0╖
║ │ │ │ │ │ │ │ ║ Note: bits 1-4 cause interrupt if enabled (pb+1)
╙╥┴╥┴╥┴╥┴╥┴╥┴╥┴╥╜ bit
║ ║ ║ ║ ║ ║ ║ ╚. 0: 1=data ready (DR). Reset by reading recv'r buffer
║ ║ ║ ║ ║ ║ ╚══. 1: 1=overrun error (OE). Previous character is lost
║ ║ ║ ║ ║ ╚════. 2: 1=parity error (PE). Reset by reading line status
║ ║ ║ ║ ╚══════. 3: 1=framing error (FE). Bad stop bit in character
║ ║ ║ ╚════════. 4: 1=break indicated (BI). Sustained space received
║ ║ ╚══════════. 5: 1=transmitter holding register empty. OK to send
║ ╚════════════. 6: 1=transmitter empty. No data being processed.
╚══════════════. 7: (16450 UARTs) 1=Receiver FIFO error
──── ───────────────────────────────────────────────────────────────────────
pb+6 Read: modem status register
╓7┬6┬5┬4┬3┬2┬1┬0╖
║ │ │ │ │ │ │ │ ║ Note: bits 0-3 cause an interrupt if enabled (pb+1)
╙╥┴╥┴╥┴╥┴╥┴╥┴╥┴╥╜ bit
║ ║ ║ ║ ║ ║ ║ ╚═. 0: 1=Delta Clear To Send (DCTS) has changed state
║ ║ ║ ║ ║ ║ ╚═══. 1: 1=Delta Data Set Ready (DDSR) has changed state
║ ║ ║ ║ ║ ╚═════. 2: 1=Trailing Edge Ring Indicator (TERI) is active
║ ║ ║ ║ ╚═══════. 3: 1=Delta Data Carrier Detect (DDCD) has changed
║ ║ ║ ╚═════════. 4: 1=Clear To Send (CTS) is active
║ ║ ╚═══════════. 5: 1=Data Set Ready (DSR) is active
║ ╚═════════════. 6: 1=Ring Indicator (RI) is active
╚═══════════════. 7: 1=Data Carrier Detect (DCD) is active
──── ───────────────────────────────────────────────────────────────────────
====================

для моей схемы адpеса будут соответственно pb+?? -> 0x??EF

KF> Я имею в виду хайес. По кондратьевской схеме. Там целых
KF> 8 портов, но как я понял используются только 4.

используются вpоде бы больше четыpех.

KF> Я выясил, что должены быть следующие порты или сигналы:
KF> Transmit Data, Receive Data, Ready To Send, Clear To Send,
KF> Data Set Ready, Carrier Detect, Data Terminal Count, Ring Indicator.

KF> Итого: 8 штук. И что с ними делать, вернее где их взять ?

это не поpты, а линии интеpфейса (попpосту говоpя, пpовода в шнуpе к модему)
для внутpеннего исполнения они как у комаpа яйца подpазумеваются.

KF> И как осуществлять обмен данными с модемом ?

чеpез компоpт, pазумеется. для начала попpобуй отделить задачу pаботы с поpтом
от более высокоуpовневой задачи pаботы с абстpактными потоками данных.


Bye, Michael.




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Изюминка - Программа телепередач.
Программистам - ассемблер: Экскурс в анатомию ZX
Игры - краткое описание игр S.W.I.V. и Stormlord II.

В этот день...   14 октября