Respostas Dos Exercicios

57
Respostas dos exercícios Capítulo 1: Arquitetura Básica de um Microcomputador 1. Processar informações. O computador recebe as informações do usuário, processa e retorna ao usuário o resultado do processamento. 2. Na arquitetura Von-Neumann, as memórias de programa e de dados compartilham os barramentos de endereços e de dados. Na arquitetura Harvard, as memórias de programa e de dados possuem barramentos de endereços e de dados separados. Isto permite que enquanto uma instrução esteja sendo processada, uma outra instrução possa estar sendo buscada na memória de programa. 3. Genrenciar todo o sistema e executar os programas. 4. Como um conjunto de localidades, cada uma com o seu respectivo endereço. 5. É um dispositivo responsável pela entrada e saída de informações do sistema. 6. Converter informações codificadas em um sistema qualquer para o sistema binário e vice-versa. 7. Uma CPU tipo RISC possui um set de instruções reduzido, ou seja, com poucas instruções. Uma CPU tipo CISC possui um set de instruções ampliado, normalmente com mais de cem instruções. 8. Um Microcontrolador possui CPU, memórias e dispositivos de I/O. Um microprocessador normalmente só possui CPU. Capítulo 2: Microcontroladores 1. ROM, OTP (PROM), EEPROM ou Flash ROM Respostas dos execícios 1

Transcript of Respostas Dos Exercicios

Page 1: Respostas Dos Exercicios

Respostas dos exercícios

Capítulo 1: Arquitetura Básica de um Microcomputador1. Processar informações. O computador recebe as informações do usuário, processa e retorna ao

usuário o resultado do processamento.

2. Na arquitetura Von-Neumann, as memórias de programa e de dados compartilham os barramentos de endereços e de dados. Na arquitetura Harvard, as memórias de programa e de dados possuem barramentos de endereços e de dados separados. Isto permite que enquanto uma instrução esteja sendo processada, uma outra instrução possa estar sendo buscada na memória de programa.

3. Genrenciar todo o sistema e executar os programas.

4. Como um conjunto de localidades, cada uma com o seu respectivo endereço.

5. É um dispositivo responsável pela entrada e saída de informações do sistema.

6. Converter informações codificadas em um sistema qualquer para o sistema binário e vice-versa.

7. Uma CPU tipo RISC possui um set de instruções reduzido, ou seja, com poucas instruções. Uma CPU tipo CISC possui um set de instruções ampliado, normalmente com mais de cem instruções.

8. Um Microcontrolador possui CPU, memórias e dispositivos de I/O. Um microprocessador normalmente só possui CPU.

Capítulo 2: Microcontroladores1. ROM, OTP (PROM), EEPROM ou Flash ROM

2. Os registradores de uso geral armazenam dados temporários, enquanto que os registradores com finalidade específicas são utilizados em tarefas específicas.

3. E

4. Gerar a base de tempo para que a CPU possa executar as instruções do programa. Uma instrução será executada em um ou mais ciclos de clock.

5. Os microcontroladores da família PIC dividem a freqüência do oscilador principal por quatro para dar origem a um sinal com freqüência quatro vezes menor. Este novo sinal é chamado de ciclo de instrução. Cada instrução é executada em um ciclo de instrução, com exceção das instruções que provocam desvio, como CALL e GOTO, que são executadas em dois ciclos de instrução.

6. Oito maneiras diferentes. Esta é feita por meio dos bits de configuração.

7. Primeiro a eficácia, depois o custo financeiro do projeto.

8. 15pF a 30pF.

Capítulo 3: Mapeamento de memória

Respostas dos execícios 1

Page 2: Respostas Dos Exercicios

1. Flash ROM, uasada para armazenar o programa. RAM (SRAM), Usada pelos registradores de uso geral e pelos registradores com finalidades específicas. EEPROM, Usada para armazenar dados que não podem ser perdidos memso com a alimentação desligada.

2. 2048, estando 2045 disponíveis para o armazenamento de instruções.

3. 224 posições. O banco 0 possui 96 posições (20h - 7Fh), o banco 1 possui 80 posições (A0h - EFh), o banco 2 possui 48 posições (120h - 14Fh). Observe também que foi criado um espelho nos outros bancos das últimas dezesseis posições de memória do banco 0 (70h - 7F0).

4. Endereçamento direto e endereçamento indireto.

5. 128 posições. A faixa de endereços vai de 00h até 7Fh.

6. O bit Z informa que o resultado da última operação mamtemática foi 0. O bit C é utilizado nas instruções de soma para informar que houve um estouro do oitavo para o nono bit.

7. 0Bh, 8Bh, 10Bh e 18Bh.

8. Chave individual de habilitação da interrupção de estouro do TMR1

Capítulo 4: Set de instruções1. Programação.

2. OP. Code ou código de operação. Este campo define a tarefa que será executada pela CPU. O outro campo é o operando. O operando é o complemento da instrução. Este pode ser um dado, um registrador ou um um bit de um registrador. Uma instrução pode também não ter operando, como é o caso da instrução RETFIE.

3. 35 instruções. Elas estão divididas em quatro grupos: operações com registradores, operações com bits, operações com literais e operações de controle.

4. C

5. BSF f,b

6. ADDLW k

7. Complementa todos os bits do registrador especificado no operando da instrução, ou seja, o bit que está em nível um passa para o nível zero e vice-versa..

8. O conteúdo do reigstrador W é copiado para o registrador especificado no operando da instrução.

Capítulo 5: Portas de I/O1. Em dois grupos: PORTA e PORTB. Cada PORT possui 8 bits, com cada bit associado a um pino

do MCU.

2 Microcontroladores PIC16F628A/648A - Uma Abordagem prática e Objetiva

Page 3: Respostas Dos Exercicios

2. TRISA e TRISB. Quando é setado um determinado bit do registrador TRISx, o respectivo pino daquele PORTx será configurado como entrada. Da mesma forma, quando um determinado bit do registrador TRISx é apagado, o respectivo pino daquele PORTx é configurado como saída.

3. RA5.

4. RB5.

5. Um bit de cada vez ou todos os bits de uma só vez.

6. O TRISA se encontra no banco 1, ocupando o endereço 85h. O TRISB pode ser acessado nos bancos 1 e 3, ocupando respectivamente os endereços 86h e 186h.

Capítulo 6: MPLAB® IDE Desenvolvendo Aplicações1. A linguagem de máquina representa as instruções pelos seus respectivos códigos binários. A

linguagem assembly substitui o código binário de cada instrução por uma string, chamada de mnemônico. O mnemônico está relacionado com a tarefa executada pela instrução.

2. O programa-fonte é a forma como o programa é escrito em linguagem assembly, sendo apenas um arquivo de texto. No programa objeto, as instruções do programa são representadas em linguagem de máquina. O programa objeto é que é transferido para a memória de programa do MCU.

3. Label, mnemônico, operando, comentário e diretiva.

4. Criar programas em Assembly, efetuar a simulação e o debug de programas e gravar programas no chip.

5. Inicializar o MPLAB IDE, criar o programa-fonte, criar o projeto, montar o projeto, debugar o projeto e gravar o programa no chip.

6. Project Wizard

7. Gerar o programa objeto a partir do programa-fonte.

8. É possível criar várias versões de um mesmo programa-fonte e associar ao projeto a versão que for conveniente.

Capítulo 7: Criando Programa em Assembly1. O arquivo include é um arquivo de texto chamado arquivo de definições, no qual são definidos os

nomes e os endereços de todos os SFRs, além de uma série de outras definições necessárias para a sua utilização, facilitando, deste modo, a montagem do programa-fonte. Um programa-fonte pode ser editado sem o arquivo include, mas neste caso, o programador não poderá se referir no programa aos registradores pelos seus respectivos nomes, a não ser que eles sejam declarados no programa, por exemplo, por meio da diretiva EQU.

2. Decimal, binário, hexadecimal, octal e ASCII.

3. A variável representa uma localidade de memória válida, enquanto que uma constante é apenas um valor numérico.

4. RP1=0 e RP0=1.

5. É um conjunto de instruções que executam uma tarefa definida dentro do programa.

Respostas dos execícios 3

Page 4: Respostas Dos Exercicios

6. Representar graficamente o programa. Isto facilita o entendimento da tarefa que será realizada pelo programa.

Capítulo 8: Gravando o PIC®

1. Tipo de oscilador, Watchdog Timer (WDT), Power Up Timer, Brown Out Detect, Master Clear Enable, Low Voltage Program, Data EE read Protect e Code Protect. Os bits de configuração ficam armazenados no registrador CONFIG, que ocupa o endereço de memória 2007h. Este registrador só pode ser acessado na hora da gravação do programa no MCU.

2. __IDLOCS H'2536'

3. É uma técnica utilizada na verificação de erros, que consiste em somar todos os valores numéricos armazenados na memória de programa do chip com os bits de configuração mais o ID gravado no chip. O resultado da soma é o que nós chamamos de checksun.

4. PICSTART Plus

5. Esta opção controla a velocidade com que os dados são enviados para o programador. Alguns computadores não conseguem gravar o programa no MCU com sucesso quando a velocidade e alta. Neste caso é necessário diminuir a velocidade do Retardo de I/O.

6. Permitir que o IC-Prog funcione com o sistema operacional Windows NT, Windows 2000 ou Windows XP.

7. Abrir o arquivo .HEX e selecionar o componente para o qual o programa foi escrito. No caso do PIC16F628A, deve ser selecionado o PIC16F628. Verifique os bits de configuração e faça os ajustes necessários. Finalmente, clique no ícone indicado para dar início ao processo de gravação. Também pode ser dado início ao processo de gravação se for digitada a tecla F5 ou se for dado um clique no menu Comando/Programar Tudo.

8. Encaixá-lo de forma correta. Um erro comum é encaixar o MCU ao contrário. Coloque o MCU num soquete para proteger os seus pinos.

Capítulo 9: Características Especiais1. É um evento de hardware que quando ocorre provoca um desvio no programa para a localidade

0x04, na qual o evento será tratado. O desvio só ocorre se a interrupção estiver habilitada.

2. 10.

3. Ligar a chave individual de interrupção (INTCON ou PIE1), ligar a chave de habilitação de interrupção de periféricos, se fonte for um periférico, o bit PEIE (INTCON<6>) e ligar a chave geral de tratamento de interrupção, o bit GIE(INTCON<7>).

4. 0x004.

5. Detectar que o evento originou a interrupção efetuando testes nos bits de sinalização de interrupção, e salvar os conteúdos dos registradores W e STATUS.

6. Reset por meio do pino /MCLR, Timeout gerado pelo WDT e por uma interrupção.

7. Proteger o sistema contra possíveis travamentos que possam ocorrer devido a paralização do

4 Microcontroladores PIC16F628A/648A - Uma Abordagem prática e Objetiva

Page 5: Respostas Dos Exercicios

oscilador principal. O WDT é um circuito temporiador que continua em funcionamento mesmo com o oscilador principal parado, pois ele possui um oscilador próprio. Se após um determinado tempo, definido por programação, o WDT não for zerado, será gerado um Timeout que provocará um reset no sistema, fazendo com que ele volte a funcionar.

8. Pela instrução SLEEP ou pela instrução CLRWDT.

9. D.

10. Mantér a CPU em reset até que VDD alcance tensão suficiente quando a tensão de alimentação é ligada, para que o MCU possa funcionar corretamente.

Capítulo 10: Técnicas de Programação1. Contador de Programa (PC).

2. Desvio incondilcional, desvio condicional, reset e interrupção.

3. Armazenar o endereço de retorno de uma sub-rotina. O stack possui 8 níveis de pilha.

4. para localidade 0x00 da memória de programa.

5. ADDLW k, ADDWF f,d, INCF f,d e INCFSZ f,d.

6. SUBLW k, SUBWF f,d, DECF f,d e DECFSZ f,d.

7. Resultado positivo ou zero: C=1. Resultado negativo: C=0.

8. Inverter os níveis lógicos de todos os bits e depois somar uma unidade.

9. IORLW k, IORWF f,d, ANDLW k, ANDWF f,d, XORLW k, e XORWF f,d.

10. Consiste em adicionar um bit ao byte de forma que a soma de todos os bits do byte iguais a 0 ou iguais a 1, incluindo o bit de paridade, seja par ou ímpar. O programador vai optar pela utilização da paridade par ou ímpar.

11. a) 0101 10002, b) 0100 1000 01012 e c) 0001100002.

12. FSR e INDF. O FSR armazena o endereço da localidade de memória que será acessada, enquanto que o INDF armazena o conteúdo armazenado no endereço de memória apontado por FSR.

13. IRP.

14. Após a soma ele não pode estourar, sob o risco de ocorrer um desvio para uma localidade de memória não desejada.

15. Dois LEDs acionados por dois botões

Este programa faz com que o botão 1(BT1) acione o LED 1 e o botão 2 (BT2) acione o LED 2 de forma independente e com debounce. Assim como no programa 1, após o tratamento de cada botão ele tem que ser solto para que os botões voltem a ser rastreados.

Respostas dos execícios 5

Page 6: Respostas Dos Exercicios

;*********************************************************************************************************************************************; PROGRAMA - DOIS LEDS ACIONADOS POR DOIS BOTOES; DESENVOLVIDO POR WAGNER DA SILVA ZANCO ; VERSAO 1.0; 23/06/2003;**********************************************************************************************************************************************; ARQUIVOS DE DEFINICOES

6 Microcontroladores PIC16F628A/648A - Uma Abordagem prática e Objetiva

Page 7: Respostas Dos Exercicios

;*********************************************************************************************************************************************#INCLUDE <P16F628A.INC> ;ARQUIVO PADRAO MICROCHIP PARA O PIC16F628A;*********************************************************************************************************************************************; BITS DE CONFIGURACAO ;*********************************************************************************************************************************************__CONFIG _BOREN_ON&_CP_ON&_PWRTE_ON&_WDT_OFF&_LVP_OFF&_DATA_CP_OFF&_MCLRE_ON&_XT_OSC;*********************************************************************************************************************************************; PAGINACAO DA MEMORIA ;*********************************************************************************************************************************************;COMANDOS PARA ALTERACAO DE PAGINA DE MEMORIA

#DEFINE BANK0 BCF STATUS,RP0 ;SETA BANCO 0 DE MEMORIA#DEFINE BANK1 BSF STATUS,RP0 ;SETA BANCO 1 DE MEMORIA

;*********************************************************************************************************************************************; VARIAVEIS ;*********************************************************************************************************************************************;ENDEREÇOS DAS VARIAVEIS UTILIZADAS PELO SISTEMA

CBLOCK 0x20 ;ENDERECO INICIAL DA MEMORIA DO USUARIODEBOUNCE ;0x20, USADO NO DEBOUNCECOUNT ;0x21, USADO NO DEBOUNCE

ENDC ;FIM DO BLOCO DE MEMORIA

;*********************************************************************************************************************************************; CONSTANTES

;*********************************************************************************************************************************************;CONSTANTES UTILIZADAS PELO SISTEMA

DEB EQU .200 ;INICIALIZACAO DO REG DEBOUNCEDEB_CONT EQU .50 ;INICIALIZACAO DO REG COUNT

;*********************************************************************************************************************************************; ENTRADAS;*********************************************************************************************************************************************;PINOS QUE SERAO UTILIZADOS COMO ENTRADA

#DEFINE BOTAO1 PORTA,1 ;0 --> PRESSIONADO;1 --> LIBERADO

#DEFINE BOTAO2 PORTA,2 ;0 --> PRESSIONADO;1 --> LIBERADO

;*********************************************************************************************************************************************; SAIDAS ;*********************************************************************************************************************************************;PINOS QUE SERAO UTILIZADOS COMO SAIDA

#DEFINE LED1 PORTB,0 ;0 --> APAGADO;1 --> ACESO

#DEFINE LED2 PORTB,1 ;0 --> APAGADO;1 --> ACESO

;*********************************************************************************************************************************************; VETOR DE RESET ;*********************************************************************************************************************************************

ORG 0x00 ;ENDERECO INICIAL DE PROCESSAMENTOGOTO INICIO

;*********************************************************************************************************************************************; INTERRUPCAO ;*********************************************************************************************************************************************; AS INTERRUPCOES NAO SERAO UTILIZADAS

ORG 0x04 ;ENDERECO INICAL DA INTERRUPCAORETFIE ;RETORNA DA INTERRUPCAO

Respostas dos execícios 7

Page 8: Respostas Dos Exercicios

;*********************************************************************************************************************************************; INICIO ;*********************************************************************************************************************************************INICIO

BANK1 ;ALTERA PARA BANCO1MOVLW B'00000110'MOVWF TRISA ;DEFINE RA1 e RA2 COMO ENTRADA e DEMAIS

;COMO SAIDAMOVLW B'00000000'MOVWF TRISB ;DEFINE O PORTB COMO SAIDA

MOVLW B'10000001'MOVWF OPTION_REG ;PULL_UPS DESABILIADOS <7>

;DEMAIS BITS IRRELEVANTES

MOVLW B'00000000'MOVWF INTCON ;CHAVE GERAL DE INTERRUPCOES DESLIGADAS<7>

;DEMAIS BITS IRRELEVANTESBANK0MOVLW B'00000111' ;CONFIGURA RA3:RA0 COM I/O<2:0>MOVWF CMCON

;*********************************************************************************************************************************************; INICIALIZACAO DAS VARIAVEIS;*********************************************************************************************************************************************

CLRF PORTA ;LIMPA PORTA CLRF PORTB ;LIMPA PORTB

;*********************************************************************************************************************************************MAIN

MOVLW DEB ;INICIALIZA DEBOUNCE COM 200MOVWF DEBOUNCEMOVLW DEB_CONT ;INICIALIZA COUNT COM 50MOVWF COUNT

TESTA_BOTAO1

BTFSC BOTAO1 ;BOTAO1 ESTA PRESSIONADO?GOTO TESTA_BOTAO2 ;NAO, DESVIAGOTO FAZER_DEBOUNCE1 ;SIM, DESVIA

TESTA_BOTAO2

BTFSC BOTAO2 ;BOTAO2 ESTA PRESSIONADO?GOTO MAIN ;NAO, DESVIAGOTO FAZER_DEBOUNCE2 ;SIM, DESVIA

FAZER_DEBOUNCE1

DECFSZ DEBOUNCE,F ;DECREMENTA DEBOUNCE, DEBOUNCE=0?GOTO TESTA_BOTAO1 ;NAO, DESVIA

;SIM, CONTINUAMOVLW DEB ;INICIALIZA DEBOUNCE COM 200MOVWF DEBOUNCE

DECFSZ COUNT,F ;DECREMENTA COUNT, COUNT=0?GOTO TESTA_BOTAO1 ;NAO, DESVIAGOTO TRATA_BOTAO1 ;SIM, DESVIA

FAZER_DEBOUNCE2

DECFSZ DEBOUNCE,F ;DECREMENTA DEBOUNCE, DEBOUNCE=0?GOTO TESTA_BOTAO2 ;NAO, DESVIA

;SIM, CONTNUAMOVLW DEB ;INICIALIZA DEBOUNCE COM 200MOVWF DEBOUNCE

DECFSZ COUNT,F ;DECREMENTA COUNT, COUNT=0?GOTO TESTA_BOTAO2 ;NAO, DESVIAGOTO TRATA_BOTAO2 ;SIM, DESVIA

8 Microcontroladores PIC16F628A/648A - Uma Abordagem prática e Objetiva

Page 9: Respostas Dos Exercicios

TRATA_BOTAO1

BTFSS LED1 ;LED1 ACESO?GOTO ACENDE_LED1 ;NAO, DESVIA

;SIM, CONTINUAAPAGA_LED1

BCF LED1 ;APAGA LED1GOTO SOLTAR_BOTAO ; DESVIA

ACENDE_LED1

BSF LED1 ;ACENDE LED1GOTO SOLTAR_BOTAO ;DESVIA

TRATA_BOTAO2

BTFSS LED2 ;LED2 ACESO?GOTO ACENDE_LED2 ;NAO, DESVIA

;SIM, CONTINUAAPAGA_LED2

BCF LED2 ;APAGA LED2GOTO SOLTAR_BOTAO ; DESVIA

ACENDE_LED2

BSF LED2 ;ACENDE LED2

SOLTAR_BOTAO

BTFSS BOTAO1 ;BOTAO1 ESTA SOLTO?GOTO $-1 ;NAO, AGUARDA SOLTAR BOTAO

;SIM, CONTINUABTFSS BOTAO2 ;BOTAO2 ESTA SOLTO?GOTO $-1 ;NAO, AGUARDA SOLTAR BOTAOGOTO MAIN ;SIM, DESVIA

;*********************************************************************************************************************************************END ;FIM DO PROGRAMA;*********************************************************************************************************************************************

16. Dois botões acionam um LED

Neste programa nós usamos dois botões (BT1 e BT2) para acionar um LED (LED 1). Apertando qualquer um dos botões, o LED acende se estiver apagado e vice-versa.

Respostas dos execícios 9

Page 10: Respostas Dos Exercicios

;*********************************************************************************************************************************************; PROGRAMA - DOIS BOTOES ACIONAM UM LED; DESENVOLVIDO POR WAGNER DA SILVA ZANCO ; VERSAO 1.0; 23/06/2003;*********************************************************************************************************************************************; ARQUIVOS DE DEFINICOES

10 Microcontroladores PIC16F628A/648A - Uma Abordagem prática e Objetiva

Page 11: Respostas Dos Exercicios

;*********************************************************************************************************************************************#INCLUDE <P16F628A.INC> ; ARQUIVO PADRAO MICROCHIP PARA O PIC16F628A;*********************************************************************************************************************************************; BITS DE CONFIGURACAO ;*********************************************************************************************************************************************__CONFIG _BOREN_ON&_CP_ON&_PWRTE_ON&_WDT_OFF&_LVP_OFF&_DATA_CP_OFF&_MCLRE_ON&_XT_OSC;*********************************************************************************************************************************************; PAGINACAO DA MEMORIA

;*********************************************************************************************************************************************; COMANDOS PARA ALTERACAO DE PAGINA DE MEMORIA

#DEFINE BANK0 BCF STATUS,RP0 ;SETA BANCO 0 DE MEMORIA#DEFINE BANK1 BSF STATUS,RP0 ;SETA BANCO 1 DE MEMORIA

;*********************************************************************************************************************************************; VARIAVEIS ;*********************************************************************************************************************************************;ENDERECOS DAS VARIAVEIS UTILIZADAS PELO SISTEMA

CBLOCK 0x20 ;ENDERECO INICIAL DA MEMORIA DO USUARIODEBOUNCE ;0X20 USADO NO DEBOUNCECOUNT ;0X21 USADO NO DEBOUNCE

ENDC ;FIM DO BLOCO DE MEMÓRIA

;*********************************************************************************************************************************************; CONSTANTES ;*********************************************************************************************************************************************;CONSTANTES UTILIZADAS PELO SISTEMA

DEB EQU .200 ;INICIALIZACAO DO REG DEBOUNCEDEB_CONT EQU .50 ;INICIALIZACAO DO REG COUNT

;*********************************************************************************************************************************************; ENTRADAS ;*********************************************************************************************************************************************;PINOS QUE SERAO UTILIZADOS COMO ENTRADA

#DEFINE BOTAO1 PORTA,1 ;0 --> PRESSIONADO;1 --> LIBERADO

#DEFINE BOTAO2 PORTA,2 ;0 --> PRESSIONADO;1 --> LIBERADO

;*********************************************************************************************************************************************; SAIDAS ;*********************************************************************************************************************************************;PINOS QUE SERAO UTILIZADOS COMO SAIDA

#DEFINE LED1 PORTB,0 ;0 --> APAGADO;1 --> ACESO

;*********************************************************************************************************************************************; VETOR DE RESET

;*********************************************************************************************************************************************

ORG 0x00 ;ENDERECO INICIAL DE PROCESSAMENTOGOTO INICIO

;*********************************************************************************************************************************************; INTERRUPCAO ;*********************************************************************************************************************************************;AS INTERRUPCOES NAO SERAO UTILIZADAS

ORG 0x04 ;ENDERECO INICAL DA INTERRUPCAO

Respostas dos execícios 11

Page 12: Respostas Dos Exercicios

RETFIE ;RETORNA DA INTERRUPCAO

;*********************************************************************************************************************************************; INICIO ;*********************************************************************************************************************************************INICIO

BANK1 ;ALTERA PARA BANCO 1MOVLW B'00000110'MOVWF TRISA ;DEFINE RA1 e RA2 COMO ENTRADA e DEMAIS

;COMO SAIDAMOVLW B'00000000'MOVWF TRISB ;DEFINE O PORTB COMO SAIDA

MOVLW B'10000000'MOVWF OPTION_REG ;PULL_UPS DESABILIADOS <7>

;DEMAIS BITS IRRELEVANTESMOVLW B'00000000'MOVWF INTCON ;CHAVE GERAL DE INTERRUPCOES DESLIGADAS<7>

;DEMAIS BITS IRRELEVANTES

BANK0 ;ALTERA PARA BANCO 0MOVLW B'00000111' ;CONFIGURA RA3:RA0 COM I/O<2:0>MOVWF CMCON

;*********************************************************************************************************************************************; INICIALIZACAO DAS VARIAVEIS ;*********************************************************************************************************************************************

CLRF PORTA ;LIMPA PORTA CLRF PORTB ;LIMPA PORTB

;*********************************************************************************************************************************************MAIN

MOVLW DEB ;INICIALIZA DEBOUNCE COM 200MOVWF DEBOUNCEMOVLW DEB_CONT ;INICIALIZA COUNT COM 50MOVWF COUNT

TESTA_BOTAO1

BTFSC BOTAO1 ;BOTAO1 ESTA PRESSIONADO?GOTO TESTA_BOTAO2 ;NAO, DESVIAGOTO FAZER_DEBOUNCE1 ;SIM, DESVIA

TESTA_BOTAO2

BTFSC BOTAO2 ;BOTAO2 ESTA PRESSIONADO?GOTO MAIN ;NAO, DESVIAGOTO FAZER_DEBOUNCE2 ;SIM, DESVIA

FAZER_DEBOUNCE1

DECFSZ DEBOUNCE,F ;DECREMENTA DEBOUNCE, DEBOUNCE=0?GOTO TESTA_BOTAO1 ;NAO, DESVIA

;SIM, CONTINUAMOVLW DEB ;INICIALIZA DEBOUNCE COM 200MOVWF DEBOUNCE

DECFSZ COUNT,F ;DECREMENTA COUNT, COUNT=0?GOTO TESTA_BOTAO1 ;NAO, DESVIAGOTO TRATA_BOTAO ;SIM, DESVIA

FAZER_DEBOUNCE2

DECFSZ DEBOUNCE,F ;DECREMENTA DEBOUNCE, DEBOUNCE=0?GOTO TESTA_BOTAO2 ;NAO, DESVIA

;SIM, CONTINUAMOVLW DEB ;INICIALIZA DEBOUNCE COM 200

12 Microcontroladores PIC16F628A/648A - Uma Abordagem prática e Objetiva

Page 13: Respostas Dos Exercicios

MOVWF DEBOUNCE

DECFSZ COUNT,F ;DECREMENTA COUNT, COUNT=0?GOTO TESTA_BOTAO2 ;NAO, DESVIA

;SIM, DESVIATRATA_BOTAO

BTFSS LED1 ;LED1 ACESO?GOTO ACENDE_LED1 ;NAO, DESVIA

;SIM, CONTINUAAPAGA_LED1

BCF LED1 ;APAGA LED1GOTO SOLTAR_BOTAO ;DESVIA

ACENDE_LED1

BSF LED1 ;ACENDE LED1

SOLTAR_BOTAO

BTFSS BOTAO1 ;BOTAO1 ESTA SOLTO?GOTO $-1 ;NAO, AGUARDA SOLTAR BOTAO1

;SIM, CONTINUABTFSS BOTAO2 ;BOTAO2 ESTA SOLTO?GOTO $-1 ;NAO, AGUARDA SOLTAR BOTAO2GOTO MAIN ;SIM, DESVIA

;*********************************************************************************************************************************************END ;FIM DO PROGRAMA;*********************************************************************************************************************************************

Capítulo 11: Como simular e Debugar uma Aplicação1. Significa que o programa será executado dentro do MPLAB IDE por uma ferramenta chamada

MPLAB SIM como se estivesse sendo executado dentro do MCU. A simulação nos permite, entre outras coisas, detectar e corrigir erros.

2. F7.

3. Temos de clicar com o botão direito do mouse na linha onde o comando será executado, isso fará com que apareça um menu suspenso, bastando selecionar o item Set Breakpoint. Quando o breakpoint está ativado, aparece no canto esquerdo da linha um círculo vermelho com a letra B no centro.

4. Set PC at Cursor.

5. Estímulo síncrono e estímulo assíncrono.

6. Só pode ser aplicado um estímulo de cada vez. Pelo menos uma instrução deve ser executada entre o acionamento de dois estímulos.

7. Stopwatch.

8. .LST.

Respostas dos execícios 13

Page 14: Respostas Dos Exercicios

9. Ela mostra todas as localidades de memória RAM e os seus respectivos conteúdos. Dando um clique duplo em qualquer um dos endereços podemos alterar o seu conteúdo, desde que o registraodr em questão seja de escrita e leitura.

10. Special Function Registers ou Registradores com finalidades específicas.

Capítulo 12: Módulos Temporizadores1. É a origem do incremento, que pode ser pelo ciclo de instrução (temporizador) ou por um sinal

externo aplicado ao pino RA4/T0CK1 (contador).

2. Retardar o incremento do registrador.

3. 8ms.

4. T1CON.

5. 1:1, 1:2, 1:4 e 1:8.

6. Quando setado, o bit TMR1ON liga o TMR1 e quando apagado, para o TMR1.

7. TIMER 1 configurado como temporizador, incrementado pelo ciclo de instrução <1>, fator de prescaler de 1:4 <5:4> e TMR1 ligado<0>.

8. A cada 4ms.

9. Porque não pode ser incrementado por um sinal externo. O TMR2 só pode ser incrementado pelo ciclo de instrução.

10. Além do prescaler, o TMR2 possui um postscaler .

11. O postscaler define, pela programação, após quantos estouros o bit de sinalização de estouro do TMR2 será setado. Uma interrupção será gerada se ela estiver habilitada.

12.;*****************************************************************************************************************************************************

BANK1 ;SETA O BANCO 1MOVLW .150MOVWF PR2 ;INICIALIZA PR2 COM O VALOR .150

BANK0 ;SETA O BANCO 0CLRF T2CON ;LIMPA T2CONCLRF TMR2 ;LIMPA TMR2BANK1 ;SETA O BANCO 1BCF INTCON,GIE ;DESLIGA CHAVE GERAL DE INTERRUPCAO <7>BANK0 ;SETA O BANCO 0MOVLW B'01001101' ;POTSCALER = 1:10 <6:3>MOVWF T2CON ;PRESCALER 1:4 <1:0>

;TMR2 LIGADO <2>;*****************************************************************************************************************************************************

13. Multivibrador e LEDs acionados por botão

Esta aplicação contém várias particularidades que merecem ser vistas com atenção. A verdade é que nós temos duas aplicações em uma. Uma delas é um multivibrador, com os LEDs 3 e 4 piscando alternadamente na freqüência de 1Hz. Na outra, temos dois LEDs (LED 1 e LED 2) acionados, respectivamente, por dois botões (BT1 e BT2) independentes.

A sub-rotina do multivibrador é chamada por meio da interrupção de estouro do TMR1, o que

14 Microcontroladores PIC16F628A/648A - Uma Abordagem prática e Objetiva

Page 15: Respostas Dos Exercicios

acontece a cada 0,5s, visto que o TMR1 foi configurado para ser incrementado pelo ciclo de instrução, com um prescaler de 1:8(TICON<5:4>), tendo sido inicializado com o valor 0BDDh (303710). Sendo assim, o tempo que o TMR1 leva para estourar é:

Tempo total de estouro do TMR1 = 8 x (65537 - 3037) = 0,5 S

8 = tempo decorrido entre dois incrementos do TMR1 (definido pelo prescaler)

62500 (65537 - 3037) = números de incrementos até o TMR1 estourar

Para permitir que o programa trate a interrupção de estouro de TMR1, tivemos que:

Ligar a chave geral de interrupção (INTICON<7>).

Ativar interrupção de periféricos (INTICON<6>).

Ativar a chave individual de interrupção de estouro do TMR1 (PIE1<0>).

O programa utiliza a programação estruturada com quatro chamadas à sub-rotina da rotina principal (ver fluxograma). O programa funciona em loop, sendo de 4ms o tempo de uma volta completa. Observe que foi usado o TMR0 para gerar a base de tempo da rotina principal (4ms), que aciona os LEDs por meio dos botões. O TMR1 é utilizado para gerar a base de tempo do multivibrador (0,5s). Lembre-se de que o uso dos módulos temporizadores é a ferramenta mais utilizada para o controle de tempo nas aplicações com microcontroladores.

Leia e estude o código-fonte com atenção, e não deixe de observar como os flags (bits de sinalização) são utilizados como ponte para as sub-rotinas, permitindo que elas se comuniquem, sem perderem, portanto, sua independência. Esta é a chave da programação estruturada, a independência entre as sub-rotinas. Isso facilita demasiadamente futuras alterações e ampliações do programa, bastando incluir na rotina principal outras chamadas à sub-rotina.

Respostas dos execícios 15

Page 16: Respostas Dos Exercicios

16 Microcontroladores PIC16F628A/648A - Uma Abordagem prática e Objetiva

Page 17: Respostas Dos Exercicios

Respostas dos execícios 17

Page 18: Respostas Dos Exercicios

;**********************************************************************************************************************************************

18 Microcontroladores PIC16F628A/648A - Uma Abordagem prática e Objetiva

Page 19: Respostas Dos Exercicios

; PROGRAMA - MULTIVIBRADOR E DOIS LEDS ACIONADOS POR BOTAO; DESENVOLVIDO POR WAGNER DA SILVA ZANCO; VERSAO 1.0; 04/04/2004;**********************************************************************************************************************************************; ARQUIVOS DE DEFINICOES;**********************************************************************************************************************************************#INCLUDE <P16F628A.INC> ;ARQUIVO PADRAO MICROCHIP PARA PIC16F628A;**********************************************************************************************************************************************; BITS DE CONFIGURACAO;**********************************************************************************************************************************************__CONFIG _BOREN_ON&_CP_ON&_PWRTE_ON&_WDT_OFF&_LVP_OFF&_DATA_CP_OFF&_MCLRE_ON&_XT_OSC;**********************************************************************************************************************************************; PAGINACAO DA MEMORIA;**********************************************************************************************************************************************;COMANDOS PARA ALTERACAO DE PAGINA DE MEMORIA

BANK0 MACRO ;MACRO PARA SELECIONAR BANCO 0BCF STATUS,RP0BCF STATUS,RP1

ENDM ;FIM DA MACRO BANK0

BANK1 MACRO ;MACRO PARA SELECIONAR BANCO 1BSF STATUS,RP0BCF STATUS,RP1

ENDM ;FIM DA MACRO BANK1

;**********************************************************************************************************************************************; VARIAVEIS;**********************************************************************************************************************************************;ENDERECOS DAS VARIAVEIS UTILIZADAS PELO SISTEMA;VARIAVEIS SO RECONHECIDAS NO BANCO 0 DE MEMORIA

CBLOCK 0x20 ;ENDERECO INICIAL DA MEMORIA DO USUARIODEBOUNCE_BT1 ;0x20 - ARMAZENA O TEMPO DE DEBOUNCE

;CADA UNIDADE VALE 4mSEGENDC ;FIM DO BLOCO DE MEMÓRIA

;**********************************************************************************************************************************************;VARIAVEIS COM ESPELHO EM TODOS OS BANCOS DE MEMORIA.;RECONHECIDAS EM QUALQUER BANCO.

FLAGS EQU 0x70 ;BITS DE SINALIZACAOW_TEMP EQU 0x71 ;SALVA REG WORKSTATUS_TEMP EQU 0x72 ;SALVA REG STATUS

;**********************************************************************************************************************************************; CONSTANTES;**********************************************************************************************************************************************;CONSTANTES UTILIZADAS PELO SISTEMA.

INIC_TMR0 EQU .131 ;INICIALIZA TIMER 0DEB_BT1 EQU .10 ;INICIALIZA DEBOUNCE_BT1INIC_TMR1H EQU H'0B' ;INICIALIZA TMR1HINIC_TMR1L EQU H'DD' ;INICIALIZA TMR1L

;BITS DO REGISTRADOR FLAGS

STATUS_BT1 EQU .0 ;STATUS DO BOTAO 1STATUS_BT2 EQU .1 ;STATUS DO BOTAO 2DEBOUNCE_FIM EQU .2 ;ACABOU DEBOUNCE, TECLA PRECISA SER TRATADA

;**********************************************************************************************************************************************; FLAGS;**********************************************************************************************************************************************;REGISTRADOR FLAGS ;;BIT # |7 |6|5|4 |3|2|1 |0|; |X|X|X|X|X|X|X|Y| STATUS_BT1 --> 1=SOLTO; 0=PRESSIONADO

Respostas dos execícios 19

Page 20: Respostas Dos Exercicios

; |X|X|X|X|X|X|Y|X| STATUS_BT2 --> 1=SOLTO; 0=PRESSIONADO; |X|X|X|X|X|Y|X|X| DEBOUNCE_FIM --> 1=ACABOU DEBOUNCE; |X|X|X|X|Y|X|X|X| RESERVADO ; |X|X|X|Y|X|X|X|X| RESERVADO; |X|X|Y|X|X|X|X|X| RESERVADO; |X|Y|X|X|X|X|X|X| RESERVADO; |Y|X|X|X|X|X|X|X| RESERVADO

;X = DEFINIDO EM OUTRO LUGAR DA TABELA;Y = DEFINIDO COMO MOSTRADO (0/1);**********************************************************************************************************************************************; ENTRADAS;**********************************************************************************************************************************************;PINOS QUE SERAO UTILIZADOS COMO ENTRADA

#DEFINE BOTAO1PORTA,1 ;0 --> PRESSIONADO;1 --> LIBERADO

#DEFINE BOTAO2 PORTA,2 ;0 --> PRESSIONADO;1 --> LIBERADO

;**********************************************************************************************************************************************; SAIDAS;**********************************************************************************************************************************************;PINOS UTILIZADOS COMO SAIDA

#DEFINE LED1 PORTB,0 ;0 --> APAGADO;1 --> ACESO

#DEFINE LED2 PORTB,1 ;0 --> APAGADO;1 --> ACESO

#DEFINE LED3 PORTB,2 ;0 --> APAGADO;1 --> ACESO

#DEFINE LED4 PORTB,3 ;0 --> APAGADO;1 --> ACESO

;**********************************************************************************************************************************************

;**********************************************************************************************************************************************; VETOR DE RESET;**********************************************************************************************************************************************

ORG 0x00 ;ENDERECO INICIAL DE PROCESSAMENTOGOTO INICIO

;**********************************************************************************************************************************************; INTERRUPCAO;**********************************************************************************************************************************************;A INTERRUPCAO DE TIMER 1 SERA UTILIZADA

ORG 0x04 ;ENDEREÇO INICAL DA INTERRUPCAO

BTFSS PIR1,TMR1IF ;INTERRUPCAO DE ESTOURO DE TMR1?RETFIE ;NAO, RETORNA

;SIM, CONTINUABCF PIR1,TMR1IF ;LIMPA FLAG DA INTERRUPCAOMOVWF W_TEMP ;SALVA W EM W_TEMPSWAPF STATUS,WMOVWF STATUS_TEMP ;SALVA STATUS EM STATUS_TEMP

;**********************************************************************************************************************************************; TRATAMENTO DA INTERRUPCAO DE ESTOURO DE TMR1;**********************************************************************************************************************************************;ESTA ROTINA FARA OS LEDS 3 E 4 PISCAREM ALTERNADAMENTE

MOVLW H'0B' ;INICIA TMR1H COM OBhMOVWF TMR1HMOVLW H'DD' ;INICIA TMR1L COM DDh

20 Microcontroladores PIC16F628A/648A - Uma Abordagem prática e Objetiva

Page 21: Respostas Dos Exercicios

MOVWF TMR1L

BTFSS LED3 ;LED3 ESTA ACESOGOTO ACENDE_LED ;NAO, DESVIA GOTO APAGA_LED ;SIM, DESVIA

ACENDE_LED

BCF LED4 ;APAGA LED4BSF LED3 ;ACENDE LED 3GOTO SAI_INT ;DESVIA

APAGA_LED

BCF LED3 ;APAGA LED3BSF LED4 ;ACENDE LED4GOTO SAI_INT ;DESVIA

SAI_INT

SWAPF STATUS_TEMP,WMOVWF STATUS ;RECUPERA STATUSSWAPF W_TEMP,FSWAPF W_TEMP,W ;RECUPERA WRETFIE ;RETORNA DA INTERRUPCAO

;**********************************************************************************************************************************************; INICIO;**********************************************************************************************************************************************INICIO

BANK1 ;ALTERA PARA BANCO1MOVLW B'00000110'MOVWF TRISA ;DEFINE RA1 e RA2 COMO ENTRADA e DEMAIS

;COMO SAIDAMOVLW B'00000000'MOVWF TRISB ;DEFINE O PORTB COMO SAIDA

MOVLW B'10000100'MOVWF OPTION_REG ;PRESCALER 1:32 NO TMRO <2:0>

;TMR0 INCREMENTADO PELO CICLO DE INSTRUCAO <5>;APLICA PRESCALER AO TMR0 <3>

;PULL_UPS DESABILIADOS <7> ;DEMAIS BITS IRRELEVANTES

MOVLW B'11000000' ;CHAVE GERAL DE INTERRUPCAO LIGADA <7>MOVWF INTCON ;INTERRUPCAO DE PERFERICOS ATIVADAS <6>MOVLW B'00000001' ;INTERRUPCAO DE ESTOURO TMR1 SERA TRATADA <0>MOVWF PIE1

BANK0MOVLW B'00110001' ;PRESCALER 1:8 <5:4>MOVWF T1CON ;TMR1 INCREMENTADO PELO CLOCK INTERNO <1>

;LIGA TMR1 <0>;DEMAIS BITS IRRELEVANTES

MOVLW B'00000111' ;CONFIGURA RA3:RA0 COM I/O <2:0>MOVWF CMCON

;**********************************************************************************************************************************************; INICIALIZACAO DAS VARIAVEIS;**********************************************************************************************************************************************

CLRF PORTA ;LIMPA PORTA CLRF PORTB ;LIMPA PORTBMOVLW B'00000011' ;INICIALIZA FLAGS MOVWF FLAGSMOVLW DEB_BT1 ;INICIALIZA DEBOUNCE_BT1 COM 10MOVWF DEBOUNCE_BT1MOVLW INIC_TMR0 ;INICIALIZA TIMER 0 MOVWF TMR0 ;COM 131MOVLW H'0B' ;INICIA TMR1H COM OBhMOVWF TMR1H

Respostas dos execícios 21

Page 22: Respostas Dos Exercicios

MOVLW H'DD' ;INICIA TMR1L COM DDhMOVWF TMR1L

;**********************************************************************************************************************************************; ROTINA PRINCIPAL;**********************************************************************************************************************************************MAIN

CALL TESTAR_BT ;CHAMA SUB-ROTINA PARA TESTAR BOTAOCALL DEBOUNCE ;CHAMA SUB-ROTINA PARA FAZER DEBOUNCECALL TRATAR_BT ;CHAMA SUB-ROTINA PARA TRATAR BOTAOCALL TIMER_4mSEG ;CHAMA SUB-ROTINA DE TEMPOGOTO MAIN ;DESVIA

;**********************************************************************************************************************************************; SUB-ROTINAS ;**********************************************************************************************************************************************TESTAR_BT

BTFSC BOTAO1 ;BOTAO1 ESTA PRESSIONADO?GOTO $+3 ;NAO, DESVIA BCF FLAGS,STATUS_BT1 ;SIM, APAGA FLAG STATUS DO BOTAO1RETURN ;RETORNABSF FLAGS,STATUS_BT1 ;SETA FLAG STATUS DO BOTAO1

BTFSC BOTAO2 ;BOTAO2 ESTA PRESSIONADO?GOTO $+3 ;NAO, DESVIA BCF FLAGS,STATUS_BT2 ;SIM, APAGA FLAG STATUS DO BOTAO2RETURN ;RETORNABSF FLAGS,STATUS_BT2 ;SETA FLAG STATUS DO BOTAO2RETURN ;RETORNA

;**********************************************************************************************************************************************;ESTA SUB-ROTINA FAZ O DEBOUNCE, A TECLA PRESSIONADA SO SERA TRATADA QUANDO;O TEMPO DE DEBOUNCE ACABAR, ESTANDO A TECLA AINDA PRESSIONADA. O TEMPO PROGRAMADO;PARA O DEBOUNCE E DE 40mS, PODENDO O MESMO SER ALTERADO SE FOR NECESSARIO.;O TEMPO DO DEBOUNCE E DEFINIDO NA VARIAVEL DEBOUNCE_BT1, SENDO DE 4mS PARA CADA UNIDADE.;**********************************************************************************************************************************************DEBOUNCE

BTFSC FLAGS,STATUS_BT1 ;BOTAO1 PRESSIONADO?GOTO $+2 ;NAO, PULA DUAS LINHASGOTO INICIA_DEB ;SIM, DESVIA

BTFSC FLAGS,STATUS_BT2 ;BOTAO2 PRESSIONADO?GOTO INICIA_DEB2 ;NAO, DESVIA

;SIM, CONTINUAINICIA_DEB

DECFSZ DEBOUNCE_BT1,F ;DECREMENTA DEBOUNCE_BT1, DEBOUNCE_BT1=0?RETURN ;NAO, RETORNABSF FLAGS,DEBOUNCE_FIM ;SIM, SETA FLAG FIM DE DEBOUNCE

INICIA_DEB2

MOVLW DEB_BT1 ;INICALIZA DEBOUNCE_BT1 COM 10MOVWF DEBOUNCE_BT1 ;TEMPO DO DEBOUNCE E (10 x 4mS = 40mS)RETURN ;RETORNA

;**********************************************************************************************************************************************;ESTA SUB-ROTINA TRATA O BOTAO ACIONADO, TOMANDO A DECISAO CORRETA PARA CADA BOTAO.;**********************************************************************************************************************************************TRATAR_BT

BTFSS FLAGS,DEBOUNCE_FIM ;ACABOU DEBOUNCE?RETURN ;NAO, RETORNA

;SIM, CONTINUABTFSS FLAGS,STATUS_BT1 ;BOTAO1 PRESSIONADO?GOTO TRATA_BT1 ;SIM, DESVIA

22 Microcontroladores PIC16F628A/648A - Uma Abordagem prática e Objetiva

Page 23: Respostas Dos Exercicios

;NAO, CONTINUABTFSS FLAGS,STATUS_BT2 ;BOTAO2 PRESSIONADO?GOTO TRATA_BT2 ;SIM, DESVIABCF FLAGS,DEBOUNCE_FIM ;DESATIVA FLAG TERATAR BOTAORETURN ;NAO, RETORNA

;TRATAR BOTAO 1. TRATA_BT1

BTFSS LED1 ;LED1 ESTA ACESO?GOTO ACENDE_LED1 ;NAO, DESVIAGOTO APAGA_LED1 ;SIM, DESVIA

ACENDE_LED1

BSF LED1 ;ACENDE LED1GOTO SOLTAR_BOTAO ;DESVIA

APAGA_LED1

BCF LED1 ;APAGA LED1GOTO SOLTAR_BOTAO ;DESVIA

;TRATAR BOTAO 2.TRATA_BT2

BTFSS LED2 ;LED2 ESTA ACESO?GOTO ACENDE_LED2 ;NAO, DESVIAGOTO APAGA_LED2 ;SIM, DESVIA

ACENDE_LED2

BSF LED2 ;ACENDE LED2GOTO SOLTAR_BOTAO ;DESVIA

APAGA_LED2

BCF LED2 ;APAGA LED2GOTO SOLTAR_BOTAO ;DESVIA

;AGUARDA O USUARIO SOLTAR O BOTAO PRESSIONADO.SOLTAR_BOTAO

BTFSS BOTAO1 ;BOTAO1 SOLTO?GOTO $-1 ;NAO, AGUARDA SOLTAR BOTAO1BSF FLAGS,STATUS_BT1 ;SIM, RESETA FLAG

BTFSS BOTAO2 ;BOTAO1 SOLTO?GOTO $-1 ;NAO, AGUARDA SOLTAR BOTAO2BSF FLAGS,STATUS_BT2 ;SIM, RESETA FLAGBCF FLAGS,DEBOUNCE_FIM ;DESATIVA FLAG TRATAR BOTAORETURN ;RETORNA

;**********************************************************************************************************************************************;ESTA SUB-ROTINA FICA AGUARDANDO PASSAR 4mS. TEMPO DE UMA VOLTA COMPLETA NO PROGRAMA;**********************************************************************************************************************************************TIMER_4mSEG

BTFSS INTCON,T0IF ;TMR0 ESTOUROU?GOTO $-1 ;NAO, ESPERA ESTOURARBCF INTCON,T0IF ;SIM, APAGA FAG T0IF

MOVLW INIC_TMR0 ;INICIALIZA TIMER 0 MOVWF TMR0 ;COM 131RETURN ;NAO, RETORNA

;**********************************************************************************************************************************************END ;FIM DO PROGRAMA;**********************************************************************************************************************************************

Respostas dos execícios 23

Page 24: Respostas Dos Exercicios

Capítulo 13: EEPROM Interna1. EEDATA, EEADR, EECON1 e EECON2.

2. (2), (1), (4) e (3).

3. primeiro o valor 0x55, depois o valor 0xAA.

4. Uma é ficar lendo o bit WR até que ele seja apagado pelo hardware quando a escrita terminar. A outra é por meio da interrupção de fim de escrita na EEPROM, sinalizada pelo bit EEIF (PIR1<7>).

5. DE.

6.;******************************************************************************************************************************************ORG 0x2100DE .2, .4, .6;******************************************************************************************************************************************

7. Pisca pisca com frequência ajustável

Esta aplicação exibe no display os valores de 0 a 9, piscando numa freqüência cujo período pode ser ajustado para qualquer valor inteiro entre 1s e 9s. No modo de funcionamento normal, os botões 1 e 2 (BT1 e BT2) selecionam o valor que deve aparecer no display, enquanto, no modo de programação eles (botão 1 e botão 2) configuram o período de piscagem, sendo o período exibido no display, sem piscar.

Quando o circuito é ligado pela primeira vez, aparece no display o valor 0, piscando na freqüência de 1Hz. Pressionando um dos botões: BT1(crescente) e BT2(decrescente), nós podemos alterar o valor exibido no display. Para entrar no modo de programação, temos de pressionar o botão 3 (BT3). No modo de programação, os botões 1 e 2 assumem uma nova função, que é alterar o valor do período de piscagem.

Escolhido o novo período de piscagem, basta pressionar novamente o botão 3 para sair do modo de programação e voltar ao modo de funcionamento normal. O período de piscagem será gravado no endereço 00h da memória EEPROM, para que não seja perdido quando o equipamento for desligado.

24 Microcontroladores PIC16F628A/648A - Uma Abordagem prática e Objetiva

Page 25: Respostas Dos Exercicios

Respostas dos execícios 25

Page 26: Respostas Dos Exercicios

26 Microcontroladores PIC16F628A/648A - Uma Abordagem prática e Objetiva

Page 27: Respostas Dos Exercicios

Respostas dos execícios 27

Page 28: Respostas Dos Exercicios

28 Microcontroladores PIC16F628A/648A - Uma Abordagem prática e Objetiva

Page 29: Respostas Dos Exercicios

Respostas dos execícios 29

Page 30: Respostas Dos Exercicios

;**********************************************************************************************************************************************; PROGRAMA - PISCA PISCA COM FREQUENCIA VARIAVEL; DESENVOLVIDO POR WAGNER DA SILVA ZANCO; VERSAO 1.0; 28/04/2004;**********************************************************************************************************************************************; ARQUIVOS DE DEFINICOES;**********************************************************************************************************************************************#INCLUDE <P16F628A.INC> ;ARQUIVO PADRAO MICROCHIP PARA PIC16F628A;**********************************************************************************************************************************************; BITS DE CONFIGURACAO;**********************************************************************************************************************************************__CONFIG _BOREN_ON&_CP_ON&_PWRTE_ON&_WDT_OFF&_LVP_OFF&_DATA_CP_OFF&_MCLRE_ON&_XT_OSC;**********************************************************************************************************************************************; PAGINACAO DA MEMORIA;**********************************************************************************************************************************************;COMANDOS PARA ALTERACAO DE PAGINA DE MEMORIA

BANK0 MACRO ;MACRO PARA SELECIONAR BANCO 0BCF STATUS,RP0BCF STATUS,RP1

ENDM ;FIM DA MACRO BANK0

BANK1 MACRO ;MACRO PARA SELECIONAR BANCO 1BSF STATUS,RP0BCF STATUS,RP1

ENDM ;FIM DA MACRO BANK1

;**********************************************************************************************************************************************; VARIAVEIS;**********************************************************************************************************************************************;ENDERECOS DAS VARIAVEIS UTILIZADAS PELO SISTEMA;VARIAVEIS SO RECONHECIDAS NO BANCO 0 DE MEMORIA

CBLOCK 0x20 ;ENDERECO INICIAL DA MEMORIA DO USUARIO

COUNT ;0x20 - AUXILIA NA CONTAGEM DE TEMPODEBOUNCE_BT1 ;0x21 - ARMAZENA O TEMPO DE DEBOUNCE

;CADA UNIDADE VALE 4mSEGCONTADOR ;0x22 - ARMAZENA VALOR QUE APARECERA NO DISPLAYTEMP ;0x23 - REGISTRADOR TEMPORARIOTEMP2 ;0x24 - REGISTRADOR TEMPORARIO 2

ENDC ;FIM DO BLOCO DE MEMÓRIA

;**********************************************************************************************************************************************;VARIAVEIS COM ESPELHO EM TODOS OS BANCOS DE MEMORIA. RECONHECIDAS EM QUALQUER BANCO.

FLAGS EQU 0x70 ;BITS DE SINALIZACAOPERIODO EQU 0x71 ;ARMAZENA PERIODOTEMP_ESPERA EQU 0X72 ;TEMPO DE ESPERA

;**********************************************************************************************************************************************; CONSTANTES;**********************************************************************************************************************************************;CONSTANTES UTILIZADAS PELO SISTEMA.

INIC_TMR0 EQU .131 ;INICIALIZA TMR0CONTA EQU .125 ;INICIALIZA COUNTDEB_BT1 EQU .10 ;INICIALIZA DEBOUNCE_BT1ENDERECO EQU .0 ;ENDERECO DE EEPROM ONDE SERA GRAVADO

;O PERIODO DE PISCAGEM ;BITS DO REGISTRADOR FLAGS

NORMAL_PROG EQU .0 ;MODO NORMAL/PROGRAMACAOSTATUS_BT1 EQU .1 ;STATUS DO BOTAO 1STATUS_BT2 EQU .2 ;STATUS DO BOTAO 2STATUS_BT3 EQU .3 ;STATUS DO BOTAO 3DEBOUNCE_FIM EQU .4 ;ACABOU DEBOUNCEMEIO_SEG EQU .5 ;PASSOU MEIO SEGUNDO

30 Microcontroladores PIC16F628A/648A - Uma Abordagem prática e Objetiva

Page 31: Respostas Dos Exercicios

ACENDE_DSP EQU .6 ;ACENDE DISPLAYESCRITA_EEPROM EQU .7 ;ESCRITA NA EEPROM EM ANDAMENTO

;**********************************************************************************************************************************************; FLAGS;**********************************************************************************************************************************************;REGISTRADOR FLAGS

;BIT # |7|6 |5|4 |3|2|1| 0|; |X|X|X|X|X|X|X|Y| MODO NORMAL=0 / MODO PROGRAMACAO=1; |X|X|X|X|X|X|Y|X| STATUS_BT1 1=SOLTO; 0=PRESSIONADO; |X|X|X|X|X|Y|X|X| STATUS_BT2 1=SOLTO; 0=PRESSIONADO; |X|X|X|X|Y|X|X|X| STATUS_BT3 1=SOLTO; 0=PRESSIONADO ; |X|X|X|Y|X|X|X|X| DEBOUNCE_FIM 1=ACABOU DEBOUNCE; |X|X|Y|X|X|X|X|X| MEIO_SEG 1=PASSOU 0,5 SEG; |X|Y|X|X|X|X|X|X| ACENDE_DSP 1=ACENDER DISPLAY; 0 APAGAR DISPLAY; |Y|X|X|X|X|X|X|X| ESCRITA_EEPROM 1=ESCRITA EM ANDAMENTO

;X = DEFINIDO EM OUTRO LUGAR DA TABELA; = DEFINIDO COMO MOSTRADO (0/1)

;**********************************************************************************************************************************************; ENTRADAS;**********************************************************************************************************************************************;PINOS QUE SERAO UTILIZADOS COMO ENTRADA

#DEFINE BOTAO1 PORTA,1 ;0 --> PRESSIONADO;1--> LIBERADO

#DEFINE BOTAO2 PORTA,2 ;0 --> PRESSIONADO;1 --> LIBERADO

#DEFINE BOTAO3 PORTA,3 ;0 --> PRESSIONADO;1 --> LIBERADO

;**********************************************************************************************************************************************; SAIDAS;**********************************************************************************************************************************************;O PORTB ESTA LIGADO NUM DISPLAY DE SETE SEGMENTOS, SENDO CADA SEGMENTO ;ATIVADO(ACESO) QUANDO NO RESPECTIVO PINO FOR COLOCADO NIVEL LOGICO 1. ; A;RB0 - SEGMENTO A **********;RB1 - SEGMENTO B F* *B;RB2 - SEGMENTO C * G *;RB3 - SEGMENTO D **********;RB4 - SEGMENTO E E* *C;RB5 - SEGMENTO F * D *;RB6 - SEGMENTO G ********** *P ;RB7 - PONTO

;**********************************************************************************************************************************************; INICIALIZA A EEPROM;**********************************************************************************************************************************************;ESTA DIRETIVA GRAVA NA LOCALIDADE 00H DE EEPROM O VALOR 1. ;A GRAVACAO OCORRE DURANTE A PROGRAMACAO DO CHIP.

ORG 0x2100 ;APONTA PARA O ENDERECO 00H DE EEPROMDE .1 ;DADO GRAVADO NO ENDERECO 00H DE EEPROM

;**********************************************************************************************************************************************; VETOR DE RESET;**********************************************************************************************************************************************

ORG 0x00 ;ENDERECO INICIAL DE PROCESSAMENTOGOTO INICIO ;DESVIA

;**********************************************************************************************************************************************; INTERRUPCAO;**********************************************************************************************************************************************;AS INTERRUPCOES NAO SERAO UTILIZADAS

Respostas dos execícios 31

Page 32: Respostas Dos Exercicios

ORG 0x04 ;ENDERECO INICAL DA INTERRUPCAORETFIE ;RETORNA DA INTERRUPCAO

;**********************************************************************************************************************************************; INICIO;**********************************************************************************************************************************************

INICIOBANK1 ;ALTERA PARA BANCO1MOVLW B'00001110'MOVWF TRISA ;DEFINE RA1, RA2 e RA3 COMO ENTRADA e DEMAIS

;COMO SAIDAMOVLW B'00000000'MOVWF TRISB ;DEFINE O PORTB COMO SAÍDAMOVLW B'10000100'MOVWF OPTION_REG ;PRESCALER 1:32 NO TMRO <2:0>

;TMR0 INCREMENTADO PELO CICLO DE INSTRUCAO <5> ;APLICA PRESCALER AO TMR0 <3>

;PULL_UPS DESABILIADOS <7> ;DEMAIS BITS IRRELEVANTES

MOVLW B'00000000' ;INTERRUPCOES DESABILITADASMOVWF INTCONBANK0 ;ATIVA BANCO 0MOVLW B'00000111' ;CONFIGURA RA3:RA0 COM I/O <2:0>MOVWF CMCON

;**********************************************************************************************************************************************; INICIALIZACAO DAS VARIAVEIS;**********************************************************************************************************************************************

CLRF PORTA ;LIMPA PORTA CLRF PORTB ;LIMPA PORTBMOVLW B'00001110' ;INICIALIZA FLAGS MOVWF FLAGSMOVLW DEB_BT1 ;INICIALIZA DEBOUNCE_BT1 COM 10MOVWF DEBOUNCE_BT1MOVLW INIC_TMR0 ;INICIALIZA TMR0 MOVWF TMR0 ;COM 131MOVLW CONTA ;INICIALIZA COUNT COM 125MOVWF COUNTCLRF CONTADOR ;LIMPA CONTADOR

;**********************************************************************************************************************************************; ROTINA PRINCIPAL;**********************************************************************************************************************************************MAIN

;**********************************************************************************************************************************************;ESTA SUB-ROTINA RESGATA DA EEPROM O VALOR DO PERIODO DE PISCAGEM.RESG_EEPROM

BANK1 ;ATIVA BANCO 1 DE MEMORIA MOVLW .0 ;ENDERECO DA EEPROM QUE SERA LIDOMOVWF EEADRBSF EECON1,RD ;INICIA CICLO DE LEITURAMOVF EEDATA,W ;W RECEBE DADO LIDOBANK0 ;ATIVA BANCO 0 DE MEMORIA MOVWF PERIODO ;PERIODO RECEBE WMOVWF TEMP2 ;TEMP2 RECEBE W

;**********************************************************************************************************************************************; ROTINA_PRINCIPAL;**********************************************************************************************************************************************ROTINA_PRINCIPAL

CALL TESTAR_BT ;CHAMA SUB-ROTINA PARA TESTAR BOTAOCALL DEBOUNCE ;CHAMA SUB-ROTINA PARA FAZER DEBOUNCECALL TRATAR_BT ;CHAMA SUB-ROTINA PARA TRATAR BOTAOCALL ATUAL_DSP ;CHAMA SUB-ROTINA PARA ATUALIZAR O DISPLAY

32 Microcontroladores PIC16F628A/648A - Uma Abordagem prática e Objetiva

Page 33: Respostas Dos Exercicios

CALL TIMER_4mSEG ;CHAMA SUB-ROTINA DE TEMPO CALL ESCREVE_EEPROM ;CHAMA SUB-ROTINA DE GRAVACAO NA EEPROM

GOTO ROTINA_PRINCIPAL ;DESVIA

;**********************************************************************************************************************************************; SUB-ROTINAS ;**********************************************************************************************************************************************TESTAR_BT

BTFSC BOTAO1 ;BOTAO1 ESTA PRESSIONADO?GOTO $+3 ;NAO, PULA TRES LINHAS DE CODIGO PARA BAIXO BCF FLAGS,STATUS_BT1 ;SIM, APAGA FLAG STATUS DO BOTAO1RETURN ;RETORNABSF FLAGS,STATUS_BT1 ;SETA FLAG STATUS DO BOTAO1BTFSC BOTAO2 ;BOTAO2 ESTA PRESSIONADO?GOTO $+3 ;NAO, PULA TRES LINHAS DE CODIGO PARA BAIXO BCF FLAGS,STATUS_BT2 ;SIM, APAGA FLAG STATUS DO BOTAO2RETURN ;RETORNABSF FLAGS,STATUS_BT2 ;SETA FLAG STATUS DO BOTAO2BTFSC BOTAO3 ;BOTAO3 ESTA PRESSIONADO?GOTO $+3 ;NAO, PULA TRES LINHAS DE CODIGO PARA BAIXOBCF FLAGS,STATUS_BT3 ;SIM, APAGA FLAG STATUS DO BOTAO3RETURN ;RETORNABSF FLAGS,STATUS_BT3 ;SETA FLAG STATUS DO BOTAO3RETURN ;RETORNA

;**********************************************************************************************************************************************;ESTA SUB-ROTINA FAZ O DEBOUNCE, A TECLA PRESSIONADA SO SERA TRATADA QUANDO;O TEMPO DE DEBOUNCE ACABAR, ESTANDO A TECLA AINDA PRESSIONADA. O TEMPO PROGRAMADO;PARA O DEBOUNCE E DE 40mS, PODENDO O MESMO SER ALTERADO SE FOR NECESSARIO.;O TEMPO DO DEBOUNCE E DEFINIDO NA VARIAVEL DEBOUNCE_BT1, SENDO DE 4mS PARA CADA UNIDADE.;**********************************************************************************************************************************************DEBOUNCE

BTFSC FLAGS,STATUS_BT1 ;BOTAO1 PRESSIONADO?GOTO $+2 ;NAO, PULA DUAS LINHAS DE CODIGO PARA BAIXOGOTO INICIA_DEB ;SIM, DESVIABTFSC FLAGS,STATUS_BT2 ;BOTAO2 PRESSIONADO?GOTO $+2 ;NAO, PULA DUAS LINHAS DE CODIGO PARA BAIXOGOTO INICIA_DEB ;SIM, DESVIABTFSC FLAGS,STATUS_BT3 ;BOTAO3 PRESSIONADO?GOTO INICIA_DEB2 ;NAO, RETORNA

;SIM, CONTINUAINICIA_DEB

DECFSZ DEBOUNCE_BT1,F ;ACABOU DEBOUNCE?RETURN ;NAO, RETORNABSF FLAGS,DEBOUNCE_FIM ;SIM, SETA FLAG FIM DE DEBOUNCE

INICIA_DEB2

MOVLW DEB_BT1 ;INICALIZA DEBOUNCE_BT1 COM 10MOVWF DEBOUNCE_BT1 ;TEMPO DO DEBOUNCE E (10 x 4mSEG = 40mSEG)RETURN ;RETORNA

;**********************************************************************************************************************************************;ESTA SUB-ROTINA TRATA O BOTAO ACIONADO, TOMANDO A DECISAO CORRETA PARA CADA BOTAO, LEVANDO ;EM CONTA O MODO DE OPERACAO NO MOMENTO.;**********************************************************************************************************************************************TRATAR_BT

BTFSS FLAGS,DEBOUNCE_FIM ;ACABOU DEBOUNCE?RETURN ;NAO, RETORNA

;SIM, CONTINUABTFSC FLAGS,NORMAL_PROG ;MODO NORMAL ATIVADO?GOTO MODO_PROGRAMACAO ;NAO, DESVIA

;SIM, CONTINUABTFSS FLAGS,STATUS_BT1 ;BOTAO1 PRESSIONADO?GOTO TRATA_BT1_NORMAL ;SIM, DESVIA

Respostas dos execícios 33

Page 34: Respostas Dos Exercicios

;NAO, CONTINUABTFSS FLAGS,STATUS_BT2 ;BOTAO2 PRESSIONADO?GOTO TRATA_BT2_NORMAL ;SIM, DESVIA

;NAO, CONTINUABTFSS FLAGS,STATUS_BT3 ;BOTAO3 PRESSIONADO?GOTO TRATA_BT3_NORMAL ;SIM, DESVIABCF FLAGS,DEBOUNCE_FIM ;NAO, BOTAO TRATADO, APAGA FLAG DEBOUNCE_FIMRETURN ;RETORNA

;TRATAR BOTAO NO MODO NORMAL DE OPERACAO.TRATA_BT1_NORMAL

MOVLW .9 ;W RECEBE 9XORWF CONTADOR,W ;W = W xor CONTADOR BTFSC STATUS,Z ;CONTADOR = 9?GOTO SOLTAR_BOTAO ;SIM, DESVIAINCF CONTADOR,F ;NAO, INCREMENTA CONTADORGOTO SOLTAR_BOTAO ;DESVIA

TRATA_BT2_NORMAL

MOVLW .0 ;W RECEBE 0XORWF CONTADOR,W ;W = W xor CONTADOR BTFSC STATUS,Z ;CONTADOR = 0?GOTO SOLTAR_BOTAO ;SIM, DESVIADECF CONTADOR,F ;NÃO, DECREMENTA CONTADORGOTO SOLTAR_BOTAO ;DESVIA

TRATA_BT3_NORMAL

BSF FLAGS,NORMAL_PROG ;ATIVA MODO DE PORGRAMACAO

;AGUARDA O USUARIO SOLTAR O BOTAO PRESSIONADO.SOLTAR_BOTAO

BTFSS BOTAO1 ;BOTAO1 SOLTO?GOTO $-1 ;NAO, AGUARDA SOLTAR BOTAO1BSF FLAGS,STATUS_BT1 ;SIM, APAGA FLAG

BTFSS BOTAO2 ;BOTAO2 SOLTO?GOTO $-1 ;NAO, AGUARDA SOLTAR BOTAO2BSF FLAGS,STATUS_BT2 ;SIM, APAGA FLAG

BTFSS BOTAO3 ;BOTAO3 SOLTO?GOTO $-1 ;NAO, AGUARDA SOLTAR BOTAO3BSF FLAGS,STATUS_BT3 ;SIM, APAGA FLAGBCF FLAGS,DEBOUNCE_FIM ;BOTAO TRATADO, APAGA FLAG FIM DE DEBOUNCERETURN ;RETORNA

;TRATAR BOTAO NO MODO DE PROGRAMACAO.MODO_PROGRAMACAO

BTFSS FLAGS,STATUS_BT1 ;BOTAO1 PRESSIONADO?GOTO TRATA_BT1_PROG ;SIM, DESVIA

;NAO, CONTINUABTFSS FLAGS,STATUS_BT2 ;BOTAO2 PRESSIONADO?GOTO TRATA_BT2_PROG ;SIM, DESVIA

;NAO, CONTINUABTFSS FLAGS,STATUS_BT3 ;BOTAO3 PRESSIONADO?GOTO TRATA_BT3_PROG ;SIM, DESVIABCF FLAGS,DEBOUNCE_FIM ;BOTAO TRATADO, APAGA FLAG FIM DE DEBOUNCERETURN ;NAO, RETORNA

TRATA_BT1_PROG

MOVLW .9 ;W RECEBE 9XORWF PERIODO,W ;W = W xor PERIODO BTFSC STATUS,Z ;PERIODO = 9?GOTO SOLTAR_BOTAO ;SIM, DESVIA

34 Microcontroladores PIC16F628A/648A - Uma Abordagem prática e Objetiva

Page 35: Respostas Dos Exercicios

INCF PERIODO,F ;NAO, INCREMENTA PERIODOGOTO SOLTAR_BOTAO ;DESVIA

TRATA_BT2_PROG

MOVLW .1 ;W RECEBE 1XORWF PERIODO,W ;W = W xor PERIODO BTFSC STATUS,Z ;PERIODO = 1?GOTO SOLTAR_BOTAO ;SIM, AGUARDA SOLTAR BOTAODECF PERIODO,F ;NAO, DECREMENTA PERIODOGOTO SOLTAR_BOTAO ;DESVIA

TRATA_BT3_PROG

BCF FLAGS,NORMAL_PROG ;ATIVA MODO NORMALGOTO SOLTAR_BOTAO ;DESVIA

;**********************************************************************************************************************************************;ESTA SUB-ROTINA ATUALIZA O DISPLAY DE SETE SEGMENTOS;**********************************************************************************************************************************************ATUAL_DSP

BTFSS FLAGS,NORMAL_PROG ;MODO NORMAL ATIVADO?GOTO $+4 ;SIM, SALTA QUATRO LINHAS DE CODIGO PARA BAIXOCALL PROG_MODO ;NAO, CHAMADA A SUB-ROTINAMOVWF PORTB ;ATUALIZA DISPLAYRETURN ;RETORNABTFSS FLAGS,ACENDE_DSP ;ACENDER DISPLAY?GOTO APAGAR_DSP ;NAO, DESVIAMOVF CONTADOR,W ;SIM, W RECEBE CONTADORMOVWF TEMP ;TEMP RECEBE WCALL CONV_DISPLAY ;CHAMADA A SUB-ROTINAMOVWF PORTB ;ATUALIZA DISPLAYRETURN ;RETURN

APAGAR_DSP

CLRF PORTB ;APAGA DISPLAYRETURN ;RETORNA

PROG_MODO

MOVF PERIODO,W ;W RECEBE PERIODOMOVWF TEMP ;TEMP RECEBE W

;**********************************************************************************************************************************************CONV_DISPLAY

MOVF TEMP,W ;W RECEBE CONTEUDO DE CONTADORADDWF PCL,F ;SOMA PCL E W

;OS COMENTÁRIOS A SEGUIR SE REFEREM AOS VALORES VISTOS NO DISPLAY; .GFEDCBA ;POSICAO DOS SEGMENTOS DO DISPLAY LIGADO NO PORTB

RETLW B'00111111' ;0RETLW B'00000110' ;1RETLW B'01011011' ;2RETLW B'01001111' ;3RETLW B'01100110' ;4RETLW B'01101101' ;5RETLW B'01111101' ;6RETLW B'00000111' ;7RETLW B'01111111' ;8RETLW B'01100111' ;9

;**********************************************************************************************************************************************;ESTA SUB-ROTINA EFETUA CONTAGEM DO TEMPO E SINALIZA QUANDO PASSA 0,5 S;**********************************************************************************************************************************************TIMER_4mSEG

Respostas dos execícios 35

Page 36: Respostas Dos Exercicios

BTFSS INTCON,T0IF ;TMR0 ESTOUROU?GOTO $-1 ;NAO, ESPERA TMR0 ESTOURARBCF INTCON,T0IF ;SIM, APAGA FLAG T0IFMOVLW INIC_TMR0 ;INICIALIZA TIMER 0 MOVWF TMR0 ;COM 131DECFSZ COUNT,F ;PASSOU 0,5 SEG?RETURN ;NAO, RETORNAMOVLW CONTA ;SIM, INICIALIZA COUNT COM 125MOVWF COUNT

;**********************************************************************************************************************************************;ESTA PARTE DA SUB-ROTINA CHAVEIA O BIT MEIO_SEG CADA VEZ QUE PASSAR 0,5 S;E ACIONA O FLAG ACENDE_DSP(ACENDE DISPLAY).

BTFSS FLAGS,MEIO_SEG ;FLAG MEIO_SEG ATIVADO?GOTO $+3 ;NAO, SALTA TRES LINHAS DE CODIGO PARA BAIXOBCF FLAGS,MEIO_SEG ;SIM, APAGA FLAG MEIO_SEGGOTO $+2 ;SALTA DUAS LINHAS DE CODIGO PARA BAIXOBSF FLAGS,MEIO_SEG ;SET FLAG MEIO SEGUNDODECFSZ TEMP2,F ;DECREMENTA TEMP2, TEMP2=0?RETURN ;NAO, RETORNAMOVF PERIODO,W ;SIM, W RECEBE PERIODOMOVWF TEMP2 ;TEMP2 RECEBE W

BTFSS FLAGS,ACENDE_DSP ;FLAG ACENDER DISPLAY ESTA ACESO?GOTO $+3 ;NAO, SALTA TRES LINHAS DE CODIGO PARA BAIXOBCF FLAGS,ACENDE_DSP ;SIM, DESATIVA FLAG ACERDER DISPLAYRETURN ;RETORNABSF FLAGS,ACENDE_DSP ;ATIVA FLAG ACERDER DISPLAYRETURN ;RETORNA

;**********************************************************************************************************************************************; SUB-ROTINA DE ESCRITA NA EEPROM;**********************************************************************************************************************************************;A SUB-ROTINA A SEGUIR E UMA PROPOSTA PARA UMA ROTINA DE ESCRITA NA EEPROM.;O PROGRAMA IRA GRAVAR O DADO ARMAZENADO NO REG PERIODO, NA LOCALIDADE;00H DA EEPROM E IRA SE COMPORTAR DA SEGUINTE FORMA:

; 1 - SE O CICLO DE ESCRITA TERMINAR ANTES DE 8mS E O DADO GRAVADO;ESTIVER CORRETO, O PROGRAMA RETORNARA O VALOR 00H EM W (ESCRITA COM SUCESSO),;INDICANDO QUE A ESCRITA FOI EFETUADA COM SUCESSO.; 2 - SE O CICLO DE ESCRITA TERMINAR ANTES DE 8mS E O DADO GRAVADO;ESTIVER INCORRETO, O PROGRAMA TRAVARA, INDICANDO QUE A ESCRITA FOI EFETUADA,;MAS SEM SUCESSO, EXIBINDO NO DISPLAY UMA MENSAGEM DE ERRO.; 3 - SE O CICLO DE ESCRITA NAO TERMINAR EM 8mS O PROGRAMA TRAVARA, ;INDICANDO QUE A ESCRITA NAO FOI CONCLUIDA PORQUE O TEMPO SE ESGOTOU, SENDO EXIBIDA UMA ;MENSAGEM DE ERRO. ;**********************************************************************************************************************************************ESCREVE_EEPROM

BTFSS FLAGS,ESCRITA_EEPROM ;ESCRITA EM ANDAMENTO?GOTO VERIF_PERIODO ;NAO, DESVIAGOTO TERMINA_ESC ;SIM, DESVIA

;**********************************************************************************************************************************************;VERIFICA SE PERIODO FOI ALTERADOVERIF_PERIODO

BANK1 ;ATIVA BANCO 1 DE MEMORIA MOVLW .0 ;ENDERECO DA EEPROM QUE SERA LIDOMOVWF EEADRBSF EECON1,RD ;INICIA CICLO DE LEITURAMOVF EEDATA,W ;W RECEBE DADO LIDOXORWF PERIODO,W ;W = (W xor PERIODO)BANK0 ;ATIVA BANCO 0

BTFSC STATUS,Z ;PERIODO DE PISCAGEM FOI ALTERADO?RETURN ;NAO, RETORNA

;SIM, CONTINUA;**********************************************************************************************************************************************

36 Microcontroladores PIC16F628A/648A - Uma Abordagem prática e Objetiva

Page 37: Respostas Dos Exercicios

;INICIA O CICLO DE ESCRITAINICA_ESCRITA

BANK1MOVLW ENDERECO ;ENDERECO ONDE SERA GRAVADO O DADOMOVWF EEADRMOVF PERIODO,W ;DADO A SER GRAVADO EM ENDERECO(0x00)MOVWF EEDATABSF EECON1,WREN ;HABILITA ESCRITA BCF INTCON,GIE ;DESLIGA CHAVE GERAL DE INTERRUPCAOMOVLW 0X55MOVWF EECON2 ;ESCREVE 55h EM EECON2MOVLW 0XAAMOVWF EECON2 ;ESCREVE AAh EM EECON2BSF EECON1,WR ;DA INICIO AO CICLO DE ESCRITA

MOVLW .2 ;INICIALIZA TEMP_ESPERA COM 2MOVWF TEMP_ESPERABSF FLAGS,ESCRITA_EEPROM ;ATIVA FLAG ESCRITA EM ANDAMENTOBANK0 ;ATIVA BANCO 0 RETURN ;RETORNA

;**********************************************************************************************************************************************;TESTA O BIT WR DUAS VEZES NUM PERIODO DE 8mS. ;SE O CICLO DE ESCRITA NAO TERMINAR APOS ESTE TEMPO SERA GERADO UM CODIGO DE ERROTERMINA_ESC

BANK1 ;ATIVA BANCO 1 BTFSS EECON1,WR ;CICLO DE ESCRITA TERMINOU?

GOTO VERIFICA_DADO ;SIM, VERIFICA SE DADO GRAVADO ESTA ;CORRETO

DECFSZ TEMP_ESPERA,F ;NAO, TEMPO ESGOTADO? GOTO $+3 ;NAO, PULA TRES LINHAS DE CODIGO P/ BAIXO BANK0 ;SIM, ATIVA BANCO 0 GOTO TEMP_ESG ;DESVIA BANK0 ;ATIVA BANCO 0 RETURN ;SIM, RETORNA

TEMP_ESG

BANK1 ;ATIVA BANCO 1BCF EECON1,WREN ;DESABILITA ESCRITABANK0 ;ATIVA BANCO 0BCF FLAGS,ESCRITA_EEPROM ;DESATIVA FLAG ESCRITA EM ANDAMENTOMOVLW B'01001111' ;EXIBE MENSAGEM DE ERRO NO DISPLAY

MOVWF PORTB ;A MENSAGEM DE ERRO (EXIBE A LETRA E).NOP ;TRAVA O PROGRAMA NESTE PONTOGOTO $-1

;**********************************************************************************************************************************************;DADO ESCRITO ESTA CORRETO. SE A RESPOSTA FOR SIM, O PORGRAMA IRA TRAVAR.VERIFICA_DADO

MOVLW .2 ;INICALIZA TEMP_ESPERA COM VALOR 2 MOVWF TEMP_ESPERA BANK1 ;ATIVA BANXO 1 MOVF EEDATA,W ;W RECEBE DADO ESCRITO BSF EECON1,RD ;INICIA CICLO DE LEITURA SUBWF EEDATA,W ;W = EEDATA - W

BTFSS STATUS,Z ;DADO ESCRITO E O MESMO QUE FOI LIDO?GOTO TRATA_ERRO ;NAO, DESVIABCF EECON1,WREN ;DESABILITA ESCRITABANK0 ;SIM, ATIVA BANCO 0BCF FLAGS,ESCRITA_EEPROM ;DESATIVA FLAG ESCRITA EM ANDAMENTORETLW .0 ;RETORNA 0 (CODIGO DE ESCRITA FEITA COM SUCESSO)

;**********************************************************************************************************************************************;SE O DADO GRAVADO NAO E O MESMO QUE FOI LIDO, SERA GERADO UM CODIGO DE ERRO;DE DADO INCORRETO QUE IRA TRAVAR O PROGRAMA.TRATA_ERRO

Respostas dos execícios 37

Page 38: Respostas Dos Exercicios

BANK1 ;ATIVA BANCO 1BCF EECON1,WREN ;DESABILITA ESCRITABANK0 ;ATIVA BANCO 0

BCF FLAGS,ESCRITA_EEPROM ;DESATIVA FLAG ESCRITA EM ANDAMENTOMOVLW B'01001111' ;SIM, EXIBE MENSAGEM DE ERRO NO DISPLAYMOVWF PORTB ;A MENSAGEM DE ERRO (EXIBE A LETRA E).NOP ;TRAVA O PROGRAMA NESTE PONTOGOTO $-1

;**********************************************************************************************************************************************END ;FIM DO PROGRAMA;**********************************************************************************************************************************************

Capítulo 14: M<ódulo CCP (Capture, Compare e PWM)1. Capture, Compare e PWM.

2. CCP1M3:CCP1M0(CCP1CON<3:0>).

3. O TIMER 1 é utilizado para medir o tempo entre dois eventos ocorridos no pino RB3/CCP1. Esses eventos são, na verdade, transições positivas (bordas de subida) ou transições negativas (bordas de descida) ocorridas nesse pino, dependendo da configuração adotada para o modo Capture.

4. Como temporizador ou como contador sincronizado.

5. Nesse modo de funcionamento do módulo CCP, o conteúdo do par de registradores TMR1H:TMR1L é comparado, a todo o instante, com o conteúdo do par de registradores CCPR1H:CCPR1L. Quando ocorrer a igualdade de conteúdo, o pino RB3/CCP1 será chaveado de acordo com o modo de funcionamento do Compare no momento.

6. Este é o nome dado ao modo de funcionamento do Compare que zera(ou reseta) o TMR1 quando ocorre a igualdade.

7. Não. Como o módulo TIMER 1 deixa de funcionar no modo sleep, devido à parada do oscilador principal, ou funciona como contador não sincronizado, o modo Compare também não pode funcionar.

8. Modulação por Largura de Pulso.

9. É um sinal digital com freüência fixa, mas com ciclo ativo variável. Ciclo ativo é a a parte do ciclo na qual o sinal permanece em nível 1.

10. É a relação entre o ciclo ativo e o período do sinal PWM.

11. Fazer o sinal PWM passar por um filtro passa baixas. A freqüência de corte do filtro passa baixas deve ser pelo menos 10 vezes menor que a freqüência do sinal PWM.

12. O período do sinal PWM gerado no pino RB3/CCP1 é definido pelo valor escrito no registrador PR2, pela Fosc e pelo fator de prescaler aplicado ao TMR2.

13. Quando TMR2 = (PR2 + 1).

14. Número de passos.

15. É necessário que: 0 < (CCPR1L:CCP1CON<5:4>) < [(PR2 + 1) x 4].

38 Microcontroladores PIC16F628A/648A - Uma Abordagem prática e Objetiva

Page 39: Respostas Dos Exercicios

Capítulo 15: Módulo Comparador1. O comparador é um circuito eletrônico que compara duas tensões analógicas e chaveia a saída

quando uma das tensões torna-se maior que a outra.

2. Dois.

3. Oito. Por meio dos bits CM2:CM0(CMCON<2:0>).

4. Modo 0.

5. É o tempo mínimo necessário para que, após ser aplicada na entrada do comparador uma nova tensão, esteja garantido, na saída deste, um nível de tensão válido.

6. Quando ocorre uma mudança de nível lógico na saída de um dos comparadores do módulo comparador.

Capítulo 16: Módulo Referência de Tensão1. O módulo referência de tensão fornece 16 níveis diferentes de tensão que podem estar

disponíveis no pino RA2/AN2 ou podem ser aplicados simultaneamente nas entradas Vin+(não inversora) de ambos os comparadores, quando o módulo comparador estiver operando no modo 2.

2. Bits VR3:VR0(VRCON<3:0>).

3. Selecionar a escala que será utilizada na geração da tensão de referência. Com VRR=1 será utilizada a escala baxia de tensão. Com VRR=0 será selecionada a escala alta de tensão.

4. 0,833v.

5. Sempre que ocorrer um reset, o módulo referência de tensão será desativado (modo 0), devido ao fato de que qualquer reset zera o registrador VRCON.

6. 10s.

Capítulo 17: USART1. Ponto a ponto ou multi ponto. A comunicação ponto a ponto Caracteriza-se pela presença de

apenas dois pontos de comunicação, um em cada extremidade do enlace. Na comunicaçã multi ponto observa-se a presença de três ou mais dispositivos de comunicação com possibilidade de utilização do mesmo enlace.

2. Simplex - o meio de transmissão é utilizado apenas em um dos possíveis sentidos de transmissão.

Half-duplex - é utilizado nos dois possíveis sentidos de transmissão, porém apenas um por vez, ou seja, se um terminal está transmitindo, o outro terminal não pode transmitir e vice-versa.

Full-duplex - é utilizado nos dois sentidos possíveis de transmissão simultaneamente, ou seja, os dois terminais podem transmitir ao mesmo tempo.

3. De modo síncrono ou de modo assíncrono.

4. A transmissão síncrona precisa de dois meios de transmissão: um para o sinal de clock que irá sincronizar a transmissão e outro para os dados. A transmissão assíncrona só precisa de um meio

Respostas dos execícios 39

Page 40: Respostas Dos Exercicios

de transmissão: por onde vão trafegar os dados.

5. É o tempo no qual o bit ficará disponível no meio de transmissão para ser lido pelo receptor.

6. Por meio do Start Bit. Este sempre inicia uma transmissão assíncrona.

7. É um conjunto de regras que devem ser seguidas pelo transmissor e pelo receptor para que a comunicação tenha sucesso.

8. Por meio de sinais de controle, com os do tipo DTS e CTS. Este tipo de controle de fluxo é chamdo de controle de fluxo por hardware, ou out band. O controle de fluxo de dados pode ser feito também por meio de caracteres de controle de fluxo enviados pelo canal de transmissão. Esse método de controle de fluxo é chamado in-band ou controle de fluxo por software.

9. A USART pode ser configurada como um sistema assíncrono full-duplex ou como um sistema síncrono half-duplex. A tansmissão assíncrona full-duplex permite ao MCU se comunicar com computadores pessoais, modems, etc. Já a transmissão síncrona half-duplex permite ao MCU se comunicar com periféricos como conversores A/D e D/A, chips relógio-calendário, chips de memória EEPROM etc.

10. TXSTA. O endereço ocupado por este registrador é o 98h, no banco 1 de memória RAM.

11. RCSTA. O endereço ocupado por este registrador é o 18h, no banco 0 de memória RAM.

12. E.

13. Dois erros podem ser detectados pelo módulo receptor da USART, um por meio do bit FERR, que informa que stop bit = 0, quando deveria ser 1. Este é um erro grave na comunicação, pois mostra que o transmissor e receptor não estão sincronizados. O outro é o erro de transbordo, sinalizado pelo bit OERR, que indica que o último byte que chegou foi perdido.

14. O baud rate define o período do bit, também chamado de intervalo de sinalização. O período do bit é o tempo em que o bit permanecerá na linha de transmissão para que ele possa ser lido pelo receptor. O baud rate representa a quantidade de bits que pode ser transmitida por segundo (bps).

15. A melhor opção é utilizar a alta taxa de transferência, fazendo o bit BRGH = 1. O valor a ser escrito no registrador SBRGH deve ser 12. O erro de baud rate será de 0,16%. A taxa de transferência real será de 19230,77 bps.

16. Quando o dado a ser transmitido for colocado no registrador TXREG.

17. ASCII.

18. Para o registrador RCREG.

19. A idéia é utilizar o nono bit para diferenciar em uma transmissão um endereço de um dado. Setando o bit ADDEN junto com o bit RX9, nós podemos ativar essa funcionalidade. Depois de setados os bits ADDEN e RX9, qualquer dado que chegar pela USART com o nono bit (RX9D) = 0 será descartado, ou seja, o dado não será transferido para o registrador RCREG, da mesma forma que não será gerada a interrupção do módulo receptor da USART, ainda que esteja habilitada. Um dado recém-chegado pela USART será transferido para o registrador RCREG quando o nono bit (RX9D)=1. Esse nono bit será reconhecido pelo receptor como um endereço. No mesmo instante será setado o bit RCIF (P1RI<5>), sendo também gerada a interrupção do módulo receptor da USART, caso ela esteja habilitada.

20. Sincronizar o transmissor com o receptor para que o dado seja lido no momento certo. Na transmissão síncrona, o dado estará disponível para leitura na borda negativa do sinal de clock.

21. O mestre é aquele que gera o sinal de clock na transmissão.

22. Receptor síncrono funcinando como escravo.

40 Microcontroladores PIC16F628A/648A - Uma Abordagem prática e Objetiva

Page 41: Respostas Dos Exercicios

Capítulo 18: PIC16F648A1. A principal diferença entre eles é a memória de programa. O PIC16F648A possui o dobro de

memória de programa, ou seja, 4k (4.096) posições de memória de programa. Outra diferença entre esses modelos de MCU é a memória RAM. O PIC16F648A possui 256 posições, enquanto o PIC16F628A possue 224 posições de memória RAM. Além disso, esses MCUs possuem quantidades diferentes de memória EEPROM. O PIC16F648A possui o dobro de localidades de EEPROM, ou seja, 256 localidades.

2. P16F648A.INC.

Respostas dos execícios 41