


























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
respostas dos exercicios do livro de microcontroladores
Tipologia: Exercícios
1 / 34
Esta página não é visível na pré-visualização
Não perca as partes importantes!
Respostas dos Exercícios \ 1 \
\ 2 \ Microcontroladores PIC18 com Linguagem C
Capítulo 1
1. 40MHz com o PLL ativo. 2. 36 pinos, divididos em cinco grupos denominados Ports. São eles: Port A, Port B, Port C, Port D e Port E. 3. Dez configurações diferentes. São elas:
LP: cristal de baixa potência (até 200KHz). XT: cristal/ressonador (até 4MHz). HS: cristal/ressonador de alta frequência (acima de 4MHz). HSPLL: cristal/ressonador de alta frequência com o PLL habilitado. RC: RC externo com saída de clock. EssaUopção fornece ao pino OSC2/CLKO/RA6 um sinal digital com frequência quatro vezes menor que a do oscilador principal (Fosc/4). RCIO: RC externo. Nessa opção o RA6 funciona como pino digital. INTIO1: oscilador interno com Fosc/4 no pino RA6 e pino RA7 configurado como digital. INTIO2: oscilador interno com RA6 e RA7 configurados como pinos digitais. EC: oscilador externo com saída de clock. Essa opção fornece no pino OSC2/CLKO/RA um sinal digital com frequência quatro vezes menor que a do oscilador principal. ECIO: oscilador externo. Nessa opção o pino RA6 funciona como digital.
4. Quando a aplicação exige um bom nível de precisão para o oscilador, como no caso de aplicações que envolvem comunicação de dados ou temporizadores. 5. O PIC18F4520 possui dois osciladores internos que, se ativados, dispensam a utilização de componentes externos. São eles o INTOSC e o INTRC. O oscilador principal, o INTOSC, possui uma frequência de 8MHz e pode ser utilizado como oscilador de clock. Esse oscilador tem associado o recurso postscaler que permite prover frequências na faixa de 31kHz - 4MHz. O oscilador principal INTOSC é habilitado quando é selecionada uma frequência de clock dentro da faixa de 125kHz a 8MHz. O outro oscilador interno, o INTRC, provê uma frequência de 31kHz. O oscilador INTRC é habilitado se ele for selecionado como origem do sinal de clock. 6. O PIC18F4520 possui três fontes diferentes que podem gerar o sinal de clock. O sinal de clock pode vir do oscilador primário, do oscilador secundário ou de um dos osciladores internos. O oscilador primário inclui as opções cristal/ressonador externo, RC externo, oscilador externo e os osciladores internos. O oscilador secundário é associado ao módulo Timer1 e inclui a conexão de um cristal de baixa frequência entre os pinos T1OSO e T1OS1. Para que o oscilador secundário possa ser utilizado, é necessário que o módulo Timer1 esteja habilitado. O cristal de baixa frequência conectado entre os pinos T1OSO e T1OS1 normalmente é de 32,768kHz e pode ser utilizado como base de tempo para um RTC ( Real Time Clock ). Os osciladores internos, além de fazerem parte do set de opções do oscilador primário, estão disponíveis como fontes de clock para o modo de energia gerenciado ( power-managed ).
\ 4 \ Microcontroladores PIC18 com Linguagem C
Capítulo 3
1. Power-on Reset (POR). 2. São os bits /RI, /TO, /PD, /POR, /BOR, STKFUL e STKUNF. A tabela a seguir mostra como esses bits estão associados aos diferentes tipos de Reset. Registrador RCON Registrador STKPTR Condição Contador dePrograma RI TO PD POR BOR STKFUL^ STKUNF Power-on Reset 0000h 1 1 1 0 0 0 0 Instrução RESET 0000h 0 u u u u u u Brown-out Reset 0000h 1 1 1 u 0 u u MCLR Reset durante a execução dos Power-Managed Modes
0000h u 1 u u u u u
MCLR Reset durante os Power-Managed Idle modes and Sleep Mode
0000h u 1 0 u u u u
WDT Time-out durante a execução do Full Power or Power-Managed Mode 0000h^ u^0 u^ u^ u^ u^ u MCLR Reset^ durante a execução em Full Power
0000h u u u u u u u
Stack Full Reset (STVREN = 1) 0000h u u u u u 1 u Stack Underflow Reset (STVREN = 1) 0000h u u u u u u 1 Stack Underflow Error (não é um Reset real, STVREN = 0) 0000h^ u^ u^ u^ u^ u^ u^1 WDT Time-out durante os Power-Managed Idle or Sleep Modes PC + 2^ u^0 0 u^ u^ u^ u Saída da interrupção dos Power-Managed Modes PC + 2^
(1) (^) u u 0 u u u u
Legenda: u - não é alterado. Nota 1: Quando um wake-up ocorre devido a uma interrupção e os bits GIEH e GIEL estão setados, o PC é carregado com vetor de interrupção (008h ou 0018h).
3. O Power-up Timer (PWRT) provê um time-out típico de 72ms após o POR. Um circuito RC interno é o responsável pela temporização. O PWRT é um recurso que precisa ser ativado e o seu objetivo é manter o microcontrolador em Reset até que a tensão de alimentação esteja estabilizada. 4. O Oscillator Start-up Timer é um circuito que provê um delay de 1024 ciclos de clock do oscilador principal, após o Power-up Timer , antes de colocar o circuito oscilador em funcionamento. Isso garante que o oscilador esteja estabilizado na sua partida, evitando travamento.
O Oscillator Start-up Timer só é invocado para os modos de funcionamento do oscilador XT, LP e HS no POR ou quando o microcontrolador acorda após ter entrado no modo Sleep.
5. Quando o PLL está habilitado, a sequência time-out (temporização) que segue o POR é diferente dos outros modos de funcionamento do oscilador. Uma parte do Power-up Timer é utilizada para prover um time-out suficiente para o PLL estabilizar a frequência do oscilador principal. O delay gerado para o PLL é de 2ms e ocorre após o Start-up Timer-out (OST).
Respostas dos Exercícios \ 5 \
6. 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'. 7. O Brown-out Reset é um recurso que, quando está ativado, faz o microcontrolador resetar caso a tensão de alimentação caia abaixo de um determinado valor, que pode ser configurado por software ou por hardware. Uma vez que o microcontrolador entrou em Reset devido ao Brown-out Reset , ele só volta ao seu funcionamento normal, ou seja, a executar o programa, quando a tensão de alimentação voltar ao nível especificado pelo fabricante para correto funcionamento do microcontrolador. 8. Este é um recurso muito poderoso utilizado para evitar a paralisação do sistema em caso de travamento do oscilador devido a uma interferência eletromagnética, ou qualquer outro tipo de ruído que o faça parar de oscilar, exceto em caso de defeito no circuito oscilador. O WDT é um temporizador que provoca um Reset no programa sempre que ele produzir um time-out , ou seja, quando o tempo programado para o time-out terminar sem que seja executada a instrução CLRWDT. 9. A instrução RESET pertence ao set de instruções dos microcontroladores da série PIC18. Essa instrução, quando executada, provoca um /MCLR Reset por software. O bit RCON= sinaliza que o último Reset foi provocado pela instrução RESET. 10. O Reset ligado aos eventos Stack Full RESET e Stack Underflow RESET está associado ao recurso Return Adress Stack , o qual permite ao programa efetuar até 31 chamadas à sub-rotina ou a funções associadas à ocorrência de uma interrupção. Quando é executada a instrução CALL, a instrução RECALL ou quando ocorre uma interrupção, o programa sai da sequência normal de execução e é desviado para outro ponto. Antes de ocorrer o desvio, no entanto, o endereço de retorno é armazenado em uma pilha, chamada Return Adress Stack , para que o programa possa voltar ao ponto de onde ocorreu o desvio.
O registrador STKPTR<4:0> é um ponteiro para a posição da pilha onde está armazenado o próximo endereço de retorno. Quando ocorre um desvio com retorno, o endereço de retorno é armazenado na pilha e o registrador STKPTR<4:0> é incrementado. Da mesma forma, quando ocorre um retorno de uma sub-rotina, o endereço de retorno é retirado da pilha e o registrador STKPTR<4:0> é decrementado. Se no registrador STKPTR<4:0> for armazenado o valor 31 quando for executado um desvio com retorno, ocorre um overflow no Return Adress Stack. Na sequência, o bit STKFUL (STKPTR<7>) será setado e ocorrerá um Reset se o bit de configuração Stack Overflow Reset estiver ativado.
Da mesma forma, se no registrador STKPTR<4:0> estiver armazenado o valor 0 e for executado mais um retorno, ocorre um underflow no Return Adress Stack. Na sequência, o PC é carregado com o valor 0 e o bit STKUNF (STKPTR<6>) será setado. Ocorrerá um Reset se o bit de configuração Stack Overflow Reset estiver ativado.
Os bits STKFUL e STKUNF podem ser testados após a ocorrência de um Reset para o programa detectar se o Reset foi provocado por um overflow ou por um underflow no Return Adress Stack e tomar as devidas providências.
Respostas dos Exercícios \ 7 \
Arquivo Caminho MPASMWIN.exe C:\MCC18\mpasm\MPASMWIN.exe mplink.exe C:\MCC18\bin\mplink.exe mcc18.exe C:\MCC18\bin\mcc18.exe mplib.exe C:\MCC18\bin\mplib.exe
6. Criar o programa-fonte, criar o projeto e configurar o MPLAB IDE, associar o programa-fonte ao projeto, compilar o projeto, debugar o projeto e, finalmente, gravar o programa no microcon- trolador. 7. Neles o MPLAB irá procurar os arquivos cabeçalho e os arquivos biblioteca incluídos na aplicação. 8. MPLAB SIM.
Capítulo 6
1. enum , const , signed , void e volatile. 2. Função main(). 3. São informações que a função pode receber quando for chamada para que ela seja executada corretamente. As informações recebidas podem ser qualquer tipo de dado válido em C. Para não receber nenhum valor, lista_de_parametros deve ser declarada como void. 4. Um bloco de código é uma sequência de comandos compreendidos entre chaves, o qual é visto como uma unidade única. 5. A linguagem C possui cinco tipos básicos de dados: caractere, inteiro, ponto flutuante, ponto flutuante de precisão dupla e sem valor. São eles, respectivamente, char (8 bits), int (16 bits), float (32 bits), double (32 bits) e void (sem valor). 6. Chamamos de identificador o nome atribuído a uma variável, constante, função, label e a outros elementos do sistema. Um identificador pode conter letras, números e o caractere alfanumérico underline. Ele deve começar com uma letra ou com o caractere underline. É proibido na linguagem C um identificador iniciar com um valor numérico. 7. Uma variável global é aquela que foi declarada fora de qualquer função, inclusive da função main(). A variável global se mantém ativa durante toda a execução do programa. Uma variável é local quando ela é declarada dentro de uma função. A variável local é destruída na saída da função. Além disso, uma variável local só é reconhecida dentro da função na qual ela foi criada. 8. A principal componente da linguagem C é a função. Uma função é formada por um conjunto de comandos que são agrupados em um ou mais blocos de código. A função executa uma tarefa bem definida dentro do programa.
\ 8 \ Microcontroladores PIC18 com Linguagem C
9. Do ponto de vista lógico uma função é um bloco de comandos que executa uma tarefa bem definida. 10. Comentário de linha única. Começa com dois caracteres barra // e identifica como comentário tudo que vier após as duas barras até o final da linha.
Comentário de linha múltipla. Deve sempre começar com os caracteres /* e terminar com os caracteres /. Além disso, ele pode conter várias linhas. /Comentário... Comentário... Comentário...*/
11. O arquivo cabeçalho disponibiliza ao projeto uma biblioteca de funções que podem ser utilizadas quando solicitadas. Para incluir um arquivo cabeçalho no projeto deve-se utilizar a diretiva #include. #include <stdio.h>
A linha anterior inclui no projeto as funções prototipadas no arquivo cabeçalho stdio.h , dentre as quais podemos citar a função printf().
12. tipo nome_da_função (lista_de_parâmetros)
{ //sequência de comandos }
13. São eles os signed , unsigned , long e short. 14. Variáveis são localidades de memória reservadas para armazenamento de dados que serão manipulados durante a execução do programa, o que chamamos de tempo de execução. Quando uma variável é declarada, é necessário informar o tipo de dado que ela irá receber, ou seja, definir o tipo da variável. Além disso, uma variável pode ter escopo global ou local. A variável global é reconhecida por todo o programa. A variável local só é reconhecida dentro da função na qual ela foi criada. 15. tipo lista_de_ variáveis;
tipo: é um tipo de dado válido em C, com exceção do tipo void. lista_de_variáveis: o nome das variáveis que serão declaradas. Se mais de uma variável for declarada, elas devem estar separadas por vírgula.
16. O modificador de tipo de acesso const é utilizado quando desejamos criar uma variável e não permitir que o seu conteúdo seja alterado por algum elemento do sistema durante o tempo de execução. Quando uma variável é declarada com o modificador const , após a inicialização, ninguém pode alterar o seu conteúdo. O modificador de tipo de acesso volatile é utilizado quando uma determinada variável pode ser alterada por algum elemento externo ao programa, sem que seja utilizado um comando de atribuição. O comando de atribuição é utilizado no programa para armazenar, por meio de uma instrução de programa, uma informação na variável. Uma variável que é atualizada automa- ticamente por um relógio/calendário é um exemplo de uma variável que deveria ser declarada com o modificador volatile.
\ 10 \ Microcontroladores PIC18 com Linguagem C
Capítulo 7
1. Lógicos, relacionais, bit a bit, operadores especiais. 2. Atribuir a uma variável o resultado de uma expressão.
int x; x=10;
3. x = y = z = 20;
4. Operador Ação − Subtração
5. Deslocar os bits que representam o conteúdo de uma variável para a esquerda (<<) ou para a direita (>>). 6. y=15 e x=16.
7. Mais alta ++ --
*** / %**
Mais baixa + -
8. Operador Ação
Maior que = Maior ou igual a < Menor que <= Menor ou igual a == Igual a != Diferente de
9. O operador = é de atribuição e o operador == é usado para a comparação entre dois valores. 10. ≠ 0 para verdadeiro e = 0 para falso.
11. Mais alta > >= < <= Mais baixa == !=
Respostas dos Exercícios \ 11 \
Operador Ação && AND || OU ! NOT
13. 1 se a expressão for verdadeira e 0 se ela for falsa.
14. Mais alta**!
= < <= == != &&** Mais baixa ||
15. Operador Ação & AND | OR ^ XOR ~ Complemento de 1
Deslocamento à direita << Deslocamento à esquerda
16. z = 00010000 (^2) 17. O operador xor.
Exemplo: x = 20; y = x; z = x^y;
Se o resultado armazenado em z for 0, significa que os valores comparados são iguais.
18. Basta inverter todos os níveis lógicos do valor e somar 1 ao resultado.
19. char introd_nibble(char x) //função introd_nibble { char y; /declaração de variável local não inicializada/ y = (x & 0x0f) | 0b10100000; /*máscara nibble superior que introduz o nibble 1010 na parte alta de x */ return y; //retorna y }
20. O bit mais significativo do valor. 21. Efetuar o deslocamento dos bits do conteúdo armazenado em uma variável para a esquerda (<<) ou para a direita (>>). 22. x = 4;
y = x; x <<= 2; x += y;
Respostas dos Exercícios \ 13 \
Capítulo 8
1. Seleção, iteração e desvio. 2. If(expressão) comando1; else comando2; O comando if testa a expressão. Sendo ela verdadeira, o comando1 é executado. Caso a expressão seja falsa, o comando2 é executado. Não se pode esquecer de que em C, verdadeiro é qualquer valor diferente de zero e falso representa o valor zero. Podemos dizer que o comando if funciona da seguinte forma: se ( if ) a expressão for verdadeira, é executado o comando1 e, se não ( else ), é executado o comando. 3. O comando switch é utilizado quando desejamos tomar uma determinada ação se uma expressão assumir o valor de uma constante inteira ou caractere. O comando switch permite a comparação da expressão com uma lista de constantes que, como definido pelo padrão C ANSI, pode ter pelo menos 257 valores diferentes. 4. O comando switch compara o valor da expressão com as constantes associadas às diversas cláusulas case , na ordem, de cima para baixo. Se ocorrer uma coincidência, a sequência de comandos associada àquela cláusula case será executada. 5. Não havendo nenhuma coincidência com as constantes associadas às cláusulas case , a sequên- cia de comandos associada à cláusula default será executada. A cláusula default não é obriga- tória, não sendo tomada nenhuma ação caso não tenha ocorrido nenhuma coincidência se ela for omitida. 6. Em determinadas situações o comando switch pode substituir o comando if , porém é importante ressaltar que o comando switch só pode testar igualdade, não sendo possível efetuar avaliação de expressões lógicas ou relacionais com esse comando. 7. Os comandos de iteração são os laços for , while e do-while. 8. for(inicialização; condição; incremento) comando;
A seção inicialização é utilizada para atribuir um valor inicial à variável de controle do laço. A seção condição é uma expressão relacional que será testada após a execução do comando para determinar quando a repetição na execução do comando termina. A seção incremento define como o conteúdo da variável de controle irá variar, determinando o número de vezes que a execução do comando irá acontecer. O comando pode ser um único comando, um bloco de código ou um comando vazio.
9. Se a expressão testada na seção condição for dada como falsa na entrada do laço, o comando não será executado uma única vez.
\ 14 \ Microcontroladores PIC18 com Linguagem C
10. while(condição) comando;
Quando o laço while é executado, primeiramente é testada a condição que pode ser qualquer expressão válida em C. Caso a expressão seja verdadeira, o comando é executado e, em seguida, a expressão é novamente testada. O ciclo se repete até que a expressão se torne falsa, quando então o laço é finalizado. É importante observar que, como a condição é testada no início do laço, o comando pode não ser executado caso a expressão seja falsa no primeiro teste. O comando pode ser um único comando, um bloco de código ou um comando vazio.
11. O comando while testa a expressão na entrada do laço enquanto o comando do-while testa a condição na saída do laço. Ao contrário do comando while , quando o comando do-while dá a expressão testada como falsa, o comando é executado uma vez. 12. Os comandos de desvio provocam um desvio incondicional no programa que fará com que o processamento desvie para uma localidade da memória de programa fora da sequência de execução. Exemplos: return , goto e break. 13. Uma vez que a função foi prototipada, ela pode ser definida no programa-fonte após a função main() ou até mesmo ser editada em outro arquivo. 14. O comando return é utilizado quando é preciso retornar de uma função. Quando ele é executado, ocorre um desvio incondicional e o programa retorna para o comando imediatamente após aquele que fez a chamada à função que está sendo executada. De uma forma geral, a chamada a uma função também provoca um desvio incondicional, porém o endereço de memória de programa onde está armazenada a primeira instrução a ser executada após o retorno é guardado em uma pilha. Quando o comando return é executado dentro da função, o endereço de retorno é retirado da pilha e utilizado para que o microcontrolador encontre a próxima instrução que será executada. 15. Com o advento da programação estruturada, o comando goto acabou caindo em desuso porque ele possuía uma grande tendência de deixar o código ilegível à medida que ia crescendo. Sendo a linguagem C de natureza estruturada, em qualquer aplicação, por maior e mais complexa que ela seja, não é necessário o uso do comando goto. A base da programação estruturada é a chamada à função, que não precisa do comando goto. 16. Ele pode ser utilizado para terminar uma cláusula case em um comando switch ou para finalizar antecipadamente um laço de repetição. Quando o comando break é encontrado, o laço é imediatamente finalizado e o programa prossegue para o comando imediatamente após o laço. O comando break é utilizado, em tese, quando uma condição especial, sendo satisfeita, deva provocar a saída imediata do laço. 17. O comando continue funciona de forma um pouco parecida com o comando break , com a diferença de que o comando break força a saída do laço, enquanto o comando continue finaliza apenas a iteração atual do laço.
\ 16 \ Microcontroladores PIC18 com Linguagem C
char alfabeto[6][6]={'\0'}; //declaração de matriz inicializada char x='A'; //declaração de variável inicializada char i; //declaração de variável inicializada char j; //declaração de variável inicializada for(i=0;i<6;i++) //laço de iteração { if(x=='Z') break; //finaliza o laço de iteração caso x='Z' else for(j=0;j<6;j++) //laço de iteração { alfabeto[i][j]=x //atribui ao índice i,j o conteúdo de x if(x=='Z') break; //finaliza o laço de iteração caso x='Z' else x++; //incrementa x } }
10. char * tabela_Hexa(char *p);
Capítulo 10
1. Do ponto de vista físico, uma string é representada na memória por um conjunto de caracteres terminado pelo caractere null , representado na forma de caractere por ' \0 ' e no código ASCII pelo valor 0x00. 2. string.h 3. strcat (destino, origem);
strcat: função que concatena strings armazenadas na memória RAM. destino: aponta para a string que será concatenada com a string apontada por origem. origem: aponta para a string que será inserida no final da string apontada por destino.
4. O tipo de dado string não faz parte do grupo básico de dados da linguagem C. Isso significa, entre outras coisas, que várias operações efetuadas com os tipos básicos não funcionam com o tipo string. Por exemplo, não podemos atribuir uma string a um vetor utilizando o comando de atribuição = , como é feito com os tipos de dados básicos, exceto na declaração do vetor. 5. A função strcpy() copia uma string apontada por origem para o endereço apontado por destino. Ambas as strings , de destino e de origem , estão armazenadas na memória RAM. 6. A função strncmp() compara alfabeticamente as duas strings até o caractere n e retorna um valor numérico da seguinte forma:
< 0 se a String1 for alfabeticamente menor que a String > 0 se a String1 for alfabeticamente maior que a String == 0 se a String 1 for igual a String 2
Respostas dos Exercícios \ 17 \
O que importa não é o valor retornado pela função strncmp() , mas o sinal do valor retornado. A forma geral de declaração da função strncmp() é: strlncmp (str1, str2, n); strncmp: função que compara duas strings até um número n de caracteres. str1: aponta para uma das strings que será comparada. str2: aponta para uma das strings que será comparada. n: número máximo de caracteres que será comparado.
7. O comando procura o caractere 'a' dentro da string apontada por string. Caso o caractere seja encontrado, é atribuído à variável x um ponteiro para ele; caso contrário, x recebe um null. 8. strstr() 9. Todas as instruções de manipulação se strings que têm a memória de programa como destino (* pgm ) só funcionam quando o microcontrolador utiliza memória de programa externa. Elas não funcionam para gravar dados na memória Flash ROM do microcontrolador. O microcontrolador PIC18F4520 não tem suporte para memória de programa externa. Sendo assim, essas instruções não surtirão o efeito desejado nesse microcontrolador. 10. strlen()
Capítulo 11
1. Uma estrutura é um conjunto de variáveis, não necessariamente do mesmo tipo, referenciadas por um mesmo nome, facilitando o acesso a informações relacionadas entre si. 2. As variáveis que compõem uma estrutura são normalmente chamadas de membro ou elementos da estrutura. 3. Para que uma estrutura possa de fato armazenar dados, é necessário declarar uma variável de estrutura. 4. Operador ponto. 5. Por valor ou por referência. A linguagem C só aceita passagem de parâmetros por valor. 6. Quando passamos um elemento de uma variável de estrutura como parâmetro para uma função, será passada uma cópia do valor armazenado naquele elemento. 7. Não. Quando uma estrutura é passada como parâmetro para uma função, é passada uma cópia da estrutura. Sendo assim, a função que recebeu a estrutura como parâmetro não poderá alterar os elementos da estrutura que foi passada. 8. O operador seta permite referenciar um elemento de uma variável de estrutura utilizando um ponteiro para a estrutura. 9. Uma estrutura é aninhada quando um de seus elementos é uma variável de estrutura. 10. É uma estrutura na qual cada elemento é formado por um ou mais bits, daí o nome campos de
Respostas dos Exercícios \ 19 \
_H_USART. A stream _H_USART está associada ao periférico UART , o qual servirá de arquivo de saída padrão para essa stream.
A variável stdout define a stream para as funções de saída de caracteres. A variável stderr define a stream para onde devem ser enviadas as mensagens de erro geradas pelo programa. Ambas as variáveis, stdout e stderr , tendo o valor default _H_USART , definem como arquivo de saída padrão o periférico UART.
4. Significa que pode ser passado como parâmetro para essas funções o conteúdo de variáveis, o qual é convertido em strings na forma como os caracteres de formatação definirem. 5. Caractere %. 6. Cinco. São eles: Caractere flag, Comprimento do campo, Precisão do campo, Tamanho do campo, Operador de conversão. 7. Os caracteres de barra invertida foram incorporados à linguagem C em substituição a alguns caracteres de controle que são impossíveis de inserir pelo teclado. Dentre eles podemos destacar o caractere retorno de carro (CR), caractere correspondente a tecla Enter.
Exemplo:
\b: retrocesso ( BS ). \n: nova linha ( LF ). \r: retorno de carro ( CR ).
8. %d 9. A função printf() envia para a stream atribuída à variável stdout , _H_USART por default, a string que foi passada como parâmetro. 10. A função vfprintf() é funcionalmente equivalente à função fprintf() , com a diferença de que os parâmetros passados para a segunda foram substituídos por um ponteiro para esses parâmetros na primeira. O ponteiro, no entanto, não pode ser qualquer um, mas um ponteiro do tipo va_list , definido no arquivo cabeçalho stdarg.h. 11. A função sprintf(). 12. Significa que a função pode receber parâmetros de comprimento variável. 13. Permitir a funções receber parâmetros com comprimento variável. 14. vfprintf() , vprintf() e vsprintf(). 15. A função _user_putc() envia um simples caractere para um arquivo de saída definido pelo usuário. Ela é invocada quando uma função de saída de caracteres envia dados para a stream _H_USER.
\ 20 \ Microcontroladores PIC18 com Linguagem C
Capítulo 13
4,5V< VDD < 5,5V Entrada Mín Máx Nível Lógico VIL (tensão de entrada baixa) 0V 0,8V 0 VIH (tensão de entrada alta) 2V VDD 1 Saída Mín Máx Nível Lógico VOL (tensão de saída baixa) 0V 0,6V 0 VOH (tensão de saída alta) VDD - 0,7V - 1
2.
3. 20mA 4. 2V 5. Quando um LED é acionado por lógica positiva, é preciso aplicar nível lógico '1' para ele emitir. Quando ele é acionado por lógica negativa, é necessário aplicar nível lógico '0' para ele emitir. A forma como o hardware está implementado vai definir se o LED será acionado por lógica positiva ou negativa. 6. 5x5 = 25 teclas. 7. 4 linhas + 4 colunas = 8 pinos
8. '0' a 'F': caso uma tecla seja detectada como pressionada. Nesse caso, a função retorna, no código ASCII, o valor da tecla pressionada. '\0': caso nenhuma tecla esteja pressionada, a função retorna o caractere null. 'G': caso uma tecla tenha sido detectada como pressionada no último rastreamento, a função retorna o caractere ' G '.