







Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Estudo de microcontroladores pic18f4520
Tipologia: Notas de estudo
1 / 13
Esta página não é visível na pré-visualização
Não perca as partes importantes!








Página 35-36 - Bit 1:
Bit 1:0: SCS1:SCS0 : bits de seleção do sistema de clock
1x: osciladores internos x1:
oscilador secundário
11: oscilador principal
Bit 1:0: SCS1:SCS0 : bits de seleção do sistema de clock
1x: osciladores internos
01: oscilador secundário
00: oscilador principal
Página 45 - Item 3.
Em funcionamento normal, o pino /MCLR (Master Clear) precisa estar recebendo nível '1'. Quando o nível lógico
nele é forçado a '0', o microcontrolador é resetado e só sai do Reset quando o nível lógico retornar a '1'. A Figura
3.2 é uma proposta para o hardware a ser conectado ao pino /MCLR, incluindo o botão Reset. Observe que o
circuito é o mesmo da Figura 3.2, com a adição do botão Reset, cuja função é resetar o microcontrolador quando
for pressionado.
Em funcionamento normal, o pino /MCLR (Master Clear) precisa estar recebendo nível '1'. Quando o nível lógico nele é forçado a '0', o microcontrolador é resetado e só sai do Reset quando o nível lógico retornar a '1'. A Figura
3.2 é uma proposta para o hardware a ser conectado ao pino /MCLR, incluindo o botão Reset. Observe que o
circuito é o mesmo da Figura 3.1, com a adição do botão Reset, cuja função é resetar o microcontrolador quando
for pressionado.
Página 50 - Quarto parágrafo
No POR porque bit /RBPU é inicializado com nível lógico '1', que desabilita os resistores de pull-up. Os pinos do Port
B são configurados como entradas digitais. A fração de código a seguir mostra como inicializar o Port B. Veja que
todos os pinos do Port B foram configurados como pinos de saída. Observe que mesmo o registrador INTCON
não tendo sido inicializado, os resistores de pull-ups estão desabilitados no POR porque bit /RBPU é inicializado
com nível lógico '1', que desabilita os resistores de pull-up.
Página 115 - Item 8.1.
Switch(expressão) { case constante1: sequência de comandos; break;
case constante2: sequência de comandos; break; . .
. default: sequência de comandos; }
switch(expressão) { case constante1: sequência de comandos; break;
case constante2: sequência de comandos; break; . .
. default: sequência de comandos; }
Página 117 - Função trata_tec()
void trata_tec (int x) { int y = 0; { case 1: 2: 3: menor ou igual a 3 \n "); break;
case 4: y = 1;
case 5: If(y==1) printf("x eh igual a 4 \n "); printf("x eh igual a 5 \n "); //sair do comando switch
default: printf("valor de x desconhecido \n"); } }
//função trata_tec
//declaração de variável local inicializada switch(x)
//sequência de comando em comum case // sequência de comando em comum case // sequência de comando em comum printf("x eh //envia p ara a UART que x <= 3. //sair do comando switch
//valor de x =4? //sim, y = 1
//valor de x =5? //sim, envia para a UART que x = 4 se y=1. else //não, envia para a UART que x = 5 se y=0 break;
// não houve coincidência //envia p ara a UART q ue valor de x é desconhecido.
Página 281
//configura TMR1 para operar como temporizador e estourar a cada 4ms T1CON = 0b10110001; //Timer1 configurado como temporizador<1> //configurado para 16 bits<7> //fator de prescaler de 1:8<5:4> //liga TMR1<0> TMR1H = 0xFC; TMR1L = 0x17; //inicializa TMR1 com FC17h }//*******************************************************************
//configura TMR1 para operar como temporizador e estourar a cada 4ms T1CON = 0b10110001; //Timer1 configurado como temporizador<1> //configurado para 16 bits<7> //fator de prescaler de 1:8<5:4> //liga TMR1<0> TMR1H = 0xFC; TMR1L = 0x17; //inicializa TMR1 com FC17h //*******************************************************************
Página 283
//configura TMR2 para operar como temporizador e estourar a cada 4ms T2CON = 0b00011110; //fator de postscaler de 1:4 <6:3> //fator de prescaler de 1:16<1:0> //liga TMR2<1> TMR1L = 0; //inicializa TMR PR2 = 125; //PR2 = 125 }//******************************************************************
//configura TMR2 para operar como temporizador e estourar a cada 4ms T2CON = 0b00011110; //fator de postscaler de 1:4 <6:3> //fator de prescaler de 1:16<1:0> //liga TMR2<1> TMR1L = 0; //inicializa TMR PR2 = 125; //PR2 = 125 //******************************************************************
Página 286
//configura TMR3 para operar como temporizador e estourar a cada 4ms T3CON = 0b10110001; //Timer3 configurado como temporizador<1> //configurado para 16 bits<7> //fator de prescaler de 1:8<5:4> //liga TMR3<0> TMR3H = 0xF8; TMR3L = 0x2F; //inicializa TMR3 com F82Fh }//*******************************************************************
//configura TMR3 para operar como temporizador e estourar a cada 4ms T3CON = 0b10110001; //Timer3 configurado como temporizador<1> //configurado para 16 bits<7> //fator de prescaler de 1:8<5:4> //liga TMR3<0> TMR3H = 0xF8; TMR3L = 0x2F; //inicializa TMR3 com F82Fh //*******************************************************************
Página 302 - Último parágrafo
Quando se deseja cofigurar um ou mais pinos do microcontrolador como entrada analógica é preciso configurar os pinos em
questão como entrada. Para configurar como entrada um determinado pino, é preciso setar o respectivo bit do registrador
TRISx. Caso o respectivo bit do registrador TRISx de um pino configurado como entrada analógica estiver apagado, são
convertidos apenas os níveis de tensão correspondentes aos níveis lógicos '1' e '0'. No Exemplo 2, é necessário fazer o bit
TRISA<0> =1 para que a conversão A/D do sinal aplicado no pino RA0/AN0 seja efetuada com sucesso. Não se pode
esquecer de que uma tensão analógica aplicada em um pino configurado como digital pode fazer com que a intensidade de
corrente elétrica no pino exceda as especificações máximas, podendo trazer danos permanentes ao microcontrolador. A
Figura 18.13 mostra o diagrama em blocos do conversor A/D do PIC18F4520.
Quando se deseja configurar um ou mais pinos do microcontrolador como entrada analógica, é preciso configurar os pinos
em questão como entrada. Para configurar como entrada um determinado pino, é preciso setar o respectivo bit do registrador
TRISx. Caso o respectivo bit do registrador TRISx de um pino configurado como entrada analógica esteja apagado, são
convertidos apenas os níveis de tensão correspondentes aos níveis lógicos '1' e '0'. No Exemplo 2, é necessário fazer o bit
TRISA<0> =1 para que a conversão A/D do sinal aplicado no pino RA0/AN0 seja efetuada com sucesso. Não se pode
esquecer de que uma tensão analógica aplicada em um pino configurado como digital pode fazer com que a intensidade de
corrente elétrica no pino exceda as especificações máximas, podendo trazer danos permanentes ao microcontrolador. A
Figura 18.13 mostra o diagrama em blocos do conversor A/D do PIC18F4520.
/Esta funcao inicializa os resgistradores SFRs./ void Inic_Regs (void) { TRISA = 0x01; //RA0 como entrada e demais pinos do PORTA como saída TRISB = 0x01; //RB0 como entrada e demais pinos do PORTB como saída TRISC = 0x00; //PORTC saída TRISD = 0x00; //PORTD saída TRISE = 0x00; //PORTE saída ADCON1 = 0x0F; //configura pinos dos PORTA e PORTE como digitais PORTA = 0; //limp a PORTA PORTB = 0; //limp a PORTB PORTC = 0; //limp a PORTC PORTD = 0; //limp a PORTD PORTE = 0; //limp a PORTE //******************************************************************** } //******************************************************************** //esta função configura o conversor A/D void Configura_AD (void) ADCON0=0b00000001; /canal AN0 selecionado<5:2> Módulo conversor ligado<1>/ ADCON1=0b00001110; /Vref- = VSS<5> Vref+ = VDD<4> pino RA0/AN0 analógico e demais pinos digitais<3:0>/ ADCON2=0b10101001; /resultado justificado à direita<7> Tempo de aquisição de 12TAD<5:3> TAD = 1μs<2:0>/
//esta função efetua uma conversão A/D int Co nv_AD (void) { int Result_AD; //declaração de variável local ADCON0bits.GO = 1; //inicia conversão while (ADCON0bits.GO); //aguarda finalizar conversão Result_AD = (((int)ADRESH)<<8)|(ADRESL); //obté m valor da conversão return Result_AD; //retorna valor da conversão
//********************************************************************
} /********************************************************************/ /*Conversão de float para ASCII. Esta função converte valores float na faixa
de -65.535,998 a +65.535,998 em uma string. //*******************************************************************/ char *Conv_Float_String(float float_in) { unsigned int parte_inteira; //declaração de variável local
unsigned int parte_decimal; //declaração de variável local char sinal, *pt; //declaração de variável local unsigned
char x, y; //declaração de variável local //******************************************************************* if(float_in < 0) //valor é menor que 0? { sinal = '-'; //sim, sinal negativo float_in = float_in * (-1); //inverte o sinal de float_in } else sinal = ' '; //não, sinal positivo //******************************************************************* parte_inteira = float_in; //resg ata parte inteira do valor //******************************************************************* parte_decimal =(unsigned int)((float_in - parte_inteira) * AJUSTA_DECIMAL); //resgata parte fracionária do valor sprintf(buf," Temp = %c%u.%01uºC",sinal,parte_inteira,parte_decimal); //converte valor em string e armazena no vetor buf pt = buf; //passa para o ponteiro pt o endereço de buf
return (pt); //retorna o endereço de buf. }//****************************************************************** void Atual_LCD (void) //função Atual_LCD { EscInstLCD(0x01); //limp a display e mostra cursor piscando na p rimeira posição da primeira linha while(TesteBusyFlag()); //espera LCD controller terminar de executar instrução
EscStringLCD(buf); //escreve string no LCD while(TesteBusyFlag()); //espera LCD controller terminar de executar instrução }//*****************************************************************
Importante: Foi incluído no programa-fonte main_35.c o arquivo cabeçalho "LCD_8bits.h" , o qual permite o uso das
funções de acesso ao LCD. Para ter acesso a tais funções, no entanto, é preciso associar também ao projeto o arquivo-fonte
LCD_8bits.c juntamente com o programa-fonte main_35.c , em que se encontra a função main().
O arquivo cabeçalho LCD_8bits.h precisa ser incluído no programa-fonte porque lá estão prototipadas as funções da
biblioteca de acesso ao LCD. Isso pode ser feito por meio da diretiva #include.
O arquivo-fonte LCD_8bits.c precisa ser associado ao projeto para que as funções definidas nele possam ser
compiladas juntamente com a função main(). Isso pode ser feito clicando com o botão direito na pasta Source Files na
área de trabalho do projeto. O mesmo procedimento utilizado para associar ao projeto o arquivo-fonte que contém a
main().
A associação de mais de um arquivo-fonte ao projeto foi descrita no item 6.5.8, na qual, para mostrar a aplicação do
especificador extern , foi montada uma aplicação com dois programas-fonte adicionados ao projeto: main_05.c e soma.c.
Esse procedimento deve ser adotado sempre que se deseja utilizar funções definidas em arquivo diferente daquele em que
foi definida a função main(). É o caso dos arquivos-fonte com funções de biblioteca apresentados no livro. São eles:
DPS_7Seg_x4.c , I2C_Master.c , Keyboard_HEX.c e Lcd_8bits.c. Sempre que uma função definida em um desses arquivos
for utilizada em uma aplicação, ele precisa ser associado ao projeto, como mostrado no exemplo Teclado matriz aciona
LED , apresentado no capítulo 13. Neste exemplo, a função main() foi definida no programa-fonte main_30.c , o qual utiliza
funções definidas no arquivo-fonte Keyboard_HEX.c. Pode-se observar na Figura 13.11 que ambos os arquivos foram
associados ao projeto.
Página 329 - Figura 20.
Página 438 - Tabela Caracteres de controle do código ASCII
Hexa Caractere Nome Teclado 00 NUL Null, Idle ^@
01 SOH Start of header ^A
02 STX Start of text ^B
03 ETX End of text ^C
04 EOT End of transmission ^D 05 ENQ Enquirity ^E
06 ACK Acknowledgement ^F
07 BEL Bell or Beep ^G
08 BS Backspace ^H
09 HT Horizontal tab ^I
0 A^ LF^ Line feed^ ^J
0B VT Vertical tab ^K 0C FF Form feed ^L
0D CR Carriage return ^M
0E SO Shift out ^N
0F SI Shift in ^O
10 DLE Data link escape ^P
11 DC1 Device control 1 (XON) ^Q
12 DC2 Device control 2 - block-mode flow control ^R
13 DC3 Device control (XOFF) ^S
14 DC4 Device control 4 ^T
15 NACK Negative acknowledge ^U
16 SYN Synchronous idle ^V
17 ETB End of transmission block ^W
18 CAN Cancel ^X
19 EM End of medium ^Y
1A SUB Substitute ^Z 1B ESC Escape, Prefix, Altmode ^[
1C FS File separator ^\
1D GS Group separator ^]
1E RS Record separator ^^
1F US Unit separator ^-