Baixe o app para aproveitar ainda mais
Prévia do material em texto
Professor Sérgio Minas Melconian. 1 MICROCONTROLADOR PIC16F877A FUNDAMENTOS E PROGRAMAÇÃO BÁSICA Professor Sérgio Minas Melconian. 2 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. Professor Sérgio Minas Melconian. 3 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. Professor Sérgio Minas Melconian. 4 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; Professor Sérgio Minas Melconian. 5 Pinagem – Encapsulamento PDIP - 40 Pinos Professor Sérgio Minas Melconian. 6 Nomenclatura dos pinos Nome do Pino Nº Caracte rística Tipo Descrição OSC1 / CLKIN 13 I ST/CMOS4 ENTRADA PARA OSCILADORES EXTERNOS. OSC2 / CLKOUT 14 O - SAÍDA P/ CRISTAL. MCLR / VPP 1 I/P ST MASTER CLEAR (RESET) EXTERNO. SÓ FUNCIONA COM O PINO EM NÍVEL LÓGICO “1”. ENTRADA PARA TENSÃO DE PROGRAMAÇÃO EM 13V. VSS 12/31 P - GND (TERRA). VDD 11/32 P - ALIMENTAÇÃO POSITIVA. RA0 / AN0 2 I/O TTL I/O DIGITAL OU ANALÓGICO. RA1 / AN1 3 I/O TTL I/O DIGITAL OU ANALÓGICO. RA2 / AN2 / VREF- / CVREF 4 I/O TTL I/O DIGITAL OU ANALÓGICO OU TENSÃO NEGATIVA DE REFERÊNCIA ANALÓGICA. RA3 / AN3 / VREF+ 5 I/O TTL I/O DIGITAL OU ANALÓGICO OU TENSÃO POSITIVA DE REFERÊNCIA ANALÓGICA. RA4 / T0CKI / C1OUT 6 I/O ST I/O DIGITAL (OPEN DRAYN, NÃO CONSEGUE GERAR NÍVEL LÓGICO ALTO) OU ENTRADA EXTERNA DO CONTADOR TMR0 OU SAÍDA DO COMPARADOR 1. RA5 / SS / AN4 / C2OUT 7 I/O TTL I/O DIGITAL OU ENTRADA ANALÓGICA OU HABILITAÇÃO EXTERNA PARA COMUNICAÇÃO SPI OU SAÍDA DO COMPARADOR 2. RB0 / INT 33 I/O TTL/ST1 I/O DIGITAL COM INTERRUPÇÃO EXTERNA. RB1 34 I/O TTL I/O DIGITAL. RB2 35 I/O TTL I/O DIGITAL. RB3 / PGM 36 I/O TTL I/O DIGITAL OU ENTRADA PARA PROGRAMAÇÃO EM 5V. RB4 37 I/O TTL I/O DIGITAL COM INTERRUPÇÃO POR MUDANÇA DE ESTADO. RB5 38 I/O TTL I/O DIGITAL COM INTERRUPÇÃO POR MUDANÇA DE ESTADO. RB6 / PGC 39 I/O TTL/ST2 I/O DIGITAL COM INTERRUPÇÃO POR MUDANÇA DE ESTADO OU CLOCK DA PROGRAMAÇÃO SERIAL OU PINO DE IN-CIRCUIT DEBUGGER. RB7 / PGD 40 I/O TTL/ST2 I/O DIGITAL COM INTERRUPÇÃO POR MUDANÇA DE ESTADO OU DATA DA PROGRAMAÇÃO SERIAL OU PINO DE IN-CIRCUIT DEBUGGER RC0 / T1OSO / T1CKI 15 I/O ST I/O DIGITAL OU SAÍDA DO OSCILADOR EXTERNO PARA TMR1 OU ENTRADA DE INCREMENTO PARA TMR1. RC1 / T1OSI / CCP2 16 I/O ST I/O DIGITAL OU ENTRADA DO OSCILADOR EXTERNO PARA TMR1 OU ENTRADA DO CAPTURE2 OU SAÍDAS PARA COMPARE2/PWM2. RC2 / CCP1 17 I/O ST I/O DIGITAL OU ENTRADA DO CAPTURE1 OU SAÍDAS PARA COMPARE1/PWM1. RC3 / SCK / SCL 18 I/O ST I/O DIGITAL OU ENTRADA/SAÍDA DE CLOCK PARA COMUNICAÇÃO SERIAL SPI / I2C. RC4 / SDI / SDA 23 I/O ST I/O DIGITAL OU ENTRADA DE DADOS PARA SPI OU VIA DE DADOS (I/O) PARA I2C. RC5 / SDO 24 I/O ST I/O DIGITAL OU SAÍDA DE DADOS PARA SPI. RC6 / TX / CK 25 I/O ST I/O DIGITAL OU TX (TRANSMISSÃO) PARA COMUNICAÇÃO USART ASSÍNCRONA OU CLOCK PARA COMUNICAÇÃO SÍNCRONA. RC7 / RX / DT 26 I/O ST I/O DIGITAL OU RX (RECEPÇÃO) PARA COMUNICAÇÃO USART ASSÍNCRONA OU DATA PARA COMUNICAÇÃO SÍNCRONA. RD0 / PSP0 19 I/O TTL/ST3 I/O DIGITAL OU DADO 0 (COMUNICAÇÃO PARALELA). RD1 / PSP1 20 I/O TTL/ST3 I/O DIGITAL OU DADO 1 (COMUNICAÇÃO PARALELA). RD2 / PSP2 21 I/O TTL/ST3 I/O DIGITAL OU DADO 2 (COMUNICAÇÃO PARALELA). RD3 / PSP3 22 I/O TTL/ST3 I/O DIGITAL OU DADO 3 (COMUNICAÇÃO PARALELA). Professor Sérgio Minas Melconian. 7 RD4 / PSP427 I/O TTL/ST3 I/O DIGITAL OU DADO 4 (COMUNICAÇÃO PARALELA). RD5 / PSP5 28 I/O TTL/ST3 I/O DIGITAL OU DADO 5 (COMUNICAÇÃO PARALELA). RD6 / PSP6 29 I/O TTL/ST3 I/O DIGITAL OU DADO 6 (COMUNICAÇÃO PARALELA). RD7 / PSP7 30 I/O TTL/ST3 I/O DIGITAL OU DADO 7 (COMUNICAÇÃO PARALELA). RE0 / RD / AN5 8 I/O TTL/ST3 I/O DIGITAL OU CONTROLE DE LEITURA DA PORTA PARALELA OU ENTRADA ANALÓGICA. RE1 / WR / AN6 9 I/O TTL/ST3 I/O DIGITAL OU CONTROLE DE ESCRITA DA PORTA PARALELA OU ENTRADA ANALÓGICA. RE2 / CS / AN7 10 I/O TTL/ST3 I/O DIGITAL OU CONTROLE DE ESCRITA DA PORTA PARALELA OU ENTRADA ANALÓGICA. Legenda: I => Input (Entrada); O => Output (Saída); I/O => Input/Output (Entrada ou Saída); P => Power (Alimentação); - => Não utilizado; TTL => Pino tipo TTL; ST => Pino tipo Schmitt Trigger; Notas: 1 Entrada tipo ST, quando configurado como interrupção externa. 2 Entrada tipo ST, durante o modo do programação 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. Observação 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á interferência direta nos níveis de tensão (0 ou 1) interpretados pelo microcontrolador. (1), (2) Região incerta, mantém nível anterior (0 ou 1). Professor Sérgio Minas Melconian. 8 Estrutura Interna do PIC16F877A O diagrama de blocos (original Microchip) indicado a baixo mostra as diversas partes que compõem o microcontrolador. Professor Sérgio Minas Melconian. 9 Ciclo de Máquina 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 máquina de 1µs. CKint = CKext / 4 onde: CKint = Clock interno; CKext = Clock externo; TCM = 1 / Ckint 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. Osc. onde: TCM = Tempo de Ciclo de Máquina; Freq. Osc. = Freqüência do Oscilador; Observação: No caso do microcontrolador PIC16F877A, a Microchip garante perfeito funcionamento do ciclo de máquina com um oscilador de até 20MHz. Ao observar as equações anteriores é possível perceber que os TCM estão relacionados a uma constante de valor 4, mas qual o motivo desse número? Fácil o entendimento. Para executar uma única instrução pelo processador, algumas operações são realizadas. O fato do processamento não ser paralelo, exige operações de processamentos executados em sub-ciclos de máquina, originados pela divisão do clock externo. Estes sub-ciclos são 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 instrução carregada para ULA é executada, sendo trocadas informações com a memória de dados e o registrador W (Work) sempre que necessário. Por fim, no instante Q4, a próxima instrução é buscada da memória de programa e colocada na ULA. Esse processo é conhecido como PIPELINE, ele permite que todas as instruções sejam executadas em um ciclo de máquina. Observação: As exceções são os jumps (saltos) realizados no program counter, como chamadas de rotinas e retornos que gastam 2 ciclos de máquina. Exemplo PIPELINE Vamos imaginar uma lavanderia, na qual possui quatro atividades a serem realizadas. Seqüência de trabalho: • Colocar a roupa na máquina de lavar; • Depois de lavada colocar na secadora; • Depois de seca passar o ferro; • Por fim guardá-la no armário. Professor Sérgio Minas Melconian. 10 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. 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. Professor Sérgio Minas Melconian. 12 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). Vetor de interrupção: É a posição 0x0004h de endereço da memória de programa, é a posição de memória para onde serão desviados todos os processamentos de interrupção. Este PIC possui 15 tipos de interrupções diferentes. Pilha (STACK): É uma região, fisicamente separada da memória de programa, onde serão guardados os endereços de retorno quando utilizados desvios para chamada de rotinas. Quando o programa é desviado por meio do comando CALL, o endereço 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 níveis, possibilitando guardar até 8 endereços de retorno (8 desvios consecutivos). Caso o programador tente ocupar mais de 8 níveis da pilha, a informação mais antiga será perdida. A pilha desse PIC armazena endereços de 13bits, sendo suficiente para gerenciar 8k de memória de programa. Memória de Dados: A memória de dados é volátil do tipo RAM (Random Access Memory). 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. Professor Sérgio Minas Melconian. 13 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. Registradores de uso geral: Região da memória de dados onde é possível armazenar até 368 Bytes de variáveis definidas pelo programador, para serem escritas ou lidas pelo programa. Observação: A memória de dados está divida em 4 bancos de memória (Banco 0, Banco 1, Banco 2 e Banco 3), isso ocorre devido a existência de apenas 7 bits para endereçamento de todos os registradores, com isso só se pode gerenciar 128 endereços diferentes. Por isso que o fabricante dividiu amemória em quatro grupos de 128 Bytes cada. Acesso aos bancos de memória Para acessar os bancos de memória é preciso gerenciar os registradores STATUS <RP1:RP0>. BANCO RP1 RP0 0 0 0 1 0 1 2 1 0 3 1 1 Observação: Sempre que o PIC for ligado, o Banco 0 será o primeiro a ser selecionado. Interrupções As interrupções são ferramentas que possibilitam a execução de determinadas situações no momento em que elas ocorrem. Normalmente elas são geradas devido ações externas. O PIC 16F877A é composto por 15 interrupções diferentes, as quais sempre serão desviadas para o vetor de interrupção (0004h) da memória de programa. Professor Sérgio Minas Melconian. 14 As 15 interrupções que compõem o PIC 16F877A são: • Interrupção de Timer 0; • Interrupção Externa; • Interrupção por mudança de Estado; • Interrupção da Porta Paralela (PSP); • Interrupção dos Conversores A/D; • Interrupção de Recepção da USART; • Interrupção de Transmissão da USART; • Interrupção da Comunicação Serial (SPI e I2C); • Interrupção do CCP1 (Capture/Compare/PWM); • Interrupção do Timer 1; • Interrupção de Timer 2; • Interrupção de fim de escrita na E2PROM/FLASH; • Interrupção de Colisão de Dados (BUS Collision); • Interrupção dos Comparadores; Características Elétricas Temperatura de Trabalho -55ºC até +125ºC Temperatura de Armazenamento -65ºC até +150ºC Tensão de Trabalho 4V a 5,5V Tensão Máxima no Pino VDD (em relação a Vss) -0,3V a 7,5V Tensão Máxima no MCRL (em relação a Vss) 0 a 14V Tensão Máxima no Pino RA4 (em relação a Vss) 0 a 8,5V Tensão Máxima nos Demais Pinos (em relação a Vss) -0,3V a (VDD + 0,3V) Dissipação Máxima de Energia 1W Corrente Máxima de Saída no Pino Vss 300mA Corrente Máxima de Entrada no Pino VDD 250mA Corrente Máxima de Saída de um Pino (em VDD) 25mA Corrente Máxima de Entrada de um Pino (em Vss) 25mA Corrente Máxima de Entrada do PORTA, PORTB e PORTE 200mA Corrente Máxima de Saída do PORTA, PORTB e PORTE 200mA Corrente Máxima de Entrada do PORTC e PORTD 200mA Corrente Máxima de Saída do PORTC e PORTD 200mA Professor Sérgio Minas Melconian. 15 Set de Instruções O Set de instruções é dividido em quatro grupos, os quais compõem um conjunto com 35 instruções: • Operações com registradores; • Operações com literais; • Operações com bits; • Controles; Operações com Registradores Instrução Argumentos Descrição ADDWF f,d Soma W e f guardando o resultado em d. ANDWF f,d Lógica "E" entre W e f, guarda o resultado em d. CLRF f Limpa f. COMF f,d Calcula o complemento de f guardando o resultado em d DECF f,d Decrementa f, guardando o resultado em d. DECFSZ f,d Decrementa f, guardando o resultado em d e pula a próxima linha se o resultado for zero. INCF f,d Incrementa f, guardando o resultado em d. INCFSZ f,d Incrementa f, guardando o resultado em d e pula a próxima linha se o resultado for zero. IORWF f,d Lógica "ou" entre W e f, guardando o resultado em d. MOVF f,d Move f para d (copia f em d). MOVWF f Move W para f (copia W em f). RLF f,d Rotaciona f um bit para esquerda. RRF f,d Rotaciona f um bit para direita. SUBWF f,d Subtrai W de f (f - W) guardando o resultado em d. SWAPF f,d Executa uma inversão entre as partes alta e baixa de f, guardando em d. XORWF f,d Lógica "ou exclusivo" entre k e W guardando o resultado em d. Professor Sérgio Minas Melconian. 16 Operações com Literais Instrução Argumentos Descrição ADDLW K Soma k com W, guardando o resultado em W. ANDLW K Lógica "E" entre k e W, guardando o resultado em W. IORLW K Lógica "OU" entre k e W, guardando o resultado em W. MOVLW K Move k para W. SUBLW K Subtrai W de k (k - W), guardando o resultado em W. XORLW K Lógica "OU EXCLUSIVO” entre k e W, guardando o resultado em W. Operações com bit Instrução Argumentos Descrição BCF f,b Impõe 0(zero) ao bit do registrador f. BSF f,b Impõe 1 (um) ao bit do registrador f. BTFSC f,b Testa o bit b do registrador f e pula a próxima linha se for 0 (zero). BTFSS f,b Testa o bit b do registrador f e pula a próxima linha se for 1 (um). Controles Instrução Argumentos Descrição CLRW - Limpa w. NOP - Gasta um ciclo de máquina sem fazer nada. CALL R Executa a rotina R. CLRWDT - Limpa o registrador WDT para não acontecer reset. GOTO R Desvia para o ponto R mudando o PC. RETFIE - Retorna de uma interrupção. RETLW K Retorna de uma rotina com k em W. RETURN - Retorna de uma rotina sem afetar W. SLEEP Coloca o PIC em modo sleep (dormindo) para economia de energia. Professor Sérgio Minas Melconian. 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. Elementos utilizados na construção dos fluxogramas: Inicio ou Término – Símbolo utilizado para representar inicio ou término de programa; Processo – Símbolo utilizado para descrever uma determinada tarefa; Dados – Símbolo utilizado para descrição de entrada de dados; Tomada de decisão – Símbolo utilizado para testes condicionais. E tomada de decisão pode seguir um fluxo verdadeiro ou falso. Exemplo: Serão somados dois números 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 número A. Pega número B. Soma A+B Não Sim Guarda A+B em I A+B é Par? Guarda A+B em P FIM Professor Sérgio Minas Melconian. 18 Primeiro Exemplo – Botão e LED Será dado inicio a programação dos microcontroladores PIC com um programa tradicional e simples de se entender. Funcionamento: Ao apertar um botão, um LED se manterá ligado até o botão ser solto. Fluxograma INICIO CONFIGURAÇÕES INICIAIS 1 SIM BOTÃO NÃO ACENDE O LED PRESSIONADO? APAGA O LED 1 O Programa ;************************************************************************************* ;* PROGRAMA LIGA LED POR MEIO DE UM BOTÃO * ;************************************************************************************* ;***************************CONFIGURAÇÃO PARA GRAVAÇÃO************************* #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 MEMÓRIA 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 ("CÃO DE GUARDA" TEMPORIZADOR QUE RESETA O PIC QUANDO SISTEMA ;TRAVADO). ; BOREN - BROWN OUT DETECT (SE A ALIMENTAÇÃO VDD FOR MENOR QUE 4V DURANTE 100 MICRO-SEG. ;O PIC RESETA). ; LVP - LOW VOLTAGE PROGRAM (SISTEMA DE PROGRAMAÇÃO EM BAIXA TENSÃO). ; XT - OSCILADOR DO TIPO CRISTAL. Professor Sérgio Minas Melconian. 19 ;**************************DEFINIÇÃO DOS BANCOS DE MEMÓRIA RAM************************ #DEFINE BANK0 BCF STATUS, RP0 ;SETA BANK 0 DE MEMÓRIA. #DEFINE BANK1 BSF STATUS, RP0 ;SETA BANK 1 DE MEMÓRIA. ;O PIC 16F877A POSSUI QUATRO BANCOS DE MEMÓRIAS 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 SÃO INICIADOS COM ZERO.LOGO O BANK 0 É SEMPRE O ;PRIMEIRO SELECIONADO. ;***************************************VARIÁVEIS************************************* CBLOCK 0X70 ;ENDEREÇO LOCALIZADO NA MAMÓRIA DE DADOS DO BANK 0. FOI ;ESCOLHIDO, POIS ESTÁ LOCALIZAÇÃO É ACESSADA DE QUALQUER BANCO, FACILITANDO A OPERAÇÃO. ENDC ;FIM DO BLOCO DE MEMÓRIA. ;*****************************************FLAGS*************************************** ; SINALIZA QUEM GEROU A INTERRUPÇÃO. "NÃO SERÁ UTILIZADO NESTE PROGRAMA". ;***************************************CONSTANTES************************************ ; FILTRO PARA EVITAR RUIDOS DOS BOTÕES. "NÃO SERÁ UTILIZADO NESTE PROGRAMA". ;****************************************ENTRADAS************************************* #DEFINE BOTAO_0 PORTB,0 ;BOTÃO QUE LIGA O SISTEMA - (PINO 33 - RB0) ;*****************************************SAÍDAS************************************** #DEFINE LED_1 PORTB,1 ;LED 1 - (PINO 34 - RB1) ;0 -> APAGADO ;1 -> ACESO ;*************************************VETOR DE RESET********************************** ORG 0X0000 ;ENDEREÇO DO VETOR DE RESET GOTO INICIO ;PULA PARA O INICIO ;***********************************INICIO DA INTERRUPÇÃO***************************** ORG 0X0004 ;ENDEREÇO DO VETOR DE INTERRUPÇÃO RETFIE ;RETORNA DA INTERRUPÇÃO Professor Sérgio Minas Melconian. 20 ;*************************************INICIO DO PROGRAMA****************************** INICIO CLRF PORTB ;LIMPA PORTB BANK1 ;TRABALHAR COM BANK1 MOVLW B'00000001' MOVWF TRISB ;DEFINE RB0 COMO ENTRADA E DEMAIS PORTS B COMO SAÍDA (1 -> ;ENTRADA, 0 -> SAÍDA). BANK0 ;TRABALHAR COM BANK0 ;*************************************ROTINA PRINCIPAL******************************** MAIN BTFSC BOTAO_0 ;O BOTÃO_0 ESTÁ PRESSIONADO? GOTO BOTAO_LIBERADO ;VAI PARA BOTÃO_LIBERADO. GOTO BOTAO_PRESSIONADO ;VAI PARA BOTÃO_PRESSIONADO. BOTAO_LIBERADO BCF LED_1 ;APAGA LED_1 GOTO MAIN ;RETORNA AO LOOP PRINCIPAL (MAIN) BOTAO_PRESSIONADO BSF LED_1 ;ACENDE LED_1 GOTO MAIN ;RETORNA AO LOOP PRINCIPAL (MAIN) ;**************************************FIM DO PROGRAMA******************************** END ;FIM DO PROGRAMA (OBRIGATÓRIO) Exercícios Propostos Utilizando como parâmetro o primeiro exemplo, faça as seguintes alterações: A) Inverta a lógica do LED, ao pressionar o botão o LED apagará e ao liberá-lo o LED acenderá. B) Ao apertar o botão faça dois LEDs acenderem. C) Utilize dois botões e quatro LEDs. Quando um botão for pressionado dois LEDs acesos se apagarão, já o outro botão ao ser pressionado acenderá dois LEDs que estavam apagados. Professor Sérgio Minas Melconian. 21 Segundo Exemplo – Contador de Tempo (DELAY) Neste segundo exemplo será estudada uma rotina para contar tempo. Funcionamento: Ao apertar um botão, um LED se manterá ligado por 1s e desligará logo em seguida. Fluxograma INICIO CONFIGURAÇÕES INICIAIS 1 SIM BOTÃO NÃO PRESSIONADO? APAGA O LED 1 ACENDE O LED CONTADOR DE NÃO DECREMENTA TEMPO = 0s? CONTADOR DE TEMPO. SIM APAGA O LED 1 Professor Sérgio Minas Melconian. 22 O Programa ;**************************************************************************************************** ;* PROGRAMA CONTADOR DE TEMPO (DELAY) * ;**************************************************************************************************** ;******************************** ARQUIVOS DE DEFINIÇÃO DO PIC ********************************** #INCLUDE <P16F877A.INC> ;MODELO DO MICROCONTROLADOR UTILIZADO - PIC 16F877A __CONFIG _CP_OFF & _LVP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC ;******************************** PAGINAÇÃO DE MEMÓRIA DO PIC ********************************** #DEFINE BANK0 BCF STATUS,RP0 ;HABILITA BANCO 0 DE MEMÓRIA #DEFINE BANK1 BSF STATUS,RP0 ;HABILITA BANCO 1 DE MAMÓRIA ;********************************** DEFINIÇÃO DAS VÁRIAVEIS ************************************** CBLOCK 0X70 ;INICIO DA MEMÓRIA DE ÚSUARIO TEMPO1 ;CONTADOR DE TEMPO1 (VALOR 250) TEMPO2 ;CONTADOR DE TEMPO2 (VALOR 250) TEMPO3 ;CONTADOR DE TEMPO3 (VALOR 4) ENDC ;FIM DO BLOCO DE MEMÓRIA ;**************************************** ENTRADAS ************************************************ #DEFINE BOTAO_0 PORTB,0 ;BOTÃO QUE LIGA O SISTEMA - (PINO 33 - RB0) ;***************************************** SAÍDAS *************************************************** #DEFINE LED_1 PORTB,1 ;PORTA DO LED1 (PINO 34 - RB1) ;0 -> APAGADO ;1 -> ACESO ;************************************* VETOR DE RESET ********************************************* ORG 0X0000 ;ENDEREÇO INICIAL PARAPROCESSAMENTO GOTO INICIO ;VAI PARA INICIO DO PROGRAMA ;********************************* INICIO DA INTERRUPÇÃO ***************************************** ORG 0X0004 ;ENDEREÇO INICIAL DA INTERRUPÇÃO RETFIE ;RETORNA DA INTERRUPÇÃO ;********************************** INICIO DO PROGRAMA ******************************************* INICIO CLRF PORTB ;LIMPA TODO PORTB Professor Sérgio Minas Melconian. 23 BANK1 ;HABILITA BANCO 1 DE MEMÓRIA DO PIC MOVLW B'00000001' MOVWF TRISB ;CONFIGURA PORTB,0 COMO ENTRADA E DEMAIS PINOS COMO SAÍDA. BANK0 ;RETORNA PARA O BANCO 0 DE MEMÓRIA DO PIC ;*********************************** ROTINA PRINCIPAL ********************************************** MAIN BTFSC BOTAO_0 ;O BOTÃO_0 ESTÁ PRESSIONADO? GOTO BOTAO_LIBERADO ;VAI PARA BOTÃO_LIBERADO. GOTO BOTAO_PRESSIONADO ;VAI PARA BOTÃO_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 MÁQUINA. DECFSZ TEMPO1 ;DECREMENTA TEMPO1 GOTO DL1 DECFSZ TEMPO2 ;DECREMENTA TEMPO2 GOTO DL2 DECFSZ TEMPO3 ;DECREMENTA TEMPO3 GOTO DL3 Professor Sérgio Minas Melconian. 24 RETURN ;RETORNA DA ROTINA DE DELAY ;*********************************** FIM DO PROGRAMA ********************************************* END ;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, um LED ficará ligado por 5s e desligado logo em seguida. B) Ao apertar um botão, ligue o LED_1, após 2s ligue o LED_2 e os desligue após 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. Professor Sérgio Minas Melconian. 25 Terceiro Exemplo – Gerando Som (BUZZER) Neste terceiro exemplo será estudada uma rotina para se gerar som com um cristal piezelétrico (Buzzer). Funcionamento: Para um buzzer soar, é necessário alimentá-lo com uma fonte de sinal. Neste caso, o PIC ira gerar ondas quadradas com freqüência tal para o funcionamento do mesmo. Fluxograma INICIO CONFIGURAÇÕES INICIAIS GERAR ONDA QUADRADA COM FREQUÊNCIA f. O Programa ;**************************************************************************************************** ;* PROGRAMA BUZZER * ;**************************************************************************************************** ;********************************* ARQUIVOS DE DEFINIÇÃO 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 ;********************************* PAGINAÇÃO DE MEMÓRIA DO PIC ********************************** #DEFINE BANK0 BCF STATUS,RP0 ;HABILITA BANCO 0 DE MEMÓRIA #DEFINE BANK1 BSF STATUS,RP0 ;HABILITA BANCO 1 DE MAMÓRIA ;*********************************** DEFINIÇÃO DAS VÁRIAVEIS ************************************* CBLOCK 0X70 ;INICIO DA MEMÓRIA DE ÚSUARIO TEMPO1 ;VARIAVEL TEMPO1 Professor Sérgio Minas Melconian. 26 ENDC ;FIM DO BLOCO DE MEMÓRIA ;******************************************* SAÍDAS ************************************************ #DEFINE BUZZER PORTA,5 ;PORTA DO BUZZER ;************************************** VETOR DE RESET ******************************************** ORG 0X0000 ;ENDEREÇO INICIAL PARA PROCESSAMENTO GOTO INICIO ;VAI PARA INICIO DO PROGRAMA ;*********************************** INICIO DA INTERRUPÇÃO **************************************** ORG 0X0004 ;ENDEREÇO INICIAL DA INTERRUPÇÃO RETFIE ;RETORNA DA INTERRUPÇÃO ;********************************** INICIO DO PROGRAMA ******************************************* INICIO CLRF PORTA ;LIMPA TODO PORTA BANK1 ;HABILITA BANCO 1 DE MEMÓRIA DO PIC MOVLW B'00000000' MOVWF TRISA ;CONFIGURA TODO PORTA COMO SAÍDA. BANK0 ;RETORNA PARA O BANCO 0 DE MEMÓRIA DO PIC ;************************************ ROTINA PRINCIPAL ******************************************** MAIN ;INICIO DA ROTINA PRINCIPAL BSF BUZZER ;SETA O PORTA,5 (BUZZER) CALL DELAY_MS ;CHAMA ROTINA DE DELAY BCF BUZZER ;LIMPA O PORTA,5 (BUZZER) CALL DELAY_MS ;CHAMA ROTINA DE DELAY GOTO MAIN ;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 MÁQUINA (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?) Professor Sérgio Minas Melconian. 27 GOTO $-2 ;NÃO, VOLTA DUAS INSTRUÇÕES ;SIM, PASSOU TEMPO RETURN ;RETORNA DA ROTINA DE DELAY ;************************************* FIM DO PROGRAMA ******************************************* END ;FIM DO PROGRAMA Exercícios Propostos Utilizando como parâmetro o terceiro exemplo, faça as seguintes alterações: A) Altere as freqüências geradas, deixando o som mais grave. B) Faça o buzzer soar de maneira que fique bipando com delay de 2s. C) Insira 3 botões, cada um ao ser pressionado ira gerar uma freqüência diferente. (o som só será escutado em quanto o botão estiver pressionado). Professor Sérgio Minas Melconian. 28 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. LED ESTADO L0 LIGA L0 DESLIGA L1 LIGA L1 DESLIGA L2 LIGA L2 DESLIGA L3 LIGA L3 DESLIGA FluxogramaINICIO CONFIGURAÇÕES INICIAIS LIMPA REGISTRADOR STATUS,C ROTACIONAR O BIT (3X) LIMPA LED (PORTB) Professor Sérgio Minas Melconian. 29 O Programa ;********************************************************************************************* ;* PROGRAMA ROTAÇÃO DE BIT COM RLF * ;********************************************************************************************* ;******************************CONFIGURAÇÃO PARA GRAVAÇÃO***************************** #INCLUDE <P16F877A.INC> ;MODELO DO MICROCONTROLADOR UTILIZADO. __CONFIG _CP_OFF & _LVP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC ;**************************DEFINIÇÃO DOS BANCOS DE MEMÓRIA RAM************************ #DEFINE BANK0 BCF STATUS, RP0 ;SETA BANK 0 DE MEMÓRIA. #DEFINE BANK1 BSF STATUS, RP0 ;SETA BANK 1 DE MEMÓRIA. ;***************************************VARIÁVEIS************************************* CBLOCK 0X70 ;ENDEREÇO LOCALIZADO NA MAMÓRIA DE DADOS DO BANK 0. FOI ESCOLHIDO, POIS ;ESTÁ LOCALIZAÇÃO É ACESSADA DE QUALQUER BANCO, FACILITANDO A OPERAÇÃO. TEMPO1 ;CONTADOR PARA DELAY 1ms TEMPO2 ;CONTADOR PARA DELAY 1/4s = 0,25s TEMPO3 ;CONTADOR PARA DELAY 1s ENDC ;FIM DO BLOCO DE MEMÓRIA. ;*****************************************SAÍDAS************************************** #DEFINE LED PORTB ;DEFINE PORTB COMO LED. ;0 -> APAGADO ;1 -> ACESO ;*************************************VETOR DE RESET********************************** ORG 0X0000 ;ENDEREÇO DO VETOR DE RESET GOTO INICIO ;PULA PARA O INICIO ;***********************************INICIO DA INTERRUPÇÃO***************************** ORG 0X0004 ;ENDEREÇO DO VETOR DE INTERRUPÇÃO RETFIE ;RETORNA DA INTERRUPÇÃO ;*************************************INICIO DO PROGRAMA****************************** INICIO CLRF PORTB ;LIMPA PORTB BANK1 ;TRABALHAR COM BANK1 Professor Sérgio Minas Melconian. 30 MOVLW B'00000000' MOVWF TRISB ;DEFINE PORTS B COMO SAÍDA (1 -> ENTRADA, 0 -> SAÍDA). BANK0 ;TRABALHAR COM BANK0. ;*************************************ROTINA PRINCIPAL******************************** MAIN BCF STATUS,C ;LIMPA CARRY (REGISTRADOR RELACIONADO AS OPERAÇÕES MATEMÁTICAS) MOVLW B'00000001' ;MOVER VALOR 1 EM BINÁRIO 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 ;ROTACIONA BIT DO LED PARA ESQUERDA CALL DELAY_1S ;CHAMA ROTINA DE DELAY RLF LED ;ROTACIONA BIT DO LED PARA ESQUERDA CALL DELAY_1S ;CHAMA ROTINA DE DELAY RLF LED ;ROTACIONA BIT DO LED PARA ESQUERDA CALL DELAY_1S ;CHAMA ROTINA DE DELAY CLRF LED ;LIMPA LED GOTO MAIN ;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 MÁQUINA. DECFSZ TEMPO1 ;DECREMENTA TEMPO1 GOTO DL1 DECFSZ TEMPO2 ;DECREMENTA TEMPO2 GOTO DL2 Professor Sérgio Minas Melconian. 31 DECFSZ TEMPO3 ;DECREMENTA TEMPO3 GOTO DL3 RETURN ;RETORNA DA ROTINA DE DELAY ;**************************************FIM DO PROGRAMA******************************** END ;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. B) Ao invés de rotacionar apenas o bit como no exemplo, rotacione o bit, mantendo o anterior ligado. LED ESTADO L0 LIGA L1 LIGA L2 LIGA L3 LIGA L0 DESLIGA L1 DESLIGA L2 DESLIGA L3 DESLIGA C) Mantenha a seqüência pedida no item B (iniciar ligada) e insira um botão que ao ser pressionado, irá manter todos os LEDs ligados por 5s, em seguida a seqüência do item B voltará a rotacionar. Professor Sérgio Minas Melconian. 32 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. Fluxograma Professor Sérgio Minas Melconian. 33 O Programa ;************************************************************************************* ;* PROGRAMA CONTADOR - DISPLAY 7 SEGMENTOS E CONTADOR * ;************************************************************************************* ;******************************CONFIGURAÇÃO PARA GRAVAÇÃO********************** #INCLUDE <P16F877A.INC> ;MODELO DO MICROCONTROLADOR UTILIZADO. __CONFIG _CP_OFF & _LVP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC ;**************************DEFINIÇÃO DOS BANCOS DE MEMÓRIA RAM***************** #DEFINE BANK0 BCF STATUS, RP0 ;SETA BANK 0 DE MEMÓRIA. #DEFINE BANK1 BSF STATUS, RP0 ;SETA BANK 1 DE MEMÓRIA. ;***************************************VARIÁVEIS************************************ CBLOCK 0X70 ;ENDEREÇO LOCALIZADO NA MAMÓRIA DE DADOS DO BANK 0. FOI ESCOLHIDO, POIS ;ESTÁ LOCALIZAÇÃO É ACESSADA DE QUALQUER BANCO, FACILITANDO A OPERAÇÃO. CONTADOR ;ARMAZENA O VALOR DA CONTAGEM FLAGS ;ARMAZENA OS FLAGS DE CONTROLE FILTRO1 ;FILTRAGEM PARA O BOTÃO 1 FILTRO2 ;FILTRAGEM PARA O BOTÃO 2 ENDC ;FIM DO BLOCO DE MEMÓRIA. ;*****************************************FLAGS*************************************** ; DEFINIÇÃO DE TODOS OS FLAGS UTILIZADOS PELO SISTEMA. #DEFINE ST_BT0 FLAGS,0 ;STATUS DO BOTÃO 0 #DEFINE ST_BT1 FLAGS,1 ;STATUS DO BOTÃO 1 ;***************************************CONSTANTES************************************ ; DEFINIÇÃO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA MIN EQU .0 ;VALOR MÍNIMO PARA O CONTADOR MAX EQU .15 ;VALOR MÁXIMO PARA O CONTADOR T_FILTRO EQU .255 ;FILTRO PARA BOTÃO ;****************************************ENTRADAS************************************* #DEFINE BOTAO_0 PORTB,0 ;PORTA DO BOTÃO - (PINO 35 - RB2) #DEFINE BOTAO_1 PORTB,1 ;PORTA DO BOTÃO - (PINO 34 - RB1) ;*****************************************SAÍDAS**************************************;NÃO SERÁ UTILIZADO NESTE PROGRAMA. Professor Sérgio Minas Melconian. 34 ;*************************************VETOR DE RESET********************************** ORG 0X0000 ;ENDEREÇO DO VETOR DE RESET GOTO INICIO ;PULA PARA O INICIO ;***********************************INICIO DA INTERRUPÇÃO***************************** ORG 0X0004 ;ENDEREÇO DO VETOR DE INTERRUPÇÃO RETFIE ;RETORNA DA INTERRUPÇÃO ;********************ROTINA DE CONVERSÃO BINÁRIO -> 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 CONDIÇÕES DE LIGAÇÃO DO DISPLAY AO PORTD. ; a ; ********** ; * * ; f * * b ; * g * ; ********** ; * * ; e * * c ; * d * ; ********** *. CONVERTE MOVF CONTADOR,W ;COLOCA CONTADOR EM W ANDLW B'00001111' ;MASCARA VALOR DE CONTADOR ;CONSIDERAR SOMENTE ATÉ 15 ADDWF PCL,F ;SOMA DESLOCAMENTO AO PROGRAM COUTER, GERANDO UMATABELA"CASE" ; B'PGFEDCBA' ; POSIÇÃO CORRETA DOS SEGUIMENTOS RETLW B'00111111' ; 00 - RETORNA SÍMBOLO CORRETO 0 RETLW B'00000110' ; 01 - RETORNA SÍMBOLO CORRETO 1 RETLW B'01011011' ; 02 - RETORNA SÍMBOLO CORRETO 2 RETLW B'01001111' ; 03 - RETORNA SÍMBOLO CORRETO 3 RETLW B'01100110' ; 04 - RETORNA SÍMBOLO CORRETO 4 RETLW B'01101101' ; 05 - RETORNA SÍMBOLO CORRETO 5 RETLW B'01111101' ; 06 - RETORNA SÍMBOLO CORRETO 6 RETLW B'00000111' ; 07 - RETORNA SÍMBOLO CORRETO 7 RETLW B'01111111' ; 08 - RETORNA SÍMBOLO CORRETO 8 RETLW B'01101111' ; 09 - RETORNA SÍMBOLO CORRETO 9 RETLW B'01110111' ; 10 - RETORNA SÍMBOLO CORRETO A RETLW B'11111111' ; 11 - RETORNA SÍMBOLO CORRETO B RETLW B'00111001' ; 12 - RETORNA SÍMBOLO CORRETO C RETLW B'10111111' ; 13 - RETORNA SÍMBOLO CORRETO D RETLW B'01111001' ; 14 - RETORNA SÍMBOLO CORRETO E RETLW B'01110001' ; 15 - RETORNA SÍMBOLO CORRETO F Professor Sérgio Minas Melconian. 35 ;*************************************INICIO DO PROGRAMA****************************** INICIO BANK1 ;ALTERA PARA O BANCO 1 MOVLW B'00000011' MOVWF TRISB ;DEFINE RB0 E RB1 COMO ENTRADA MOVLW B'00000000' MOVWF TRISC ;DEFINE TODO O PORTC COMO SAÍDA MOVLW B'00000000' MOVWF TRISD ;DEFINE TODO O PORTD COMO SAÍDA BANK0 ;ALTERA PARA O BANCO 0 CLRF PORTB ;LIMPA O PORTB CLRF PORTC ;LIMPA O PORTC CLRF PORTD ;LIMPA O PORTD CLRF FLAGS ;LIMPA TODOS OS FLAGS MOVLW MIN MOVWF CONTADOR ;INICIA CONTADOR = MIN = 0 GOTO ATUALIZA ;ATUALIZA O DISPLAY INICIALMENTE ;*************************************ROTINA PRINCIPAL******************************** MAIN BSF PORTC,3 ;ATIVA O DISPLAY DA PLACA. MOVLW T_FILTRO MOVWF FILTRO1 ;INICIALIZA FILTRO1 = T_FILTRO MOVWF FILTRO2 ;INICIALIZA FILTRO2 = T_FILTRO CHECA_BT0 BTFSC BOTAO_0 ;O BOTÃO 0 ESTÁ PRESSIONADO? GOTO BT0_LIB ;NÃO, ENTÃO TRATA COMO LIBERADO ;SIM DECFSZ FILTRO1,F ;DECREMENTA O FILTRO DO BOTÃO ;TERMINOU? GOTO CHECA_BT0 ;NÃO, CONTINUA ESPERANDO ;SIM BTFSS ST_BT0 ;BOTÃO JÁ ESTAVA PRESSIONADO? (FLAG) GOTO DEC ;NÃO, EXECUTA AÇÃO DO BOTÃO GOTO CHECA_BT1 ;SIM, CHECA BOTÃO 1 BT0_LIB BCF ST_BT0 ;MARCA BOTÃO 0 COMO LIBERADO (FLAG) CHECA_BT1 BTFSC BOTAO_1 ;O BOTÃO 1 ESTÁ PRESSIONADO? GOTO BT1_LIB ;NÃO, ENTÃO TRATA COMO LIBERADO ;SIM DECFSZ FILTRO2,F ;DECREMENTA O FILTRO DO BOTÃO Professor Sérgio Minas Melconian. 36 ;TERMINOU? GOTO CHECA_BT1 ;NÃO, CONTINUA ESPERANDO ;SIM BTFSS ST_BT1 ;BOTÃO JÁ ESTAVA PRESSIONADO? (FLAG) GOTO INC ;NÃO, EXECUTA AÇÃO DO BOTÃO GOTO MAIN ;SIM, VOLTA AO LOOPING BT1_LIB BCF ST_BT1 ;MARCA BOTÃO 1 COMO LIBERADO (FLAG) GOTO MAIN ;RETORNA AO LOOPING DEC ;AÇÃO DE DECREMENTAR BSF ST_BT0 ;MARCA BOTÃO 0 COMO JÁ PRESSIONADO (FLAG) MOVF CONTADOR,W ;COLOCA CONTADOR EM W XORLW MIN ;APLICA XOR ENTRE CONTADOR E MIN ;PARA TESTAR IGUALDADE. SE FOREM ;IGUAIS, O RESULTADO SERÁ ZERO BTFSC STATUS,Z ;RESULTOU EM ZERO? GOTO MAIN ;SIM, RETORNA SEM AFETAR CONT. ;NÃO DECF CONTADOR,F ;DECREMENTA O CONTADOR GOTO ATUALIZA ;ATUALIZA O DISPLAY INC ;AÇÃO DE INCREMENTAR BSF ST_BT1 ;MARCA BOTÃO 1 COMO JÁ PRESSIONADO (FLAG) MOVF CONTADOR,W ;COLOCA CONTADOR EM W XORLW MAX ;APLICA XOR ENTRE CONTADOR E MAX ;PARA TESTAR IGUALDADE. SE FOREM ;IGUAIS, O RESULTADO SERÁ ZERO BTFSC STATUS,Z ;RESULTOU EM ZERO? GOTO MAIN ;SIM, RETORNA SEM AFETAR CONT. ;NÃO INCF CONTADOR,F ;INCREMENTA O CONTADOR GOTO ATUALIZA ;ATUALIZA O DISPLAY ATUALIZA CALL CONVERTE ;CONVERTE CONTADOR NO NÚMERO DO DISPLAY MOVWF PORTD ;ATUALIZA O PORTD PARA VISUALIZARMOS O VALOR DE ; CONTADOR NO DISPLAY. GOTO MAIN ;NÃO, VOLTA AO LOOP PRINCIPAL ;**************************************FIM DO PROGRAMA******************************** END ;FIM DO PROGRAMA (OBRIGATÓRIO) Professor Sérgio Minas Melconian. 37 Exercícios Propostos Utilizando como parâmetro o quinto exemplo, faça as seguintes alterações: A) Faça um contador OCTAL (0 à 7). B) Faça um contador ALFABÉTICO de A à H. Professor Sérgio Minas Melconian. 38 Esquema Elétrico da Placa de Teste Professor Sérgio Minas Melconian. 39 Lay-out Placa de Teste Observação: Adicione dois JUMPERS conforme representados em vermelho. Professor Sérgio Minas Melconian. 40 Referências • Desbravando o PIC - Ampliado e Atualizado para PIC 16F628A. Autor: David José de Souza. Editora: Érica. • PIC16F877A Conectando o PIC – Recursos Avançados. Autor (es): David José de Souza e Nicolas César Lavinia. Editora: Érica. • Microcontroladores PIC - Técnicas Avançadas. 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/
Compartilhar