Você está na página 1de 40

Professor Srgio Minas Melconian.

MICROCONTROLADOR PIC16F877A

FUNDAMENTOS E PROGRAMAO BSICA

Professor Srgio Minas Melconian.

Introduo
PIC PROGRAMMABLE INTERRUPT CONTROLLER (CONTROLADOR DE INTERRUPO PROGRAMVEL) um componente eletrnico programvel produzido pela Microchip Technology Inc, utilizado no controle de processos e atividades lgicas. Os microcontroladores so compostos de uma nica pastilha de silcio encapsulada, popularmente chamada de CI (Circuito Integrado) e todos os elementos necessrios para o controle das atividades esto internamente ligados a pastilha de silcio. Alis, essa a caracterstica principal que diferencia os microcontroladores dos microprocessadores. O PIC16F877A est enquadrado na famlia 8 bits de microcontroladores Microchip, possui via de programao com 14 bits e um conjunto de 35 instrues.

Professor Srgio Minas Melconian.

Arquiteturas dos Microcontroladores


Os microcontroladores apresentam uma estrutura interna de mquina na qual ir determinar a maneira como os dados e o programa sero processados. As arquiteturas mais utilizadas para sistemas computacionais digitais so: Arquitetura Von Neumann: A Unidade Central de Processamento (CPU) est conectada a memria de dados e programa por um nico barramento (bus) de 8 bits. Arquitetura Harvard: A Unidade Central de Processamento (CPU) est conectada a memria de dados e memria 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 famlia 16F).

Arquitetura Harvard x Von Neumann Os microcontroladores PIC utilizam como estrutura interna de mquina a arquitetura Harvard, a qual possibilita uma velocidade de processamento mais rpida, pois em quanto uma instruo est sendo executada, outra j est sendo buscada na memria. Alm do mais, o fato do barramento de instrues ser maior do que 8 bits, o OPCODE (referncia instruo 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 posio de memria ser utilizada por instruo, levando a uma economia de memria 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 Instrues Reduzido. Ou seja, pode-se trabalhar com uma lista de cdigos de instrues de programao de cerca de 35 instrues (esse nmero varia um pouco de modelo para modelo). J se fossemos utilizar a tecnologia CISC (Complex Instruction Set Computer) Computador com Set de Instrues Complexo, seriam necessrios se conhecer cerca de 100 instrues de programao. Tornando o aprendizado mais rduo, porm algumas funes na tecnologia CISC se tornam mais fceis, pois j existem, logo para o programador que utiliza o set reduzido, h uma maior cobrana das suas habilidade.

Professor Srgio Minas Melconian.

O PIC16F877A
Microcontrolador de 40 pinos; Memria de programa 14 bits com 8k words, capacidade de escrita e leitura pelo prprio cdigo interno; Arquitetura Harvard e tecnologia RISC com 35 instrues; 33 portas configurveis como entrada e sada; 15 interrupes disponveis; Memria de programao E2PROM FLASH permite a gravao do programa diversas vezes por meio de pulsos eltricos no mesmo CI, no necessrio apag-lo por meio de luz ultravioleta; Memria E2PROM (no-voltil) interna com 256 Bytes; Memria RAM com 368 Bytes; 3 TIMERs (dois de 8 bits e um de 16 bits); Comunicao serial padro RS232: SPI, I2C e USART; Conversores A/D 10 bits (8x) e Comparadores analgicos (2x); Dois mdulos CCP: Capture, Compare e PWM; Programao in-circuit (alta e baixa tenso); 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 tenso de alimentao for menor que 4V;

Professor Srgio Minas Melconian.

Pinagem Encapsulamento PDIP - 40 Pinos

Professor Srgio Minas Melconian.

Nomenclatura dos pinos


Nome do Pino OSC1 / CLKIN OSC2 / CLKOUT MCLR / VPP VSS VDD RA0 / AN0 RA1 / AN1 RA2 / AN2 / VREF- / 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 rstica 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

Descrio ENTRADA PARA OSCILADORES EXTERNOS. SADA P/ CRISTAL. MASTER CLEAR (RESET) EXTERNO. S FUNCIONA COM O PINO EM NVEL LGICO 1. ENTRADA PARA TENSO DE PROGRAMAO EM 13V. GND (TERRA). ALIMENTAO POSITIVA. I/O DIGITAL OU ANALGICO. I/O DIGITAL OU ANALGICO. I/O DIGITAL OU ANALGICO OU TENSO NEGATIVA DE REFERNCIA ANALGICA. I/O DIGITAL OU ANALGICO OU TENSO POSITIVA DE REFERNCIA ANALGICA. I/O DIGITAL (OPEN DRAYN, NO CONSEGUE GERAR NVEL LGICO ALTO) OU ENTRADA EXTERNA DO CONTADOR TMR0 OU SADA DO COMPARADOR 1. I/O DIGITAL OU ENTRADA ANALGICA OU HABILITAO EXTERNA PARA COMUNICAO SPI OU SADA DO COMPARADOR 2. I/O DIGITAL COM INTERRUPO EXTERNA. I/O DIGITAL. I/O DIGITAL. I/O DIGITAL OU ENTRADA PARA PROGRAMAO EM 5V. I/O DIGITAL COM INTERRUPO POR MUDANA DE ESTADO. I/O DIGITAL COM INTERRUPO POR MUDANA DE ESTADO. I/O DIGITAL COM INTERRUPO POR MUDANA DE ESTADO OU CLOCK DA PROGRAMAO SERIAL OU PINO DE IN-CIRCUIT DEBUGGER. I/O DIGITAL COM INTERRUPO POR MUDANA DE ESTADO OU DATA DA PROGRAMAO SERIAL OU PINO DE IN-CIRCUIT DEBUGGER I/O DIGITAL OU SADA DO OSCILADOR EXTERNO PARA TMR1 OU ENTRADA DE INCREMENTO PARA TMR1. I/O DIGITAL OU ENTRADA DO OSCILADOR EXTERNO PARA TMR1 OU ENTRADA DO CAPTURE2 OU SADAS PARA COMPARE2/PWM2. I/O DIGITAL OU ENTRADA DO CAPTURE1 OU SADAS PARA COMPARE1/PWM1. I/O DIGITAL OU ENTRADA/SADA DE CLOCK PARA COMUNICAO SERIAL SPI / I2C. I/O DIGITAL OU ENTRADA DE DADOS PARA SPI OU VIA DE DADOS (I/O) PARA I2C. I/O DIGITAL OU SADA DE DADOS PARA SPI. I/O DIGITAL OU TX (TRANSMISSO) PARA COMUNICAO USART ASSNCRONA OU CLOCK PARA COMUNICAO SNCRONA. I/O DIGITAL OU RX (RECEPO) PARA COMUNICAO USART ASSNCRONA OU DATA PARA COMUNICAO SNCRONA. I/O DIGITAL OU DADO 0 (COMUNICAO PARALELA). I/O DIGITAL OU DADO 1 (COMUNICAO PARALELA). I/O DIGITAL OU DADO 2 (COMUNICAO PARALELA). I/O DIGITAL OU DADO 3 (COMUNICAO PARALELA).

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

Professor Srgio Minas Melconian.


RD4 / PSP4 RD5 / PSP5 RD6 / PSP6 RD7 / PSP7 RE0 / RD / AN5 RE1 / WR / AN6 RE2 / CS / AN7 Legenda: I => Input (Entrada); O => Output (Sada); I/O => Input/Output (Entrada ou Sada); P => Power (Alimentao); => No utilizado; TTL => Pino tipo TTL; ST => Pino tipo Schmitt Trigger; 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 (COMUNICAO PARALELA). I/O DIGITAL OU DADO 5 (COMUNICAO PARALELA). I/O DIGITAL OU DADO 6 (COMUNICAO PARALELA). I/O DIGITAL OU DADO 7 (COMUNICAO PARALELA). I/O DIGITAL OU CONTROLE DE LEITURA DA PORTA PARALELA OU ENTRADA ANALGICA. I/O DIGITAL OU CONTROLE DE ESCRITA DA PORTA PARALELA OU ENTRADA ANALGICA. I/O DIGITAL OU CONTROLE DE ESCRITA DA PORTA PARALELA OU ENTRADA ANALGICA.

Entrada tipo ST, quando configurado como interrupo externa. Entrada tipo ST, durante o modo do programao serial. 3 Entrada tipo ST, quando configurado como I/O de uso geral e TTL quando usado em modo de porta paralela. 4 Entrada tipo ST, quando em modo RC e CMOS no geral.

Observao quanto TTL e Schmitt Trigger (ST)


As portas do PIC podem ser do tipo TTL ou ST, isso um dado muito importante no momento de se utiliz-las, pois h interferncia direta nos nveis de tenso (0 ou 1) interpretados pelo microcontrolador.

(1), (2) Regio incerta, mantm nvel anterior (0 ou 1).

Professor Srgio Minas Melconian.

Estrutura Interna do PIC16F877A


O diagrama de blocos (original Microchip) indicado a baixo mostra as diversas partes que compem o microcontrolador.

Professor Srgio Minas Melconian.

Ciclo de Mquina
Todo microcontrolador possui um sinal de clock para poder trabalhar. 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, tem-se um clock interno de 1MHz e um ciclo de mquina de 1s. CKint = CKext / 4 TCM = 1 / Ckint onde: CKint = Clock interno; CKext = Clock externo; onde: CM = Tempo de Ciclo de Mquina;

De maneira simplificada pode-se utilizar como clculo de ciclo de mquina a seguinte equao: TCM = 4 / Freq. Osc. onde: TCM = Tempo de Ciclo de Mquina; Freq. Osc. = Freqncia do Oscilador;

Observao: No caso do microcontrolador PIC16F877A, a Microchip garante perfeito funcionamento do ciclo de mquina com um oscilador de at 20MHz. Ao observar as equaes anteriores possvel perceber que os TCM esto relacionados a uma constante de valor 4, mas qual o motivo desse nmero? Fcil o entendimento. Para executar uma nica instruo pelo processador, algumas operaes so realizadas. O fato do processamento no ser paralelo, exige operaes de processamentos executados em sub-ciclos de mquina, originados pela diviso do clock externo. Estes sub-ciclos so conhecidos por Q1, Q2, Q3 e Q4. O program counter (contador de programa) incrementado no instante Q1 automaticamente. Dentro dos quatro tempos (Q1 a Q4), a instruo carregada para ULA executada, sendo trocadas informaes com a memria de dados e o registrador W (Work) sempre que necessrio. Por fim, no instante Q4, a prxima instruo buscada da memria de programa e colocada na ULA. Esse processo conhecido como PIPELINE, ele permite que todas as instrues sejam executadas em um ciclo de mquina. Observao: As excees so os jumps (saltos) realizados no program counter, como chamadas de rotinas e retornos que gastam 2 ciclos de mquina. Exemplo PIPELINE Vamos imaginar uma lavanderia, na qual possui quatro atividades a serem realizadas. Seqncia de trabalho: Colocar a roupa na mquina de lavar; Depois de lavada colocar na secadora; Depois de seca passar o ferro; Por fim guard-la no armrio.

Professor Srgio Minas Melconian. Ciclo sem PIPELINE

Ciclo com PIPELINE

Supondo que cada etapa gaste 30 minutos para ser realizada, utilizando o ciclo sem PIPELINE, um cesto de roupas levar 2h para ficar pronto. J utilizando o ciclo com PIPELINE, o mesmo cesto ficar pronto em apenas 30 minutos. Ao final de duas horas teremos lavado 4 cestos de roupas.

10

Professor Srgio Minas Melconian. Seqncia no PIC

Memrias
Memria de Programa: a memria onde ficar armazenada as instrues do programa no qual far o controle das atividades. No caso do PIC16F877A esta uma memria do tipo FLASH de 8192 palavras (8K) e 14 bits.

11

Professor Srgio Minas Melconian. Demais caractersticas da memria de programa Vetor de Reset: a posio 0x0000h de endereo da memria de programa, para onde o programa vai quando reiniciado (reset). Vetor de interrupo: a posio 0x0004h de endereo da memria de programa, a posio de memria para onde sero desviados todos os processamentos de interrupo. Este PIC possui 15 tipos de interrupes diferentes. Pilha (STACK): uma regio, fisicamente separada da memria de programa, onde sero guardados os endereos de retorno quando utilizados desvios para chamada de rotinas. Quando o programa desviado por meio do comando CALL, o endereo seguinte ao ponto que estava sendo executado guardado na pilha, ao fim da rotina, o programa retorna ao ponto que estava. O PIC16F877A possui uma pilha com 8 nveis, possibilitando guardar at 8 endereos de retorno (8 desvios consecutivos). Caso o programador tente ocupar mais de 8 nveis da pilha, a informao mais antiga ser perdida. A pilha desse PIC armazena endereos de 13bits, sendo suficiente para gerenciar 8k de memria de programa. Memria de Dados: A memria de dados voltil do tipo RAM (Random Access Memory). Serve para guardar as variveis 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.

12

Professor Srgio Minas Melconian. Demais caractersticas da memria de dados Registradores Especiais: Regio da memria de dados onde se encontram todos os registradores especiais e que so utilizados pelo PIC para a execuo do programa e processamento da ULA. Registradores de uso geral: Regio da memria de dados onde possvel armazenar at 368 Bytes de variveis definidas pelo programador, para serem escritas ou lidas pelo programa. Observao: A memria de dados est divida em 4 bancos de memria (Banco 0, Banco 1, Banco 2 e Banco 3), isso ocorre devido a existncia de apenas 7 bits para endereamento de todos os registradores, com isso s se pode gerenciar 128 endereos diferentes. Por isso que o fabricante dividiu a memria em quatro grupos de 128 Bytes cada. Acesso aos bancos de memria Para acessar os bancos de memria preciso gerenciar os registradores STATUS <RP1:RP0>. BANCO RP1 0 0 1 0 2 1 3 1 RP0 0 1 0 1

Observao: Sempre que o PIC for ligado, o Banco 0 ser o primeiro a ser selecionado.

Interrupes
As interrupes so ferramentas que possibilitam a execuo de determinadas situaes no momento em que elas ocorrem. Normalmente elas so geradas devido aes externas. O PIC 16F877A composto por 15 interrupes diferentes, as quais sempre sero desviadas para o vetor de interrupo (0004h) da memria de programa.

13

Professor Srgio Minas Melconian. As 15 interrupes que compem o PIC 16F877A so: Interrupo de Timer 0; Interrupo Externa; Interrupo por mudana de Estado; Interrupo da Porta Paralela (PSP); Interrupo dos Conversores A/D; Interrupo de Recepo da USART; Interrupo de Transmisso da USART; Interrupo da Comunicao Serial (SPI e I2C); Interrupo do CCP1 (Capture/Compare/PWM); Interrupo do Timer 1; Interrupo de Timer 2; Interrupo de fim de escrita na E2PROM/FLASH; Interrupo de Coliso de Dados (BUS Collision); Interrupo dos Comparadores;

Caractersticas Eltricas
Temperatura de Trabalho Temperatura de Armazenamento Tenso de Trabalho Tenso Mxima no Pino VDD (em relao a Vss) Tenso Mxima no MCRL (em relao a Vss) Tenso Mxima no Pino RA4 (em relao a Vss) Tenso Mxima nos Demais Pinos (em relao a Vss) Dissipao Mxima de Energia Corrente Mxima de Sada no Pino Vss Corrente Mxima de Entrada no Pino VDD Corrente Mxima de Sada de um Pino (em VDD) Corrente Mxima de Entrada de um Pino (em Vss) Corrente Mxima de Entrada do PORTA, PORTB e PORTE Corrente Mxima de Sada do PORTA, PORTB e PORTE Corrente Mxima de Entrada do PORTC e PORTD Corrente Mxima de Sada do PORTC e PORTD -55C at +125C -65C at +150C 4V a 5,5V -0,3V a 7,5V 0 a 14V 0 a 8,5V -0,3V a (VDD + 0,3V) 1W 300mA 250mA 25mA 25mA 200mA 200mA 200mA 200mA

14

Professor Srgio Minas Melconian.

Set de Instrues
O Set de instrues dividido em quatro grupos, os quais compem um conjunto com 35 instrues: Operaes com registradores; Operaes com literais; Operaes com bits; Controles;

Operaes com Registradores Instruo Argumentos


ADDWF ANDWF CLRF COMF DECF f,d f,d f f,d f,d

Descrio
Soma W e f guardando o resultado em d. Lgica "E" entre W e f, guarda o resultado em d. Limpa f. Calcula o complemento de f guardando o resultado em d Decrementa f, guardando o resultado em d. Decrementa f, guardando o resultado em d e pula a prxima linha

DECFSZ INCF

f,d f,d

se o resultado for zero. Incrementa f, guardando o resultado em d. Incrementa f, guardando o resultado em d e pula a prxima linha se

INCFSZ IORWF MOVF MOVWF RLF RRF SUBWF

f,d f,d f,d f f,d f,d f,d

o resultado for zero. Lgica "ou" entre W e f, guardando o resultado em d. Move f para d (copia f em d). Move W para f (copia W em f). Rotaciona f um bit para esquerda. Rotaciona f um bit para direita. Subtrai W de f (f - W) guardando o resultado em d. Executa uma inverso entre as partes alta e baixa de f, guardando

SWAPF XORWF

f,d f,d

em d. Lgica "ou exclusivo" entre k e W guardando o resultado em d.

15

Professor Srgio Minas Melconian. Operaes com Literais Instruo Argumentos ADDLW ANDLW IORLW MOVLW SUBLW XORLW K K K K K K Descrio Soma k com W, guardando o resultado em W. Lgica "E" entre k e W, guardando o resultado em W. Lgica "OU" entre k e W, guardando o resultado em W. Move k para W. Subtrai W de k (k - W), guardando o resultado em W. Lgica "OU EXCLUSIVO entre k e W, guardando o resultado em W.

Operaes com bit Instruo Argumentos BCF BSF BTFSC BTFSS Controles Instruo Argumentos CLRW NOP CALL CLRWDT GOTO RETFIE RETLW RETURN SLEEP R R K Limpa w. Gasta um ciclo de mquina sem fazer nada. Executa a rotina R. Limpa o registrador WDT para no acontecer reset. Desvia para o ponto R mudando o PC. Retorna de uma interrupo. Retorna de uma rotina com k em W. Retorna de uma rotina sem afetar W. Coloca o PIC em modo sleep (dormindo) para economia de energia. Descrio f,b f,b f,b f,b Descrio Impe 0(zero) ao bit do registrador f. Impe 1 (um) ao bit do registrador f. Testa o bit b do registrador f e pula a prxima linha se for 0 (zero). Testa o bit b do registrador f e pula a prxima linha se for 1 (um).

16

Professor Srgio Minas Melconian.

Fluxogramas
Os fluxogramas so ferramentas que ajudam o programador a estruturar de maneira grfica uma seqncia lgica de atividades que posteriormente sero executadas por um determinado programa. Elementos utilizados na construo dos fluxogramas: Inicio ou Trmino Smbolo utilizado para representar inicio ou trmino de programa; Processo Smbolo utilizado para descrever uma determinada tarefa;

Dados Smbolo utilizado para descrio de entrada de dados;

Tomada de deciso Smbolo utilizado para testes condicionais. E tomada de deciso pode seguir um fluxo verdadeiro ou falso. Exemplo: Sero somados dois nmeros inteiros A+B, se o resultado for par guarda em P, j se o resultado for impar guarda em I e finaliza o programa. Inicio
Pega nmero A.

Pega nmero B. Soma A+B


No Sim

Guarda A+B em I

A+B Par?

Guarda A+B em P

FIM

17

Professor Srgio Minas Melconian.

Primeiro Exemplo Boto e LED


Ser dado inicio a programao dos microcontroladores PIC com um programa tradicional e simples de se entender. Funcionamento: Ao apertar um boto, um LED se manter ligado at o boto ser solto. Fluxograma

INICIO
CONFIGURAES INICIAIS 1 SIM ACENDE O LED BOTO
PRESSIONADO?

NO APAGA O LED

O Programa
;************************************************************************************* ;* PROGRAMA LIGA LED POR MEIO DE UM BOTO * ;************************************************************************************* ;***************************CONFIGURAO PARA GRAVAO************************* #INCLUDE <P16F877A.INC> ;MODELO DO MICROCONTROLADOR UTILIZADO.

__CONFIG _CP_OFF & _LVP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC ; CP - CODE PROTECTION (HABILITA OU DESABILITA LEITURA DA MEMRIA DE PROGRAMA). ; DEBUG - DEPURADOR DA PLACA ICD 2 (HABILITA OU DESABILITA DEPURADOR DA PLACA ICD 2). ; PWRTE - POWER UP TIMER (HABILITA OU DESABILITA TEMPORIZADOR QUE AGUARDA 72 ms PARA ;ESTABILIZAR O PIC). ; WDT - WATCHDOG TIMER ("CO DE GUARDA" TEMPORIZADOR QUE RESETA O PIC QUANDO SISTEMA ;TRAVADO). ; BOREN - BROWN OUT DETECT (SE A ALIMENTAO VDD FOR MENOR QUE 4V DURANTE 100 MICRO-SEG. ;O PIC RESETA). ; LVP - LOW VOLTAGE PROGRAM (SISTEMA DE PROGRAMAO EM BAIXA TENSO). ; XT - OSCILADOR DO TIPO CRISTAL.

18

Professor Srgio Minas Melconian.


;**************************DEFINIO DOS BANCOS DE MEMRIA RAM************************ #DEFINE BANK0 #DEFINE BANK1 BCF BSF STATUS, RP0 STATUS, RP0 ;SETA BANK 0 DE MEMRIA. ;SETA BANK 1 DE MEMRIA.

;O PIC 16F877A POSSUI QUATRO BANCOS DE MEMRIAS PARA OS REGISTRADORES ESPECIAIS (SFR). POR ;ISSO, QUANDO QUEREMOS ACESSAR ALGUM REGISTRADOR SFR, DEVEMOS PRIMEIRO INFORMAR AO ;SISTEMA QUAL BANK QUEREMOS TRABALHAR. ;PARA ISSO DEVEMOS ALTERAR OS BITS RP0 E RP1 NO REGISTRADOR STATUS. ;TABELA: ; BANCO RP1 RP0 ; 0 0 0 ; 1 0 1 ; 2 1 0 ; 3 1 1 ;OBS: SEMPRE QUE O PIC INICIA, RP1 E RP0 SO INICIADOS COM ZERO.LOGO O BANK 0 SEMPRE O ;PRIMEIRO SELECIONADO. ;***************************************VARIVEIS************************************* CBLOCK 0X70 ;ENDEREO LOCALIZADO NA MAMRIA DE DADOS DO BANK 0. FOI ;ESCOLHIDO, POIS EST LOCALIZAO ACESSADA DE QUALQUER BANCO, FACILITANDO A OPERAO. ENDC ;FIM DO BLOCO DE MEMRIA.

;*****************************************FLAGS*************************************** ; SINALIZA QUEM GEROU A INTERRUPO. "NO SER UTILIZADO NESTE PROGRAMA". ;***************************************CONSTANTES************************************ ; FILTRO PARA EVITAR RUIDOS DOS BOTES. "NO SER UTILIZADO NESTE PROGRAMA". ;****************************************ENTRADAS************************************* #DEFINE BOTAO_0 PORTB,0 ;BOTO QUE LIGA O SISTEMA - (PINO 33 - RB0)

;*****************************************SADAS************************************** #DEFINE LED_1 PORTB,1 ;LED 1 - (PINO 34 - RB1) ;0 -> APAGADO ;1 -> ACESO

;*************************************VETOR DE RESET********************************** ORG 0X0000 GOTO INICIO ;ENDEREO DO VETOR DE RESET ;PULA PARA O INICIO

;***********************************INICIO DA INTERRUPO***************************** ORG 0X0004 RETFIE ;ENDEREO DO VETOR DE INTERRUPO ;RETORNA DA INTERRUPO

19

Professor Srgio Minas Melconian.


;*************************************INICIO DO PROGRAMA****************************** INICIO CLRF PORTB BANK1 MOVLW B'00000001' MOVWF TRISB ;ENTRADA, 0 -> SADA). BANK0 ;LIMPA PORTB ;TRABALHAR COM BANK1 ;DEFINE RB0 COMO ENTRADA E DEMAIS PORTS B COMO SADA (1 -> ;TRABALHAR COM BANK0

;*************************************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 ;O BOTO_0 EST PRESSIONADO? ;VAI PARA BOTO_LIBERADO. ;VAI PARA BOTO_PRESSIONADO. ;APAGA LED_1 ;RETORNA AO LOOP PRINCIPAL (MAIN) ;ACENDE LED_1 ;RETORNA AO LOOP PRINCIPAL (MAIN)

;**************************************FIM DO PROGRAMA******************************** END ;FIM DO PROGRAMA (OBRIGATRIO)

Exerccios Propostos Utilizando como parmetro o primeiro exemplo, faa as seguintes alteraes: A) Inverta a lgica do LED, ao pressionar o boto o LED apagar e ao liber-lo o LED acender. B) Ao apertar o boto faa dois LEDs acenderem. C) Utilize dois botes e quatro LEDs. Quando um boto for pressionado dois LEDs acesos se apagaro, j o outro boto ao ser pressionado acender dois LEDs que estavam apagados.

20

Professor Srgio Minas Melconian.

Segundo Exemplo Contador de Tempo (DELAY)


Neste segundo exemplo ser estudada uma rotina para contar tempo. Funcionamento: Ao apertar um boto, um LED se manter ligado por 1s e desligar logo em seguida. Fluxograma

INICIO
CONFIGURAES INICIAIS 1 SIM BOTO
PRESSIONADO?

NO APAGA O LED 1

ACENDE O LED

CONTADOR DE TEMPO = 0s?

NO

DECREMENTA CONTADOR DE TEMPO.

SIM

APAGA O LED

21

Professor Srgio Minas Melconian. O Programa


;**************************************************************************************************** ;* PROGRAMA CONTADOR DE TEMPO (DELAY) * ;**************************************************************************************************** ;******************************** ARQUIVOS DE DEFINIO DO PIC ********************************** #INCLUDE <P16F877A.INC> ;MODELO DO MICROCONTROLADOR UTILIZADO - PIC 16F877A __CONFIG _CP_OFF & _LVP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC ;******************************** PAGINAO DE MEMRIA DO PIC ********************************** #DEFINE BANK0 BCF STATUS,RP0 #DEFINE BANK1 BSF STATUS,RP0 ;HABILITA BANCO 0 DE MEMRIA ;HABILITA BANCO 1 DE MAMRIA

;********************************** DEFINIO DAS VRIAVEIS ************************************** CBLOCK 0X70 TEMPO1 TEMPO2 TEMPO3 ENDC ;INICIO DA MEMRIA DE SUARIO ;CONTADOR DE TEMPO1 (VALOR 250) ;CONTADOR DE TEMPO2 (VALOR 250) ;CONTADOR DE TEMPO3 (VALOR 4) ;FIM DO BLOCO DE MEMRIA

;**************************************** ENTRADAS ************************************************ #DEFINE BOTAO_0 PORTB,0 ;BOTO QUE LIGA O SISTEMA - (PINO 33 - RB0)

;***************************************** SADAS *************************************************** #DEFINE LED_1 PORTB,1 ;PORTA DO LED1 (PINO 34 - RB1) ;0 -> APAGADO ;1 -> ACESO

;************************************* VETOR DE RESET ********************************************* ORG 0X0000 GOTO INICIO ;ENDEREO INICIAL PARA PROCESSAMENTO ;VAI PARA INICIO DO PROGRAMA

;********************************* INICIO DA INTERRUPO ***************************************** ORG 0X0004 RETFIE ;ENDEREO INICIAL DA INTERRUPO ;RETORNA DA INTERRUPO

;********************************** INICIO DO PROGRAMA ******************************************* INICIO CLRF PORTB ;LIMPA TODO PORTB

22

Professor Srgio Minas Melconian.


BANK1 ;HABILITA BANCO 1 DE MEMRIA DO PIC

MOVLW B'00000001' MOVWF TRISB ;CONFIGURA PORTB,0 COMO ENTRADA E DEMAIS PINOS COMO SADA. BANK0 ;RETORNA PARA O BANCO 0 DE MEMRIA DO PIC

;*********************************** ROTINA PRINCIPAL ********************************************** MAIN BTFSC BOTAO_0 GOTO BOTAO_LIBERADO GOTO BOTAO_PRESSIONADO ;O BOTO_0 EST PRESSIONADO? ;VAI PARA BOTO_LIBERADO. ;VAI PARA BOTO_PRESSIONADO.

BOTAO_LIBERADO BCF LED_1 ;APAGA LED_1 GOTO MAIN ;RETORNA AO LOOP PRINCIPAL (MAIN) BOTAO_PRESSIONADO BSF LED_1 ;ACENDE LED_1 CALL DELAY ;CHAMA ROTINA DE DELAY BCF LED_1 ;DESLIGA LED_1 GOTO MAIN ;RETORNA AO LOOP PRINCIPAL (MAIN) ;*********************************** ROTINA DE DELAY ********************************************* DELAY ;ROTINA DE DELAY

MOVLW .4 MOVWF TEMPO3 ;TEMPORIZA 1s DL3 MOVLW .250 MOVWF TEMPO2 ;TEMPORIZA 1/4s = 0.25s DL2 MOVLW .250 MOVWF TEMPO1 ;TEMPORIZA 1ms DL1 NOP ;GASTA UM CICLO DE MQUINA. DECFSZ TEMPO1 ;DECREMENTA TEMPO1 GOTO DL1 DECFSZ TEMPO2 ;DECREMENTA TEMPO2 GOTO DL2 DECFSZ TEMPO3 ;DECREMENTA TEMPO3 GOTO DL3

23

Professor Srgio Minas Melconian.


RETURN ;RETORNA DA ROTINA DE DELAY

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

Exerccios Propostos Utilizando como parmetro o segundo exemplo, faa as seguintes alteraes: A) Ao apertar um boto, um LED ficar ligado por 5s e desligado logo em seguida. B) Ao apertar um boto, ligue o LED_1, aps 2s ligue o LED_2 e os desligue aps 2s. C) Ao ligar o microcontrolador, o LED_1 deve se manter aceso constantemente, passados 4s o LED_2 dever piscar 5 vezes com um DELAY de 1s apagado e 3s ligado.

24

Professor Srgio Minas Melconian.

Terceiro Exemplo Gerando Som (BUZZER)


Neste terceiro exemplo ser estudada uma rotina para se gerar som com um cristal piezeltrico (Buzzer). Funcionamento: Para um buzzer soar, necessrio aliment-lo com uma fonte de sinal. Neste caso, o PIC ira gerar ondas quadradas com freqncia tal para o funcionamento do mesmo. Fluxograma

INICIO
CONFIGURAES INICIAIS

GERAR ONDA QUADRADA COM FREQUNCIA f.

O Programa ;**************************************************************************************************** ;* PROGRAMA BUZZER * ;**************************************************************************************************** ;********************************* ARQUIVOS DE DEFINIO DO PIC ********************************** #INCLUDE <P16F877A.INC> ;MODELO DO MICROCONTROLADOR UTILIZADO - PIC 16F877A
__CONFIG _CP_OFF & _CPD_OFF & _DEBUG_OFF & _LVP_OFF & _WRT_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC

;********************************* PAGINAO DE MEMRIA DO PIC ********************************** #DEFINE BANK0 BCF STATUS,RP0 #DEFINE BANK1 BSF STATUS,RP0 ;HABILITA BANCO 0 DE MEMRIA ;HABILITA BANCO 1 DE MAMRIA

;*********************************** DEFINIO DAS VRIAVEIS ************************************* CBLOCK 0X70 ;INICIO DA MEMRIA DE SUARIO TEMPO1 ;VARIAVEL TEMPO1

25

Professor Srgio Minas Melconian.


ENDC ;FIM DO BLOCO DE MEMRIA ;******************************************* SADAS ************************************************ #DEFINE BUZZER PORTA,5 ;PORTA DO BUZZER

;************************************** VETOR DE RESET ******************************************** ORG 0X0000 GOTO INICIO ;ENDEREO INICIAL PARA PROCESSAMENTO ;VAI PARA INICIO DO PROGRAMA

;*********************************** INICIO DA INTERRUPO **************************************** ORG 0X0004 RETFIE ;ENDEREO INICIAL DA INTERRUPO ;RETORNA DA INTERRUPO

;********************************** INICIO DO PROGRAMA ******************************************* INICIO CLRF PORTA BANK1 ;LIMPA TODO PORTA ;HABILITA BANCO 1 DE MEMRIA DO PIC

MOVLW B'00000000' MOVWF TRISA ;CONFIGURA TODO PORTA COMO SADA. BANK0 ;RETORNA PARA O BANCO 0 DE MEMRIA DO PIC

;************************************ ROTINA PRINCIPAL ******************************************** MAIN BSF BUZZER CALL DELAY_MS BCF BUZZER CALL DELAY_MS GOTO MAIN ;INICIO DA ROTINA PRINCIPAL ;SETA O PORTA,5 (BUZZER) ;CHAMA ROTINA DE DELAY ;LIMPA O PORTA,5 (BUZZER) ;CHAMA ROTINA DE DELAY ;VAI PARA O INICIO DA ROTINA PRINCIPAL

;**************************************ROTINA DE DELAY******************************** DELAY_MS ;ROTINA DE DELAY

MOVLW .50 ;MOVER O NUMERO 50 EM DECIMAL PARA W (VALOR MAXIMO = 256) MOVWF TEMPO1 ;MOVER O NUMERO 50 PARA TEMPO1 NOP ;PERDE UM CICLO DE MQUINA (S PARA GANHAR TEMPO)

DECFSZ TEMPO1,F ;DECREMENTA TEMPO1 E GUARDA O RESULTADO EM F, E PULA A PROXIMA LINHA SE RESULTADO FOR ZERO (FIM DO TEMPO1?)

26

Professor Srgio Minas Melconian.


GOTO $-2 RETURN ;NO, VOLTA DUAS INSTRUES ;SIM, PASSOU TEMPO ;RETORNA DA ROTINA DE DELAY

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

Exerccios Propostos Utilizando como parmetro o terceiro exemplo, faa as seguintes alteraes: A) Altere as freqncias geradas, deixando o som mais grave. B) Faa o buzzer soar de maneira que fique bipando com delay de 2s. C) Insira 3 botes, cada um ao ser pressionado ira gerar uma freqncia diferente. (o som s ser escutado em quanto o boto estiver pressionado).

27

Professor Srgio Minas Melconian.

Quarto Exemplo Rotao de Bit


Neste quarto exemplo ser estudada uma rotina para rotao de bit. Funcionamento: Um bit ficar rotacionando para esquerda. LED L0 L0 L1 L1 L2 L2 L3 L3 ESTADO LIGA DESLIGA LIGA DESLIGA LIGA DESLIGA LIGA DESLIGA

Fluxograma

INICIO
CONFIGURAES INICIAIS

LIMPA REGISTRADOR STATUS,C

ROTACIONAR O BIT

(3X)

LIMPA LED (PORTB)

28

Professor Srgio Minas Melconian. O Programa


;********************************************************************************************* ;* PROGRAMA ROTAO DE BIT COM RLF * ;********************************************************************************************* ;******************************CONFIGURAO PARA GRAVAO***************************** #INCLUDE <P16F877A.INC> ;MODELO DO MICROCONTROLADOR UTILIZADO.

__CONFIG _CP_OFF & _LVP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC ;**************************DEFINIO DOS BANCOS DE MEMRIA RAM************************ #DEFINE BANK0 #DEFINE BANK1 BCF STATUS, RP0 BSF STATUS, RP0 ;SETA BANK 0 DE MEMRIA. ;SETA BANK 1 DE MEMRIA.

;***************************************VARIVEIS************************************* CBLOCK 0X70 ;ENDEREO LOCALIZADO NA MAMRIA DE DADOS DO BANK 0. FOI ESCOLHIDO, POIS ;EST LOCALIZAO ACESSADA DE QUALQUER BANCO, FACILITANDO A OPERAO. TEMPO1 TEMPO2 TEMPO3 ENDC ;CONTADOR PARA DELAY 1ms ;CONTADOR PARA DELAY 1/4s = 0,25s ;CONTADOR PARA DELAY 1s ;FIM DO BLOCO DE MEMRIA.

;*****************************************SADAS************************************** #DEFINE LED PORTB ;DEFINE PORTB COMO LED. ;0 -> APAGADO ;1 -> ACESO

;*************************************VETOR DE RESET********************************** ORG 0X0000 GOTO INICIO ;ENDEREO DO VETOR DE RESET ;PULA PARA O INICIO

;***********************************INICIO DA INTERRUPO***************************** ORG 0X0004 RETFIE ;ENDEREO DO VETOR DE INTERRUPO ;RETORNA DA INTERRUPO

;*************************************INICIO DO PROGRAMA****************************** INICIO CLRF PORTB BANK1 ;LIMPA PORTB ;TRABALHAR COM BANK1

29

Professor Srgio Minas Melconian.


MOVLW B'00000000' MOVWF TRISB ;DEFINE PORTS B COMO SADA (1 -> ENTRADA, 0 -> SADA). BANK0 ;TRABALHAR COM BANK0.

;*************************************ROTINA PRINCIPAL******************************** MAIN BCF STATUS,C ;LIMPA CARRY (REGISTRADOR RELACIONADO AS OPERAES MATEMTICAS) MOVLW B'00000001' ;MOVER VALOR 1 EM BINRIO PARA W (VALOR MENOS SIGNIFICATIVO) MOVWF LED ;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 ;ROTACIONA BIT DO LED PARA ESQUERDA ;CHAMA ROTINA DE DELAY ;ROTACIONA BIT DO LED PARA ESQUERDA ;CHAMA ROTINA DE DELAY ;ROTACIONA BIT DO LED PARA ESQUERDA ;CHAMA ROTINA DE DELAY ;LIMPA LED ;RETORNA PARA MAIN

;**************************************ROTINA DE DELAY******************************** DELAY_1S ;ROTINA DE DELAY

MOVLW .4 MOVWF TEMPO3 ;TEMPORIZA 1s DL3 MOVLW .250 MOVWF TEMPO2 ;TEMPORIZA 1/4s = 0.25s DL2 MOVLW .250 MOVWF TEMPO1 ;TEMPORIZA 1ms DL1 NOP ;GASTA UM CICLO DE MQUINA. DECFSZ TEMPO1 ;DECREMENTA TEMPO1 GOTO DL1 DECFSZ TEMPO2 ;DECREMENTA TEMPO2 GOTO DL2

30

Professor Srgio Minas Melconian.


DECFSZ TEMPO3 ;DECREMENTA TEMPO3 GOTO DL3 RETURN ;RETORNA DA ROTINA DE DELAY

;**************************************FIM DO PROGRAMA******************************** END ;FIM DO PROGRAMA (OBRIGATRIO)

Exerccios Propostos Utilizando como parmetro o quarto exemplo, faa as seguintes alteraes: A) Inverta o sentido de rotao do bit para a direita. B) Ao invs de rotacionar apenas o bit como no exemplo, rotacione o bit, mantendo o anterior ligado. LED L0 L1 L2 L3 L0 L1 L2 L3 ESTADO LIGA LIGA LIGA LIGA DESLIGA DESLIGA DESLIGA DESLIGA

C) Mantenha a seqncia pedida no item B (iniciar ligada) e insira um boto que ao ser pressionado, ir manter todos os LEDs ligados por 5s, em seguida a seqncia do item B voltar a rotacionar.

31

Professor Srgio Minas Melconian.

Quinto Exemplo Display 7 segmentos (Catodo Comum)


Neste quinto exemplo ser estudada uma rotina para aplicao do display de 7 segmentos catodo comum.. Funcionamento: Um boto ira incrementar um contador que vai de 0 15 e outro boto ira decrementar o mesmo. Fluxograma

32

Professor Srgio Minas Melconian. O Programa


;************************************************************************************* ;* PROGRAMA CONTADOR - DISPLAY 7 SEGMENTOS E CONTADOR * ;************************************************************************************* ;******************************CONFIGURAO PARA GRAVAO********************** #INCLUDE <P16F877A.INC> ;MODELO DO MICROCONTROLADOR UTILIZADO.

__CONFIG _CP_OFF & _LVP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC ;**************************DEFINIO DOS BANCOS DE MEMRIA RAM***************** #DEFINE BANK0 BCF STATUS, RP0 #DEFINE BANK1 BSF STATUS, RP0 ;SETA BANK 0 DE MEMRIA. ;SETA BANK 1 DE MEMRIA.

;***************************************VARIVEIS************************************ CBLOCK 0X70 ;ENDEREO LOCALIZADO NA MAMRIA DE DADOS DO BANK 0. FOI ESCOLHIDO, POIS ;EST LOCALIZAO ACESSADA DE QUALQUER BANCO, FACILITANDO A OPERAO. CONTADOR FLAGS FILTRO1 FILTRO2 ENDC ;ARMAZENA O VALOR DA CONTAGEM ;ARMAZENA OS FLAGS DE CONTROLE ;FILTRAGEM PARA O BOTO 1 ;FILTRAGEM PARA O BOTO 2 ;FIM DO BLOCO DE MEMRIA.

;*****************************************FLAGS*************************************** ; DEFINIO DE TODOS OS FLAGS UTILIZADOS PELO SISTEMA. #DEFINE ST_BT0 #DEFINE ST_BT1 FLAGS,0 FLAGS,1 ;STATUS DO BOTO 0 ;STATUS DO BOTO 1

;***************************************CONSTANTES************************************ ; DEFINIO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA MIN EQU .0 MAX EQU .15 T_FILTRO EQU .255 ;VALOR MNIMO PARA O CONTADOR ;VALOR MXIMO PARA O CONTADOR ;FILTRO PARA BOTO

;****************************************ENTRADAS************************************* #DEFINE BOTAO_0 PORTB,0 #DEFINE BOTAO_1 PORTB,1 ;PORTA DO BOTO - (PINO 35 - RB2) ;PORTA DO BOTO - (PINO 34 - RB1)

;*****************************************SADAS************************************** ;NO SER UTILIZADO NESTE PROGRAMA.

33

Professor Srgio Minas Melconian.


;*************************************VETOR DE RESET********************************** ORG 0X0000 GOTO INICIO ;ENDEREO DO VETOR DE RESET ;PULA PARA O INICIO

;***********************************INICIO DA INTERRUPO***************************** ORG 0X0004 RETFIE ;ENDEREO DO VETOR DE INTERRUPO ;RETORNA DA INTERRUPO

;********************ROTINA DE CONVERSO BINRIO -> DISPLAY 7 SEGMENTOS*************** ; ESTA ROTINA IR RETORNAR EM W, O SIMBOLO CORRETO QUE DEVE SER ; MOSTRADO NO DISPLAY PARA CADA VALOR DE CONTADOR. O RETORNO J EST ; FORMATADO PARA AS CONDIES DE LIGAO DO DISPLAY AO PORTD. ; a ; ********** ; * * ; f * *b ; * g * ; ********** ; * * ; e* *c ; * d * ; ********** *. CONVERTE MOVF CONTADOR,W ANDLW B'00001111' ADDWF PCL,F ; ;COLOCA CONTADOR EM W ;MASCARA VALOR DE CONTADOR ;CONSIDERAR SOMENTE AT 15 ;SOMA DESLOCAMENTO AO PROGRAM COUTER, GERANDO UMATABELA"CASE"

B'PGFEDCBA' ; POSIO CORRETA DOS SEGUIMENTOS RETLW B'00111111' ; 00 - RETORNA SMBOLO CORRETO 0 RETLW B'00000110' ; 01 - RETORNA SMBOLO CORRETO 1 RETLW B'01011011' ; 02 - RETORNA SMBOLO CORRETO 2 RETLW B'01001111' ; 03 - RETORNA SMBOLO CORRETO 3 RETLW B'01100110' ; 04 - RETORNA SMBOLO CORRETO 4 RETLW B'01101101' ; 05 - RETORNA SMBOLO CORRETO 5 RETLW B'01111101' ; 06 - RETORNA SMBOLO CORRETO 6 RETLW B'00000111' ; 07 - RETORNA SMBOLO CORRETO 7 RETLW B'01111111' ; 08 - RETORNA SMBOLO CORRETO 8 RETLW B'01101111' ; 09 - RETORNA SMBOLO CORRETO 9 RETLW B'01110111' ; 10 - RETORNA SMBOLO CORRETO A RETLW B'11111111' ; 11 - RETORNA SMBOLO CORRETO B RETLW B'00111001' ; 12 - RETORNA SMBOLO CORRETO C RETLW B'10111111' ; 13 - RETORNA SMBOLO CORRETO D RETLW B'01111001' ; 14 - RETORNA SMBOLO CORRETO E RETLW B'01110001' ; 15 - RETORNA SMBOLO CORRETO F

34

Professor Srgio Minas Melconian.


;*************************************INICIO DO PROGRAMA****************************** INICIO BANK1 MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF ;ALTERA PARA O BANCO 1 B'00000011' TRISB B'00000000' TRISC B'00000000' TRISD ;DEFINE RB0 E RB1 COMO ENTRADA ;DEFINE TODO O PORTC COMO SADA ;DEFINE TODO O PORTD COMO SADA

BANK0

;ALTERA PARA O BANCO 0 ;LIMPA O PORTB ;LIMPA O PORTC ;LIMPA O PORTD ;LIMPA TODOS OS FLAGS ;INICIA CONTADOR = MIN = 0 ;ATUALIZA O DISPLAY INICIALMENTE

CLRF PORTB CLRF PORTC CLRF PORTD CLRF FLAGS MOVLW MIN MOVWF CONTADOR GOTO ATUALIZA

;*************************************ROTINA PRINCIPAL******************************** MAIN BSF MOVLW MOVWF MOVWF CHECA_BT0 BTFSC BOTAO_0 GOTO BT0_LIB DECFSZ FILTRO1,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,F ;O BOTO 1 EST PRESSIONADO? ;NO, ENTO TRATA COMO LIBERADO ;SIM ;DECREMENTA O FILTRO DO BOTO ST_BT0 ;MARCA BOTO 0 COMO LIBERADO (FLAG) ;O BOTO 0 EST PRESSIONADO? ;NO, ENTO TRATA COMO LIBERADO ;SIM ;DECREMENTA O FILTRO DO BOTO ;TERMINOU? ;NO, CONTINUA ESPERANDO ;SIM ;BOTO J ESTAVA PRESSIONADO? (FLAG) ;NO, EXECUTA AO DO BOTO ;SIM, CHECA BOTO 1 PORTC,3 T_FILTRO FILTRO1 FILTRO2 ;ATIVA O DISPLAY DA PLACA. ;INICIALIZA FILTRO1 = T_FILTRO ;INICIALIZA FILTRO2 = T_FILTRO

35

Professor Srgio Minas Melconian.


GOTO CHECA_BT1 BTFSS ST_BT1 GOTO INC GOTO MAIN BT1_LIB BCF ST_BT1 GOTO MAIN DEC BSF ST_BT0 MOVF CONTADOR,W XORLW MIN BTFSC STATUS,Z GOTO MAIN DECF CONTADOR,F GOTO ATUALIZA INC BSF ST_BT1 MOVF CONTADOR,W XORLW MAX BTFSC STATUS,Z GOTO MAIN INCF CONTADOR,F GOTO ATUALIZA ATUALIZA CALL CONVERTE MOVWF GOTO MAIN PORTD ;CONVERTE CONTADOR NO NMERO DO DISPLAY ;ATUALIZA O PORTD PARA VISUALIZARMOS O VALOR DE ; CONTADOR NO DISPLAY. ;NO, VOLTA AO LOOP PRINCIPAL ;MARCA BOTO 1 COMO LIBERADO (FLAG) ;RETORNA AO LOOPING ;AO DE DECREMENTAR ;MARCA BOTO 0 COMO J PRESSIONADO (FLAG) ;COLOCA CONTADOR EM W ;APLICA XOR ENTRE CONTADOR E MIN ;PARA TESTAR IGUALDADE. SE FOREM ;IGUAIS, O RESULTADO SER ZERO ;RESULTOU EM ZERO? ;SIM, RETORNA SEM AFETAR CONT. ;NO ;DECREMENTA O CONTADOR ;ATUALIZA O DISPLAY ;AO DE INCREMENTAR ;MARCA BOTO 1 COMO J PRESSIONADO (FLAG) ;COLOCA CONTADOR EM W ;APLICA XOR ENTRE CONTADOR E MAX ;PARA TESTAR IGUALDADE. SE FOREM ;IGUAIS, O RESULTADO SER ZERO ;RESULTOU EM ZERO? ;SIM, RETORNA SEM AFETAR CONT. ;NO ;INCREMENTA O CONTADOR ;ATUALIZA O DISPLAY ;TERMINOU? ;NO, CONTINUA ESPERANDO ;SIM ;BOTO J ESTAVA PRESSIONADO? (FLAG) ;NO, EXECUTA AO DO BOTO ;SIM, VOLTA AO LOOPING

;**************************************FIM DO PROGRAMA******************************** END ;FIM DO PROGRAMA (OBRIGATRIO)

36

Professor Srgio Minas Melconian. Exerccios Propostos Utilizando como parmetro o quinto exemplo, faa as seguintes alteraes: A) Faa um contador OCTAL (0 7). B) Faa um contador ALFABTICO de A H.

37

Professor Srgio Minas Melconian.

Esquema Eltrico da Placa de Teste

38

Professor Srgio Minas Melconian.

Lay-out Placa de Teste

Observao: Adicione dois JUMPERS conforme representados em vermelho.


39

Professor Srgio Minas Melconian.

Referncias
Desbravando o PIC - Ampliado e Atualizado para PIC 16F628A. Autor: David Jos de Souza. Editora: rica. PIC16F877A Conectando o PIC Recursos Avanados. Autor (es): David Jos de Souza e Nicolas Csar Lavinia. Editora: rica. Microcontroladores PIC - Tcnicas Avanadas. Autor: Fabio Pereira. Editora: rica. Apostila Microarquitetura de alto desempenho Pipeline. Autor: Gabriel P. Silva. Universidade Federal de Rio de Janeiro. Datasheet PIC16F877A. http://www.labtools.com.br/

40

Você também pode gostar