respostas dos exercicios

Upload: everton-nascimento

Post on 18-Oct-2015

66 views

Category:

Documents


1 download

TRANSCRIPT

  • Respostas dos Exerccios \ 1 \

    Microcontroladores PIC18 com Linguagem C

    Uma Abordagem Prtica e Objetiva com Base no PIC18F4520

    Wagner da Silva Zanco

    Respostas dos Exerccios

    Editora rica Ltda. www.editoraerica.com.br

  • \ 2 \ Microcontroladores PIC18 com Linguagem C

    Captulo 1

    1. 40MHz com o PLL ativo.

    2. 36 pinos, divididos em cinco grupos denominados Ports. So eles: Port A, Port B, Port C, Port D e Port E.

    3. Dez configuraes diferentes. So elas:

    LP: cristal de baixa potncia (at 200KHz). XT: cristal/ressonador (at 4MHz). HS: cristal/ressonador de alta frequncia (acima de 4MHz). HSPLL: cristal/ressonador de alta frequncia com o PLL habilitado. RC: RC externo com sada de clock. EssaUopo fornece ao pino OSC2/CLKO/RA6 um

    sinal digital com frequncia quatro vezes menor que a do oscilador principal (Fosc/4). RCIO: RC externo. Nessa opo 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 sada de clock. Essa opo fornece no pino OSC2/CLKO/RA6

    um sinal digital com frequncia quatro vezes menor que a do oscilador principal. ECIO: oscilador externo. Nessa opo o pino RA6 funciona como digital.

    4. Quando a aplicao exige um bom nvel de preciso para o oscilador, como no caso de aplicaes que envolvem comunicao de dados ou temporizadores.

    5. O PIC18F4520 possui dois osciladores internos que, se ativados, dispensam a utilizao de componentes externos. So eles o INTOSC e o INTRC. O oscilador principal, o INTOSC, possui uma frequncia de 8MHz e pode ser utilizado como oscilador de clock. Esse oscilador tem associado o recurso postscaler que permite prover frequncias na faixa de 31kHz - 4MHz. O oscilador principal INTOSC habilitado quando selecionada uma frequncia de clock dentro da faixa de 125kHz a 8MHz. O outro oscilador interno, o INTRC, prov uma frequncia de 31kHz. O oscilador INTRC habilitado se ele for selecionado como origem do sinal de clock.

    6. O PIC18F4520 possui trs fontes diferentes que podem gerar o sinal de clock. O sinal de clock pode vir do oscilador primrio, do oscilador secundrio ou de um dos osciladores internos.

    O oscilador primrio inclui as opes cristal/ressonador externo, RC externo, oscilador externo e os osciladores internos. O oscilador secundrio associado ao mdulo Timer1 e inclui a conexo de um cristal de baixa frequncia entre os pinos T1OSO e T1OS1. Para que o oscilador secundrio possa ser utilizado, necessrio que o mdulo Timer1 esteja habilitado. O cristal de baixa frequncia 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, alm de fazerem parte do set de opes do oscilador primrio, esto disponveis como fontes de clock para o modo de energia gerenciado (power-managed).

  • Respostas dos Exerccios \ 3 \

    7. OSCCON Sinal de clock Modo

    IDLEN SCS1:SCS0 CPU Perifricos Disponibilidade do clock

    e origem do oscilador Sleep 0 N/A Off Off Nenhum - todos os clocks esto desligados

    PRI_RUN N/A 00 Recebe Recebe Primrio - LP, XT, HS, HSPLL, RC, EC e oscilador interno Este o modo de execuo normal

    SEC_RUN N/A 01 Recebe Recebe Secundrio - oscilador do TIMER 1 RC_RUN N/A 1x Recebe Recebe Osciladores internos PRI_IDLE 1 00 Off Recebe Primrio - LP, XT, HS, HSPLL, RC, EC SEC_IDLE 1 01 Off Recebe Secundrio - oscilador do TIMER 1 RC_IDLE 1 1x Off Recebe Osciladores internos

    Captulo 2

    1. O PIC18F4520 possui trs tipos de memria integrados. So elas: memria de programa Flash-ROM, memria de dados RAM e memria no voltil EEPROM. A memria de programa possui uma capacidade de armazenamento de 32k x 16, ou seja, 32k localidades com capacidade de armazenamento de 16 bits em cada localidade.

    2. Na localidade 0000h da memria de programa.

    3. At 31 chamadas.

    4. A memria de dados do PIC18F4520 implementada em memria SRAM e est dividida em 16 bancos de 256 localidades cada, com capacidade de armazenamento de 8 bits em cada localidade. No entanto, apenas os bancos 0, 1, 2, 3, 4, 5 e 15 esto disponveis para o armazenamento de dados.

    5. um tipo de acesso memria em que no necessrio o chaveamento entre bancos para acessar uma localidade de memria. O Access Bank, como chamado, utiliza um segmento do banco 0 e um segmento do banco 15 para formar um nico banco de memria no qual podemos acessar tanto os SFRs quanto os GPRs. O acesso memria de dados via Access Bank no leva em considerao o valor armazenado no registrador BSR.

    6. Registrador BSR.

    7. A memria EEPROM interna classificada na arquitetura do PIC18F4520 como um perifrico e ocupa a faixa de endereos 00h - FFh.

  • \ 4 \ Microcontroladores PIC18 com Linguagem C

    Captulo 3 1. Power-on Reset (POR).

    2. So os bits /RI, /TO, /PD, /POR, /BOR, STKFUL e STKUNF. A tabela a seguir mostra como esses bits esto associados aos diferentes tipos de Reset.

    Registrador RCON Registrador STKPTR Condio Contador de Programa RI TO PD POR BOR STKFUL STKUNF

    Power-on Reset 0000h 1 1 1 0 0 0 0 Instruo RESET 0000h 0 u u u u u u Brown-out Reset 0000h 1 1 1 u 0 u u

    MCLR Reset durante a execuo 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 execuo do Full Power or Power-Managed Mode 0000h u 0 u u u u u

    MCLR Reset durante a execuo 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 (no 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

    Sada da interrupo dos Power-Managed Modes PC + 2

    (1) u u 0 u u u u

    Legenda: u - no alterado. Nota 1: Quando um wake-up ocorre devido a uma interrupo e os bits GIEH e GIEL esto setados, o PC carregado com vetor

    de interrupo (008h ou 0018h).

    3. O Power-up Timer (PWRT) prov um time-out tpico de 72ms aps o POR. Um circuito RC interno o responsvel pela temporizao. O PWRT um recurso que precisa ser ativado e o seu objetivo manter o microcontrolador em Reset at que a tenso de alimentao esteja estabilizada.

    4. O Oscillator Start-up Timer um circuito que prov um delay de 1024 ciclos de clock do oscilador principal, aps 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 aps ter entrado no modo Sleep.

    5. Quando o PLL est habilitado, a sequncia time-out (temporizao) 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 frequncia do oscilador principal. O delay gerado para o PLL de 2ms e ocorre aps o Start-up Timer-out (OST).

  • Respostas dos Exerccios \ 5 \

    6. Em funcionamento normal, o pino /MCLR (Master Clear) precisa estar recebendo nvel '1'. Quando o nvel lgico nele forado a '0', o microcontrolador resetado e s sai do Reset quando o nvel lgico retornar a '1'.

    7. O Brown-out Reset um recurso que, quando est ativado, faz o microcontrolador resetar caso a tenso de alimentao 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 tenso de alimentao voltar ao nvel especificado pelo fabricante para correto funcionamento do microcontrolador.

    8. Este um recurso muito poderoso utilizado para evitar a paralisao do sistema em caso de travamento do oscilador devido a uma interferncia eletromagntica, ou qualquer outro tipo de rudo que o faa 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 instruo CLRWDT.

    9. A instruo RESET pertence ao set de instrues dos microcontroladores da srie PIC18. Essa instruo, quando executada, provoca um /MCLR Reset por software. O bit RCON=0 sinaliza que o ltimo Reset foi provocado pela instruo 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 funes associadas ocorrncia de uma interrupo. Quando executada a instruo CALL, a instruo RECALL ou quando ocorre uma interrupo, o programa sai da sequncia normal de execuo e desviado para outro ponto. Antes de ocorrer o desvio, no entanto, o endereo 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 um ponteiro para a posio da pilha onde est armazenado o prximo endereo de retorno. Quando ocorre um desvio com retorno, o endereo de retorno armazenado na pilha e o registrador STKPTR incrementado. Da mesma forma, quando ocorre um retorno de uma sub-rotina, o endereo de retorno retirado da pilha e o registrador STKPTR decrementado. Se no registrador STKPTR for armazenado o valor 31 quando for executado um desvio com retorno, ocorre um overflow no Return Adress Stack. Na sequncia, o bit STKFUL (STKPTR) ser setado e ocorrer um Reset se o bit de configurao Stack Overflow Reset estiver ativado.

    Da mesma forma, se no registrador STKPTR estiver armazenado o valor 0 e for executado mais um retorno, ocorre um underflow no Return Adress Stack. Na sequncia, o PC carregado com o valor 0 e o bit STKUNF (STKPTR) ser setado. Ocorrer um Reset se o bit de configurao Stack Overflow Reset estiver ativado.

    Os bits STKFUL e STKUNF podem ser testados aps a ocorrncia 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 providncias.

  • \ 6 \ Microcontroladores PIC18 com Linguagem C

    Captulo 4 1. Quando configurados como digitais, os pinos do PIC18F4520 so divididos em cinco grupos

    chamados Ports de I/O, identificados como Port A, Port B, Port C, Port D e Port E. O Port A composto pelos pinos RA7:RA0. O Port B pelos pinos RB7:RB0. O Port C pelos pinos RC7:RC0. O Port D pelos pinos RD7:RD0. O Port E pelos pinos RE3:RE0.

    2. O registrador TRISx. O TRISA configura os pinos do Port A, o TRISB os pinos do Port B e assim sucessivamente.

    3. Eles so o elo entre o software e o hardware, ou seja, entre o programa e os pinos do microcontrolador.

    4. Significa que preciso conectar uma fonte de alimentao externa no pino.

    5. Porque os resistores de pull-up so implementados na pastilha de silcio e por isso possuem uma potncia muito pequena. Qualquer sobrecarga de corrente pode queim-los.

    6. Pino RE3. Para ativar a funo digital desse pino, preciso desabilitar a funo /MCLR.

    7. Um Schmitt Trigger um circuito comparador incorporado de realimentao positiva. Quando o nvel de tenso de entrada maior que um limiar escolhido, a sada est em nvel alto; quando a entrada est abaixo de outro limiar, a sada est em nvel baixo; quando a entrada se encontra entre os dois limiares, a sada retm o valor anterior at a entrada se alterar suficientemente para mudar o estado do Trigger.

    8. Parallel Slave Port.

    Captulo 5 1. Um compilador executado em um computador que pode gerar cdigos que so executados em

    um diferente tipo de computador.

    2. Um bloco de cdigo escrito em linguagem Assembly contm um menor nmero de instrues, sendo, consequentemente, executado mais rapidamente do que um bloco de cdigo escrito em linguagem C que executa a mesma tarefa.

    3. Suporte para microcontroladores de 8 bits, MPLAB IDE, MPLAB SIM, MPASM, MPLAB ICD 2 (opcional se for utilizar um gravador/debugger compatvel com o ICD 2).

    4. Project Wizard. Clicar no menu Project/Project Wizard.

  • Respostas dos Exerccios \ 7 \

    5. 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 cabealho e os arquivos biblioteca includos na aplicao.

    8. MPLAB SIM.

    Captulo 6 1. enum, const, signed, void e volatile.

    2. Funo main().

    3. So informaes que a funo pode receber quando for chamada para que ela seja executada corretamente. As informaes recebidas podem ser qualquer tipo de dado vlido em C. Para no receber nenhum valor, lista_de_parametros deve ser declarada como void.

    4. Um bloco de cdigo uma sequncia de comandos compreendidos entre chaves, o qual visto como uma unidade nica.

    5. A linguagem C possui cinco tipos bsicos de dados: caractere, inteiro, ponto flutuante, ponto flutuante de preciso dupla e sem valor. So eles, respectivamente, char (8 bits), int (16 bits), float (32 bits), double (32 bits) e void (sem valor).

    6. Chamamos de identificador o nome atribudo a uma varivel, constante, funo, label e a outros elementos do sistema. Um identificador pode conter letras, nmeros e o caractere alfanumrico underline. Ele deve comear com uma letra ou com o caractere underline. proibido na linguagem C um identificador iniciar com um valor numrico.

    7. Uma varivel global aquela que foi declarada fora de qualquer funo, inclusive da funo main(). A varivel global se mantm ativa durante toda a execuo do programa. Uma varivel local quando ela declarada dentro de uma funo. A varivel local destruda na sada da funo. Alm disso, uma varivel local s reconhecida dentro da funo na qual ela foi criada.

    8. A principal componente da linguagem C a funo. Uma funo formada por um conjunto de comandos que so agrupados em um ou mais blocos de cdigo. A funo executa uma tarefa bem definida dentro do programa.

  • \ 8 \ Microcontroladores PIC18 com Linguagem C

    9. Do ponto de vista lgico uma funo um bloco de comandos que executa uma tarefa bem definida.

    10. Comentrio de linha nica. Comea com dois caracteres barra // e identifica como comentrio tudo que vier aps as duas barras at o final da linha.

    Comentrio de linha mltipla. Deve sempre comear com os caracteres /* e terminar com os caracteres */. Alm disso, ele pode conter vrias linhas. /*Comentrio... Comentrio... Comentrio...*/

    11. O arquivo cabealho disponibiliza ao projeto uma biblioteca de funes que podem ser utilizadas quando solicitadas. Para incluir um arquivo cabealho no projeto deve-se utilizar a diretiva #include. #include

    A linha anterior inclui no projeto as funes prototipadas no arquivo cabealho stdio.h, dentre as quais podemos citar a funo printf().

    12. tipo nome_da_funo (lista_de_parmetros) { //sequncia de comandos }

    13. So eles os signed, unsigned, long e short.

    14. Variveis so localidades de memria reservadas para armazenamento de dados que sero manipulados durante a execuo do programa, o que chamamos de tempo de execuo. Quando uma varivel declarada, necessrio informar o tipo de dado que ela ir receber, ou seja, definir o tipo da varivel. Alm disso, uma varivel pode ter escopo global ou local. A varivel global reconhecida por todo o programa. A varivel local s reconhecida dentro da funo na qual ela foi criada.

    15. tipo lista_de_ variveis;

    tipo: um tipo de dado vlido em C, com exceo do tipo void. lista_de_variveis: o nome das variveis que sero declaradas. Se mais de uma varivel

    for declarada, elas devem estar separadas por vrgula.

    16. O modificador de tipo de acesso const utilizado quando desejamos criar uma varivel e no permitir que o seu contedo seja alterado por algum elemento do sistema durante o tempo de execuo. Quando uma varivel declarada com o modificador const, aps a inicializao, ningum pode alterar o seu contedo.

    O modificador de tipo de acesso volatile utilizado quando uma determinada varivel pode ser alterada por algum elemento externo ao programa, sem que seja utilizado um comando de atribuio. O comando de atribuio utilizado no programa para armazenar, por meio de uma instruo de programa, uma informao na varivel. Uma varivel que atualizada automa-ticamente por um relgio/calendrio um exemplo de uma varivel que deveria ser declarada com o modificador volatile.

  • Respostas dos Exerccios \ 9 \

    17. extern, static, register e auto.

    18. O especificador extern utilizado na declarao da varivel quando ela for criada em um determinado arquivo e precisar ser acessada de outro arquivo. O procedimento correto nesse caso declarar a varivel em um arquivo e declar-la com o especificador extern no outro arquivo em que ela ser acessada. O compilador saber que a varivel foi declarada em outro arquivo por causa do especificador extern. O especificador extern s funciona quando a varivel declarada como global no arquivo de origem.

    19. Quando uma varivel local declarada como static, o compilador aloca memria como se ela fosse uma varivel global. Em outras palavras, ela se manter ativa durante todo o tempo de execuo. Mas, pelo fato de a varivel ser do tipo local, ela s ser reconhecida dentro do bloco de cdigo no qual ela foi criada.

    20. Sim. Uma varivel global static s reconhecida dentro do arquivo no qual ela foi criada. A varivel local static s reconhecida dentro da funo na qual ela foi criada. No entanto, ambas se mantm ativas durante todo o tempo de execuo.

    21. Uma varivel register armazenada dentro da CPU. O objetivo aumentar a velocidade no processamento da informao armazenada na varivel. Esse especificador foi criado na poca em que os microprocessadores tinham uns poucos registradores internos que poderiam ser utilizados para o armazenamento de dados temporrios. Os microcontroladores de hoje possuem memria RAM interna, o que elimina a necessidade do especificador register.

    22. Dar varivel um escopo local. No necessrio, no entanto, a utilizao desse especificador, uma vez que uma varivel local, quando criada, automaticamente definida como automtica.

    23. um valor numrico que no pode ser alterado. Uma constante pode ser tambm uma string. Da mesma forma que o valor numrico, a constante string no pode ser alterada.

    24. Decimal: YY Hexadecimal: 0xYY Octal: OYY Binrio: 0bYYYYYYYY ASCII: 'Y' Y: valor numrico

    25. Associar um valor numrico a uma string.

    26. A forma com que eles so representados. Um caractere representado entre apstrofos e uma string representada entre aspas.

  • \ 10 \ Microcontroladores PIC18 com Linguagem C

    Captulo 7 1. Lgicos, relacionais, bit a bit, operadores especiais.

    2. Atribuir a uma varivel o resultado de uma expresso.

    int x; x=10;

    3. x = y = z = 20;

    4. Operador Ao

    Subtrao + Adio * Multiplicao / Diviso

    % Resto da diviso Decremento ++ Incremento

    5. Deslocar os bits que representam o contedo de uma varivel para a esquerda ().

    6. y=15 e x=16.

    7. Mais alta ++ --

    * / %

    Mais baixa + -

    8. Operador Ao

    > Maior que >= Maior ou igual a < Menor que

    >= <

  • Respostas dos Exerccios \ 11 \

    12. Operador Ao

    && AND || OU ! NOT

    13. 1 se a expresso for verdadeira e 0 se ela for falsa.

    14. Mais alta ! > >= < > Deslocamento direita

  • \ 12 \ Microcontroladores PIC18 com Linguagem C

    23. varivel = Exp1 ? Exp2 : Exp3; Quando o comando executado, a Exp1 avaliada. Se ela for avaliada como verdadeira, a Exp2

    assume o valor da expresso que ser atribuda varivel. Caso Exp1 seja avaliada como falsa, Exp3 assume o valor da expresso que ser atribuda varivel.

    24. o operador * antes do nome da varivel. Sua funo informar ao compilador que aquela uma varivel de ponteiro.

    25. O operador &.

    26. O operador cast ou especificador de tipo utilizado quando necessrio forar uma expresso a ser tornar um tipo especfico de dado. A forma geral do uso do cast : (tipo) expresso

    tipo: um tipo de dado padro em C. expresso: pode ser uma varivel ou uma expresso vlida em C.

    27. O operador sizeof retorna, em bytes, o tamanho da varivel ou do especificador de tipo que ele precede. O tipo_de_dado pode ser qualquer tipo de dado reconhecido pelo compilador. sizeof variavel

    sizeof (tipo_de_dado)

    28. y = (x=1, x+=2, x= x *5);

    29. Exemplo: x = x + 10;

    O comando anterior pode ser abreviado da seguinte forma:

    x+= 10;

    30. Mais alta ( ) [ ] ->

    ! ~ ++ -- (tipo) * & sizeof * / % + - > < >= == != & ^ | && || ? = += -= *= /=

    Menor ,

  • Respostas dos Exerccios \ 13 \

    Captulo 8 1. Seleo, iterao e desvio. 2. If(expresso) comando1; else comando2; O comando if testa a expresso. Sendo ela verdadeira, o comando1 executado. Caso a

    expresso seja falsa, o comando2 executado. No 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 expresso for verdadeira, executado o comando1 e, se no (else), executado o comando2.

    3. O comando switch utilizado quando desejamos tomar uma determinada ao se uma expresso assumir o valor de uma constante inteira ou caractere. O comando switch permite a comparao da expresso com uma lista de constantes que, como definido pelo padro C ANSI, pode ter pelo menos 257 valores diferentes.

    4. O comando switch compara o valor da expresso com as constantes associadas s diversas clusulas case, na ordem, de cima para baixo. Se ocorrer uma coincidncia, a sequncia de comandos associada quela clusula case ser executada.

    5. No havendo nenhuma coincidncia com as constantes associadas s clusulas case, a sequn-cia de comandos associada clusula default ser executada. A clusula default no obriga-tria, no sendo tomada nenhuma ao caso no tenha ocorrido nenhuma coincidncia se ela for omitida.

    6. Em determinadas situaes o comando switch pode substituir o comando if, porm importante ressaltar que o comando switch s pode testar igualdade, no sendo possvel efetuar avaliao de expresses lgicas ou relacionais com esse comando.

    7. Os comandos de iterao so os laos for, while e do-while.

    8. for(inicializao; condio; incremento) comando;

    A seo inicializao utilizada para atribuir um valor inicial varivel de controle do lao. A seo condio uma expresso relacional que ser testada aps a execuo do comando para determinar quando a repetio na execuo do comando termina. A seo incremento define como o contedo da varivel de controle ir variar, determinando o nmero de vezes que a execuo do comando ir acontecer. O comando pode ser um nico comando, um bloco de cdigo ou um comando vazio.

    9. Se a expresso testada na seo condio for dada como falsa na entrada do lao, o comando no ser executado uma nica vez.

  • \ 14 \ Microcontroladores PIC18 com Linguagem C

    10. while(condio) comando;

    Quando o lao while executado, primeiramente testada a condio que pode ser qualquer expresso vlida em C. Caso a expresso seja verdadeira, o comando executado e, em seguida, a expresso novamente testada. O ciclo se repete at que a expresso se torne falsa, quando ento o lao finalizado. importante observar que, como a condio testada no incio do lao, o comando pode no ser executado caso a expresso seja falsa no primeiro teste. O comando pode ser um nico comando, um bloco de cdigo ou um comando vazio.

    11. O comando while testa a expresso na entrada do lao enquanto o comando do-while testa a condio na sada do lao. Ao contrrio do comando while, quando o comando do-while d a expresso 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 memria de programa fora da sequncia de execuo. Exemplos: return, goto e break.

    13. Uma vez que a funo foi prototipada, ela pode ser definida no programa-fonte aps a funo main() ou at mesmo ser editada em outro arquivo.

    14. O comando return utilizado quando preciso retornar de uma funo. Quando ele executado, ocorre um desvio incondicional e o programa retorna para o comando imediatamente aps aquele que fez a chamada funo que est sendo executada. De uma forma geral, a chamada a uma funo tambm provoca um desvio incondicional, porm o endereo de memria de programa onde est armazenada a primeira instruo a ser executada aps o retorno guardado em uma pilha. Quando o comando return executado dentro da funo, o endereo de retorno retirado da pilha e utilizado para que o microcontrolador encontre a prxima instruo que ser executada.

    15. Com o advento da programao estruturada, o comando goto acabou caindo em desuso porque ele possua uma grande tendncia de deixar o cdigo ilegvel medida que ia crescendo. Sendo a linguagem C de natureza estruturada, em qualquer aplicao, por maior e mais complexa que ela seja, no necessrio o uso do comando goto. A base da programao estruturada a chamada funo, que no precisa do comando goto.

    16. Ele pode ser utilizado para terminar uma clusula case em um comando switch ou para finalizar antecipadamente um lao de repetio. Quando o comando break encontrado, o lao imediatamente finalizado e o programa prossegue para o comando imediatamente aps o lao.

    O comando break utilizado, em tese, quando uma condio especial, sendo satisfeita, deva provocar a sada imediata do lao.

    17. O comando continue funciona de forma um pouco parecida com o comando break, com a diferena de que o comando break fora a sada do lao, enquanto o comando continue finaliza apenas a iterao atual do lao.

  • Respostas dos Exerccios \ 15 \

    Captulo 9 1. Um vetor, tambm conhecido como array, um conjunto de variveis do mesmo tipo

    referenciadas por um mesmo nome. Cada varivel que compe um vetor pode ser acessada individualmente, sendo a sua posio dentro do vetor denominada ndice. Todos os ndices de um vetor ocupam posies contguas de memria.

    2. O caractere Null

    3. char vect [10]="suave";

    4. 12 elementos, sendo 11 elementos utilizados para armazenar a string "Casa Blanca", mais um elemento para armazenar o caractere terminao de string, o caractere '\0'.

    5. Varivel de ponteiro.

    6. Sim. Para passar um vetor como parmetro para uma funo utiliza-se o nome do vetor. Quando o nome do vetor passado como parmetro, o endereo do primeiro elemento do vetor passado como parmetro. Vejamos a frao de cdigo a seguir. char *p; //declarao de varivel de ponteiro char vogal[10]; //declarao de vetor p=vogal; //varivel p recebe o endereo do primeiro elemento do vetor vogal

    Na frao de cdigo anterior, passado para a varivel de ponteiro p o endereo inicial do vetor vogal. A passagem do endereo inicial do vetor vogal para a varivel p poderia tambm ser feita pelo comando &vogal[0];. Em aplicaes profissionais, no entanto, no comum a utilizao do operador & para a passagem do endereo inicial de um vetor para uma varivel de ponteiro. Normalmente isso feito utilizando o prprio nome do vetor.

    7. Matriz.

    8. Chamamos de adimensional um vetor que, na sua declarao, fica a cargo do compilador calcular a sua dimenso. Se na declarao de um vetor inicializado o tamanho do vetor no for especificado, o compilador cria um vetor grande o suficiente para conter todos os elementos presentes na sua inicializao.

    Vejamos o exemplo a seguir. So criados dois vetores, um chamado solar do tipo char inicializado com a string "Hoje eh domingo" e outro de nome vogais do tipo char inicializado com os caracteres 'A', 'B', 'C', 'D' e 'E'. Como a quantidade de elementos dos vetores no foi fornecida, o compilador cria um vetor com capacidade de armazenar os dados de inicializao. No caso do vetor solar o compilador aloca uma localidade de memria adicional para receber o caractere terminador de string, o caractere null. char solar[ ] = "Hoje eh domingo!"; //declarao de vetor inicializado char vogais[ ] = {'A','B', 'C', 'D', 'E'}; //declarao de vetor inicializado

  • \ 16 \ Microcontroladores PIC18 com Linguagem C

    9. char alfabeto[6][6]={'\0'}; //declarao de matriz inicializada char x='A'; //declarao de varivel inicializada char i; //declarao de varivel inicializada char j; //declarao de varivel inicializada for(i=0;i

  • Respostas dos Exerccios \ 17 \

    O que importa no o valor retornado pela funo strncmp(), mas o sinal do valor retornado. A forma geral de declarao da funo strncmp() : strlncmp (str1, str2, n);

    strncmp: funo que compara duas strings at um nmero n de caracteres. str1: aponta para uma das strings que ser comparada. str2: aponta para uma das strings que ser comparada. n: nmero mximo de caracteres que ser comparado.

    7. O comando procura o caractere 'a' dentro da string apontada por string. Caso o caractere seja encontrado, atribudo varivel x um ponteiro para ele; caso contrrio, x recebe um null.

    8. strstr() 9. Todas as instrues de manipulao se strings que tm a memria de programa como destino

    (*pgm) s funcionam quando o microcontrolador utiliza memria de programa externa. Elas no funcionam para gravar dados na memria Flash ROM do microcontrolador. O microcontrolador PIC18F4520 no tem suporte para memria de programa externa. Sendo assim, essas instrues no surtiro o efeito desejado nesse microcontrolador.

    10. strlen()

    Captulo 11

    1. Uma estrutura um conjunto de variveis, no necessariamente do mesmo tipo, referenciadas por um mesmo nome, facilitando o acesso a informaes relacionadas entre si.

    2. As variveis que compem uma estrutura so normalmente chamadas de membro ou elementos da estrutura.

    3. Para que uma estrutura possa de fato armazenar dados, necessrio declarar uma varivel de estrutura.

    4. Operador ponto. 5. Por valor ou por referncia. A linguagem C s aceita passagem de parmetros por valor. 6. Quando passamos um elemento de uma varivel de estrutura como parmetro para uma funo,

    ser passada uma cpia do valor armazenado naquele elemento. 7. No. Quando uma estrutura passada como parmetro para uma funo, passada uma cpia

    da estrutura. Sendo assim, a funo que recebeu a estrutura como parmetro no poder alterar os elementos da estrutura que foi passada.

    8. O operador seta permite referenciar um elemento de uma varivel de estrutura utilizando um ponteiro para a estrutura.

    9. Uma estrutura aninhada quando um de seus elementos uma varivel de estrutura.

    10. uma estrutura na qual cada elemento formado por um ou mais bits, da o nome campos de

  • \ 18 \ Microcontroladores PIC18 com Linguagem C

    bits. O campo de bits um elemento de estrutura em que definido o nmero de bits do campo. Sendo assim, possvel montar estruturas utilizando campos de bits como elementos. A forma geral de definio de uma estrutura de campos de bits mostrada a seguir. struct identificador { tipo elemento1 : comprimento ; tipo elemento2 : comprimento ; tipo elemento3 : comprimento ; . . . } listas_de_variaveis;

    identificador: opcional, podendo ou no ser definido. elementox: o nome atribudo ao campo. comprimento: o comprimento do campo. Ele no pode ser maior que 8 bits. tipo: normalmente definido como unsigned, embora ele possa ser definido como outros

    tipos de dados suportados pelo compilador. lista_de_variveis: so variveis de estrutura que opcionalmente podem ser declaradas.

    Se a estrutura for annima, pelo menos uma varivel deve ser declarada no momento da declarao da estrutura.

    11. Uma unio se assemelha bastante a uma estrutura. Existe, no entanto, uma diferena fundamental entre elas. Quando uma estrutura declarada, alocada memria para cada um dos elementos que a compem quando uma varivel de estrutura criada. Em uma unio, o espao de memria alocado o comprimento do maior elemento que a compe.

    12. Enumerao.

    13. Qualquer tipo de dado vlido em C pode ter uma nova identificao atribuda a ele. O comando typedef utilizado para esse fim. O typedef no cria outro tipo de dado, apenas redefine um tipo de dado padro em C para um identificador indicado pelo usurio.

    Captulo 12

    1. A ideia principal por trs do conceito de stream est em transformar os dispositivos reais, funcionalmente diferentes, em dispositivos lgicos chamados streams. Para o programador, cada dispositivo ser visto como uma stream, permitindo escrever caracteres em dispositivos diferentes utilizando as mesmas funes.

    2. As duas streams definidas pelo MPLAB C18 so _H_USART e _H_USER. A primeira se refere ao perifrico UART como destino para as funes de sada de caracteres. A stream _H_USER permite ao usurio estabelecer um destino diferente para as funes de sada de caracteres.

    3. Para selecionar uma das streams definidas pelo MPLAB C18 utilizamos as variveis globais stdout e stderr, definidas na biblioteca do compilador e que possuem o valor default de

  • Respostas dos Exerccios \ 19 \

    _H_USART. A stream _H_USART est associada ao perifrico UART, o qual servir de arquivo de sada padro para essa stream.

    A varivel stdout define a stream para as funes de sada de caracteres. A varivel stderr define a stream para onde devem ser enviadas as mensagens de erro geradas pelo programa. Ambas as variveis, stdout e stderr, tendo o valor default _H_USART, definem como arquivo de sada padro o perifrico UART.

    4. Significa que pode ser passado como parmetro para essas funes o contedo de variveis, o qual convertido em strings na forma como os caracteres de formatao definirem.

    5. Caractere %.

    6. Cinco. So eles: Caractere flag, Comprimento do campo, Preciso do campo, Tamanho do campo, Operador de converso.

    7. Os caracteres de barra invertida foram incorporados linguagem C em substituio a alguns caracteres de controle que so impossveis 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 funo printf() envia para a stream atribuda varivel stdout, _H_USART por default, a string que foi passada como parmetro.

    10. A funo vfprintf() funcionalmente equivalente funo fprintf(), com a diferena de que os parmetros passados para a segunda foram substitudos por um ponteiro para esses parmetros na primeira. O ponteiro, no entanto, no pode ser qualquer um, mas um ponteiro do tipo va_list, definido no arquivo cabealho stdarg.h.

    11. A funo sprintf().

    12. Significa que a funo pode receber parmetros de comprimento varivel.

    13. Permitir a funes receber parmetros com comprimento varivel.

    14. vfprintf(),vprintf() e vsprintf().

    15. A funo _user_putc() envia um simples caractere para um arquivo de sada definido pelo usurio. Ela invocada quando uma funo de sada de caracteres envia dados para a stream _H_USER.

  • \ 20 \ Microcontroladores PIC18 com Linguagem C

    Captulo 13 1.

    4,5V< VDD < 5,5V Entrada Mn Mx Nvel Lgico

    VIL (tenso de entrada baixa) 0V 0,8V 0

    VIH (tenso de entrada alta) 2V VDD 1

    Sada Mn Mx Nvel Lgico

    VOL (tenso de sada baixa) 0V 0,6V 0

    VOH (tenso de sada alta) VDD - 0,7V - 1

    2.

    3. 20mA

    4. 2V

    5. Quando um LED acionado por lgica positiva, preciso aplicar nvel lgico '1' para ele emitir. Quando ele acionado por lgica negativa, necessrio aplicar nvel lgico '0' para ele emitir. A forma como o hardware est implementado vai definir se o LED ser acionado por lgica 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 funo retorna,

    no cdigo ASCII, o valor da tecla pressionada. '\0': caso nenhuma tecla esteja pressionada, a funo retorna o caractere null. 'G': caso uma tecla tenha sido detectada como pressionada no ltimo rastreamento, a

    funo retorna o caractere 'G'.

  • Respostas dos Exerccios \ 21 \

    Captulo 14

    1. Display catodo comum e anodo comum. O nome catodo comum deriva do fato de que todos os catodos de todos os LEDs esto interligados. Da mesma forma, o display anodo comum deriva do fato de que todos os terminais anodo de todos os LEDs esto conectados.

    2. Segmentos A, B, C, D, F, G.

    3. A tcnica consiste em conectar os segmentos de um display aos segmentos de mesmo nome dos outros displays e, no caso do display catodo comum, aterrar apenas o catodo do display que estar emitindo. Apenas um dos displays pode emitir de cada vez pelo fato de as linhas de dados estarem multiplexadas. A soluo para o problema resume-se no fato de que um LED piscando em uma frequncia acima de 50Hz faz com que a retina no consiga acompanhar a piscagem, dando a impresso de que o LED esteja emitindo continuamente. Os displays emitiro, um de cada vez, em uma frequncia acima de 50Hz para termos a impresso de que todos os displays emitem simultaneamente.

    4. Nesse caso, cada display se mantm emitindo durante 4ms e apagado durante 12ms. Isso significa que o ciclo completo de atualizao do display de 16ms. Como o perodo de cada ciclo de 16ms, a frequncia de piscagem ser de 1 / 16m = 62,5Hz, o suficiente para termos a impresso de que todos os displays emitiro simultaneamente. importante lembrar que em cada ciclo (16ms) cada display s se mantm emitindo durante 4ms.

    Captulo 15

    1. No incio da dcada de 1970, descobriu-se que as molculas do cristal lquido poderiam ser giradas pela aplicao de uma tenso eltrica, tornando-o, desta forma, transparente ou opaco. Essa descoberta deu origem ao display de cristal lquido.

    2. LCD caractere e LCD grfico.

    3. RS (dado/instruo), R/W (escrita/leitura) e E (pulso de clock).

    4. Pino E.

    5. Instruo 38h.

    6. Oito bits de dados Uma linha de caracteres Formato 5 x 7 mais cursor Display e cursor desativados Move cursor para a direita com entrada de um novo caractere Mensagem no ser deslocada com a entrada de um novo caractere

  • \ 22 \ Microcontroladores PIC18 com Linguagem C

    7. Detectar se o LCD terminou de executar a ltima instruo que lhe foi enviada. Se, ao ser lida, a linha busy flag fornecer nvel lgico '1', significa que o LCD est ocupado executando uma instruo.

    8. 80h e C0h.

    Captulo 16 1. Podemos definir interrupo como um evento de hardware que provoca uma interrupo na

    execuo do programa principal e um desvio incondicional para que o evento seja tratado. Uma vez que o evento foi tratado, o programa retorna ao ponto em que foi interrompido e a sua execuo continua. Podemos dizer que a interrupo um desvio no programa provocado pelo hardware. Em aplicaes em que se deve tratar um determinado evento de hardware no momento da sua ocorrncia, a interrupo pode ser uma excelente sada.

    2. uma regio de memria reservada para armazenar dados ou instrues do programa. Uma seo pode ser criada na memria de dados ou na memria de programa. Alm disso, possvel atribuir um endereo esttico para a seo de dados criada.

    3. Cria uma seo de dados no inicializada na memria RAM.

    4. O MPLAB C18, por default, cria as variveis temporrias utilizadas no programa principal na seo de dados .tmpdata. Para alterar a seo de dados utilizada para as variveis temporrias, deve-se utilizar a sintaxe mostrada a seguir: #pragma tmpdata nome_da_seo

    nome_da_seo: o nome da seo de dados que substitui a seo .tmpdata no arma-zenamento de dados temporrios.

    5. A diretiva #pragma varlocate permite ao compilador otimizar cdigo medida que ela possibilita a remoo de instrues de chaveamento de banco no acesso a dados armazenados na memria RAM. A diretiva #pragma varlocate ajuda o MPLAB C18 a remover instrues de chaveamento de banco de memria informando a ele a eventual localizao de variveis. Lembre-se, no entanto, de que a diretiva #pragma varlocate somente deve ser utilizada com variveis cujos endereos j foram explicitamente especificados no cdigo.

    6. Podem ser definidos dois nveis de prioridade no tratamento de uma interrupo. Uma interrupo pode ser definida como de alta ou de baixa prioridade.

    7. Os nveis de prioridade no tratamento da interrupo so definidos pelo bit IPEN (RCON). Quando esse bit setado, o PIC18F4520 utiliza os nveis de prioridade no tratamento da interrupo, podendo cada interrupo ser configurada como de alta prioridade ou de baixa prioridade. Quando o bit IPEN apagado, o PIC18F4520 no utiliza as prioridades, desviando o programa para o endereo 0008h da memria de programa quando ocorrer o evento que pode dar origem a uma interrupo. No POR o bit IPEN apagado, devendo ser setado por software caso o programador queira utilizar os dois nveis de tratamento de interrupo.

  • Respostas dos Exerccios \ 23 \

    8. 18 fontes de interrupo. Como exemplo podemos citar a interrupo externa, interrupo de estouro do TMR0 e interrupo de recepo de dados pela EUSART.

    9. A interrupo provoca um desvio ocasionado por um evento de hardware. Uma chamada funo provoca um desvio provocado pelo software.

    Captulo 17 1. Uma delas a utilizao de funes desenvolvidas para esta finalidade, as funes de delay. A

    outra forma de medio de tempo por meio dos mdulos temporizadores.

    2. TCI = 1/(Fosc/4) = 1/(8M/4)=500ns

    3. A funo Delay10TCYx() gera um delay, em segundos, de dez vezes o valor que lhe passado como parmetro multiplicado pelo tempo correspondente ao ciclo de instruo. A forma geral de declarao da funo Delay10TCYx() :

    Delay10TCYx (valor)

    valor: valor multiplicado por dez vezes o ciclo de instruo.

    4. No modo temporizador o timer conta ciclos de instruo, enquanto no modo contador o timer conta a quantidade de pulsos aplicados no pino correspondente, que varia de um timer para outro.

    5. O prescaler retarda o incremento do registrador associado ao timer. O retardo depende do fator de prescaler aplicado.

    6. Registrador T0CON.

    7. Operando em 8 bits, o incremento ser no mximo at o valor 255. Operando em 16 bits, o incremento ser no mximo at o valor 65.535.

    8. Mdulo Timer2.

    9. Mdulo Timer2. O bit de sinalizao de estouro do TMR2 setado e uma interrupo gerada se ela estiver habilitada quando o TMR2 estoura o nmero de vezes configurado no postscaler. Se, por exemplo, o postscaler do TMR2 for configurado para 1:16, fazendo os bits TOUTPS3:TOUTPS0 (T2CON) = 1111, o TMR2 deve estourar dezesseis vezes para que o flag de estouro de TMR2 seja setado e uma interrupo seja gerada, caso ela esteja habilitada.

    10. Se aps a configurao do Timer0 o par de registradores TMR0H:TMR0L for inicializado com o valor F82Fh, com um prescaler de 1:4 e uma frequncia de clock de 8MHz, o TMR0 ser incrementado a cada 4x500n = 2s. O nmero de incrementos at que o TMR0 estoure ser dado pela frmula 65.535(FFFFh) F82Fh = 2.000. Ele ser incrementado 2.000 vezes at o estouro. Como ele est operando com 16 bits, o tempo decorrido at o estouro ser de:

    Tempo_estouro = 2.000 x 2 = 4ms

  • \ 24 \ Microcontroladores PIC18 com Linguagem C

    A diferena 65.535 2.000 = 63.535 (F82Fh) o valor com o qual deve ser inicializado o TMR0 para que o nmero de incrementos necessrios at o estouro seja 2.000.

    Captulo 18

    1. Uma tenso analgica quando para ir de um valor a outro de intensidade, a tenso eltrica precisa passar por todos os pontos intermedirios de intensidade entre os valores inicial e final. Por outro lado, a tenso digital quando normalmente composta por apenas dois nveis, representados pelos nveis lgicos '0' e '1'.

    2. Transdutor.

    3. PCM (Pulse Code Modulation).

    4. a quantidade de partes em que a tenso ser dividida.

    5. NB = Log101024/Log102 = 10 bits

    6. A converso de um sinal analgico em digital consiste em amostrar o sinal um nmero de vezes em cada segundo e associar cada amostra ao valor correspondente amplitude do sinal naquele ponto. A amostragem uma leitura no valor instantneo da tenso de tempos em tempos. Associar um valor proporcional amplitude do sinal de tempos em tempos um processo conhecido como PAM (Pulse Amplitude Modulation).

    7. A partir dos pulsos PAM possvel produzir pulsos PCM por meio de um processo conhecido como quantizao, que substitui cada pulso PAM por um conjunto de bits que represente aquele valor.

    8. Em 1928, H. Nyquist provou que um sinal analgico que tenha passado por um filtro passa- -baixas (FPB) com frequncia de corte Fc pode ser completamente reconstitudo a partir de um nmero de amostras 2 x Fc. Segundo Nyquist, um nmero maior de amostras seria intil porque as frequncias acima que 2 x Fc j foram eliminadas pelo filtro.

    9. Para garantir que a tenso de sada do filtro no sofra nenhuma queda significativa em relao tenso de entrada para qualquer frequncia do sinal de entrada, o projetista deve obedecer frmula a seguir, na qual a frequncia mxima do sinal de entrada deve ser pelo menos dez vezes menor que a frequncia do filtro passa-baixas.

    10FcFmx

    10. Como o conversor A/D ser de 10 bits, preciso dividir a faixa de tenso em 1024 partes iguais de tenso. Sendo assim, cada parte ter um valor de 2,048 / 1024 = 2mV.

    A frequncia de corte ser de:

    Fc = 10 x Fmx Fc = 10 x 25 = 250Hz

  • Respostas dos Exerccios \ 25 \

    Para dimensionar o FPB de primeira ordem, podemos escolher um valor para o resistor R, por exemplo, de 4,7K, e calcular o valor do capacitor C, visto que j foi calculada Fc. Nesse caso, deduzindo C na frmula, teremos:

    C = 1 / 2. .4k7.250 C = 135,45nF

    O valor comercial inferior mais prximo 120nF. Com esse valor de C, Fc passa a ser 282,18Hz, bem prximo dos 250Hz calculados a partir de Fmx.

    11. S = 1,5 / 2m = 750

    12. Definir os nveis mximo e mnimo de tenso a serem aplicados no conversor A/D. A tenso de referncia tambm define a faixa de tenso analgica que ser convertida em tenso digital.

    13. O conversor A/D interno do PIC18F4520 possui uma resoluo de 10 bits. O resultado da converso estar disponvel em dois registradores de 8 bits, dando um total de 16 bits. A sobra de bits nos registradores em que o resultado da converso ser armazenado permitiu aos projetistas deslocar o resultado para a esquerda ou para a direita, procedimento denominado justificao do resultado.

    14. o tempo necessrio para que o capacitor existente na entrada do conversor A/D (CHOLD) possa se carregar para ento ser dado incio converso.

    15. Gerar a base de tempo utilizada na converso A/D. O perodo do sinal de clock do conversor, chamado de TAD, o tempo necessrio para a converso de cada bit.

    16. Na forma manual, o conversor A/D no aguarda o tempo de aquisio para comear a converso aps o bit que d incio converso ter sido setado, o bit GO/DONE. Na converso automtica, o tempo de aquisio pode ser configurado de 2TAD at 20TAD pelos bits ACQT2:ACQT0 para qualquer valor diferente de 0002. Nesse caso, quando a converso iniciada, o capacitor CHOLD continua conectado ao canal at o tempo de aquisio configurado. Logo aps, CHOLD desco-nectado e a converso tem incio.

    17.

    18. Treze canais de converso, e apenas um deles pode ser ativado de cada vez.

    19. O bit ADIE(PIE1).

    20. O mdulo conversor A/D do PIC18F4520 pode funcionar no modo sleep desde que o clock utilizado na converso A/D seja gerado pelo circuito RC interno ao mdulo conversor. Para selecionar o clock gerado pelo circuito RC, necessrio fazer os bits ADCS2:ADCS0 = x11.

  • \ 26 \ Microcontroladores PIC18 com Linguagem C

    Quando o clock gerado pelo circuito RC selecionado, o mdulo conversor A/D aguarda um ciclo de instruo para comear a converso aps o bit DONEGO/ ter sido setado. Isso permite que a instruo SLEEP seja executada, fazendo com que o microcontrolador entre no modo Sleep sem interromper a converso A/D. Quando a converso terminar, o bit DONEGO/ ser apagado, o flag de sinalizao de fim de converso ser setado e o resultado da converso armazenado nos registradores ADRESH:ADRESL. Se a interrupo do mdulo conversor A/D estiver habilitada, o microcontrolador acorda; caso contrrio, o mdulo conversor A/D ser desligado, embora o bit ADON se mantenha setado.

    Captulo 19 1. O PWM um sinal digital com frequncia fixa e com ciclo ativo varivel.

    2. a parte do ciclo em que o sinal se mantm em nvel lgico '1'.

    3. Duty cycle a relao entre o ciclo ativo e o perodo do sinal PWM e diretamente proporcional ao nvel DC do sinal. O duty cycle tambm adimensional e seu valor pode variar entre 0 e 1.

    4. Faz-lo passar por um filtro passa-baixas com frequncia de corte pelo menos dez vezes menor que a frequncia do sinal PWM.

    5. PR2 = [F(osc) / (F(PWM) 4 Prescaler do TMR2)] 1 PR2 = [8x106 / (31.250 x 4 x 1)] 1

    PR2 = 63

    6. O controle do ciclo ativo do sinal PWM feito a partir de uma diviso do perodo do sinal PWM em partes iguais de tempo que recebem o nome de passos. O nmero de passos em que o perodo do sinal ser dividido depende do nmero de bits de controle utilizado.

    Dividindo o perodo do sinal PWM pelo nmero de passos, calcula-se o tempo correspondente a cada passo (Tp). O Tp o tempo mnimo no qual o ciclo ativo do sinal PWM pode variar.

    7.

    a) 1)2TMRdoescaler(Pr4F

    F2PR

    PWM

    OSC =

    114250.31

    M82PR =

    PR2 = 63

    b) 4)12PR(Np += 4)163(Np += Np = 256 passos

  • Respostas dos Exerccios \ 27 \

    c) 250.311

    F1T

    PWMPWM ==

    S32TPWM =

    512

    S32Np

    TTp PWM == ns125Tp =

    d) 50TpPWM )ativociclo( = 50n125PWM )ativociclo( = S25,6PWM )ativociclo( =

    e) )alto(PWM

    )ativociclo( VT

    PWMVdc =

    53225,6Vdc

    =

    Vdc = 0,97V

    f) Diagrama de tempo

    Captulo 20 1. Permitir a comunicao entre dispositivos onboard, ou seja, dispositivos que esto instalados na

    mesma placa de circuito impresso.

    2. Mestre e escravo. O mestre o responsvel pela gerao do sinal do clock.

    3. Condio START e condio STOP.

    4. O barramento I2C permite que seja alterada a direo do fluxo dos dados durante uma trans-misso em andamento sem que o dispositivo mestre precise antes finalizar a transmisso corrente com uma condio STOP. Isso permitido impondo uma condio Re-START no barramento aps o ltimo byte transmitido. Alterar a direo do fluxo dos dados significa alterar de um ciclo de leitura para um ciclo de escrita ou vice-versa.

    5. O endereamento pode ser efetuado com 7 bits ou com 10 bits de endereos.

    6. O barramento I2C possui um recurso que permite ao dispositivo mestre enderear todos os dis-positivos escravos simultaneamente. Isso feito por meio do endereamento de chamada geral, cujo uso pode ser interessante quando o dispositivo mestre desejar enviar dados para todos os dispositivos escravos simultaneamente, um tipo de comunicao conhecido como broadcast.

    7. O barramento I2C permite a conexo de vrios dispositivos mestres no mesmo barramento de forma que todos possam transmitir e receber informaes, porm no simultaneamente. Isso significa que apenas um dos dispositivos mestres pode assumir o controle do barramento de cada vez. importante observar tambm que cada dispositivo mestre gera o seu prprio sinal de clock.

  • \ 28 \ Microcontroladores PIC18 com Linguagem C

    8. Quando mais de um dispositivo mestre tenta assumir o controle do barramento no mesmo instante para efetuar uma transmisso, ocorre uma coliso. Um procedimento denominado arbitration assegura que apenas um dos mestres vai concluir a transmisso. Os demais vo abortar a transmisso medida que vo perdendo a arbitration. O dispositivo mestre que dar continuidade transmisso ser o ganhador da arbitration.

    O procedimento de arbitration ocorre na linha SDA enquanto a linha SCL estiver em nvel lgico alto. A figura a seguir mostra como feita uma arbitration. O grfico DADO 1 mostra o sinal que o dispositivo mestre 1 est tentando aplicar na linha SDA, enquanto o grfico DADO 2 apresenta o sinal que o dispositivo mestre 2 est tentando aplicar na linha SDA. O terceiro grfico, o SDA, exibe o sinal que ir realmente aparecer na linha SDA. Observe que o dispositivo mestre 1 perdeu a arbitration no terceiro pulso de clock, uma vez que ele aplicou nvel lgico 1 na linha SDA, tendo prevalecido o nvel lgico '0' aplicado na linha SDA pelo dispositivo mestre 2. Como o dispositivo mestre 1 perdeu a arbitration, ele aborta a transmisso. O dispositivo mestre 2 prossegue a transmisso, tendo em vista que ele foi o ganhador da arbitration. O dispositivo mestre que perdeu a arbitration deve tentar uma nova transmisso quando o barramento estiver novamente ocioso. A arbitration garante que dados no sejam perdidos quando dois ou mais mestres tentam assumir o controle do barramento no mesmo instante. O procedimento de arbitration no permitido durante as condies START, STOP e Re-START.

    9. O mdulo MSSP possui seis registradores utilizados na configurao e no controle do barramento I2C. So eles SSPSTAT, SSPCON, SSPCON2, SSPBUF, SSPSR e SSPADD.

    10. Um microcontrolador configurado como dispositivo mestre pode dar incio a um dos eventos descritos a seguir:

    Gerar a condio START Gerar a condio Re-START Iniciar a transmisso de um byte escrevendo no registrador SSPBUF (mestre-transmissor) Configurar a interface I2C para receber dados (mestre-receptor) Gerar um pulso ACK (ou um NACK) no final de um byte recebido (mestre-receptor) Gerar a condio STOP e finalizar a transmisso

  • Respostas dos Exerccios \ 29 \

    11. Gerar a condio START, enviar o byte de endereos junto com a direo do fluxo dos dados como escrita, enviar o byte de dados e gerar uma condio STOP no barramento.

    12. Em um barramento I2C as linhas SDA e SCL precisam estar conectadas linha de alimentao VDD por meio de resistores de pull-up. A funo desses resistores, entre outras coisas, impor nvel alto linha.

    13. O 24C08 tem uma capacidade de armazenamento de 8kbits (1k 8). Em outras palavras, ele possui 1k (1024) de localidades de memria EEPROM com capacidade de armazenamento de 8 bits em cada localidade.

    Captulo 21 1. O barramento SPI composto por trs linhas: serial data out (SDO), serial data in (SDI) e serial

    clock (SCK). Adicionalmente, um quarto sinal pode ser utilizado como chip select e pode selecionar o dispositivo com o qual o mestre vai se comunicar caso existam vrios escravos conectados no barramento. Esse quarto sinal o SS .

    2. Sim. Um barramento SPI pode ter um mestre e vrios escravos. Cada escravo ser ativo por uma linha de controle adicional chamada chip select. Apenas um dispositivo escravo pode estar ativo de cada vez.

    3. Os bits SSPM3:SSPM0(SSPCON1) so os responsveis pela configurao do dispositivo operar como mestre ou como escravo, como mostrado a seguir. 0011 = SPI modo mestre, clock = sada do TMR2 / 2 1000 = SPI modo mestre, clock = Fosc / 64 0111 = SPI modo mestre, clock = Fosc / 16 0110 = SPI modo mestre, clock = Fosc / 4

    Alm disso, para ativar a interface SPI necessrio setar o bit SSPEN (SSPCON1). A polaridade do clock configurada pelo bit CKP (SSPCON1), ou seja, o bit CKP define se o estado ocioso do clock ser o nvel alto ou o nvel baixo. O estado ocioso o nvel lgico no qual a linha de clock deve se manter quando nenhuma transmisso estiver em andamento. O bit CKE (SSPSTAT) define se a transmisso de cada bit ocorre na transio de ativo para ocioso ou na transio de ocioso para ativo do sinal de clock. O bit CKE determina o momento em que o bit deve ser amostrado no dispositivo escravo. O bit SMP (SSPSTAT) define o momento em que cada bit recebido ser amostrado, se na metade ou se no final do time bit. Alm disso, necessrio configurar como entrada a linha SDI e como sada as linhas SDO, SS e SCK. A frao de cdigo a seguir mostra como configurar a interface SPI para operar como mestre, com uma taxa de transferncia de 125kbps, com o sinal de clock ocioso em nvel alto, com a transmisso do dado ocorrendo na transio de estado ocioso para ativo do sinal de clock e com o bit de entrada sendo amostrado no fim do time bit.

  • \ 30 \ Microcontroladores PIC18 com Linguagem C

    #define _SS PORTCbits.RC1 //define linha chip select //**************************************************************************** //Configurao do modulo SPI como mestre com taxa de 125kbps void Configura_SPI (void) TRISCbits. TRISC5 = 0; //configura SDO como sada TRISCbits. TRISC4 = 1; //configura SDI como entrada TRISCbits. TRISC3 = 0; //configura SCK como sada TRISCbits. TRISC1 = 0; //configura linha _SS como sada _SS = 1; //desabilita chip select SSPCON1 = 0b00110000; /*habilita mdulo SPI bit rate 125kbps (Fosc/64) clock ocioso em nvel alto*/ SSPSTAT = 0b00000000; /*dado de entrada amostrado no fim do time bit do dado de sada transmisso ocorre do estado ocioso para o estado ativo do clock */ //****************************************************************************

    4. 10Mbps.

    5. Independente de o dispositivo mestre precisar enviar e/ou receber dados, necessrio escrever no registrador SSPBUF para dar incio a uma transmisso, aguardar a recepo ser finalizada e, em seguida, efetuar a leitura do registrador SSPBUF, onde estar armazenado o byte recebido na transmisso corrente.

    6. setado o bit de sinalizao de final de transmisso, o bit SSPIF.

    7. O MCP41010 um potencimetro digital implementado em circuito integrado com um valor nominal de 10k, fabricado pela Microchip Technology. O protocolo de comunicao utilizado na comunicao com o MCP41010 o SPI.

    8. possvel, por meio de software, colocar o potencimetro em um modo chamado shutdown, no qual o terminal A do potencimetro desconectado do meio exterior, enquanto o cursor unido ao terminal B. O modo shutdown conveniente quando o usurio deseja colocar o circuito em modo de economia de energia.

    Captulo 22

    1. UART (Universal Asynchronous Receiver Transmiter) um protocolo de comunicao serial assncrono desenvolvido na dcada de 1960 para permitir a comunicao ponto a ponto entre computadores mainframes e computadores terminais remotos.

    2. Meio ocioso.

    3. Taxa de transferncia, quantidade de bits de dados, incluso ou no do bit de paridade, tamanho do stop bit e controle de fluxo.

    4. o tempo no qual cada bit se mantm na linha de transmisso. O perodo do bit define a taxa de transferncia da transmisso.

  • Respostas dos Exerccios \ 31 \

    5. Par, mpar, marca ou espao.

    Paridade par: a soma dos bits de dados iguais a 1 mais o bit de paridade tem de ser par. Paridade mpar: a soma dos bits de dados iguais a 1 mais o bit de paridade tem de ser mpar. Marca: o bit de paridade sempre 1. Espao: o bit de paridade sempre 0.

    6. A principal evoluo da EUSART a capacidade de detectar automaticamente a taxa de transferncia, um recurso chamado de auto-baud rate detect. Essa caracterstica est disponvel somente no modo de transmisso assncrono.

    7. TXSTA, RCSTA e BAUDCON.

    8. Para transmisso em alta velocidade e com gerador de baud rate de 16 bits, o valor a ser escrito no par de registradores SPBRGH:SPBRG 207.

    9. Bit SYNC(TXSTA)

    10. Inicializar o registrador SPBRGH:SPBRG para o baud rate desejado. Configurar os pinos RC7:RC6 como entrada. Habilitar a porta de comunicao serial apagando o bit SYNC e setando o bit SPEN. Habilitar a interrupo se for desejado. Setar o bit RX9 se a recepo for de 9 bits. Habilitar o transmissor setando o bit TXEN, o qual setar tambm o bit TXIF. Se a transmisso for de 9 bits, escrever o nono bit no bit TXD9. Carregar o dado a ser transmitido no registrador TXREG (a transmisso ter incio). A transmisso estar finalizada quando o bit TRMT for setado pelo hardware.

    11. O padro RS-232 define uma faixa de tenso que deve ser identificada pelos terminais como nveis lgicos '0' e '1'. O nvel lgico '1' representado pela faixa de tenso de 3V a 15V. Da mesma forma, o nvel lgico '0' identificado pela faixa de tenso de 3V a 15V. A faixa de tenso de 3V a +3V uma regio de transio, sendo, portanto, de nvel lgico indefinido.

    12. O padro RS-232 foi inicialmente desenvolvido para permitir a comunicao entre computadores conectados a um modem. muito comum, no entanto, a necessidade de comunicao entre computadores que estejam fisicamente prximos. Nesse caso, no ser necessria a utilizao de um modem, mas isso no impede a conexo dos computadores via RS-232. O problema que esta uma comunicao direta entre dois DTEs e fere a norma de utilizao do padro RS-232, desenvolvida para a comunicao entre um DTE e um DCE. Para resolver o problema foi criado um tipo de conexo chamado Null modem (sem modem).

  • \ 32 \ Microcontroladores PIC18 com Linguagem C

    13. Nmero do pino Direo

    Nome do sinal

    Descrio do sinal

    1 Entrada DCD Data Carrier Detect 2 Entrada RD Receiver Data 3 Sada TD Transmiter Data 4 Sada DTR Data Terminal Ready 5 - Gnd Common 6 Entrada DSR Data Set Ready 7 Sada RTS Request To Send 8 Entrada CTS Clear To Send 9 Entrada RI Ring Indicator

    14. Vrias empresas fabricam um circuito integrado que permite ao microcontrolador interfacear com o padro RS-232. O que esse CI faz converter os nveis de tenso correspondentes lgica TTL no padro RS-232 e vice-versa.

    15. PIC18F4520

    Taxa de transferncia 110 a 1.250.000bps Nmero de bits 8 ou 9 Bit de paridade No suporta Stop bit 1 Controle de fluxo No suporta

    16. //inicializa USART void Configura_UART (void) { TRISCbits.TRISC7 = 1; //configura pino RX como entrada TRISCbits.TRISC6 = 1; //configura pino TX como entrada TXSTA = 0b00100100; //transmisso habilitada //transmisso assncrona //transmisso em alta velocidade RCSTA = 0b10010000; //porta serial habilitada //recepo contnua habilitada BAUDCON = 0b00000000; //TX ocioso em nvel alto //gerador de baud rate de 8 bits SPBRG = 12; //9600bps

  • Respostas dos Exerccios \ 33 \

    Captulo 23

    1. Podemos dividir o trabalho de compilar uma aplicao em C em trs partes. So elas o pr-processamento, a compilao e a linkedio.

    O pr-processamento permite incluir no programa-fonte diversos comandos que no fazem parte da linguagem C, mas so reconhecidos pelo compilador. Esses comandos so chamados dire-tivas de compilao.

    A compilao (ou pr-compilao) tem o objetivo de interpretar os comandos pertencentes linguagem C existentes no programa-fonte e gerar um bloco de cdigo intermedirio chamado arquivo objeto.

    A ltima etapa, de linkedio, combina os diversos arquivos objeto e arquivos biblioteca com o link script para gerar o programa executvel. Este ltimo contm toda a aplicao representada em linguagem de mquina.

    2. O MPLAB C18 possui um mdulo chamado MPLIB librarian, responsvel pela criao de arquivos biblioteca. O MPLIB combina os arquivos objeto gerados pelo MPASM assembler e pelo MPLAB C18 em um nico arquivo biblioteca. O arquivo gerado pelo MPLIB, cuja extenso .lib, pode ser utilizado como entrada para o MPLNK gerar o arquivo executvel.

    3. #if e #endif

    4. A diretiva #error fora o compilador a parar a compilao caso o pr-processador encontre um erro na compilao, como, por exemplo, um smbolo que deveria ter sido definido, mas no foi. possvel, nesse caso, o compilador emitir uma mensagem de erro. Sua principal finalidade na depurao de uma aplicao, ou seja, um processo que consiste em encontrar e eliminar erros em uma aplicao.

    5. Macro pode ser definida, de uma forma geral, como um padro de entrada que deve ser substitudo por um padro de sada, de acordo com um conjunto de regras. Dependendo do contexto, o termo macro pode ter um significado um pouco diferente. Na linguagem C, pode-se definir macro como uma poro de cdigo que ser substituda por outro identificador na fase de pr-processamento.

    6. O padro C ANSI define um conjunto de macros que podem ser teis em determinadas situaes. So elas: __DATE__, __TIME__, __LINE__, __FILE__ e __STDC__ que iniciam com dois underlines e terminam com dois underlines.

    __DATE__: retorna um ponteiro para uma string armazenada na memria de programa com a data da ltima compilao.

    __TIME__: retorna um ponteiro para uma string armazenada na memria de programa com a hora da ltima compilao.

    __LINE__: retorna um inteiro com o nmero da linha do programa-fonte de onde ela foi chamada.

  • \ 34 \ Microcontroladores PIC18 com Linguagem C

    __FILE__: retorna um ponteiro para uma string armazenada na memria de programa com o nome do programa-fonte, incluindo o caminho para chegar ao arquivo.

    __STDC__: retorna um inteiro informando se o programa-fonte segue o padro C ANSI. Caso o programa siga o padro C ANSI, ela retorna o valor 1; caso contrrio, ela retorna outro valor.

    7. _asm e _endasm. A diretiva _asm inicializa o bloco e a _endasm finaliza o bloco.

    8. O MPLAB C18 pode ser configurado para funcionar com dois modelos de memria distintos. So eles o small memory model e o large memory model. A diferena entre os dois modelos basicamente o tamanho do ponteiro que indica a memria de programa. No small memory model o ponteiro utilizado para o acesso s memrias de dados e de programa de 16 bits. Sendo assim, o endereamento da memria est limitado a 64k. No large memory model so utilizados 24 bits no endereamento da memria. Microcontroladores que possuem mais de 64k de memria de programa precisam funcionar no large memory model.

    9. O MPLAB C18 possui uma pilha de estrutura de dados chamada stack software, na qual so armazenadas as variveis locais com classe de armazenamento auto. O tamanho da stack software pode ser configurado no linker script via diretiva STACK. A diretiva STACK possui dois argumentos, SIZE e RAM, utilizados para controlar, respectivamente, o tamanho e a localizao da pilha. Por exemplo, para alocar 128 bytes no banco 3 de memria RAM, necessrio atualizar o linker script com a linha:

    STACK SIZE=0x80 RAM=gpr3

    10. As instrues estendidas so ADDFSR, ADDULNK, CALLW, MOVSF, MOVSS, PUSHL, SUBFSR e SUBULNK.

    11. O processamento tem incio no vetor Reset, ou seja, no endereo 0000h da memria de programa. Antes da execuo da funo main() executado um cdigo de inicializao chamado start-up code que comea com a inicializao dos registradores FSR1 e FSR2 para referenciar a pilha stack software. Dependendo de como o start-up code executado, uma funo que inicializa a seo de dados idata na memria de programa chamada e, posteriormente, executado um loop infinito com chamadas funo main().

    12. possvel executar um cdigo especfico imediatamente aps o Reset, antes do start-up code. Para isso necessrio editar o mdulo de inicializao que ser linkado com a aplicao e adicionar o cdigo de inicializao funo _entry(). Seis mdulos de inicializao podem ser utilizados no start-up code. So eles os objetos c018i.o, c018i_e.o, c018.o, c018_e.o, c018iz.o e c018iz_e.o. Os mdulos c018i.o e c018i_e.o inicializam a seo de dados idata, enquanto os mdulos c018.o, c018_e.o no.

    13. A otimizao tem o objetivo de reduzir o cdigo resultante em uma determinada aplicao. Podemos citar como exemplo de otimizao as opes Duplicate-string merging, Branch optimizations e Banking optimizer.