Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Robson Lopes

Comunicação Serial Assembler na mão

Recommended Posts

Ola 

 

Amigos

 

Fostaria de fazer uma comunicação serial Pic + Pic na mão utilizando I/O + interrupção .... estou um pouco sem norte mais vamo lá..

 

Preciso de dois pinos I/O (Rx/Tx)

Preciso da interrupção timer1 para o Baud Rate

preciso de uma interrupção para iniciat a transmissão (no codigo do transmissor)

e no receptor preceso de uma interrupção para quando receber um bit

 

é isso? precisa de mais alguma coisa?

 

Obrgado 

 

Att

Robson Teles

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Perai, antes me esclareça, quando você diz na mão é fazer uma software UART? Ou usando hardware para comunicação serial que já existe no PIC e quais os registradores?

Vale lembrar que programas: UART, I2C, SPI e etc consomem e muita CPU do processador, para tratar todos os eventos de comunicação.

Mas vamos lá esclareça isso, que ja podemos começar a te nortear. 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

ola amigo

 

@Felipe Electronic

 

gostaria de fazer tudo na mão, por mais que consuma bastante memória quero aprender no bit é possivel me ajudar?

 

Obrigado.

 

Att,

Robson Teles

Compartilhar este post


Link para o post
Compartilhar em outros sites

O Felipe ja disse e perguntou o que você quer.

 

Explicando novamente, ja existe o registrador UART para serial (2 buffer físicos se não me engano) para fazer bit paridade. O que você quer é fazer por qualquer outro pino fazendo o UART por software (programação em ASM), é isso né?

Compartilhar este post


Link para o post
Compartilhar em outros sites

@rafael.luc

 

Isso mesmo, sem usar nada do hardware do PIC gostaria de fazer a comunicação tudo por software, apenas curiosidade amigo, gosto de entender no bit, é possivel me ajudar?

 

e gostaria de fazer em assembler para depois contar os ciclos de maquinas e ver quanto tempo demora realmente :D

 

Obrigado..

 

Att,

Robson Teles

Compartilhar este post


Link para o post
Compartilhar em outros sites

seria melhor entender bem o registrador UART sera mais util, porque não tenta comunicação infravermelho é semelhante a serial e deve fazer por programação/software a leitura.

Compartilhar este post


Link para o post
Compartilhar em outros sites

pesquise por bit banging.

contar bits não é exclusividade do asm. Pode fazer em c p.ex. e usar algumas ferramentas do mplab. p.ex. break points, simulator logic analyzer, etc ou até mesmo oscilocópio do proteus pra ver o tempo

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Robson Lopes, tudo bem?

Bit banging é legal e chato ao mesmo tempo, fiz esse pequeno transceiver UART bem rudimentar numa meia hora que fiquei ocioso no trabalho, acho que da pra você ter uma ideia de como sair manipulando os bits, repare no entanto que o codigo é generico e precisa ser entendido e adaptado aos poucos para seu chip, além disso as rotinas de delay qye vão dar o baudRate tambem nao foram implementadas (uartDelay e HalfDelay) vou deixar isso a seu criterio como estudo extra.

No mais, se tiver duvidas pergunta ai que a gente responde, agora o codigo:
 

;;Transceiver UART rudimentar para PIC16;Autor: FSN;;cblock 0x20 	;declara algumas variaveistxCharrxChartmpreceivedCharbitCountintconTempstatusTempendc;;; UartTx - Envia um caractere pela Uart em bitbanging; O caractere é passado em w, o TX fica em RB0 para melhorar a performance;;UartTx:			movf  INTCON, w		;faz um push em intcon		movwf intconTemp	;		bcf	  INTCON, GIE	;		movf  STATUS, w		;faz um push em status		movwf statusTemp	;								clrf  tmp			;		movwf txChar		;passa para o buffer de transmissao		movlw bitCount, .8	;numero de bits a transmitir				bcf   STATUS, C		;derruba o carry				bcf	  PORTB,0		;gera o startbitTxLoop:		call  uartDelay		;aguarda o tempo de 1 bit		rrf   txChar,f		;rotaciona o bit de transmissao corrente pelo carry		movf  PORTB,w		;		movwf tmp			;		movlw 0xFE			;		andwf tmp,f			;faz reset virtual do pino de TX		movf  STATUS,w		;toma o carry, nele contem o bit a ser transmitido		andlw 0x01			;		iorwf tmp, w		;		movwf PORTB			;Finalmente transfere o novo bit ao pino de TX		TxLoop_a:		decfsz bitCount,f	;repete ate transmitir todos os bits		goto  TxLoop		;		bsf	  PORTB,0		;stop bit		call  uartDelay		;				movf  statusTemp,w	;restaura o estado dos registtrps		movwf STATUS		;		movf  intconTemp,w	;		movwf INTCON		;restaura interrupts		return		;;; UartRx - Retira um caractere vindo do bitbanging; O caractere retorna em w;;UartRx:		movf STATUS,w		;		movwf statusTemp	;salva resgitrador de status				btfss receivedChar,7;checa se tem caractere no buffer		goto  NoChar		;				bcf	  receivedChar,7;indica que nao tem mais caractere a recberNoChar:				movf statusTemp,w	;		movwf STATUS		;restaura contexto aritmetico		movf  rxChar, w		;toma o caractere				return		;;ReceiveISR: rotina para tomada de caracterese pela UART;;ReceiveISR:					movf  STATUS, w		;faz um push em intcon		movwf statusTemp	;								;O primeiro bit é sempre o start		movlw .8			;		movwf bitCount		;quantidade de bits a receber:		clrf  rxChar		;		call  halfDelay		;aguarta um tempo igual a metade do bit 		bcf   STATUS,C		;		ReceiveLoop:		call  uartDelay		;aguarda o tempo de bit:		rlf   PORTB,w		;toma estado do bit recebido		movwf tmp			;		rlf   tmp			;desloca mais uma posicao para ficar no bit3		swapf tmp,f			;troca os nibbles e desloca para o bit7 MSB		movlw 0x80			;		andwf tmp,w			;mascara o que nao interessa		iorwf rxChar,f		;finalmente insere no buffer		rrf	  rxChar,f		;roda a direira, LSBs First		decfsz bitCount,f		goto ReceiveLoop	;repete ate receber todos os bits		bsf	 receivedChar,7 ;sinaliza que tem caractere no buffer				movf statusTemp,w	;		movwf STATUS		;restaura contexto		retfie			    ;encerra rotina de recepcao.									
Editado por Felipe Electronic

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muitas vezes tenho que usar rotinas RS232,I2C etc por software pois a maioria dos PICs comuns tem a mania de ter pinos dedicados a estes hardwares no meio de um port :huh:

Uma observação que os tempos tem que ser ajustados conforme o clock do sistema,isto inclui os Delays.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 

Muitas vezes tenho que usar rotinas RS232,I2C etc por software pois a maioria dos PICs comuns tem a mania de ter pinos dedicados a estes hardwares no meio de um port

Boa observação @vtrx, porém tem um ponto que pode ser pesado, o que vale mais, perder alguns ciclos e fazer alguns bitwises para leituras quebradas em ports diferentes, ou gastar a CPU inteira apenas para ter a comodidade de posicionais os IOs da forma que bem entender?

Eu vejo o uso de interfaces dessas por microcontroladores pequenos, que são muitas vezes usados como hardware periferico inteligente e precisam falar com algum master.

 

Abs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Boa observação @vtrx, porém tem um ponto que pode ser pesado, o que vale mais, perder alguns ciclos e fazer alguns bitwises para leituras quebradas em ports diferentes, ou gastar a CPU inteira apenas para ter a comodidade de posicionais os IOs da forma que bem entender?

Vai depender da aplicação.

Algumas aplicações fazem o uso da serial ou I2c apenas para inicializar variáveis,e usam um PORT e real time.

Temos também o uso das rotinas por software ,por exemplo, em micros que não tem estes periféricos,como alguns DSP que por algum motivo vão se comunicar com um protocolo destes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×