P. 1
Microcontrolador PIC16F877A

Microcontrolador PIC16F877A

|Views: 832|Likes:
Publicado porMarcelo_Donisete

More info:

Published by: Marcelo_Donisete on Aug 29, 2011
Direitos Autorais:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

05/23/2013

pdf

text

original

Professor Sérgio Minas Melconian.

MICROCONTROLADOR PIC16F877A

FUNDAMENTOS E PROGRAMAÇÃO BÁSICA

1

Professor Sérgio Minas Melconian.

Introdução
PIC – PROGRAMMABLE INTERRUPT CONTROLLER (CONTROLADOR DE INTERRUPÇÃO PROGRAMÁVEL) é um componente eletrônico programável produzido pela Microchip Technology Inc, utilizado no controle de processos e atividades lógicas. Os microcontroladores são compostos de uma única pastilha de silício encapsulada, popularmente chamada de CI (Circuito Integrado) e todos os elementos necessários para o controle das atividades estão internamente ligados a pastilha de silício. Aliás, essa é a característica principal que diferencia os microcontroladores dos microprocessadores. O PIC16F877A está enquadrado na família 8 bits de microcontroladores Microchip, possui via de programação com 14 bits e um conjunto de 35 instruções.

2

Professor Sérgio Minas Melconian.

Arquiteturas dos Microcontroladores
Os microcontroladores apresentam uma estrutura interna de máquina na qual irá determinar a maneira como os dados e o programa serão processados. As arquiteturas mais utilizadas para sistemas computacionais digitais são: Arquitetura Von Neumann: A Unidade Central de Processamento (CPU) está conectada a memória de dados e programa por um único barramento (bus) de 8 bits. Arquitetura Harvard: A Unidade Central de Processamento (CPU) está conectada a memória de dados e memória de programa por barramento (bus) distintos. Sendo o barramento de dados composto por 8 bits e o barramento de programa formado por 14 bits (caso da família 16F).

Arquitetura Harvard x Von Neumann Os microcontroladores PIC utilizam como estrutura interna de máquina a arquitetura Harvard, a qual possibilita uma velocidade de processamento mais rápida, pois em quanto uma instrução está sendo executada, outra já está sendo buscada na memória. Além do mais, o fato do barramento de instruções ser maior do que 8 bits, o OPCODE (referência à instrução que um determinado processador possui para conseguir realizar determinadas tarefas) inclui o dado e o local onde ele vai operar, o que indica que apenas uma posição de memória será utilizada por instrução, levando a uma economia de memória de programa.

Filosofias RISC E CISC
O fato do PIC trabalhar com a arquitetura Harvard, possibilita utilizar uma tecnologia chamada RISC (Reduced Instruction Set Computer) – Computador com Set de Instruções Reduzido. Ou seja, pode-se trabalhar com uma lista de códigos de instruções de programação de cerca de 35 instruções (esse número varia um pouco de modelo para modelo). Já se fossemos utilizar a tecnologia CISC (Complex Instruction Set Computer) – Computador com Set de Instruções Complexo, seriam necessários se conhecer cerca de 100 instruções de programação. Tornando o aprendizado mais árduo, porém algumas funções na tecnologia CISC se tornam mais fáceis, pois já existem, logo para o programador que utiliza o set reduzido, há uma maior cobrança das suas habilidade.

3

Professor Sérgio Minas Melconian.

O PIC16F877A
Microcontrolador de 40 pinos; Memória de programa 14 bits com 8k words, capacidade de escrita e leitura pelo próprio código interno; Arquitetura Harvard e tecnologia RISC com 35 instruções; 33 portas configuráveis como entrada e saída; 15 interrupções disponíveis; Memória de programação E2PROM FLASH permite a gravação do programa diversas vezes por meio de pulsos elétricos no mesmo CI, não é necessário apagá-lo por meio de luz ultravioleta; Memória E2PROM (não-volátil) interna com 256 Bytes; Memória RAM com 368 Bytes; 3 TIMERs (dois de 8 bits e um de 16 bits); Comunicação serial padrão RS232: SPI, I2C e USART; Conversores A/D 10 bits (8x) e Comparadores analógicos (2x); Dois módulos CCP: Capture, Compare e PWM; Programação in-circuit (alta e baixa tensão); Power-on Reset (POR) interno – Ao ligar o microcontrolador, ele garante funcionamento correto do PIC; Brown-out Reset (BOR) interno – Ele “Reseta” o PIC sempre que a tensão de alimentação for menor que 4V;

• • • • • •

• • • • • • • • •

4

Professor Sérgio Minas Melconian. Pinagem – Encapsulamento PDIP .40 Pinos 5 .

I/O DIGITAL OU ENTRADA ANALÓGICA OU HABILITAÇÃO EXTERNA PARA COMUNICAÇÃO SPI OU SAÍDA DO COMPARADOR 2. I/O DIGITAL OU SAÍDA DE DADOS PARA SPI. I/O DIGITAL COM INTERRUPÇÃO EXTERNA. I/O DIGITAL OU ENTRADA DO CAPTURE1 OU SAÍDAS PARA COMPARE1/PWM1. I/O DIGITAL COM INTERRUPÇÃO POR MUDANÇA DE ESTADO OU CLOCK DA PROGRAMAÇÃO SERIAL OU PINO DE IN-CIRCUIT DEBUGGER. I/O DIGITAL OU ENTRADA DO OSCILADOR EXTERNO PARA TMR1 OU ENTRADA DO CAPTURE2 OU SAÍDAS PARA COMPARE2/PWM2. I/O DIGITAL OU ENTRADA PARA PROGRAMAÇÃO EM 5V. ENTRADA PARA TENSÃO DE PROGRAMAÇÃO EM 13V. GND (TERRA). I/O DIGITAL OU ANALÓGICO. I/O DIGITAL COM INTERRUPÇÃO POR MUDANÇA DE ESTADO. I/O DIGITAL OU DADO 3 (COMUNICAÇÃO PARALELA). I/O DIGITAL OU ANALÓGICO OU TENSÃO NEGATIVA DE REFERÊNCIA ANALÓGICA. I/O DIGITAL (OPEN DRAYN.Professor Sérgio Minas Melconian. I/O DIGITAL OU DADO 1 (COMUNICAÇÃO PARALELA). I/O DIGITAL OU DADO 0 (COMUNICAÇÃO PARALELA). SAÍDA P/ CRISTAL. I/O DIGITAL OU RX (RECEPÇÃO) PARA COMUNICAÇÃO USART ASSÍNCRONA OU DATA PARA COMUNICAÇÃO SÍNCRONA. I/O DIGITAL. SÓ FUNCIONA COM O PINO EM NÍVEL LÓGICO “1”. MASTER CLEAR (RESET) EXTERNO. I/O DIGITAL COM INTERRUPÇÃO POR MUDANÇA DE ESTADO./ CVREF RA3 / AN3 / VREF+ RA4 / T0CKI / C1OUT RA5 / SS / AN4 / C2OUT RB0 / INT RB1 RB2 RB3 / PGM RB4 RB5 RB6 / PGC RB7 / PGD RC0 / T1OSO / T1CKI RC1 / T1OSI / CCP2 RC2 / CCP1 RC3 / SCK / SCL RC4 / SDI / SDA RC5 / SDO RC6 / TX / CK RC7 / RX / DT RD0 / PSP0 RD1 / PSP1 RD2 / PSP2 RD3 / PSP3 Nº 13 14 1 12/31 11/32 2 3 4 5 6 7 33 34 35 36 37 38 39 40 15 16 17 18 23 24 25 26 19 20 21 22 Caracte rística I O I/P P P I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O Tipo ST/CMOS4 Descrição ENTRADA PARA OSCILADORES EXTERNOS. I/O DIGITAL OU DADO 2 (COMUNICAÇÃO PARALELA). I/O DIGITAL OU ENTRADA/SAÍDA DE CLOCK PARA COMUNICAÇÃO SERIAL SPI / I2C. I/O DIGITAL OU TX (TRANSMISSÃO) PARA COMUNICAÇÃO USART ASSÍNCRONA OU CLOCK PARA COMUNICAÇÃO SÍNCRONA. I/O DIGITAL COM INTERRUPÇÃO POR MUDANÇA DE ESTADO OU DATA DA PROGRAMAÇÃO SERIAL OU PINO DE IN-CIRCUIT DEBUGGER I/O DIGITAL OU SAÍDA DO OSCILADOR EXTERNO PARA TMR1 OU ENTRADA DE INCREMENTO PARA TMR1. I/O DIGITAL OU ANALÓGICO OU TENSÃO POSITIVA DE REFERÊNCIA ANALÓGICA. I/O DIGITAL OU ANALÓGICO. ST TTL TTL TTL TTL ST TTL TTL/ST1 TTL TTL TTL TTL TTL TTL/ST2 TTL/ST2 ST ST ST ST ST ST ST ST TTL/ST3 TTL/ST3 TTL/ST3 TTL/ST3 6 . ALIMENTAÇÃO POSITIVA. NÃO CONSEGUE GERAR NÍVEL LÓGICO ALTO) OU ENTRADA EXTERNA DO CONTADOR TMR0 OU SAÍDA DO COMPARADOR 1. I/O DIGITAL. I/O DIGITAL OU ENTRADA DE DADOS PARA SPI OU VIA DE DADOS (I/O) PARA I2C. Nomenclatura dos pinos Nome do Pino OSC1 / CLKIN OSC2 / CLKOUT MCLR / VPP VSS VDD RA0 / AN0 RA1 / AN1 RA2 / AN2 / VREF.

quando configurado como interrupção externa. RD4 / PSP4 RD5 / PSP5 RD6 / PSP6 RD7 / PSP7 RE0 / RD / AN5 RE1 / WR / AN6 RE2 / CS / AN7 Legenda: I => Input (Entrada). I/O DIGITAL OU CONTROLE DE ESCRITA DA PORTA PARALELA OU ENTRADA ANALÓGICA. P => Power (Alimentação). I/O DIGITAL OU CONTROLE DE LEITURA DA PORTA PARALELA OU ENTRADA ANALÓGICA. I/O DIGITAL OU DADO 7 (COMUNICAÇÃO PARALELA). pois há interferência direta nos níveis de tensão (0 ou 1) interpretados pelo microcontrolador. durante o modo do programação serial. quando em modo RC e CMOS no geral. I/O DIGITAL OU CONTROLE DE ESCRITA DA PORTA PARALELA OU ENTRADA ANALÓGICA. (1). TTL => Pino tipo TTL. mantém nível anterior (0 ou 1). Observação quanto TTL e Schmitt Trigger (ST) As portas do PIC podem ser do tipo TTL ou ST. Notas: 1 2 27 28 29 30 8 9 10 I/O I/O I/O I/O I/O I/O I/O TTL/ST3 TTL/ST3 TTL/ST3 TTL/ST3 TTL/ST3 TTL/ST3 TTL/ST3 I/O DIGITAL OU DADO 4 (COMUNICAÇÃO PARALELA). Entrada tipo ST. isso é um dado muito importante no momento de se utilizá-las. quando configurado como I/O de uso geral e TTL quando usado em modo de porta paralela. => Não utilizado. Entrada tipo ST. 4 Entrada tipo ST. 7 . (2) Região incerta. 3 Entrada tipo ST. I/O => Input/Output (Entrada ou Saída). I/O DIGITAL OU DADO 5 (COMUNICAÇÃO PARALELA).Professor Sérgio Minas Melconian. O => Output (Saída). ST => Pino tipo Schmitt Trigger. I/O DIGITAL OU DADO 6 (COMUNICAÇÃO PARALELA).

8 .Professor Sérgio Minas Melconian. Estrutura Interna do PIC16F877A O diagrama de blocos (original Microchip) indicado a baixo mostra as diversas partes que compõem o microcontrolador.

onde: TCM = Tempo de Ciclo de Máquina. ele permite que todas as instruções sejam executadas em um ciclo de máquina. onde: CM = Tempo de Ciclo de Máquina. De maneira simplificada pode-se utilizar como cálculo de ciclo de máquina a seguinte equação: TCM = 4 / Freq. Ao observar as equações anteriores é possível perceber que os TCM estão relacionados a uma constante de valor 4. a próxima instrução é buscada da memória de programa e colocada na ULA. no instante Q4. como chamadas de rotinas e retornos que gastam 2 ciclos de máquina. O fato do processamento não ser paralelo. Q3 e Q4. = Freqüência do Oscilador. No caso dos microcontroladores PIC o sinal de clock é internamente dividido por 4. Assim sendo se utilizarmos um oscilador externo que gere um clock de 4MHz. a instrução carregada para ULA é executada. Exemplo PIPELINE Vamos imaginar uma lavanderia. Para executar uma única instrução pelo processador. originados pela divisão do clock externo. a Microchip garante perfeito funcionamento do ciclo de máquina com um oscilador de até 20MHz. CKext = Clock externo. 9 . Dentro dos quatro tempos (Q1 a Q4). CKint = CKext / 4 TCM = 1 / Ckint onde: CKint = Clock interno. mas qual o motivo desse número? Fácil o entendimento. Depois de lavada colocar na secadora. Depois de seca passar o ferro. exige operações de processamentos executados em sub-ciclos de máquina. Observação: No caso do microcontrolador PIC16F877A. Seqüência de trabalho: • • • • Colocar a roupa na máquina de lavar. na qual possui quatro atividades a serem realizadas.Professor Sérgio Minas Melconian. Ciclo de Máquina Todo microcontrolador possui um sinal de clock para poder trabalhar. Por fim guardá-la no armário. sendo trocadas informações com a memória de dados e o registrador W (Work) sempre que necessário. Por fim. Estes sub-ciclos são conhecidos por Q1. tem-se um clock interno de 1MHz e um ciclo de máquina de 1µs. O program counter (contador de programa) é incrementado no instante Q1 automaticamente. Freq. Observação: As exceções são os jumps (saltos) realizados no program counter. Osc. Esse processo é conhecido como PIPELINE. Q2. algumas operações são realizadas. Osc.

utilizando o ciclo sem PIPELINE. 10 . um cesto de roupas levará 2h para ficar pronto. o mesmo cesto ficará pronto em apenas 30 minutos. Ciclo sem PIPELINE Ciclo com PIPELINE Supondo que cada etapa gaste 30 minutos para ser realizada.Professor Sérgio Minas Melconian. Já utilizando o ciclo com PIPELINE. Ao final de duas horas teremos lavado 4 cestos de roupas.

Professor Sérgio Minas Melconian. 11 . Seqüência no PIC Memórias Memória de Programa: É a memória onde ficará armazenada as instruções do programa no qual fará o controle das atividades. No caso do PIC16F877A esta é uma memória do tipo FLASH de 8192 palavras (8K) e 14 bits.

Memória de Dados: A memória de dados é volátil do tipo RAM (Random Access Memory).Professor Sérgio Minas Melconian. 12 . A pilha desse PIC armazena endereços de 13bits. Serve para guardar as variáveis e os registradores utilizados pelo programa. Ela armazena dados de 8 bits e está dividida em dois grupos: Registradores Especiais e Registradores de uso geral. o endereço seguinte ao ponto que estava sendo executado é guardado na pilha. fisicamente separada da memória de programa. a informação mais antiga será perdida. O PIC16F877A possui uma pilha com 8 níveis. Quando o programa é desviado por meio do comando CALL. possibilitando guardar até 8 endereços de retorno (8 desvios consecutivos). Demais características da memória de programa Vetor de Reset: É a posição 0x0000h de endereço da memória de programa. é para onde o programa vai quando é reiniciado (reset). sendo suficiente para gerenciar 8k de memória de programa. Vetor de interrupção: É a posição 0x0004h de endereço da memória de programa. onde serão guardados os endereços de retorno quando utilizados desvios para chamada de rotinas. Pilha (STACK): É uma região. Caso o programador tente ocupar mais de 8 níveis da pilha. Este PIC possui 15 tipos de interrupções diferentes. é a posição de memória para onde serão desviados todos os processamentos de interrupção. o programa retorna ao ponto que estava. ao fim da rotina.

as quais sempre serão desviadas para o vetor de interrupção (0004h) da memória de programa. para serem escritas ou lidas pelo programa. Acesso aos bancos de memória Para acessar os bancos de memória é preciso gerenciar os registradores STATUS <RP1:RP0>. com isso só se pode gerenciar 128 endereços diferentes. O PIC 16F877A é composto por 15 interrupções diferentes. Observação: A memória de dados está divida em 4 bancos de memória (Banco 0. Normalmente elas são geradas devido ações externas. Demais características da memória de dados Registradores Especiais: Região da memória de dados onde se encontram todos os registradores especiais e que são utilizados pelo PIC para a execução do programa e processamento da ULA. Por isso que o fabricante dividiu a memória em quatro grupos de 128 Bytes cada. 13 . Banco 2 e Banco 3). o Banco 0 será o primeiro a ser selecionado.Professor Sérgio Minas Melconian. BANCO RP1 0 0 1 0 2 1 3 1 RP0 0 1 0 1 Observação: Sempre que o PIC for ligado. Interrupções As interrupções são ferramentas que possibilitam a execução de determinadas situações no momento em que elas ocorrem. Banco 1. Registradores de uso geral: Região da memória de dados onde é possível armazenar até 368 Bytes de variáveis definidas pelo programador. isso ocorre devido a existência de apenas 7 bits para endereçamento de todos os registradores.

Professor Sérgio Minas Melconian. Interrupção dos Comparadores. Interrupção do Timer 1.3V) 1W 300mA 250mA 25mA 25mA 200mA 200mA 200mA 200mA 14 . As 15 interrupções que compõem o PIC 16F877A são: • • • • • • • • • • • • • • Interrupção de Timer 0. Interrupção de Recepção da USART. Interrupção dos Conversores A/D.3V a (VDD + 0. Interrupção por mudança de Estado. Interrupção de Timer 2. Interrupção de Colisão de Dados (BUS Collision). PORTB e PORTE Corrente Máxima de Saída do PORTA.3V a 7.5V -0. Interrupção da Comunicação Serial (SPI e I2C). Interrupção da Porta Paralela (PSP). PORTB e PORTE Corrente Máxima de Entrada do PORTC e PORTD Corrente Máxima de Saída do PORTC e PORTD -55ºC até +125ºC -65ºC até +150ºC 4V a 5. Interrupção de fim de escrita na E2PROM/FLASH.5V -0. Interrupção de Transmissão da USART. Características Elétricas Temperatura de Trabalho Temperatura de Armazenamento Tensão de Trabalho Tensão Máxima no Pino VDD (em relação a Vss) Tensão Máxima no MCRL (em relação a Vss) Tensão Máxima no Pino RA4 (em relação a Vss) Tensão Máxima nos Demais Pinos (em relação a Vss) Dissipação Máxima de Energia Corrente Máxima de Saída no Pino Vss Corrente Máxima de Entrada no Pino VDD Corrente Máxima de Saída de um Pino (em VDD) Corrente Máxima de Entrada de um Pino (em Vss) Corrente Máxima de Entrada do PORTA. Interrupção do CCP1 (Capture/Compare/PWM).5V 0 a 14V 0 a 8. Interrupção Externa.

Operações com bits. 15 . Subtrai W de f (f .d f. Limpa f.d se o resultado for zero.W) guardando o resultado em d. Lógica "E" entre W e f.d f.d f. Calcula o complemento de f guardando o resultado em d Decrementa f. Decrementa f. Operações com Registradores Instrução Argumentos ADDWF ANDWF CLRF COMF DECF f. Rotaciona f um bit para esquerda.d o resultado for zero. Rotaciona f um bit para direita. Incrementa f. guardando SWAPF XORWF f.Professor Sérgio Minas Melconian. Executa uma inversão entre as partes alta e baixa de f.d f f. Controles.d Descrição Soma W e f guardando o resultado em d. guardando o resultado em d. Move W para f (copia W em f). guardando o resultado em d. Set de Instruções O Set de instruções é dividido em quatro grupos.d f.d f. Operações com literais.d f. Lógica "ou exclusivo" entre k e W guardando o resultado em d. Lógica "ou" entre W e f.d f. os quais compõem um conjunto com 35 instruções: • • • • Operações com registradores.d f f. guardando o resultado em d. Incrementa f.d f. Move f para d (copia f em d). guardando o resultado em d e pula a próxima linha se INCFSZ IORWF MOVF MOVWF RLF RRF SUBWF f.d em d. guarda o resultado em d. guardando o resultado em d e pula a próxima linha DECFSZ INCF f.

Lógica "OU EXCLUSIVO” entre k e W. Retorna de uma rotina com k em W. Descrição f. Lógica "OU" entre k e W. Lógica "E" entre k e W. guardando o resultado em W. guardando o resultado em W. Retorna de uma interrupção. Operações com bit Instrução Argumentos BCF BSF BTFSC BTFSS Controles Instrução Argumentos CLRW NOP CALL CLRWDT GOTO RETFIE RETLW RETURN SLEEP R R K Limpa w. Limpa o registrador WDT para não acontecer reset. Subtrai W de k (k . Coloca o PIC em modo sleep (dormindo) para economia de energia. guardando o resultado em W.Professor Sérgio Minas Melconian. Testa o bit b do registrador f e pula a próxima linha se for 1 (um). guardando o resultado em W. 16 . Desvia para o ponto R mudando o PC. guardando o resultado em W.b f. Executa a rotina R. Retorna de uma rotina sem afetar W.W).b f. Operações com Literais Instrução Argumentos ADDLW ANDLW IORLW MOVLW SUBLW XORLW K K K K K K Descrição Soma k com W.b f. Impõe 1 (um) ao bit do registrador f.b Descrição Impõe 0(zero) ao bit do registrador f. Move k para W. Testa o bit b do registrador f e pula a próxima linha se for 0 (zero). Gasta um ciclo de máquina sem fazer nada.

Processo – Símbolo utilizado para descrever uma determinada tarefa. Elementos utilizados na construção dos fluxogramas: Inicio ou Término – Símbolo utilizado para representar inicio ou término de programa. Soma A+B Não Sim Guarda A+B em I A+B é Par? Guarda A+B em P FIM 17 . Fluxogramas Os fluxogramas são ferramentas que ajudam o programador a estruturar de maneira gráfica uma seqüência lógica de atividades que posteriormente serão executadas por um determinado programa. já se o resultado for impar guarda em I e finaliza o programa. Tomada de decisão – Símbolo utilizado para testes condicionais.Professor Sérgio Minas Melconian. Dados – Símbolo utilizado para descrição de entrada de dados. Pega número B. Exemplo: Serão somados dois números inteiros A+B. se o resultado for par guarda em P. Inicio Pega número A. E tomada de decisão pode seguir um fluxo verdadeiro ou falso.

BOREN . 18 . .WATCHDOG TIMER ("CÃO DE GUARDA" TEMPORIZADOR QUE RESETA O PIC QUANDO SISTEMA .INC> . DEBUG .ESTABILIZAR O PIC). XT . um LED se manterá ligado até o botão ser solto.LOW VOLTAGE PROGRAM (SISTEMA DE PROGRAMAÇÃO EM BAIXA TENSÃO). .CODE PROTECTION (HABILITA OU DESABILITA LEITURA DA MEMÓRIA DE PROGRAMA). __CONFIG _CP_OFF & _LVP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC .************************************************************************************* .DEPURADOR DA PLACA ICD 2 (HABILITA OU DESABILITA DEPURADOR DA PLACA ICD 2).BROWN OUT DETECT (SE A ALIMENTAÇÃO VDD FOR MENOR QUE 4V DURANTE 100 MICRO-SEG. . LVP . Fluxograma INICIO CONFIGURAÇÕES INICIAIS 1 SIM ACENDE O LED BOTÃO PRESSIONADO? NÃO APAGA O LED 1 O Programa . .***************************CONFIGURAÇÃO PARA GRAVAÇÃO************************* #INCLUDE <P16F877A. PWRTE . Primeiro Exemplo – Botão e LED Será dado inicio a programação dos microcontroladores PIC com um programa tradicional e simples de se entender.Professor Sérgio Minas Melconian.MODELO DO MICROCONTROLADOR UTILIZADO.************************************************************************************* . .POWER UP TIMER (HABILITA OU DESABILITA TEMPORIZADOR QUE AGUARDA 72 ms PARA . CP . Funcionamento: Ao apertar um botão.O PIC RESETA).OSCILADOR DO TIPO CRISTAL.* PROGRAMA LIGA LED POR MEIO DE UM BOTÃO * . .TRAVADO). WDT . .

*************************************VETOR DE RESET********************************** ORG 0X0000 GOTO INICIO .*****************************************FLAGS*************************************** .(PINO 33 .RB0) .SETA BANK 1 DE MEMÓRIA.FIM DO BLOCO DE MEMÓRIA. . DEVEMOS PRIMEIRO INFORMAR AO . 0 0 0 .1 -> ACESO .RETORNA DA INTERRUPÇÃO 19 . . "NÃO SERÁ UTILIZADO NESTE PROGRAMA". .RB1) . POR . FOI .1 .O PIC 16F877A POSSUI QUATRO BANCOS DE MEMÓRIAS PARA OS REGISTRADORES ESPECIAIS (SFR).****************************************ENTRADAS************************************* #DEFINE BOTAO_0 PORTB. BANCO RP1 RP0 .PARA ISSO DEVEMOS ALTERAR OS BITS RP0 E RP1 NO REGISTRADOR STATUS.ENDEREÇO DO VETOR DE INTERRUPÇÃO .***************************************VARIÁVEIS************************************* CBLOCK 0X70 . .ENDEREÇO LOCALIZADO NA MAMÓRIA DE DADOS DO BANK 0.OBS: SEMPRE QUE O PIC INICIA.***********************************INICIO DA INTERRUPÇÃO***************************** ORG 0X0004 RETFIE . 1 0 1 . ENDC . RP1 E RP0 SÃO INICIADOS COM ZERO.***************************************CONSTANTES************************************ .PULA PARA O INICIO . 2 1 0 .0 -> APAGADO .**************************DEFINIÇÃO DOS BANCOS DE MEMÓRIA RAM************************ #DEFINE BANK0 #DEFINE BANK1 BCF BSF STATUS. SINALIZA QUEM GEROU A INTERRUPÇÃO.LOGO O BANK 0 É SEMPRE O .LED 1 . FACILITANDO A OPERAÇÃO. POIS ESTÁ LOCALIZAÇÃO É ACESSADA DE QUALQUER BANCO.SETA BANK 0 DE MEMÓRIA. . . . FILTRO PARA EVITAR RUIDOS DOS BOTÕES.(PINO 34 .SISTEMA QUAL BANK QUEREMOS TRABALHAR. 3 1 1 .ESCOLHIDO. .ENDEREÇO DO VETOR DE RESET . QUANDO QUEREMOS ACESSAR ALGUM REGISTRADOR SFR. "NÃO SERÁ UTILIZADO NESTE PROGRAMA".ISSO. .TABELA: .0 .Professor Sérgio Minas Melconian. RP0 .*****************************************SAÍDAS************************************** #DEFINE LED_1 PORTB. RP0 STATUS.BOTÃO QUE LIGA O SISTEMA .PRIMEIRO SELECIONADO.

Quando um botão for pressionado dois LEDs acesos se apagarão. B) Ao apertar o botão faça dois LEDs acenderem.VAI PARA BOTÃO_LIBERADO. C) Utilize dois botões e quatro LEDs. .TRABALHAR COM BANK0 .O BOTÃO_0 ESTÁ PRESSIONADO? .RETORNA AO LOOP PRINCIPAL (MAIN) .APAGA LED_1 .ENTRADA.LIMPA PORTB .VAI PARA BOTÃO_PRESSIONADO. faça as seguintes alterações: A) Inverta a lógica do LED. .DEFINE RB0 COMO ENTRADA E DEMAIS PORTS B COMO SAÍDA (1 -> . . 0 -> SAÍDA).FIM DO PROGRAMA (OBRIGATÓRIO) Exercícios Propostos Utilizando como parâmetro o primeiro exemplo.*************************************INICIO DO PROGRAMA****************************** INICIO CLRF PORTB BANK1 MOVLW B'00000001' MOVWF TRISB . 20 . ao pressionar o botão o LED apagará e ao liberá-lo o LED acenderá.**************************************FIM DO PROGRAMA******************************** END .RETORNA AO LOOP PRINCIPAL (MAIN) . BANK0 .Professor Sérgio Minas Melconian.ACENDE LED_1 . já o outro botão ao ser pressionado acenderá dois LEDs que estavam apagados.*************************************ROTINA PRINCIPAL******************************** MAIN BTFSC BOTAO_0 GOTO BOTAO_LIBERADO GOTO BOTAO_PRESSIONADO BOTAO_LIBERADO BCF LED_1 GOTO MAIN BOTAO_PRESSIONADO BSF LED_1 GOTO MAIN .TRABALHAR COM BANK1 .

Professor Sérgio Minas Melconian. um LED se manterá ligado por 1s e desligará logo em seguida. Funcionamento: Ao apertar um botão. SIM APAGA O LED 1 21 . Fluxograma INICIO CONFIGURAÇÕES INICIAIS 1 SIM BOTÃO PRESSIONADO? NÃO APAGA O LED 1 ACENDE O LED CONTADOR DE TEMPO = 0s? NÃO DECREMENTA CONTADOR DE TEMPO. Segundo Exemplo – Contador de Tempo (DELAY) Neste segundo exemplo será estudada uma rotina para contar tempo.

**************************************************************************************************** .HABILITA BANCO 0 DE MEMÓRIA .********************************* INICIO DA INTERRUPÇÃO ***************************************** ORG 0X0004 RETFIE .******************************** PAGINAÇÃO DE MEMÓRIA DO PIC ********************************** #DEFINE BANK0 BCF STATUS.VAI PARA INICIO DO PROGRAMA .***************************************** SAÍDAS *************************************************** #DEFINE LED_1 PORTB.PORTA DO LED1 (PINO 34 .(PINO 33 .INICIO DA MEMÓRIA DE ÚSUARIO .1 .MODELO DO MICROCONTROLADOR UTILIZADO .1 -> ACESO .RETORNA DA INTERRUPÇÃO .INC> .RB0) .********************************** INICIO DO PROGRAMA ******************************************* INICIO CLRF PORTB . O Programa .CONTADOR DE TEMPO2 (VALOR 250) .************************************* VETOR DE RESET ********************************************* ORG 0X0000 GOTO INICIO .RB1) .LIMPA TODO PORTB 22 .**************************************************************************************************** .BOTÃO QUE LIGA O SISTEMA .******************************** ARQUIVOS DE DEFINIÇÃO DO PIC ********************************** #INCLUDE <P16F877A.* PROGRAMA CONTADOR DE TEMPO (DELAY) * .0 .FIM DO BLOCO DE MEMÓRIA .RP0 .0 -> APAGADO .PIC 16F877A __CONFIG _CP_OFF & _LVP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC .********************************** DEFINIÇÃO DAS VÁRIAVEIS ************************************** CBLOCK 0X70 TEMPO1 TEMPO2 TEMPO3 ENDC .CONTADOR DE TEMPO1 (VALOR 250) .RP0 #DEFINE BANK1 BSF STATUS.ENDEREÇO INICIAL PARA PROCESSAMENTO .Professor Sérgio Minas Melconian.CONTADOR DE TEMPO3 (VALOR 4) .**************************************** ENTRADAS ************************************************ #DEFINE BOTAO_0 PORTB.HABILITA BANCO 1 DE MAMÓRIA .ENDEREÇO INICIAL DA INTERRUPÇÃO .

RETORNA AO LOOP PRINCIPAL (MAIN) BOTAO_PRESSIONADO BSF LED_1 .ACENDE LED_1 CALL DELAY .25s DL2 MOVLW .RETORNA AO LOOP PRINCIPAL (MAIN) .250 MOVWF TEMPO2 .APAGA LED_1 GOTO MAIN .O BOTÃO_0 ESTÁ PRESSIONADO? .GASTA UM CICLO DE MÁQUINA. . BANK1 .TEMPORIZA 1s DL3 MOVLW .HABILITA BANCO 1 DE MEMÓRIA DO PIC MOVLW B'00000001' MOVWF TRISB .Professor Sérgio Minas Melconian.*********************************** ROTINA DE DELAY ********************************************* DELAY . BANK0 .CONFIGURA PORTB.TEMPORIZA 1ms DL1 NOP .VAI PARA BOTÃO_PRESSIONADO.DECREMENTA TEMPO1 GOTO DL1 DECFSZ TEMPO2 .DECREMENTA TEMPO3 GOTO DL3 23 .0 COMO ENTRADA E DEMAIS PINOS COMO SAÍDA. BOTAO_LIBERADO BCF LED_1 .250 MOVWF TEMPO1 .TEMPORIZA 1/4s = 0.CHAMA ROTINA DE DELAY BCF LED_1 .4 MOVWF TEMPO3 . DECFSZ TEMPO1 .DESLIGA LED_1 GOTO MAIN .ROTINA DE DELAY MOVLW .VAI PARA BOTÃO_LIBERADO.RETORNA PARA O BANCO 0 DE MEMÓRIA DO PIC .*********************************** ROTINA PRINCIPAL ********************************************** MAIN BTFSC BOTAO_0 GOTO BOTAO_LIBERADO GOTO BOTAO_PRESSIONADO .DECREMENTA TEMPO2 GOTO DL2 DECFSZ TEMPO3 .

FIM DO PROGRAMA Exercícios Propostos Utilizando como parâmetro o segundo exemplo. ligue o LED_1. C) Ao ligar o microcontrolador. passados 4s o LED_2 deverá piscar 5 vezes com um DELAY de 1s apagado e 3s ligado. 24 . B) Ao apertar um botão. após 2s ligue o LED_2 e os desligue após 2s.RETORNA DA ROTINA DE DELAY . faça as seguintes alterações: A) Ao apertar um botão. o LED_1 deve se manter aceso constantemente. RETURN . um LED ficará ligado por 5s e desligado logo em seguida.Professor Sérgio Minas Melconian.*********************************** FIM DO PROGRAMA ********************************************* END .

Terceiro Exemplo – Gerando Som (BUZZER) Neste terceiro exemplo será estudada uma rotina para se gerar som com um cristal piezelétrico (Buzzer).MODELO DO MICROCONTROLADOR UTILIZADO .**************************************************************************************************** .* PROGRAMA BUZZER * .********************************* PAGINAÇÃO DE MEMÓRIA DO PIC ********************************** #DEFINE BANK0 BCF STATUS.RP0 .HABILITA BANCO 1 DE MAMÓRIA .********************************* ARQUIVOS DE DEFINIÇÃO DO PIC ********************************** #INCLUDE <P16F877A. o PIC ira gerar ondas quadradas com freqüência tal para o funcionamento do mesmo.*********************************** DEFINIÇÃO DAS VÁRIAVEIS ************************************* CBLOCK 0X70 .HABILITA BANCO 0 DE MEMÓRIA .**************************************************************************************************** . O Programa .PIC 16F877A __CONFIG _CP_OFF & _CPD_OFF & _DEBUG_OFF & _LVP_OFF & _WRT_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC . Neste caso. Funcionamento: Para um buzzer soar.RP0 #DEFINE BANK1 BSF STATUS. é necessário alimentá-lo com uma fonte de sinal.Professor Sérgio Minas Melconian.INICIO DA MEMÓRIA DE ÚSUARIO TEMPO1 . Fluxograma INICIO CONFIGURAÇÕES INICIAIS GERAR ONDA QUADRADA COM FREQUÊNCIA f.INC> .VARIAVEL TEMPO1 25 .

5 (BUZZER) .**************************************ROTINA DE DELAY******************************** DELAY_MS .RETORNA PARA O BANCO 0 DE MEMÓRIA DO PIC .CHAMA ROTINA DE DELAY . ENDC .HABILITA BANCO 1 DE MEMÓRIA DO PIC MOVLW B'00000000' MOVWF TRISA .PORTA DO BUZZER .CONFIGURA TODO PORTA COMO SAÍDA.Professor Sérgio Minas Melconian.SETA O PORTA.********************************** INICIO DO PROGRAMA ******************************************* INICIO CLRF PORTA BANK1 .F .LIMPA TODO PORTA .MOVER O NUMERO 50 EM DECIMAL PARA W (VALOR MAXIMO = 256) MOVWF TEMPO1 .VAI PARA O INICIO DA ROTINA PRINCIPAL .DECREMENTA TEMPO1 E GUARDA O RESULTADO EM F. BANK0 .INICIO DA ROTINA PRINCIPAL .*********************************** INICIO DA INTERRUPÇÃO **************************************** ORG 0X0004 RETFIE .MOVER O NUMERO 50 PARA TEMPO1 NOP .LIMPA O PORTA.ENDEREÇO INICIAL DA INTERRUPÇÃO .50 .************************************ ROTINA PRINCIPAL ******************************************** MAIN BSF BUZZER CALL DELAY_MS BCF BUZZER CALL DELAY_MS GOTO MAIN .ROTINA DE DELAY MOVLW .5 (BUZZER) .VAI PARA INICIO DO PROGRAMA . E PULA A PROXIMA LINHA SE RESULTADO FOR ZERO (FIM DO TEMPO1?) 26 .5 .PERDE UM CICLO DE MÁQUINA (SÓ PARA GANHAR TEMPO) DECFSZ TEMPO1.************************************** VETOR DE RESET ******************************************** ORG 0X0000 GOTO INICIO .ENDEREÇO INICIAL PARA PROCESSAMENTO .FIM DO BLOCO DE MEMÓRIA .CHAMA ROTINA DE DELAY .RETORNA DA INTERRUPÇÃO .******************************************* SAÍDAS ************************************************ #DEFINE BUZZER PORTA.

RETORNA DA ROTINA DE DELAY . C) Insira 3 botões.SIM.NÃO. cada um ao ser pressionado ira gerar uma freqüência diferente. GOTO $-2 RETURN . faça as seguintes alterações: A) Altere as freqüências geradas. VOLTA DUAS INSTRUÇÕES . deixando o som mais grave. B) Faça o buzzer soar de maneira que fique bipando com delay de 2s.Professor Sérgio Minas Melconian. PASSOU TEMPO . 27 .FIM DO PROGRAMA Exercícios Propostos Utilizando como parâmetro o terceiro exemplo.************************************* FIM DO PROGRAMA ******************************************* END . (o som só será escutado em quanto o botão estiver pressionado).

Professor Sérgio Minas Melconian.C ROTACIONAR O BIT (3X) LIMPA LED (PORTB) 28 . LED L0 L0 L1 L1 L2 L2 L3 L3 ESTADO LIGA DESLIGA LIGA DESLIGA LIGA DESLIGA LIGA DESLIGA Fluxograma INICIO CONFIGURAÇÕES INICIAIS LIMPA REGISTRADOR STATUS. Quarto Exemplo – Rotação de Bit Neste quarto exemplo será estudada uma rotina para rotação de bit. Funcionamento: Um bit ficará rotacionando para esquerda.

* PROGRAMA ROTAÇÃO DE BIT COM RLF * . O Programa .ESTÁ LOCALIZAÇÃO É ACESSADA DE QUALQUER BANCO. POIS .25s .RETORNA DA INTERRUPÇÃO .Professor Sérgio Minas Melconian. FOI ESCOLHIDO. RP0 .*************************************INICIO DO PROGRAMA****************************** INICIO CLRF PORTB BANK1 .CONTADOR PARA DELAY 1/4s = 0. __CONFIG _CP_OFF & _LVP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC .0 -> APAGADO .CONTADOR PARA DELAY 1ms .*****************************************SAÍDAS************************************** #DEFINE LED PORTB .DEFINE PORTB COMO LED.********************************************************************************************* . TEMPO1 TEMPO2 TEMPO3 ENDC .INC> . RP0 BSF STATUS.LIMPA PORTB .1 -> ACESO .MODELO DO MICROCONTROLADOR UTILIZADO.******************************CONFIGURAÇÃO PARA GRAVAÇÃO***************************** #INCLUDE <P16F877A. . .CONTADOR PARA DELAY 1s .********************************************************************************************* .TRABALHAR COM BANK1 29 .ENDEREÇO LOCALIZADO NA MAMÓRIA DE DADOS DO BANK 0. .FIM DO BLOCO DE MEMÓRIA.ENDEREÇO DO VETOR DE RESET .PULA PARA O INICIO .***************************************VARIÁVEIS************************************* CBLOCK 0X70 . FACILITANDO A OPERAÇÃO.SETA BANK 0 DE MEMÓRIA.ENDEREÇO DO VETOR DE INTERRUPÇÃO .SETA BANK 1 DE MEMÓRIA.**************************DEFINIÇÃO DOS BANCOS DE MEMÓRIA RAM************************ #DEFINE BANK0 #DEFINE BANK1 BCF STATUS.*************************************VETOR DE RESET********************************** ORG 0X0000 GOTO INICIO . .***********************************INICIO DA INTERRUPÇÃO***************************** ORG 0X0004 RETFIE .

LIMPA LED .250 MOVWF TEMPO2 .25s DL2 MOVLW .TEMPORIZA 1/4s = 0.RETORNA PARA MAIN .Professor Sérgio Minas Melconian.**************************************ROTINA DE DELAY******************************** DELAY_1S .GASTA UM CICLO DE MÁQUINA. .DECREMENTA TEMPO1 GOTO DL1 DECFSZ TEMPO2 .ROTACIONA BIT DO LED PARA ESQUERDA . BANK0 .CHAMA ROTINA DE DELAY RLF LED CALL DELAY_1S RLF LED CALL DELAY_1S RLF LED CALL DELAY_1S CLRF LED GOTO MAIN . 0 -> SAÍDA).ROTACIONA BIT DO LED PARA ESQUERDA .ROTINA DE DELAY MOVLW .250 MOVWF TEMPO1 .MOVER VALOR DE W (W=1)PARA LED (PORTB) CALL DELAY_1S .*************************************ROTINA PRINCIPAL******************************** MAIN BCF STATUS.MOVER VALOR 1 EM BINÁRIO PARA W (VALOR MENOS SIGNIFICATIVO) MOVWF LED .TEMPORIZA 1s DL3 MOVLW .DECREMENTA TEMPO2 GOTO DL2 30 .DEFINE PORTS B COMO SAÍDA (1 -> ENTRADA.TRABALHAR COM BANK0.4 MOVWF TEMPO3 .C .TEMPORIZA 1ms DL1 NOP .CHAMA ROTINA DE DELAY .LIMPA CARRY (REGISTRADOR RELACIONADO AS OPERAÇÕES MATEMÁTICAS) MOVLW B'00000001' . DECFSZ TEMPO1 .ROTACIONA BIT DO LED PARA ESQUERDA .CHAMA ROTINA DE DELAY .CHAMA ROTINA DE DELAY . MOVLW B'00000000' MOVWF TRISB .

Professor Sérgio Minas Melconian.DECREMENTA TEMPO3 GOTO DL3 RETURN . irá manter todos os LEDs ligados por 5s. faça as seguintes alterações: A) Inverta o sentido de rotação do bit para a direita. 31 . mantendo o anterior ligado. rotacione o bit. DECFSZ TEMPO3 .**************************************FIM DO PROGRAMA******************************** END .RETORNA DA ROTINA DE DELAY . LED L0 L1 L2 L3 L0 L1 L2 L3 ESTADO LIGA LIGA LIGA LIGA DESLIGA DESLIGA DESLIGA DESLIGA C) Mantenha a seqüência pedida no item B (iniciar ligada) e insira um botão que ao ser pressionado. B) Ao invés de rotacionar apenas o bit como no exemplo. em seguida a seqüência do item B voltará a rotacionar.FIM DO PROGRAMA (OBRIGATÓRIO) Exercícios Propostos Utilizando como parâmetro o quarto exemplo.

Quinto Exemplo – Display 7 segmentos (Catodo Comum) Neste quinto exemplo será estudada uma rotina para aplicação do display de 7 segmentos catodo comum. Funcionamento: Um botão ira incrementar um contador que vai de 0 à 15 e outro botão ira decrementar o mesmo..Professor Sérgio Minas Melconian. Fluxograma 32 .

RP0 #DEFINE BANK1 BSF STATUS.0 FLAGS. POIS .PORTA DO BOTÃO . __CONFIG _CP_OFF & _LVP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC .0 #DEFINE BOTAO_1 PORTB.MODELO DO MICROCONTROLADOR UTILIZADO.*****************************************SAÍDAS************************************** . . .DISPLAY 7 SEGMENTOS E CONTADOR * .* PROGRAMA CONTADOR .FILTRAGEM PARA O BOTÃO 2 .NÃO SERÁ UTILIZADO NESTE PROGRAMA. FACILITANDO A OPERAÇÃO.SETA BANK 1 DE MEMÓRIA. #DEFINE ST_BT0 #DEFINE ST_BT1 FLAGS.0 MAX EQU . FOI ESCOLHIDO.STATUS DO BOTÃO 1 .INC> .15 T_FILTRO EQU .*****************************************FLAGS*************************************** .(PINO 34 .FILTRAGEM PARA O BOTÃO 1 . .255 .ENDEREÇO LOCALIZADO NA MAMÓRIA DE DADOS DO BANK 0.SETA BANK 0 DE MEMÓRIA. DEFINIÇÃO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA MIN EQU .**************************DEFINIÇÃO DOS BANCOS DE MEMÓRIA RAM***************** #DEFINE BANK0 BCF STATUS.******************************CONFIGURAÇÃO PARA GRAVAÇÃO********************** #INCLUDE <P16F877A.(PINO 35 .RB1) .***************************************VARIÁVEIS************************************ CBLOCK 0X70 .ARMAZENA O VALOR DA CONTAGEM .PORTA DO BOTÃO . O Programa .RB2) . CONTADOR FLAGS FILTRO1 FILTRO2 ENDC .****************************************ENTRADAS************************************* #DEFINE BOTAO_0 PORTB.VALOR MÁXIMO PARA O CONTADOR .FIM DO BLOCO DE MEMÓRIA.Professor Sérgio Minas Melconian.ARMAZENA OS FLAGS DE CONTROLE .***************************************CONSTANTES************************************ .1 .VALOR MÍNIMO PARA O CONTADOR .************************************************************************************* .************************************************************************************* . RP0 .ESTÁ LOCALIZAÇÃO É ACESSADA DE QUALQUER BANCO. DEFINIÇÃO DE TODOS OS FLAGS UTILIZADOS PELO SISTEMA.1 . 33 .FILTRO PARA BOTÃO .STATUS DO BOTÃO 0 .

********************ROTINA DE CONVERSÃO BINÁRIO -> DISPLAY 7 SEGMENTOS*************** . 12 . POSIÇÃO CORRETA DOS SEGUIMENTOS RETLW B'00111111' .RETORNA SÍMBOLO CORRETO A RETLW B'11111111' .Professor Sérgio Minas Melconian.RETORNA SÍMBOLO CORRETO 8 RETLW B'01101111' . * * . ********** . 14 . 01 . 15 .RETORNA SÍMBOLO CORRETO 4 RETLW B'01101101' .RETORNA SÍMBOLO CORRETO 2 RETLW B'01001111' . 02 . . ********** *. O RETORNO JÁ ESTÁ .RETORNA SÍMBOLO CORRETO E RETLW B'01110001' . e* *c .RETORNA SÍMBOLO CORRETO 1 RETLW B'01011011' . O SIMBOLO CORRETO QUE DEVE SER . 00 . 10 .ENDEREÇO DO VETOR DE INTERRUPÇÃO . 06 . 03 .***********************************INICIO DA INTERRUPÇÃO***************************** ORG 0X0004 RETFIE . * * .*************************************VETOR DE RESET********************************** ORG 0X0000 GOTO INICIO .RETORNA SÍMBOLO CORRETO 6 RETLW B'00000111' . a . 11 . GERANDO UMATABELA"CASE" B'PGFEDCBA' .F . * g * .RETORNA SÍMBOLO CORRETO C RETLW B'10111111' .W ANDLW B'00001111' ADDWF PCL.MASCARA VALOR DE CONTADOR .CONSIDERAR SOMENTE ATÉ 15 . ESTA ROTINA IRÁ RETORNAR EM W. MOSTRADO NO DISPLAY PARA CADA VALOR DE CONTADOR. * d * .RETORNA SÍMBOLO CORRETO 5 RETLW B'01111101' .RETORNA SÍMBOLO CORRETO 9 RETLW B'01110111' . f * *b .RETORNA SÍMBOLO CORRETO B RETLW B'00111001' . 05 . 13 . 09 .COLOCA CONTADOR EM W .RETORNA SÍMBOLO CORRETO D RETLW B'01111001' . FORMATADO PARA AS CONDIÇÕES DE LIGAÇÃO DO DISPLAY AO PORTD.RETORNA DA INTERRUPÇÃO . 08 . .PULA PARA O INICIO . CONVERTE MOVF CONTADOR.RETORNA SÍMBOLO CORRETO 7 RETLW B'01111111' .ENDEREÇO DO VETOR DE RESET .RETORNA SÍMBOLO CORRETO 3 RETLW B'01100110' .RETORNA SÍMBOLO CORRETO 0 RETLW B'00000110' . 04 . ********** . 07 . .SOMA DESLOCAMENTO AO PROGRAM COUTER.RETORNA SÍMBOLO CORRETO F 34 .

TERMINOU? .F .SIM .*************************************INICIO DO PROGRAMA****************************** INICIO BANK1 MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF .SIM.SIM .F GOTO CHECA_BT0 BTFSS ST_BT0 GOTO DEC GOTO CHECA_BT1 BT0_LIB BCF CHECA_BT1 BTFSC BOTAO_1 GOTO BT1_LIB DECFSZ FILTRO2.ALTERA PARA O BANCO 1 B'00000011' TRISB B'00000000' TRISC B'00000000' TRISD .NÃO.ATUALIZA O DISPLAY INICIALMENTE CLRF PORTB CLRF PORTC CLRF PORTD CLRF FLAGS MOVLW MIN MOVWF CONTADOR GOTO ATUALIZA .Professor Sérgio Minas Melconian.LIMPA O PORTC .DEFINE TODO O PORTD COMO SAÍDA BANK0 .NÃO.BOTÃO JÁ ESTAVA PRESSIONADO? (FLAG) . ENTÃO TRATA COMO LIBERADO .ATIVA O DISPLAY DA PLACA.NÃO. EXECUTA AÇÃO DO BOTÃO .NÃO. ENTÃO TRATA COMO LIBERADO .LIMPA O PORTB .DEFINE TODO O PORTC COMO SAÍDA .INICIALIZA FILTRO2 = T_FILTRO 35 .ALTERA PARA O BANCO 0 .INICIALIZA FILTRO1 = T_FILTRO .O BOTÃO 0 ESTÁ PRESSIONADO? .SIM .*************************************ROTINA PRINCIPAL******************************** MAIN BSF MOVLW MOVWF MOVWF CHECA_BT0 BTFSC BOTAO_0 GOTO BT0_LIB DECFSZ FILTRO1.MARCA BOTÃO 0 COMO LIBERADO (FLAG) . .INICIA CONTADOR = MIN = 0 .DEFINE RB0 E RB1 COMO ENTRADA . CONTINUA ESPERANDO .LIMPA O PORTD .DECREMENTA O FILTRO DO BOTÃO ST_BT0 .3 T_FILTRO FILTRO1 FILTRO2 . CHECA BOTÃO 1 PORTC. .O BOTÃO 1 ESTÁ PRESSIONADO? .DECREMENTA O FILTRO DO BOTÃO .LIMPA TODOS OS FLAGS .

.RESULTOU EM ZERO? . .Z GOTO MAIN INCF CONTADOR.ATUALIZA O DISPLAY . RETORNA SEM AFETAR CONT.TERMINOU? .**************************************FIM DO PROGRAMA******************************** END .W XORLW MAX BTFSC STATUS. SE FOREM .COLOCA CONTADOR EM W .SIM.F GOTO ATUALIZA ATUALIZA CALL CONVERTE MOVWF GOTO MAIN PORTD .Z GOTO MAIN DECF CONTADOR.RETORNA AO LOOPING . EXECUTA AÇÃO DO BOTÃO .MARCA BOTÃO 1 COMO LIBERADO (FLAG) .COLOCA CONTADOR EM W .MARCA BOTÃO 0 COMO JÁ PRESSIONADO (FLAG) .MARCA BOTÃO 1 COMO JÁ PRESSIONADO (FLAG) .ATUALIZA O PORTD PARA VISUALIZARMOS O VALOR DE .NÃO .APLICA XOR ENTRE CONTADOR E MIN .IGUAIS.AÇÃO DE DECREMENTAR .W XORLW MIN BTFSC STATUS. CONTADOR NO DISPLAY.AÇÃO DE INCREMENTAR .PARA TESTAR IGUALDADE.SIM.SIM.DECREMENTA O CONTADOR .SIM .Professor Sérgio Minas Melconian.BOTÃO JÁ ESTAVA PRESSIONADO? (FLAG) . .NÃO.F GOTO ATUALIZA INC BSF ST_BT1 MOVF CONTADOR. O RESULTADO SERÁ ZERO . O RESULTADO SERÁ ZERO . CONTINUA ESPERANDO .NÃO .NÃO.INCREMENTA O CONTADOR . VOLTA AO LOOP PRINCIPAL .NÃO. SE FOREM .APLICA XOR ENTRE CONTADOR E MAX .IGUAIS.FIM DO PROGRAMA (OBRIGATÓRIO) 36 . GOTO CHECA_BT1 BTFSS ST_BT1 GOTO INC GOTO MAIN BT1_LIB BCF ST_BT1 GOTO MAIN DEC BSF ST_BT0 MOVF CONTADOR.RESULTOU EM ZERO? .PARA TESTAR IGUALDADE. VOLTA AO LOOPING . RETORNA SEM AFETAR CONT.ATUALIZA O DISPLAY .CONVERTE CONTADOR NO NÚMERO DO DISPLAY .

Exercícios Propostos Utilizando como parâmetro o quinto exemplo. faça as seguintes alterações: A) Faça um contador OCTAL (0 à 7). 37 . B) Faça um contador ALFABÉTICO de A à H.Professor Sérgio Minas Melconian.

Professor Sérgio Minas Melconian. Esquema Elétrico da Placa de Teste 38 .

Professor Sérgio Minas Melconian. 39 . Lay-out Placa de Teste Observação: Adicione dois JUMPERS conforme representados em vermelho.

Técnicas Avançadas. Editora: Érica. Autor (es): David José de Souza e Nicolas César Lavinia. Microcontroladores PIC . Datasheet PIC16F877A. Autor: Fabio Pereira. Apostila – Microarquitetura de alto desempenho – Pipeline. Referências • Desbravando o PIC . Editora: Érica. Editora: Érica.Ampliado e Atualizado para PIC 16F628A.labtools. Silva.com. Autor: David José de Souza.Professor Sérgio Minas Melconian. Autor: Gabriel P. http://www. Universidade Federal de Rio de Janeiro. PIC16F877A Conectando o PIC – Recursos Avançados.br/ • • • • • 40 .

You're Reading a Free Preview

Descarregar
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->