







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
Os melhores documentos à venda: Trabalhos de alunos formados
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
Comunidade
Peça ajuda à comunidade e tire suas dúvidas relacionadas ao estudo
Descubra as melhores universidades em seu país de acordo com os usuários da Docsity
Guias grátis
Baixe gratuitamente nossos guias de estudo, métodos para diminuir a ansiedade, dicas de TCC preparadas pelos professores da Docsity
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 ^-