|
Boa noite !
Estou fazendo um projeto com o objetivo de um microcontrolador transmitir 1 byte para outro microcontrolador, através do módulo da USART... no caso uma transmissão Assíncrona, half Duplex ! No qual transmite e recebem porém nao simultaneamente.
Programa :
PIC 1
O Programa tem inicio a teste de 4 chaves, sendo cada chave envia um byte diferente ! (ou seja, chave 1 acionada? envia byte X, chave 2 acionada ? envia byte Y, chave 3 acionada ? envia byte Z...), após uma das chave ser acionada, tratará instruções de configuração da USART em modo ASSincrono; primeiro seta o bit BRGH do reg TXSTA ativando alta velocidade de transmissão, configura Baud Rate para 9600bps, Habilita porta Serial; Habilita transmissão, armazena byte referente a chave no TXREG (registrador de transmissão), e após faz teste no bit TRMT, do reg TXSTA para ver se a transmissão terminou ! Após a transmissão terminar, fiz as seguintes configurações para que ele receba uma resposta do segundo circuito: Habilita recepção e manda Teste no bit RCIF do reg. PIR1, para ver a hora que a recepção termina, após receber resposta aciona um buzzer!
PIC 2
Pode-se dizer que no começo do funcionamento dele, deixei ele em modo de espera, ou seja, esperando receber o byte do PIC1, para isso fiz as seguintes configurações na USART quanto a recepção : Ativa Alta taxa de transferencia de transmissão, configura Baud Rate para 9600bps, manda nível 0 para o bit SYNC do reg TXSTA , selecionando transmissão assíncrona; habilita porta serial, habilita recepção ; manda testa bit RCIF, do reg PIR1 para avisar quando termina transmissão, (PS: nao comentei no inicio do programa do PIC2, mais armazeno um valor de byte em REG criado para que compare com o valor recebido, com a intensão de acionar um buzzer ou led se os byte forem iguais ! ) Copia valor do RCREG para o W e faz operação SUBWF com os dois valores (W-reg. criado) se forem os mesmo, a operação tem o resultado de zero , assim afeta flag Z, e aciona buzzer ou LED, após manda uma resposta positiva que recebeu o byte; habilito transmissão e testa TRMT do TXREG, para ver se transmissão terminou.
Bom, Copilei os programas e gravei no MCU, porém não deu certo ! Nem ao menos aparenta fazer a primeira transmissão, o que poderia ser? Quando testado no proteus deu erro na posição 0x16 da EEPROM. PS: nao usei memória EEPROM.
Agradeço desde já!
Qualquer duvida, estarei aqui para esclarecer!
|