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

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

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 . I/O DIGITAL OU RX (RECEPÇÃO) PARA COMUNICAÇÃO USART ASSÍNCRONA OU DATA PARA COMUNICAÇÃO SÍNCRONA. I/O DIGITAL OU ENTRADA/SAÍDA DE CLOCK PARA COMUNICAÇÃO SERIAL SPI / I2C. I/O DIGITAL OU DADO 3 (COMUNICAÇÃO PARALELA). I/O DIGITAL OU ENTRADA DE DADOS PARA SPI OU VIA DE DADOS (I/O) PARA I2C.Professor Sérgio Minas Melconian. ENTRADA PARA TENSÃO DE PROGRAMAÇÃO EM 13V./ 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 1 (COMUNICAÇÃO PARALELA). 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. SAÍDA P/ CRISTAL. I/O DIGITAL OU TX (TRANSMISSÃO) PARA COMUNICAÇÃO USART ASSÍNCRONA OU CLOCK PARA COMUNICAÇÃO SÍNCRONA. I/O DIGITAL (OPEN DRAYN. I/O DIGITAL OU ENTRADA ANALÓGICA OU HABILITAÇÃO EXTERNA PARA COMUNICAÇÃO SPI OU SAÍDA DO COMPARADOR 2. I/O DIGITAL. I/O DIGITAL OU ANALÓGICO. I/O DIGITAL. Nomenclatura dos pinos Nome do Pino OSC1 / CLKIN OSC2 / CLKOUT MCLR / VPP VSS VDD RA0 / AN0 RA1 / AN1 RA2 / AN2 / VREF. I/O DIGITAL COM INTERRUPÇÃO POR MUDANÇA DE ESTADO. I/O DIGITAL OU ANALÓGICO. I/O DIGITAL OU SAÍDA DE DADOS PARA SPI. I/O DIGITAL OU DADO 0 (COMUNICAÇÃO PARALELA). I/O DIGITAL OU ENTRADA PARA PROGRAMAÇÃO EM 5V. I/O DIGITAL COM INTERRUPÇÃO EXTERNA. I/O DIGITAL COM INTERRUPÇÃO POR MUDANÇA DE ESTADO. I/O DIGITAL OU DADO 2 (COMUNICAÇÃO PARALELA). I/O DIGITAL OU ENTRADA DO OSCILADOR EXTERNO PARA TMR1 OU ENTRADA DO CAPTURE2 OU SAÍDAS PARA COMPARE2/PWM2. I/O DIGITAL OU ANALÓGICO OU TENSÃO NEGATIVA DE REFERÊNCIA ANALÓGICA. SÓ FUNCIONA COM O PINO EM NÍVEL LÓGICO “1”. MASTER CLEAR (RESET) EXTERNO. GND (TERRA). NÃO CONSEGUE GERAR NÍVEL LÓGICO ALTO) OU ENTRADA EXTERNA DO CONTADOR TMR0 OU SAÍDA DO COMPARADOR 1. I/O DIGITAL COM INTERRUPÇÃO POR MUDANÇA DE ESTADO OU CLOCK DA PROGRAMAÇÃO SERIAL OU PINO DE IN-CIRCUIT DEBUGGER. ALIMENTAÇÃO POSITIVA. I/O DIGITAL OU ENTRADA DO CAPTURE1 OU SAÍDAS PARA COMPARE1/PWM1. I/O DIGITAL OU ANALÓGICO OU TENSÃO POSITIVA DE REFERÊNCIA ANALÓGICA.

quando configurado como interrupção externa. Entrada tipo ST. 7 . ST => Pino tipo Schmitt Trigger. I/O DIGITAL OU CONTROLE DE LEITURA DA PORTA PARALELA OU ENTRADA ANALÓGICA. I/O => Input/Output (Entrada ou Saída). Observação quanto TTL e Schmitt Trigger (ST) As portas do PIC podem ser do tipo TTL ou ST. (1). pois há interferência direta nos níveis de tensão (0 ou 1) interpretados pelo microcontrolador. quando em modo RC e CMOS no geral. quando configurado como I/O de uso geral e TTL quando usado em modo de porta paralela. durante o modo do programação serial. mantém nível anterior (0 ou 1). I/O DIGITAL OU DADO 5 (COMUNICAÇÃO PARALELA). I/O DIGITAL OU CONTROLE DE ESCRITA DA PORTA PARALELA OU ENTRADA ANALÓGICA. O => Output (Saída). I/O DIGITAL OU DADO 7 (COMUNICAÇÃO PARALELA).Professor Sérgio Minas Melconian. 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. (2) Região incerta. => Não utilizado. P => Power (Alimentação). 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. 4 Entrada tipo ST. 3 Entrada tipo ST. I/O DIGITAL OU DADO 6 (COMUNICAÇÃO PARALELA). isso é um dado muito importante no momento de se utilizá-las. TTL => Pino tipo TTL.

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

Já utilizando o ciclo com PIPELINE.Professor Sérgio Minas Melconian. 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. utilizando o ciclo sem PIPELINE. 10 . um cesto de roupas levará 2h para ficar pronto. Ao final de duas horas teremos lavado 4 cestos de roupas.

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

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

Interrupção do CCP1 (Capture/Compare/PWM). Interrupção da Porta Paralela (PSP). Interrupção da Comunicação Serial (SPI e I2C). PORTB e PORTE Corrente Máxima de Saída do PORTA.5V 0 a 14V 0 a 8. Interrupção por mudança de Estado. 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.5V -0.3V a (VDD + 0. Interrupção de fim de escrita na E2PROM/FLASH. Interrupção de Recepçã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 de Colisão de Dados (BUS Collision). Interrupção do Timer 1. Interrupção Externa.3V a 7.5V -0. Interrupção dos Comparadores.Professor Sérgio Minas Melconian. Interrupção de Transmissão da USART. Interrupção de Timer 2.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 dos Conversores A/D.

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

guardando o resultado em W. Lógica "E" entre k e W.W). guardando o resultado em W. Move k para W. guardando o resultado em W. Lógica "OU" entre k e W. Gasta um ciclo de máquina sem fazer nada. 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. Retorna de uma rotina sem afetar W. Retorna de uma interrupção. Testa o bit b do registrador f e pula a próxima linha se for 1 (um). Testa o bit b do registrador f e pula a próxima linha se for 0 (zero). 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. Lógica "OU EXCLUSIVO” entre k e W. Descrição f. Retorna de uma rotina com k em W. Executa a rotina R. Desvia para o ponto R mudando o PC.b f.b f. Coloca o PIC em modo sleep (dormindo) para economia de energia. 16 .b Descrição Impõe 0(zero) ao bit do registrador f.Professor Sérgio Minas Melconian. guardando o resultado em W. Limpa o registrador WDT para não acontecer reset. Impõe 1 (um) ao bit do registrador f. Subtrai W de k (k .b f. guardando o resultado em W.

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. Elementos utilizados na construção dos fluxogramas: Inicio ou Término – Símbolo utilizado para representar inicio ou término de programa. Dados – Símbolo utilizado para descrição de entrada de dados. já se o resultado for impar guarda em I e finaliza o programa. Exemplo: Serão somados dois números inteiros A+B. Inicio Pega número A. Pega número B. Processo – Símbolo utilizado para descrever uma determinada tarefa. Tomada de decisão – Símbolo utilizado para testes condicionais. Soma A+B Não Sim Guarda A+B em I A+B é Par? Guarda A+B em P FIM 17 . E tomada de decisão pode seguir um fluxo verdadeiro ou falso.Professor Sérgio Minas Melconian. se o resultado for par guarda em P.

__CONFIG _CP_OFF & _LVP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC .CODE PROTECTION (HABILITA OU DESABILITA LEITURA DA MEMÓRIA DE PROGRAMA).* PROGRAMA LIGA LED POR MEIO DE UM BOTÃO * . PWRTE . . .INC> . um LED se manterá ligado até o botão ser solto. . 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.BROWN OUT DETECT (SE A ALIMENTAÇÃO VDD FOR MENOR QUE 4V DURANTE 100 MICRO-SEG. 18 .O PIC RESETA).OSCILADOR DO TIPO CRISTAL. BOREN . 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. .ESTABILIZAR O PIC).LOW VOLTAGE PROGRAM (SISTEMA DE PROGRAMAÇÃO EM BAIXA TENSÃO). .TRAVADO).MODELO DO MICROCONTROLADOR UTILIZADO.POWER UP TIMER (HABILITA OU DESABILITA TEMPORIZADOR QUE AGUARDA 72 ms PARA . . . Funcionamento: Ao apertar um botão.DEPURADOR DA PLACA ICD 2 (HABILITA OU DESABILITA DEPURADOR DA PLACA ICD 2).************************************************************************************* .************************************************************************************* .WATCHDOG TIMER ("CÃO DE GUARDA" TEMPORIZADOR QUE RESETA O PIC QUANDO SISTEMA . DEBUG . WDT . CP . XT .

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

APAGA LED_1 .FIM DO PROGRAMA (OBRIGATÓRIO) Exercícios Propostos Utilizando como parâmetro o primeiro exemplo. BANK0 .**************************************FIM DO PROGRAMA******************************** END .VAI PARA BOTÃO_LIBERADO.*************************************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 . .ENTRADA.O BOTÃO_0 ESTÁ PRESSIONADO? . B) Ao apertar o botão faça dois LEDs acenderem. 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 -> .TRABALHAR COM BANK1 . . Quando um botão for pressionado dois LEDs acesos se apagarão. 0 -> SAÍDA). já o outro botão ao ser pressionado acenderá dois LEDs que estavam apagados. 20 . ao pressionar o botão o LED apagará e ao liberá-lo o LED acenderá. C) Utilize dois botões e quatro LEDs.Professor Sérgio Minas Melconian.RETORNA AO LOOP PRINCIPAL (MAIN) .LIMPA PORTB .TRABALHAR COM BANK0 .RETORNA AO LOOP PRINCIPAL (MAIN) .ACENDE LED_1 .VAI PARA BOTÃO_PRESSIONADO. .*************************************INICIO DO PROGRAMA****************************** INICIO CLRF PORTB BANK1 MOVLW B'00000001' MOVWF TRISB .

Segundo Exemplo – Contador de Tempo (DELAY) Neste segundo exemplo será estudada uma rotina para contar tempo. 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. Funcionamento: Ao apertar um botão.Professor Sérgio Minas Melconian. um LED se manterá ligado por 1s e desligará logo em seguida. SIM APAGA O LED 1 21 .

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

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

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

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

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

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

Funcionamento: Um bit ficará rotacionando para esquerda.Professor Sérgio Minas Melconian. Quarto Exemplo – Rotação de Bit Neste quarto exemplo será estudada uma rotina para rotação de bit.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.

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

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

Professor Sérgio Minas Melconian. DECFSZ TEMPO3 . rotacione o bit.FIM DO PROGRAMA (OBRIGATÓRIO) Exercícios Propostos Utilizando como parâmetro o quarto exemplo. faça as seguintes alterações: A) Inverta o sentido de rotação do bit para a direita.RETORNA DA ROTINA DE DELAY . 31 . 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.**************************************FIM DO PROGRAMA******************************** END . irá manter todos os LEDs ligados por 5s. B) Ao invés de rotacionar apenas o bit como no exemplo.DECREMENTA TEMPO3 GOTO DL3 RETURN . mantendo o anterior ligado. em seguida a seqüência do item B voltará a rotacionar.

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

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

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

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

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

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

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

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

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

Sign up to vote on this title
UsefulNot useful