Escolar Documentos
Profissional Documentos
Cultura Documentos
LABORATÓRO 01
Distrito Federal - DF
25/112023
5
1 OBETIVO
O objetivo deste experimento é desenvolver uma aplicação para o
acionamento de LEDs (ou cargas) através de comandos enviados através da
interface serial entre o PC e o microcontrolador.
Introdução Teórica: O módulo EUSART (Enhanced Universal Synchronous
Asynchronous Receiver Transmitter) no PIC18F4520 é responsável pela comunicação
serial. Ele é capaz de suportar tanto a comunicação síncrona quanto a assíncrona e
será de muita importância na realização das atividades propostas nesse roteiro. Ele
possui dois módulos: transmissão (TX) e recepção (RX), que podem ser habilitados
com comandos como TXSTAbits.TXEN=1 e RCSTAbits.Cren=1, que serão utilizados
no código rodado neste experimento.
2 MATERIAIS UTILIZADOS
IDE: MPLAB X
Simulador PICSimsLab
3 PROCEDIMENTOS
void main(void) {
TRISB = 0b00000000; //Configura os pinos da Porta B como saída
PORTB = 0b00000000; //Todas as portas de PORTB são definidas como estando no nível
lógico 0]
ADCON1 = 0x0F; //Desabilita todos os canais Analógico/Digital
inicia_Serial();
7
while (1) {
if (RCIF) { //Verifica o flag de interrupção para a recepção do Módulo Eusart, caso seja 1
dado[i] = leia_Serial(); //Recebe um caractere por vez e armazena o dado com a posição 1
if (dado[i] == 0x0D) { //Se o caractere 0x0D for recebido
//Se a string recebida pelo vetor dado for igual a LLx, o seguinte bloco de código vai ser
executado
if (dado[0] == 'L' && dado[1] == 'L') {
switch (dado[2]) {
case '1':
PORTBbits.RB0 = 1;
confirmar_operacao('L', '1');
break;
case '2':
PORTBbits.RB1 = 1;
confirmar_operacao('L', '2');
break;
case '3':
PORTBbits.RB2 = 1;
confirmar_operacao('L', '3');
break;
case '4':
PORTBbits.RB3 = 1;
confirmar_operacao('L', '4');
break;
case '5':
PORTBbits.RB4 = 1;
confirmar_operacao('L', '5');
break;
case '6':
PORTBbits.RB5 = 1;
confirmar_operacao('L', '6');
break;
case '7':
PORTBbits.RB6 = 1;
confirmar_operacao('L', '7');
break;
case '8':
PORTBbits.RB7 = 1;
confirmar_operacao('L', '8');
8
break;
}
}
//Se a string recebida pelo vetor dado for igual a DDx, o seguinte bloco de código vai ser
executado
if (dado[0] == 'D' && dado[1] == 'L') {
switch (dado[2]) {
case '1':
PORTBbits.RB0 = 0;
confirmar_operacao('D', '1');
break;
case '2':
PORTBbits.RB1 = 0;
confirmar_operacao('D', '2');
break;
case '3':
PORTBbits.RB2 = 0;
confirmar_operacao('D', '3');
break;
case '4':
PORTBbits.RB3 = 0;
confirmar_operacao('D', '4');
break;
case '5':
PORTBbits.RB4 = 0;
confirmar_operacao('D', '5');
break;
case '6':
PORTBbits.RB5 = 0;
confirmar_operacao('D', '6');
break;
case '7':
PORTBbits.RB6 = 0;
confirmar_operacao('D', '7');
break;
case '8':
PORTBbits.RB7 = 0;
confirmar_operacao('D', '8');
break;
}
}
i = 0; //retorna a variável i a 0
} else //Se o caractere recebido for diferente de 0x0D, a variável i será incrementada
i++;
9
}
}
}
void escreve_Serial(char c) {
while (!TXSTAbits.TRMT); //aguarda a finalização da transmissão do caractere
TXREG = c; //carrega em TXREG e transmite o caractere vira EUSART
}
Atividades Propostas:
- Os trechos do código estão explicados detalhadamente nos
comentários deles, juntamente com os registradores e os efeitos
que qualquer alterações teriam neles.
- A explicação do modulo EUSART foi feita na seção 1 na parte da
introdução teórica.
- O caractere 0x0D, também chamado de “Carriage Return” é
utilizado no código como um marcador para identificar o final de
uma string recebida pela comunicação serial. Nesse código em
especifico, o bloco de código condicional abaixo verifica se o
caractere recebido é o 0x0D e executa os blocos de código que
estão dentro da cadeia de ifs, que nesse caso determinam qual led
será ligado ou desligado.
4 RESULTADOS
14
5 CONCLUSÕES
Conclui-se que os objetivos do experimento foram obtidos com sucesso,
apesar de algumas complicações na hora de rodar o código que foram resolvidas
após multiplas revisões do programa em questão.