Académique Documents
Professionnel Documents
Culture Documents
Roteiro de Laboratório
Comunicação Serial no PIC 18F4550
1 Introdução
As atividades práticas exploram recursos da EUSART do microcontrolador PIC 18F4550 e de
programas para PC, com programação em linguagem C. Os seguintes recursos são utilizados:
• biblioteca de porta serial para MS-Windows;
• biblioteca de porta serial para compilador MCC18 (Microchip);
• escrita em visor LCD;
• interrupção de porta serial.
Para realização das atividades, os seguintes recursos são necessários:
• ambiente MPLAB v. 8.0 configurado para PIC 18F4550;
• compilador da linguagem C: MCC18 (disponı́vel no sı́tio da Microchip);
• documentação da biblioteca de comunicação serial, disponı́vel no endereço
www.das.ufsc.br/~werner/das5305/microControladores/PIC
• códigos-fonte disponı́veis no mesmo endereço acima.
2 Atividades
1. Obtenha o arquivo “aula Serial.rar” no endereço indicado acima, e execute o programa contido
no diretório “aula Serial” no kit de desenvolvimento Microgenios, bem como o programa
“serialConsole” a partir do ambiente Dev-C++ em PC. Mude a taxa de comunicação original
para 2400 bps, obtendo na documentação os passos necessários para tal modificação.
2. Modifique o programa do PIC para que o recebimento de caracteres seja feito com tratador
de interrupção, da seguinte forma:
• tratador com prioridade alta;
• atribuição de valor “1” a um flag especialmente criado como um atributo de bitfield para
que o programa principal realize uma espera ocupada no recebimento. A definição de
bitfields tem a seguinte sintaxe:
// Exemplo de declaraç~
ao e uso de um campo de bits
#define ON 1
struct flags
{
unsigned int bit1: 1; // cada membro de flags tem apenas 1 bit
unsigned int bit2: 1;
unsigned int bit3: 1;
} Semaforo; // declaraç~
ao de uma inst^
ancia
Semaforo.bit1 = ON; // atribuindo valor a um bit do semáforo
3. Modifique o programa anterior para realizar a transmissão com interrupções. Em vez de
manter o programa principal em espera ocupada, faça-o realizar a passagem (com “rotação”)
de um caracter pelo LCD, continuamente.
Observe que não há funções prontas para escrita de variáveis inteiras (tipo int) e reais (tipo
float). Nesses casos, é preciso transformar as variáveis em strings, que são vetores de caracteres.
A definição de uma variável apta a manipular strings é feita conforme o exemplo a seguir:
char myString[10];
C:\MCC18\src\pmc_common\USART
void main ()
{
...
RCONbits.IPEN = 1; //enable priority levels
INTCONbits.GIEH = 1; //enable interrupts
...
}
Figura 3: Funções de uso da porta serial (obtido de MCC18 C Compiler Libraries).
#pragma code
#pragma interrupt InterruptHandlerHigh
void InterruptHandlerHigh ()
{
if (INTCONbits.TMR0IF)
{ //check for TMR0 overflow
INTCONbits.TMR0IF = 0; //clear interrupt flag
Flags.Bit.Timeout = 1; //indicate timeout
LATBbits.LATB0 = !LATBbits.LATB0; //toggle LED on RB0
}
}