Вы находитесь на странице: 1из 15

UNIVERSIDADE FEDERAL DO CEAR CENTRO DE TECNOLOGIA DEPARTAMENTO DE ENGENHARIA ELTRICA MICROPROCESSADORES

PRTICA N 7: COMUNICAO SERIAL TX/RX

MARCUS DAVI DO NASCIMENTO FORTE

- 337359

CAIO CARLOS VASCONCELOS DE AGUIAR - 337158 ANDERSON SANTOS VIEIRA - 336801

PROFESSOR: TOBIAS FERNANDES

FORTALEZA JANEIRO 2013

2. SUMRIO

INTRODUO....................................................................................................... 3 OBJETIVOS

PROCEDIMENTO EXPERIMENTAL................................................................ 4

CONCLUSO........................................................................................................14

REFERNCIAS BIBLIOGRFICAS.................................................................15

INTRODUO

Este relatrio trata sobre a prtica realizada em laboratrio no dia 11 de janeiro de 2013 na qual foi estudada a comunicao serial entre mquinas IBM/PC compatveis, no padro RS-232. Neste relatrio, encontram-se os programas estudados em prtica, e suas modificaes realizadas pelos alunos de modo a complet-los e/ou aprimor-los.

OBJETIVOS: Estudar programas bsicos que implementem uma comunicao serial, padro RS-232, entre dois microcomputadores do tipo IBM/PC compatveis entre si; Familiarizar-se com a arquitetura bsica de um microcomputador do tipo IBM/PC compatvel.

4. PROCEDIMENTO EXPERIMENTAL 4.1 Foi requisitada a implementao de um programa que fosse capaz de transmitir uma string na taxa de 115200 bps. Foi utilizado como critrio de parada a tecla *. ORG 100H
; Designa a origem dos segmentos de dados e extra em 100h. ; Enderea o registrador 3FBh para DX, traz-se para AL o byte armazenado no mesmo e seta-se o bit DLAB e envia-se o byte alterado de volta para o registrador LCR

MOV DX, 3FBH IN AL, DX OR AL, 10000000B OUT DX, AL MOV DX, 3F8H MOV AL, 01H OUT DX, AL MOV DX, 3F9H MOV AL, 00H OUT DX, AL MOV DX, 3FBH MOV AL, 00000011B OUT DX, AL

; Enderaa-se agora a DX o registrador 3F8h, no qual deve ser colocado a parte baixa do divisor da taxa de Baund. Nele colocado 01h como pode-se visualizar no cdigo ao realizar-se as instrues MOV AL,01h e OUT DX, AL. Enderea-se a DX o registador 3F9h. No registrador 3F9h cuja funo receber a parte alta do divisor da Baund rate, coloca-se 00h atravs das instrues MOV AL, 00H e OUT DX, AL. Esse divisor proporciona uma baund rate de 115200 bps (115200/1).

; Enderea-se a DX novamente o registrador 3FBh responsvel. Traz-se o byte nele guardado para AL e agora enviado para ele a palavra 03h, a qual reseta o bit DLAB, habilitando a configurao da transmisso, e define a transmisso de 8 bits por vez, sem paridade e sem bits de parada.

ROT: MOV DX, 3FDH IN AL, DX AND AL, 00100000B CMP AL, 00100000B JNE ROT
; Nessa label, ocorre o endereamento de DX ao registrador 3FDh, o registrador de estado de linha da COM1. Traz-se o byte do mesmo para AL e reseta-se todos os bits do mesmo, exceto o de sinal de registrador de transmisso vazio. Compara-se o byte alterado com o byte 20h e caso esse seja diferente daquele, ento retorna-se para a label ROT at que esse comparao verifique igualdade entre esses bytes.

MOV DX, 3F8H MOV AH, 1 INT 21H CMP AL, '*' JE SAIR OUT DX, AL JMP ROT

; Enderea-se a DX o registrador 3F8h que ser usado como buffer de transmisso, pois realiza-se uma instruo OUT. Chama-se a interrupo 21h, sub-funo 1 cuja funo salvar em AL uma tecla pressionada no teclado. Compara-se o ASCII contido em AL com * e, caso essa tenha sido a tecla pressionada, salta-se para a label SAIR e o programa encerrado. Caso contrrio, o byte enviado ao registrador para DX e em seguida, salta-se para ROT iniciando o procedimento de envio novamente. A string enviada at que seja pressionada a tecla *.

SAIR: .EXIT END

; Label que enderea a sada do programa e o encerramento do mesmo.

4.1.2 Juntamente com o programa de envio de bytes , fez-se o programa receptor desses bytes continuamente. O programa encerrado quando recebido o caractere *, da mesma forma que a recepo encerrada. A taxa de recepo a mesma da transmisso, 115200 bps.
Diretiva que organiza o segmento de cdigos e dados. Neste bloco, move-se para DX o endereo I/O 3FBh. Trata-se do registrador controlador de linhas , LCR. A seguir, seta-se o bit DLAB. E envia o byte de controle de volta atravs do AL. Com o DLAB setado, posssvel configurar as portas 3F8h e 3F9h para receberem os bytes divisores da velocidade Baud. Coloca-se em DX o endereo destes registradores e nove-se 01h para 3F8h (menos significativos) e 00h para 3F9h (mais significativo). Feito isso, copiase em DX novamente o endereo 3FBh e envia-se outro byte de controle por AL. Esse novo byte reseta o DLAB e seta os dois ultimos bits, que indicaro qual tipo de recepo ser realizada. No caso, 8 bits. Neste byte de controle configurado tambm a paridade desabilitada e apenas 1 stop bit. O controle estar, ento, plenamente configurado.

ORG 100H MOV DX,3FBH IN AL,DX OR AL,10000000B OUT DX,AL MOV DX,3F8H MOV AL, 01H OUT DX,AL MOV DX,3F9H MOV AL,00H OUT DX,AL MOV DX,3FBH MOV AL, 00000011B OUT DX,AL

Neste bloco feito o teste da recepo. Move-se para DX o endereo 3FDh,

ROT: MOV DX,3FDH IN AL,DX AND AL, 000000001 JZ ROT

que o registrador dos estados de linha, LSR. Recebe-se seu valor em AL e feita uma comparao(AND) com o byte 01h. Este bit comparado (DR) ser setado quando um dado foi recebido e ser zero quando no foi recebido nenhum dado. Portanto, seguindo-se lgica, o programa far essa comparao (JZ) at que o bit esteja 1. Caso positivo, o programa segue para a aquisio do dado.

MOV DX,3F8H IN AL,DX CMP AL,'*' JZ FIM MOV DL,AL MOV AH,2 INT 21H JMP ROT FIM: .EXIT END

Neste bloco, feita a recepo do dado. Coloca-se em DX o endereo 3F8h, que o registrador para onde o dado recebido pela porta serial alocado. Ao ler o registrador (IN AL,DX), o dado recebido (que est no buffer de recepo) movido para AL. A seguir, compara-se o byte recebido com o caractere *. Caso positivo, o programa finalizado, juntamente com o programa da transmisso. Caso contrrio, o programa procede impresso na tela. Move-se o byte recebdo para DL. A seguir, chama-se a interrupo INT 21H /02 AH. Esta interrupo imprime na tela o byte que se encontra el DL, no caso, o byte recebido via porta serial. O programa ento retorna ao bloco de recepo (ROT) e ser rodado at que o caractere * seja recebido. Por fim, o cdigo direcionado para a linha FIM , aonde ser finalizado quando * recebido.

4.2 Pediu-se que fosse implementado um programa que fosse capaz de realizar o envio serial de bytes consecutivos at que fosse enviado o caractere X, quando ento o receptor tornar-se-ia o emissor e enviaria a mensagem OK ao antigo emissor. Abaixo se encontram os cdigos de emisso e recepo dos dados.

ORG 100H

; Inicializa o programa com offset do segmento de dados e de cdigo em 100h.

MOV DX, 3FBH IN AL, DX OR AL, 10000000B OUT DX, AL MOV DX, 3F8H MOV AL, 01H OUT DX, AL MOV DX, 3F9H MOV AL, 00H OUT DX, AL MOV DX, 3FBH MOV AL, 00000011B OUT DX, AL

; Enderea o registrador 3FBh para DX, traz-se para AL o byte armazenado no mesmo e seta-se o bit DLAB e envia-se o byte alterado de volta para o registrador LCR

;Enderea-se agora a DX o registrador 3F8h, no qual deve ser colocado a parte baixa do divisor da taxa de Baund. Nele colocado 01h como pode-se visualizar no cdigo ao realizar-se as instrues MOV AL,01h e OUT DX, AL. Enderea-se a DX o registador 3F9h. No registrador 3F9h cuja funo receber a parte alta do divisor da Baund rate, coloca-se 00h atravs das instrues MOV AL, 00H e OUT DX, AL. Esse divisor proporciona uma baund rate de 115200 bps (115200/1).

; Enderea-se a DX novamente o registrador 3FBh responsvel. Traz-se o byte nele guardado para AL e agora enviado para ele a palavra 03h, a qual reseta o bit DLAB, habilitando a configurao da transmisso, e define a transmisso de 8 bits por vez, sem paridade e sem bits de parada.

ENVIA: MOV DX, 3FDH IN AL, DX AND AL, 00100000B CMP AL, 00100000B JNE ENVIA
; Nessa label, ocorre o endereamento de DX ao registrador 3FDh, o registrador de estado de linha da COM1. Traz-se o byte do mesmo para AL e reseta-se todos os bits do mesmo, exceto o de bit de registrador de transmisso vazio. Compara-se o byte alterado com o byte 20h e caso esse seja diferente daquele, ento retorna-se para a label ENVIA at que esse comparao verifique igualdade entre esses bytes.

MOV DX, 3F8H MOV AH, 1 INT 21H OUT DX, AL CMP AL, 'X' JNE ENVIA

; Enderea-se a DX o registrador 3F8h que ser usado como buffer de transmisso, pois realiza-se uma instruo OUT. Chama-se a interrupo 21h, sub-funo 1 cuja funo salvar em AL uma tecla pressionada no teclado. Compara-se o ASCII contido em AL com X e, caso essa tenha sido a tecla pressionada, o salto condicional no ocorre e o fluxo do programa dirige-se para a label RECEBE. Caso no haja igualdade, o fluxo retorna para a label ENVIA e continua o envio de bytes.

RECEBE: MOV DX, 3FDH IN AL, DX AND AL, 00000001B JZ RECEBE

; Enderea-se a DX o registrador 3FDh, o registrador de estado de linha de COM1. Traz-se o byte do mesmo para AL e reseta-se todos os bits do mesmo, exceto o de bit de registrador de dado pronto. Enquanto essa operao resultar em zero, o dado no foi completamente recebido e o salto condicional ocorre, retornando para a label RECEBE, aguardando que o dado seja completamente recebido.

MOV DX, 3F8H IN AL, DX MOV AH, 2 MOV DL, AL INT 21H CMP DL, 0DH JNE RECEBE

; Enderea-se a DX o registrador 3F8h que ser usado como buffer de recepo, pois realiza-se uma instruo IN. Chama-se a interrupo 21h, subfuno 2 cuja funo mostrar na tela o byte salvo em DL. Compara-se o ASCII contido em AL com 0Dh, cdigo do New Line em ASCII, que o ltimo byte enviado pelo outro PC. Enquanto no ocorre igualdade entre o byte recebido e 0Dh, o programa retorna para a label RECEBE e continua a receber a mensagem OK 0AhODh do antigo receptor. Quando ocorre a igualdade, o salto condicional no ocorre e fluxo do programa enviado para a label ENVIA pela instruo JMP ENVIA.

JMP ENVIA

.EXIT END

; Esses comandos so responsveis por sair do cdigo e finalizar o programa.

4.2.2 Pediu-se que fosse implementado um programa que recebesse uma sequncia de caracteres pela porta serial, imprimindo-os na tela, at que um caractere X fosse recebido, o que faz com que o receptor torne-se o emissor, enviando uma mensagem OK para o antigo emissor. O cdigo e os comentrios relacionados ao programa encontram-se abaixo. ORG 100H

; Inicializa o programa com offset do segmento de dados e de cdigo em 100h.

MOV DX,3FBH IN AL,DX OR AL,10000000B OUT DX,AL MOV DX,3F8H MOV AL,01H OUT DX,AL MOV DX,3F9H MOV AL,00H OUT DX,AL MOV DX,3FBH MOV AL, 00000011B OUT DX,AL RECEIVE: MOV DX,3FDH IN AL,DX AND AL,00000001B JZ RECEIVE

; Enderea o registrador 3FBh para DX, traz-se para AL o byte armazenado no mesmo e seta-se o bit DLAB e envia-se o byte alterado de volta para o registrador LCR ;Enderea-se agora a DX o registrador 3F8h, no qual deve ser colocado a parte baixa do divisor da taxa de Baund. Nele colocado 01h como pode-se visualizar no cdigo ao realizar-se as instrues MOV AL,01h e OUT DX, AL. Enderea-se a DX o registador 3F9h. No registrador 3F9h cuja funo receber a parte alta do divisor da Baund rate, coloca-se 00h atravs das instrues MOV AL, 00H e OUT DX, AL. Esse divisor proporciona uma baund rate de 115200 bps (115200/1).

; Enderea-se a DX o registrador 3FDh, que o registrador de Estado de Linha, LSR. lido o byte armazenado no registrador, armazenando-o em AL. feita uma operao AND de forma que seja verificado o valor do bit 0 do registrador, que o bit DR, indicando se o dando est pronto para ser recebido. Caso no esteja, o programa entrar num loop infinito, esperando o dado.

MOV DX,3F8H IN AL,DX CMP AL, 'X' JE SEND MOV AH,2 MOV DL,AL INT 21H JMP RECEIVE

; Quando o dado estiver pronto, ser endereado em DX o registrador 3F8h, responsvel por armazenar os dados a serem transmitidos e recebidos. Seu dado ento lido e armazenado em AL. Compara-se o dado recebido com o caractere X. Caso o caractere recebido seja X, o programa pular para a fase de transmitir a mensagem para o antigo emissor. Caso o caractere recebido seja diferente, seu byte ser armazenado em DL, e ser utilizada a interrupo INT 21h com AH = 2, que imprime no display o caractere ASCII armazenado em DL. Aps imprimir o caractere, o programa aguardar a recepo de outro dado.

SEND: MOV DX, 3FDH IN AL, DX AND AL, 00100000B JZ SEND

; definida uma label para a parte da rotina principal onde ocorrer o envio da mensagem OK para o antigo receptor. endereado o registrador 3FDh em DX, e lido seu byte, armazenando-o em AL. realizada uma operao AND em AL de modo a verificar o valor do seu bit 5, que verifica se o registrador de transmisso est vazio, implicando que um novo byte pode ser enviado. Caso no esteja, o programa aguardar num loop infinito.

MOV DX, 3F8H MOV AL, 08H OUT DX, AL MOV AL, ' ' OUT DX, AL MOV AL, 'O' OUT DX, AL MOV AL, 'K' OUT DX, AL MOV AL, 0AH OUT DX, AL MOV AL, 0DH OUT DX, AL JMP RECEIVE .EXIT

; endereado em DX o registrador 3F8h. Os seguintes caracteres so enviados em sequncia: backspace, para apagar o dgito X digitado pelo outro usurio, space, para dar um espao entre a mensagem digitada pelo usurio emissor e os prximos digitos, O, K, new line para pular uma linha na tela do usurio emissor, para que este digite uma nova mensagem e carriage return para retornar o cursor para a posio inicial. Em seguida, o programa reiniciado para a fase de recepo de dados.

; Esta linha representa o fim do programa, embora neste caso ela nunca ser utilizada.

10

4.3 Foi pedido para se fazer um resumo descritivo a respeito dos registradores do mdulo UART utilizados na prtica. Em ambos os programas de transmisso e recepo, diversos registradores foram utilizados. Seja para controle ou manipulao de dados. Abaixo encontra-se uma breve descrio sobre cada um deles.

TxB - Buffer de Transmisso (3F8h) - Escrita O dado que se deseja transmitir via porta serial deve ser colocado neste

registrador. Assim que o dado enviado, o registrador fica vazio e o bit THRE do registrador LSR sertado. DLAB precisa estar em 0. RxB - Buffer de Recepo (3F8h) Leitura O dado recebido via porta serial armazenado neste registrador. Assim que um dado recebido, o bit DR do registrador LSR setado. Em sua leitura, o contedo do buffer apagado. DLAB precisa estar em 0.

DLL - Latch para divisor LSB (3F8h) Trata-se do registrador que recebe o byte menos significativo do divisor de frequncia. A frequncia mxima dividida pelo valor do LSB e do MSB para o clculo da velocidade Baud final.

DLM - Latch para divisor MSB (3F9h) Este registrador vai conter o byte mais significativo do divisor de frequncia. Trabalha em conjunto com o DLL.

Line Control Register (LCR) Registrador Controlador de Linhas (3FBh) SET STICK BREAK PARITY EPS PEN STB WLS1 WLS0

DLAB

Trata-se do registrador aonde sero tratados alguns bits que configuraro a forma como uma transmisso ou recepo realizada.

11

Os dois ultimos bits WLS, configuram a entrada ou sada de sinal em se tratando do numero de bits. Estes podem ser transmitidos ou enviados em grupos de 5,6,7 ou 8 bits. O bit STB configura quantos bits de parada (STOP BITS) sero executados. Caso o STB = 0, ser tratada 1 stop bit. Caso STB = 1, pode ser tratado 1.5 (se WLS tratarem 5 bits) ou 2 stop bits. O bit PEN habilita ou desabilita o uso do bit de paridade no envio/recepo. O bit EPS indica qual paridade ser usada (impar ou par ) O bit Stick Parity testa se foi paridade forada ou nao O bit SET BREAK fora o pino de TX ao espaamento (logica 0) at que o bit seja resetado. O bit DLAB permite ou restringe o acesso ao divisor de frequncia da velocidade. Quando setado, o acesso permitido, fazendo com que as portas 3F8h e 3F9h acessem os divisores. Quando resetado, o acesso restringido, fazendo com que a porta 3F8h acesse o buffer de transmisso ou recepo e 3F9h acesse o registrador de interrupes.

Line Status Register (LSR) Registrador de Status de Linha (3FDh) DT TSRE THRE BI FE PE OR DR

Este registrador informa o que est acontecendo durante o envio e a recepo de dados. O bit DR estar setado se um dado foi recebido e est em espera no buffer de recepo e resetado se no h nada no buffer O bit OR ser setado quando houve um erro de Overrun. Ou seja, quando um dado recebido enquanto ainda havia um dado no buffer de recepo. O bit PE ser setado quando houve erro de paridade. Ou seja, quando se esperava um byte impar e recebeu-se um par, por exemplo. O bit FE ser setado quando houve erro de frame. Ou seja, quando ultimo bit no foi um stop bit. Pode ocorrer quando duas mquinas em comunicao operam em diferentes tempos

12

O bit BI ser setado quando houve uma interrupo por BREAK. Ou seja, quando no se recebeu nenhum dado novo quando esperado, o que pode indicar que a mquina em comunicao com o receptor parou de funcionar por um motivo. O bit THRE ser setado quando o buffer de recepo estiver vazio. til para o software quando se precisa saber se uma transmisso foi ou no realizada. O bit TSRE ser setado quando o registrador de deslocamento estiver vazio. Ou seja, se o registrador para onde vo os dados aps sarem de THRE enviou efetivamente os dados para fora. O bit DT ser setado se houve erro em algum registrador que envolve a FIFO. Ele serve para lembrar que alguns registradores precisam ser limpados quando detectado algum erro.

13

5. CONCLUSO Nesta prtica, foi-se realizado com sucesso a implementao dos programas que implementam uma comunicao serial, no padro RS-232. Inicialmente a comunicao foi testada utilizando o aplicativo TERMINAL.EXE, verificando-se o funcionamento do cabo serial que conectava os computadores e a transmisso e recepo de dados. Em seguida, testou-se os programas das listagens apresentadas no manual prtico, associando-os ao aplicativo TERMINAl.EXE, verificando seu funcionamento. Por fim, a equipe foi capaz de implementar cdigos mais complexos capazes de comunicarem-se entre si sem o auxilio do aplicativo, cumprindo com os objetivos de familiarizao e aprendizado dos padres de transmisso e recepo de dados pela porta serial.

14

5. REFERNCIAS BIBLIOGRFICAS

Disponvel em: <http://www.manualslib.com/manual/77671/Intel386.html?page=312>. Acesso em 15 de janeiro de 2013.

Disponvel em: <http://en.wikibooks.org/wiki/Serial_Programming/8250_UART_Programming #Line_Status_Register>. Acesso em 15 de janeiro de 2013.

15

Вам также может понравиться