Página 1 de 1

Paridade na RS232

MensagemEnviado: 16 Out 2006 19:24
por lmdmendes
Necessito ler com um 8051 (neste caso 8052) um periférico que necessita de paridade par, mas as funções normais para usar a UART são para usar sem paridade, como faço para tratar a paridade? Alguém tem um rotina ou biblioteca que trate a paridade?
Eu estou para usar Bascom51, mas caso me arranjem uma rotina q trate a paridade noutra linguagem, estou disposto a mudar, pois sem tratar a paridade n consigo seguir.

Alguém tem um rotina para ler UART com paridade PAR? em C, ASM ou Basic??


Me envie, e urgente.

lmdmendes@gmail.com

Obrigado

MensagemEnviado: 16 Out 2006 19:46
por Maurício
não é necessária nenhuma rotina pra tratar a paridade no 8051.
basta colocar o dado no acumulador (ACC) e pegar a paridade através do bit P (Parity).
se o bit P estiver em 1, então, paridade impar.
configure a UART pra trabalhar em 9 bits.
copie o bit P para o bit TB8. transmita e xau, já era.
na recepção, a paridade vem pelo bit RB8.


[]'s

RETI.

MensagemEnviado: 17 Out 2006 13:56
por lmdmendes
Ok, ja tinha raparado nisso em asm, mas para fazer em C ou basic? sim, por exemplo o BASCOM51 axo que não da para defeniar a UART com 9 Bits, pois pelo q me parece aquilo ja esta defenido, para ser so enviar e recever, vom um simplecomando do tipo "variavel=print"(para enviar para a uart), ai esta o problema rotinas que ja tenham a pariade tratada, q seja só enviar ou ler o valor, exite? Ou têm sempre q se tratar a paridade?

MensagemEnviado: 17 Out 2006 17:01
por barboza
Não conheço o Bascomm, mas em C isso é possível.

MensagemEnviado: 17 Out 2006 18:56
por lmdmendes
Ok, pode me indicar então um rotina em c que de para tratar a paridade par de uma forma simples e directa, sem ao longo da programação não ter de estar sempre a paridade? Ficando apenas chamando uma rotina, indicando qual o valor a enviar, ela fazer o resto(enviar com paridade par) e lendo sem ligar a paridade e ela indicar o valor.
Pode indicar a rotina?

MensagemEnviado: 17 Out 2006 18:58
por Maurício
não conheço BASCOM. quem poderia te ajudar melhor, talvez fosse o Simplício.
não conheço outra maneira mais prática do que fazer o que eu tinha falado antes.
como disse o Barboza, em C, isso daí é simples.

[]'s

RETI.

MensagemEnviado: 17 Out 2006 19:52
por lmdmendes
ok, por mim posso trabalhar em c
Podem me dar a rotina em c para fazer isso?
Qual o compilador de C q usam? Tem debuguer?

MensagemEnviado: 18 Out 2006 15:51
por Maurício
no Keil:

configurar serial

SCON = 0xD0; // 9 bits; baud-rate variável; recepção habilitada

na transmissão:

void transmitir ( char dado )
{
bit paridade;

ACC = dado;
paridade = P;
TB8 = paridade;
SBUF = dado; // foi pra conta :D
}

basicamente é isso. os detalhes de segurança, vc precisa implementar.
se vc usa printf, então vc precisa modificar as funções PUTCHAR e GETCHAR.
na recepção, qdo ler o dado de entrada, copie antes o bit RB8 para um bit qualquer.
com relação à paridade impar/par não sei lhe dizer porque eu nunca usei isso.
espero ter ajudado.

[]'s

RETI.

MensagemEnviado: 18 Out 2006 17:36
por lmdmendes
Obrigadão.

Uma pergunta, nunca usei o Keil uVision2, mas alguns amigos ja me falaram bem dele, da para programas PICs por ele?

MensagemEnviado: 18 Out 2006 17:48
por Maurício
não.

[]'s

RETI.

MensagemEnviado: 18 Out 2006 20:13
por lmdmendes
ok, obrigado na mesma

MensagemEnviado: 19 Out 2006 11:48
por lmdmendes
Já tenho em meu poder o leitor de banda magnética que vou usar OMRON 3S4YR-HNFR1, pelo q estive a ver em:
http://www.coronaprint.com/datasheet/HNFR_e.pdf

E um leitor Unidirectional, por isso apenas vou ter que num bit indicar q estou pronto a receber e ler pela UART o que ele ma vai mandar com nas seguintes configurações:

(1) Communication standard : In accordance with EIA RS232
(2) Transmission speed : 9600 bps
(3) Communication method : Half-duplex
(4) Synchronizing method : Start-stop synchronization
(5) Data bit length : 8 bit
(6) Error detection : Even parity
(7) Stop bit : 1 bit

Eu nestas configurações no hyperterminal do windows, consigo receber, agora para o 8051, não estou a conseguir ler :(

Estava a tentar ler e colocar directo num LCD(2*16) para assim ver se lia algo, apesar de ser 3 tramas enormes, só me interessa uma parte da 1ªtrama.

Será problema da rotina de LCD? Podem me enviar que rotinas usam para no keil escrever num LCD 2*16 ?

Ou um código que de para fazer o procedimento de ler da uart com paridade par e mandar para o LCD.




P.S.- O datasheet mais especifico deste leitor esta em:
http://www.jade-bv.nl/documenten/hnfr_h ... pec_a_.pdf

MensagemEnviado: 19 Out 2006 16:01
por Maurício
olá Luiz.
neste endereço:

http://www.editoraerica.com.br/download ... troladores

vc pode baixar vários fontes-C com códigos sobre comunicação serial e displays LCD, mas, o exemplo de serial não envolve paridades.

pela descrição do seu aparelho, o formato de comunicação é o tradicional.
qdo vc configura a serial (SCON = 0xD0), vc automaticamente já posiciona o MCU para receber dados. se vc não está recebendo, então, pode haver problemas no meio físico, ou no transmissor. precisa verificar quem está ocasionando os erros.
vc conhece o 8051 ??

espero que os códigos lhe sirvam.

[]'s

RETI.