Comunicação entre PIC e PC


O circuito desenvolvido neste projeto permite fazer a comunicação entre a porta serial do PC e a USART do PIC usando algumas macros instruções em linguagem assembler desenvolvidas para essa finalidade.








O Hardware

O circuito proposto usa um integrado MAX232 para fazer a conversão dos sinais que vêm da porta RS232 do PC para o PIC e deste para o PC.

No conector JP1 de 6 pinos, abaixo à esquerda no esquema, temos os sinais Rx (pino 2) e Tx (pino 3) que devem ser ligados aos pinos correspondentes da USART do PIC, isto é, quando estiver usando um PIC16F682A, por exemplo , Rx corresponde ao pino 7 (RB1/RX) e Tx ao pino 8 (RB2/TX).

Os sinais rts ( pino 6 - request to send)) e cts (pino 5 - clear to send) também estão previstos no circuito mas são opcionais e seu uso depende da aplicação.

O pino 1 é o ground e o pino 4 é a alimentação do circuito (5Volts).

Todos os capacitores do circuito são eletrolíticos portanto, a polaridade deve ser cuidadosamente observada conforme mostra o esquema abaixo.

Atenção redobrada deve ser dada ao conector DB9 na hora da soldagem dos cabos pois, na maioria das vezes, as confusões são feitas nesse conector.








Foto da montagem

A foto abaixo mostra a placa montada num circuito impresso:








O Software

Para facilitar a comunicação entre o microcontrolador e o PC algumas macros foram desenvolvidas.

USART_CONFIG ................ para configurar a Usart do PIC.
USART_SET ................... para habilitar ou desabilitar a recepção e/ou a transmissão.
USART_TX .................... para transmitir um cacarter.
USART_RX .................... para receber um cacarter.
XMIT ........................ para transmitir uma string de cacarters.




Macro USART_CONFIG

USART_CONFIG bauds, fosc, "tipo", "inter", "modo"

Essa macro configura a USART de acordo com os seguintes parâmetros:

Após a execução da macro USART_CONFIG a recepção e a transmissão já estarão habilitadas.

O exemplo abaixo supõe que o clock do processador é 4MHz e configura a USART com velocidade de 9600BPS no modo assíncrono "A" sem interrupção de leitura "N" e no modo compatível "C". Note que mesmo não usando interrupção deve-se informar o modo.


USART_CONFIG 9600,4000000,"A","N","C"





Macro USART_SET

USART_SET rxtxmode

A macro USART_SET serve para habilitar e/ou desabilitar a recepção e a transmissão de dados pela USART.
O parâmetro rxtxmode pode ser um dos seguintes:

txon ......... habilita transmissao.
txoff ........ desabilita a transmissao.
rxon ......... habilita a recepcao.
rxoff ........ desabilita a recepcao.


Exemplo:

USART_CONFIG 9600,4000000,"A","N","C" USART_SET txoff ; desabilita a transmissao USART_SET rxon ; habilita a recepção




Macro USART_TX

USART_TX

A macro USART_TX transmite para o PC um caracter carregado no registrador W.
Esta macro não possui parâmetros.

Exemplo:

. . . USART_CONFIG 9600,4000000,"A","N","C" . . . movlw "O" USART_TX movlw "L" USART_TX movlw "A" USART_TX . . .




Macro USART_RX

USART_RX

A macro USART_RX recebe do PC um caracter e o carrega no registrador W.
Esta macro não possui parâmetros.

Exemplo:

. . . dado RES 16 . . USART_CONFIG 9600,4000000,"A","N","C" movlw dado ; endereco do "dado" movwf FSR ; carrega indexador ler get USART_RX ; le a porta serial movwf INDF ; salva o caracter lido incf FSR,f ; avanca o indexador goto ler ; vai ler . . .




Macro XMIT

XMIT label

A macro XMIT transmite, para o dispositivo que estiver lendo a porta serial, uma string nomeada pelo parâmetro label.

A macro XMIT deve ser codificada de maneira adequada, dependendo da família do microcontrolador usado.

Para a família 16F deve-se codificar:

msg001 XMIT ms01 ; ms01 addwf PCL,f ; apontador para Table Read DT "PRONTO...",0x00 ; string a transmitir (Table Read) . . . USART_CONFIG 9600,4000000,"A","N","C" . . . call msg001 goto $ . . .


Para a família 18F deve-se codificar:

msg002 XMIT ms02 ; ms02 DB "PRONTO...",0x00 ; string a transmitir . . . USART_CONFIG 9600,4000000,"A","N","C" . . . call msg002 goto $ . . .


Notar que :

  1. Para ambos os casos (família 16F e 18F) a macro XMIT deve ter um label na coluna 1 (msg001 e msg002) que a nomeia.

  2. O parâmetro label da macro XMIT deve se referir ao label que nomeia a string a ser transmitida.

  3. Em ambos os casos uma instrução CALL (call msg001 e call msg002 ) deve ser usada para fazer a transmissão.

  4. Em ambos os casos as strings (ms01 e ms02) a serem transmitidas devem ser finalizadas com zero binário (0x00).








Testando a Comunicação

Para verificar o funcionamento da comunicação entre o PIC e o PC, monte o circuito mostrado no esquema elétrico abaixo e faça o download do projeto MPLAB.

O circuito de teste é muito simples e consiste de um PIC16F628A com um LED conectado ao pino 16 (PORTA<7>) e um resistor de 10K conectado entre a alimentação (+5V) e o pino 4 (MCLR).

Os fios que saem dos pinos 7 (RX) e 8 (TX) desse esquema, devem ser conectados nos pinos 2 (Rx) e 3 (Tx) do circuito do MAX232 mostrado acima.

Após montar o circuito e gravar o programa no PIC, configure uma sessão de Hyperteminal no Windows com as seguintes características:

Porta ....................... qualquer uma (COM1 ou COM2) Baud Rate ................... 9600BPS Numero de bits .............. 8 bits Controle de software......... nenhum Paridade .................... 1 bit Controle de hardware......... nenhum

O programa permite acender, apagar, e piscar um LED através de comandos enviados através do Hyperteminal do Windows para o PIC16F628A. Os seguintes comandos são aceitos:

l (L minúsculo) ............. acende o LED d (d minúsculo) ............. apaga o LED p (p minúsculo) ............. pisca o LED k (k minúsculo) ............. apaga a tela do Hyperterminal







Downloads

Todos os arquivos necessários para montar este projeto podem ser baixados aqui.
Talvez seja necessário clicar no link com o botão direito do mouse e em seguida selecionar a opção "Salvar link como...".



Índice dos




H P S P I N

Desde 04 de Março de 2010

Atualização: 08 de Dec de 2024