Interface Serial - Apostila
Transcript of Interface Serial - Apostila
Periféricos - José Alexandre J. Ribeiro
1
INTERFACE SERIAL
A comunicação serial de dados tornou-se tão popular, que um grupo de fabricantes e companhias
telefônicas, em meados de 1960, formaram a Associação de Indústrias Eletrônicas (EIA) para concordarem
sobre as formas padronizadas de se enviar e receber dados. O padrão que se tornou mais usado é chamado de
RS-232C.
As portas seriais geralmente utilizam conectores de 25 pinos ou conectores de 9 pinos, chamados de
“conectores do tipo D”e muitas vezes referenciados como DB-9 ou DB25.
Uma porta serial transmite bits individuais um após os outros sobre uma conexão simples (2 fios
basicamente). Devido a essa característica a velocidade de transmissão, em relação a comunicação paralela,
se torna um incoveniente (baixa).
Dentro do micro os dados estão paralelos, estes são convertidos em serial (placa serial) e mandados
para fora do micro um após o outro. No outro lado, na recepção, os dados são convertidos de serial (placa
serial) para paralelo (dentro do micro).
Geralmente neste tipo de padrão usamos a transmissão padrão (assíncrona) mostrada abaixo:
Observações:
* Os dispositivos seriais se dividem em duas categorias: DCE (Data Communication Equipament)
que são os Modems entre outros dispositivos. E temos o DTE (Data Terminal Equipament) que são os
Terminais ou computadores;
* O padrão de comunicação é o RS232C, que especifica que o conector DTE deve ser do tipo macho,
e o conector DCE do tipo fêmea. No passado usava-se muito o conector DB-25, porém hoje em dia usam-se
mais o DB-9.
As tensões são: # Lógica alta : -3V a -15V (com carga) e -25V (sem carga, no máximo)
# Lógica baixa : +3V a +15V (com carga) e +25V (sem carga, no máximo)
# A região entre -3V e +3VC é indefinida
# A corrente da porta não deve exceder os 500mA
Os sinais gerados no PC são de -12V para nível lógico 1 e de +12V para nível lógico 0.
SINAIS DO RS-232C
Abaixo nos temos seus pinos e seus respectivos nomes:
Start Bit 5, 6, 7 ou 8 bits de dados
Bit de paridade
1, 1.5 ou 2 Stop Bits LSB MSB
Periféricos - José Alexandre J. Ribeiro
2
Conector de 25 Pinos Conector de 9 Pinos Abreviaçao Nome
2 3 TD Transmit Data
3 2 RD Receive Data
4 7 RTS Request To Send
5 8 CTS Clear To Send
6 6 DSR Data Set Ready
7 5 SG Signal Ground
8 1 CD Carrier Detect
20 4 DTR Data Terminal Ready
22 9 RI Ring Indicator
Abaixo temos a descrição de cada pino:
TXD (Transmissão de dados): Por esse pino é feita a transmissão de dados do computador para o periférico.
Desta maneira, no caso de ligação direta (micro/impressora; mouse/micro, etc.), esse pino deverá ser ligado
ao sinal do RXD do periférico. No caso de transmissão sem protocolo (não utiliza sinais para indicar
chegada dos dados, erros, etc.), essa linha poderá ser dispensada quando tivermos um periférico de entrada
comunicando com o computador (não há necessidade do computador responder a alguma solicitação,
exemplo: a maioria dos mouse).
RXD (Recepção de dados): É por essa linha que o computador recebe os dados do periférico. Ela portanto
deve ser ligada a saída TXD do periférico.
CTS (Limpa - autorização, livre - para enviar): É pino usado para controle de fluxo (handshaking). Este pino
é normalmente utilizado nas ligações remotas (modem). Indica que o modem esta OK para trocar dados. Em
ligações diretas (sem modem), este sinal é dispensável ou então poderá ser ligado ao próprio RTS do micro.
RTS (Requisição - solicitação - de envio): É um pino usado para controle de fluxo (handshaking). É por essa
linha que o computador (UART) informa que está disponível para receber ou transmitir dados (o RTS
deverá ser sempre ativado antes de cada transmissão). Normalmente este pino será interligado ao pino CTS
do periférico. No caso de transmissão com protocolo, este sinal somente será usado caso o periférico seja
conectado a um MODEM.
Periféricos - José Alexandre J. Ribeiro
3
DTR (Data Terminal ready - Terminal esta pronto): É um pino usado em controle de fluxo (handshaking). É
o contrário do pino DSR. É um Sinal que indica que o terminal (micro/UART) está pronto para iniciar troca
de informações. Este sinal tem comportamento análogo ao sinal RTS, permanecendo em nível 1 quando a
transmissão se dá através de protocolos.
DCD (Data Carrie Detec - Detecção do transportador de dados): Sinal de detecção do sinal de portadora -
Linha telefônica esta ativa (carrier), no caso de ligação com MODEM (se não tiver o MODEM não há por
que usar este pino).
DSR (Data System Ready): É usado em controle de fluxo (handshaking). Sinal que indica sistema
(modem/micro) esta pronto (micro ligado, etc). Geralmente é ligado ao DTR do micro ou impressora.
GND ou SG: Sinal de terra (referência) da transmissão
UMA COMUNICAÇÃO SIMPLES
Quando um periférico somente transmite e outro somente recebe, a comunicação necessita apenas de
dois sinais em cada equipamento: O TXD e SG (3 e 5) no que transmite (ex.: micro) e de RXD e SG (2 e 5)
no que recebe os dados (ex.: modem).
COMUNICAÇÃO NAS DUAS DIREÇÕES
Se cada um dos dois equipamentos interligados podem transmitir e/ou receber dados, no mínimo
temos 3 linhas de cada: TXD, RXD e SG.
As vezes é necessário controlar o fluxo de dados na transmissão, para isto deve-se usar então as
linhas DSR e DTR em cada equipamento. Se por acaso estas linhas de fluxo não forem suficiente,
deveremos usar então mais duas linhas extras em cada equipamento: RTS e CTS. Neste modo para se ter
uma comunicação serial nos dois sentidos com 2 linhas de handshaking deveremos ter em cada equipamento
7 linhas de comunicação.
Quando estamos usando MODEM podemos ter ainda mais duas linhas extras: a RI e DCD que
indicam: modem chamando e modem esta pronto (respectivamente). Estas linhas não são muito utilizadas
hoje em dia.
Geralmente em projetos eletrônicos conectados ao micro temos apenas a comunicação simples nas
duas direções sem controle de fluxo, estes devem ser ligados nos respectivos pinos do próprio micro.
Para tais ligações usamos um cabo chamado de Null modem, que é visto abaixo:
Periféricos - José Alexandre J. Ribeiro
4
COMPORTAMENTO DOS SINAIS RTS e CTS NA LEITURA/ESCRITA DE DADOS
Nesta explicação usarei somente uma linha de handshaking (RTS, CTS), mas poderíamos usar mais
uma outra (DTR e DSR) simultaneamente. Onde RTS equivale a DTR e CTS equivale a DSR.
Tanto o RTS como o CTS deverão ser usados apenas quando temos algum tipo de protocolo na
comunicação. Este protocolo pode garantir uma precisão contra erros na transmissão ou na recepção. Abaixo
mostrarei um exemplo de como utilizá-los para uma transmissão ou recepção usando um protocolo simples:
ESCRITA
Ativa RTS; (coloca em nível lógico 1)
Espera CTS; (aguarda sinal do periférico, indicando que já pode mandar)
Envia 1º byte; (dado sendo transmitido)
Espera CTS; (aguarda confirmação do periférico para mandar o 2º byte)
Envia 2º byte; (depois de recebido o CTS, pode-se mandar o 2º byte)
Espera CTS; (aguarda confirmação do periférico para mandar outro dado)
Envia 3º byte; (depois de recebido um OK em CTS pode-se mandar o 3º byte)
Desativa RTS; (caso já tenha chegado no final da transmissão desative o RTS)
LEITURA
Ativa RTS; (indica que o micro esta pronto para receber o sinal)
Espera CTS; (aguarda confirmação de leitura - sinal válido)
Lê dado; (após ter recebido CTS deve-se ler os dados em RXD)
Desativa RTS; (se não tiver mais dados para receber então devemos desativar o RTS)
TIPOS DE LIGAÇÕES
DTE: Equipamento terminal de dado. Nestes equipamentos os dados chegam e ficam, não continuam como
no caso do modem. Ex.: Micro/Impressora.
DTE - DTE: Interface entre equipamento terminal de dados para equipamento terminal de dados.
DCE: Equipamento de comunicação de dados. Nesses equipamentos os dados chegam e continuam.
Exemplo: Modem.
DTE-DCE: Interface entre equipamento terminal de dados e equipamento de comunicação de dados.
Periféricos - José Alexandre J. Ribeiro
5
Agora veremos os modelos de ligações dos conectores dos micros. Em cada tipo, temos ligação de 3
fios ( 3-wire) ou full conection. A ligação 3-wire é usada quando temos uma comunicação sem protocolo, ou
seja, o sinal é transmitido diretamente sem que haja controle de erros e verificações. A full conection é para
uma comunicação mais complexa, onde temos o uso de protocolos de verificação de status e erros.
LIGAÇÃO DTE-DTE
Abaixo temos uma ligação a 3 fios (micro-mouse):
A principio temos os dois conectores do tipo fêmea. No caso de uma ligação entre micro e mouse, o
conector da direita é ligado ao micro (macho) e o da direita não existe pois é interno ao mouse.
Abaixo temos a ligação full conection (micro-impressora):
A principio temos os dois conectores do tipo fêmea. Eles são fêmea pois nos DTEs o conector é
macho.
LIGAÇÃO DTE-DCE
Abaixo temos a ligação a 3 fios:
Periféricos - José Alexandre J. Ribeiro
6
Neste tipo temos conector femea(conector que liga no micro)-macho(conector que liga no modem).
Abaixo temos a ligação full conection:
Neste tipo temos conector femea-macho.
Todos os exemplos acima foram utilizados coenctores DB25 fêmea ou macho. Abaixo temos uma
ilustração real do conector fêmea:
Se o conector for macho a numeração é invertida, ou seja:
Este desenho é do conector pelo lado interno (dentro do conector; é aqui que os fios serão soldados).
As ligações vistas anteriormente servem também para conectores do tipo DB9 (macho ou fêmea).
Neste caso a numeração vista anteriormente não irá bater, então abaixo temos os desenho do conector DB9
com os respectivos nomes de cada pino, observando estes nomes você poderá fazer as ligações anteriores
tranqüilamente. A figura abaixo é de um conector DB9 do tipo fêmea:
1 - DCD 6 - DSR 2 - RxD 7 - RTS 3 - TxD 8 - CTS 4 - DTR 9 - RI 5 - GND
Periféricos - José Alexandre J. Ribeiro
7
Para o conector do tipo macho a numeração é invertida, ou seja:
Devemos lembrar novamente que este é o lado de dentro do conector, é onde os fios deverão ser
ligados.
As vezes é necessário fazer a conexão entre conectores diferentes, exemplo um DB25 com um DB9,
abaixo temos uma figura ilustrando esta ligação:
UARTS
Numa comunicação serial usamos um CI especial que transforma os sinais paralelos de dentro do
computador numa seqüência de pulsos seriais. Este CI é chamado de Universal Asynchronous
Receiver/Transmitter (Transmissor/Receptor Assícrono Universal), ou UART, este chip aceita 8 linhas de
dados paralela e possui uma saída serial.
Um CI muito utilizado no passado é o 8250 (usado em XT’s e alguns modem’s). Logo após (com a
vinda do AT) foi lançado o UART 16450, uma versão melhorada do 8250, mas ainda compatível com ele.
Depois veio o UART 16550, de alto desempenho.
Este chip deverá ser configurado antes de qualquer transmissão ou recepção. Os elementos de
configuração que devem ser considerados são os seguintes:
TAXA DE TRANSMISSÃO: É a velocidade de transmissão dos dados. Neste caso devemos
observar que os dois equipamentos devem estar com a mesma velocidade. Esta velocidade poderá ser de:
110, 150, 300, 600, 1200, 2400, 4800, 9600. Em alguns casos poderemos ter velocidades maiores.
NÚMERO DE BITS DE DADOS: É o número de bits que teremos num dado em questão. Este valor
pode ser de 5, 6, 7 ou 8 bits.
PARIDADE: O bit de paridade é usado como um simples esquema de detecção de erro. Pode ser
ímpar, par ou nenhuma, neste caso não é gerado o bit de paridade.
Periféricos - José Alexandre J. Ribeiro
8
STOP BIT: O stop bit poderá ser configurado como 1, 1.5 ou 2 bits, sendo que na maioria das vezes
usa-se o 1 ou 2.
CONTROLE DE FLUXO (HANDSHAKING)
Para que a comunicação seja corretamente completada (sem erros) é necessário que os equipamentos
estejam na mesma velocidade, e com o mesmo tipo de protocolo de comunicação; caso contrário deverá
ocorrer algum erro de comunicação ou a comunicação não será completada.
A solução mais fácil é usar um fio especial como linha de sincronização, de modo que o sistema
receptor possa indicar que está pronto a receber os dados. Como este método exige um hardware modificado
- fio de controle de fluxo - ele é chamado de handshaking de hardware.
Alguns canais de comunicação não permitem o uso deste fio extra, exemplo a conexão telefônica.
Neste caso temos caracteres embutidos na transmissão de dados. Como estes caracteres de controle podem
ser acrescentados através de programação pelo sistema emissor, esse método costuma ser chamado de
handshaking de software.
Na maioria dos esquemas de controle por soft, o sistema receptor usa dois caracteres diferentes para
sinalizar quando está pronto para receber dados e quando não pode mais aceitar dados, pelo menos
temporariamente (XON/XOFF)
Para que o controle por soft seja eficiente é necessário que os aplicativos possuam estes métodos de
controle. Caso contrario devemos ter em mãos alguns drivers especiais.
AS PORTAS SERIAIS
As portas seriais são ligações existentes entre o computador e o mundo exterior. Geralmente no
micro temos duas portas seriais: COM1 e COM2. As portas são identificadas para os nossos softs através de
2 atributos: um endereço de hardware e uma linha de solicitação de interrupção (IRQ) atribuída à porta. O
endereço é a localização onde ficará armazenado o conteúdo dos registros da UART. A IRQ é a maneira de
conseguir a atenção do processador.
Os endereços para a COM1 e COM2 são padronizados.
Endereços das portas seriais:
PORTA IRQ ENDEREÇO
COM1 4 3F8h
COM2 3 2F8h
COM3 4 3E8
COM4 3 2E8
Periféricos - José Alexandre J. Ribeiro
9
Abaixo temos um programa que retornará na tela as portas seriais que seu micro possui, bem como
seus respectivos endereços.
#include <stdio.h>
#include <dos.h>
void main(void)
{
unsigned int far *ptraddr; /* Pointer to location of Port Addresses */
unsigned int address; /* Address of Port */
int a;
ptraddr=(unsigned int far *)0x00000400;
for (a = 0; a < 4; a++)
{
address = *ptraddr;
if (address == 0)
printf("Port não encontrado em COM%d \n",a+1);
else
printf("Endereço associado a COM%d é o endereço %Xh\n",a+1);
*ptraddr++;
}
}
CONFIGURANDO UMA PORTA
Para fazer a comunicação de um micro com outro, devemos primeiro configurá-los de maneira que os
dois possuem a mesma configuração, caso contrário poderá não haver a comunicação. Para tanto podemos
usar o comando MODE do MS-DOS, caso for feita a configuração direta via soft deveremos configurar (no
soft) os mesmos parâmetros (do mode). Quando formos fazer um programa de comunicação deveremos
fazer a configuração de dentro do seu soft; em C deveremos usar a BIOSCOM ou _BIOS_SERIALCOM,
para maiores informações use o HELP do TC e preste bastante atenção!
Caso o seu programa não faça a configuração automática da porta você deverá fazer via DOS, através
do comando MODE, de maneira geral a configuração da porta é:
Periféricos - José Alexandre J. Ribeiro
10
MODE COM_:Baud, Paridade, Bits de dados, Bits de fim
Sendo:
COM_: Nome da porta serial: COM1, COM2, COM3 ou COM4
Baud: Velocidade de transmissão - 110, 150, 300, 600, 1200, 2400, 4800, 9600
Paridade : Especifica o tipo de paridade da transmissão ou recepção - N (paridade neutra), O
(paridade ímpar), E (paridade par)
Bits de dados: Especifica o tamanho do byte a ser transmitido - 5,6, 7 ou 8 (mais usado 7 e 8)
Bits de parada (stop bit) : Especifica o número de stop bits da transmissão - 1 ou 2
Exemplo: C:\>MODE COM1:300,O,8,1
Neste caso estamos configurando a COM1 para 300 baud de velocidade, paridade ímpar, com 8 bits a
palavra e 1 stop bit. Lembre-se que quando a velocidade de transmissão for alta, poderemos ter problemas de
sincronismo e a comunicação acaba não sendo efetuada, por isso é de praxe que se coloque uma velocidade
menor de transmissão.
CONHECENDO OS REGISTRADORES SERIAIS
Abaixo temos uma tabale com os registrados que podem ser usados numa comunicação/controle
serial.
Endereço Bit DLAB Read/Write Abr. Nome do registrador
0 Write - Buffer de Transmissão
Base 0 Read - Buffer de Recepção
1 Read/Write - Parte Baixa do byte de velocidade
Base+1 0 Read/Write IER Interrupt Enable Register
1 Read/Write - Parte Alta do byte de velocidade
Base+2 - Read IIR Interruption Identification Register
- Write FCR Fifo Control Register
Base+3 - Read/Write LCR Line Control Register
Base+4 - Read/Write MCR Modem Control Register
Base+5 - Read LSR Line Status Register
Base+6 - Read MSR Modem Status Register
Base+7 - Read/Write - Scratch Register
Periféricos - José Alexandre J. Ribeiro
11
Os registradores mais usados são o Base, Base+1, Base+3 e Base+5. O registrador Base é usado para
Transmitir ou receber dados, o Base, o Base+1 e Base+3 é usado para configurar a porta e o Base+5 é o
status da porta, ou seja, é nele que vou verificar se chegou dado ou não.
Para que se possa fazer um programa transmitir/receber, devemos primeiro configurar ambos
equipamentos para a mesma configuração. Caso um deles estejam com configuração errada, a comunicação
não será feita. Configurar a porta será ajustar a velocidade, no. de bits de dados, bit de paridade e quantida
de stop bit.
Abaixo, então, temos a seqüência usada para fazer um programa de comunicação serial usando
liguagem C e outport’s (podemos usar outros métodos, porém este acho o mais viável).
Configuração da Porta: Deve-se configurar 4 itens:
• Velocidade
• Paridade
• Nº de Bits da palavra de dado
• Nº de Stop Bit
Para configurar a velocidade devemos primeiro setar o BIT 7 em 1 no registrador LCR. Este
registrador é acessado pelo endereço base + 3. Por exemplo: Endereço Base = 3F8, então para acessar o
LCR devemos fazer Base + 3 = 3F8 + 3 = 3FB.
Deveremos então mandar para 3FB o dado 80h, isto irá setar em 1 o Bit 7 do 3FB. Vejamos:
80h = 1000 0000, pelo Debug faríamos: - O 3FB,80. Isto irá idicar ao micro que agora iremos configurar
velocidade.
A velocidade é dividida em dois registradores de 8 Bits (total de 16 Bits), sendo um chamado de
parte Baixa e outro chamado de parte Alta. A parte alta da velocidade deverá ser colocada no endereço
base+1 e a parte baixa no endereço base. o Cálculo da velocidade será:
TxBaud
=115200
Sendo o Baud a velocidade a ser transmitida (1200, 2400, 4800, 9600, etc...)
Por exemplo:
Tx C= = ⇒ ⇒115200
960012 0012 00010 16
Parte Baixa
Parte Alta
Periféricos - José Alexandre J. Ribeiro
12
Deveremos então mandar para 3F9h o valor 00h e para 3F8h o valor 0Ch, pelo Debug faríamos:
- O 3FB,80 Indica que vamos configurar a velocidade
- O 3F8,0C Parte baixa da velocidade
- O 3F9,00 Parte alta da velocidade
Para uma velocidade de 300 baud, teremos em 3F8h o dado 80h e em 3F9h o dado 01h.
Abaixo temos uma tabela que você poderá usar para facilitar o cálculo de acordo com a velocidade:
Velocidade (bps) Divisor (Dec) Parte Alta da vel. Parte Baixa da vel.
50 2304 09h 00h
300 384 01h 80h
600 192 00h C0h
2400 48 00h 30h
4800 24 00h 18h
9600 12 00h 0Ch
19200 6 00h 06h
38400 3 00h 03h
57600 2 00h 02h
115200 1 00h 01h
Depois de configurado a velocidade, devemos configurar o resto. Para tanto usamos o endereço
Base+3, que é o Registrado LCR, abaixo temos a descrição de cada bit deste registrador.
D7 D6 D5 D4 D3 D2 D1 D0
Neste dois Bits defino
a tamanho da palavra
Nº de Stop Bits
Habilita a paridade: 0 - Sem paridade
1 - Com paridade
Habilita a paridade par (em 1) e em 0 paridade ímpar
Stick Parity (mantém o Bit de paridade sempre em 1 ou 0)
Habilita o sinal de Break
Habilita o divisor de Baud-Rate (velocidade)
O Tamanho da palavra é definido assim:
D1 D0
00 0 5 Bits
0 1 6 Bits
Periféricos - José Alexandre J. Ribeiro
13
1 0 7 Bits
1 1 8 Bits
O Nº de Stop Bit é definido assim:
D2
0 1 Stop Bit
1 2 Stop Bit
Com a configuração definida, consigo montar a palavra que deverá ser mandada para 3FB. Por
exemplo: Seja uma comunicação onde temos 6 Bits de dados, 2 stop Bit e paridade par. Desenhando de uma
forma melhor teremos:
D7 D6 D5 D4 D3 D2 D1 D0
0 0 0 1 1 1 0 1
Transformando esta seqüência de Bits para hexa temos: 1Dh. Devemos então mandar para 3FBh o
dado 1Dh. Pelo debug teríamos:
- O 3FB,1D
Exemplo Completo: Configure a porta COM1 para uma velocidade de 1200 baud, com 8 Bits de
dados, 2 Stop Bit e sem paridade.
Tx = = = =115200
120096 1100000 006010 2 16
A parte alta da velocidade é: 00h e a parte baixa é 60h
Formando a configuração da transmissão teremos:
D7 D6 D5 D4 D3 D2 D1 D0
0 0 0 0 0 1 1 1
Transformando a seqüência de Bits para Hexa, teremos: 07h
Pelo debug a configuração seria:
6 Bits de dados
2 Stop Bit
Habilita a paridade
Indica que a paridade é par
Na grande maioria das
vezes ficam em zero
(D5 e D6)
Indica que não vou configurar a
velocidade
Periféricos - José Alexandre J. Ribeiro
14
- O 3FB,80 Indica que vai haver configuração da velocidade
- O 3F8,60 Parte baixa da velocidade
- O 3F9,00 Parte alta da velocidade
- O 3FB,07 Configuração da porta por LCR
Pela linguagem C teremos:
# include <dos.h>
void main()
{
outport(0x3fb,0x80);
outport(0x3f8,0x60);
outport(0x3f9,0x00);
outport(0x3fb,0x07);
}
Mandando um dado para a porta (Transmissão do dado): Basta colocar na porta o respectivo dado. Vamos
supor que você queira mandar a letra “A” do micro 1 para o micro 2. Vejamos:
A = 41h, a porta COM1 possui endereço 3F8, então:
Pelo debug seria:
- O 3F8, 41
Pela linguagem C seria:
# include <dos.h>
void main()
{
outport(0x3f8,0x41);
}
Recebendo um dado da porta (Recepção do dado): Para receber um dado basta dar um IMPORT no endereço
base (3F8) e guardar este dado numa variável e depois exibir o dado. Veja que neste caso não estou
verificando o status da porta (endereço base + 5) e poderá acontecer de lermos algum dado e este não ser
Periféricos - José Alexandre J. Ribeiro
15
verdadeiro e sim lixo ! Então antes de lermos no endereço base, deveremos primeiro ler o status da porta
(Base+5) e verificar se chegou algum dado, se for verdadeiro, é que iremos ler o dado no endereço base,
caso for falso não poderemos ler.
Para acessar o registrador de status iremos usar o endereço base + 5, ou seja, 3F8 + 5, o que resulta
em 3fdh. A função dos Bits é mostrada abaixo:
D7 D6 D5 D4 D3 D2 D1 D0
Dado
recebido
1: Sim
0 : Não
Erro Overrun: Chegou
outro dado na porta
sem termos lido ela
antes. (dado anterior
foi perdido)
Erro de paridade: Erro ocorrido na
recepção de dados (erro de
paridade)
Erro de framing: O caracter recebido não tem
Stop Bit.
Sinal Break recebido: Os Bits recebidos são maiores dos
que selecionados
Buffer de transmissão vazio: O caracter já foi mandado e a UART já
pode mandar outro para transmissão
Registrador de conversão Paralelo/Serial esta vazio e esta pronto para receber outro
dado interno para virar serial
Sempre deverá estar em zero.
Na verdade o único BIT que deveremos observar é o Bit D0, pois indica se um dado foi recebido ou
não. Os outros são usados para controle de erros.
Podemos concluir que só deveremos ler um dado na porta base se antes verificarmos o BIT 0 do
endereço Base+5: * Se for 1 → Devemos ler o endereço base
* Se for 0 → Não devemos ler o endereço base
Programa exemplo para configuração da porta e veirifcação do status da porta:
Periféricos - José Alexandre J. Ribeiro
16
#include <dos.h> #include <string.h> int x, porta; void main() { outport(0x3fb,0x80); outport(0x3f8,0x60); outport(0x3f9,0x00); outport(0x3fb,0x07); clrscr(); porta=0x3fd; x=inport(porta); printf("\n O valor recebido na porta %x e' de %x",porta,x); getch(); }
Programa exemplo para configuração da porta e recebimento de dado na porta COM1:
#include <dos.h> #include <string.h> int x, porta; void main() { outport(0x3fb,0x80); outport(0x3f8,0x60); outport(0x3f9,0x00); outport(0x3fb,0x07); clrscr(); porta=0x3f8; x=inport(porta); printf("\n O valor recebido na porta %x e' de %x",porta,x); getch(); }