Ir ao conteúdo
  • Cadastre-se

Comunicação USART PIC 16F628A


Ir à solução Resolvido por MOR_AL,

Posts recomendados

Olá.

Estou iniciando no mundo PIC, e estou com dificuldade para fazer funcionar uma transmissão serial pelo PIC 16F628A. É apenas a transmissão, onde quero ver o byte através de um osciloscópio. A linguagem usada é ASSEMBLER. Não sei onde estou errando, por isso gostaria de uma colaboração para encontrar o erro. Grato desde já. Eis o código:

 

#INCLUDE <P16f628A.INC>
#DEFINE BANK0 BCF STATUS,RP0
#DEFINE BANK1 BSF STATUS,RP0
CBLOCK 0X20
ENDC
ORG 0X00
GOTO DEFINICOES
ORG 0X04
RETFIE 
 
DEFINICOES
     BANK0
          CLRF PORTA
          CLRF PORTB
     BANK1
          BCF TRISB,2
          MOVLW .25               ;ou D'25'
          MOVWF SPBRG       ;baud rate = 9600 (erro de 0,16%)
          CLRF TXSTA
          BSF TXSTA,2            ;velocidade alta. bit BRGH
          BCF TXSTA,4            ;modo assíncrono. bit SYNC
     BANK0
          CLRF RCSTA
          BSF RCSTA,7            ;USART habilitada. bit SPEN          
     BANK1     
          BSF TXSTA,5 ;Transmissão habilitada. bit TXEN
     BANK0
 
INICIO
     TRANSMISSAO     
          MOVWF B'10101010'
          MOVLW TXREG
          BTFSS   PIR,4
          GOTO    $-1
END
Link para o comentário
Compartilhar em outros sites

  • Solução

Bom. Vamos lá!

 

0 - Você está usando o MPLAB?

 

1 - Onde estão as configurações do PIC?

 

Exemplo:

 __Config _CP_OFF & _WDT_OFF & _PWRTE_OFF & _BODEN_OFF & _MCLRE_OFF & _HS_OSC & _LVP_OFF

 

2 - Tem que ter um cristal entre os pinos OSC1 e OSC2, juntamente com dois capacitores de . Seu cristal é de 16MHz. Cheguei a esta conclusão devido ao baud rate da USART. Registro SPBRG. Certo? Então nas palavras de configuração, tem que ter HS_OSC

 

3 - No MPLAB tem que constar o seguinte (no início).

 list P=PIC16F628A
 include <P16F628A.INC>

 

4 - Onde você escreveu:

     TRANSMISSAO     
          MOVWF B'10101010'
          MOVLW TXREG
Deveria ser:
     TRANSMISSAO     
          MOVLW B'10101010'
          MOVWF TXREG

 

5 - Onde você escreeveu:

          BTFSS   PIR,4
          GOTO    $-1
END
Pergunto quem é o registro PIR?
Não encontrei PIR e sim PIR1
 
6 - Você está transmitindo apenas UMA VEZ o byte 10101010.
Porque você não envia muitas vezes?
Crie uma variável "dado"
Zere dado
A:
Envie.
Monitore o bit TXSTA<TMRT>. Quando ele for para '1', significa que terminou de transmitir.
Introduza uma rotina de tempo. Por exemplo 1 segundo.
Incremente dado
Caso dado for igual a 0x00H, significa que transmitiu desde 0x00H até 0xFFH. Então desvie para END
Caso contrário, desvie para A:
MOR_AL
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...