Modulo 7

  • June 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Modulo 7 as PDF for free.

More details

  • Words: 6,858
  • Pages: 30
Introdução ao microcontrolador PIC: Portas de E/S

Objetivos • Apresentar a estrutura de um microcontrolador PIC; •

Apresentar o conjunto de instruções do microcontrolador PIC;



Compreender como os registradores de configuração afetam o funcionamento do microcontrolar PIC;

INTRODUÇÃO O PIC pertence a uma classe de microcontroladores de 8 bits, com uma arquitetura RISC. Os blocos básicos de uma estrutura genérica do PIC são: MEMÓRIA DE PROGRAMA (FLASH): Para armazenar as rotinas de programa. Como a memória FLASH pode ser programada e limpa mais que uma vez. ela torna-se adequada para o desenvolvimento de dispositivos. • EEPROM: Memória dos dados que necessitam ser mantidos quando a alimentação é desligada. •

RAM: Memória de dados usada por um programa, durante a sua execução. Na RAM, são guardados todos os resultados intermédios ou dados temporários durante a execução do programa e que não são cruciais para o dispositivo, depois de ocorrer uma falha na alimentação.



PORTAS DE E/S: São ligações físicas entre o microcontrolador e o mundo exterior.



CONTADOR/TEMPORIZADOR: São registros de 8 bits no interior do microcontrolador que trabalham independentemente do programa. No fim de cada conjunto de quatro ciclos de relógio do oscilador, ele incrementa o valor armazenado.



UNIDADE DE PROCESSAMENTO CENTRAL: Faz a conexão com todos os outros blocos do microcontrolador. Ele coordena o trabalho dos outros blocos durante a execução do programa.

PORTA A

PORTA B

Esquema de um microcontrolador PIC com duas portas de E/S

Arquiteturas Harvard versus Von Neumann A diferença principal entre microcontroladores e microprocessadores é a sua funcionalidade. Para que um microprocessador possa ser usado, outros componentes devem ser adicionados ao circuito, tais como, memória e componentes para receber e enviar dados. O microcontrolador foi projetado para ter tudo em só dispositivo, podendo operar sem outros componentes externos. Outro aspecto que pode diferenciar microcontroladores e microprocessadores é a sua arquitetura. Os microcontroladores PIC apresentam uma arquitetura Harvard, onde a memória de dados está separada da memória de programa. Assim, é possível um acesso concorrente as duas memórias e assim, obter uma maior velocidade de funcionamento. A separação da memória de dados da memória de programa, faz com que as instruções possam ser representadas por palavras de mais que 8 bits. O PIC16F877, usa 14 bits para cada instrução, o que permite que todas as instruções ocupem uma só palavra de instrução. É também típico da arquitetura Harvard ter um conjunto reduzido de instruções, geralmente executadas em apenas um ciclo de máquina. No caso do PIC 16F877 este conjunto é formado por apenas 35 instruções. Esta característica lhe rende também a designação de dispositivo RISC (Reduced Instruction Set Computer). Todas as instruções são executadas num único ciclo de máquina, exceto no caso de instruções de salto e de ramificação.

Estrutura do PIC 16F877 Memória flash para instruções (program memory) com 14 bits/palavra (cada instrução do PIC16F8X tem 14 bits!); • 8K x 14 bits de memória flash; • 368 x 8 bits de4 memória RAM; • 256 x 8 bits de memória EEPROM; • Pilha implementada por hardware com 8 níveis (até 8 chamadas de rotinas aninhadas) • 5 Portas de E/S; • 14 fontes de interrupção (internas e externas); • Dois módulos de Captura/Comparação/PWM; • Conversor A/D de 10 bits com entradas multiplexadas; • Porta serial síncrona com SPI (master mode) e I2C (master/slave); • USART/SCI; • Porta paralela com 8 bits de dados e sinais de controle externos (RD, WR e CS); • Timer/Counter programável e um Watchdog Timer embutidos, este com seu próprio oscilador, para aplicações de Tempo Real críticas; • Recursos de hardware para proteção de código, modo de operação com baixo consumo de energia (sleep), programação "in-circuit", alta corrente de saída para LEDs (25 mA), power-on-reset, power-up timer, etc Relógio / Ciclo de instrução O relógio (clock), que determina a freqüência de operação do PIC é dividido internamente em quatro fases, Q1, Q2, Q3 e Q4 que não se sobrepõem. Estas quatro fases compõem um ciclo de instrução (também chamado ciclo de máquina), durante o qual uma instrução é executada. A execução de uma instrução, é antecedida pela extração da instrução que está na linha seguinte. O código da instrução é extraído da memória de programa em Q1 e é escrito no registro de instrução em Q4. A decodificação e execução dessa mesma instrução, fazem-se entre as fases Q1 e Q4 seguintes. No diagrama abaixo, pode-se observar a relação entre o ciclo de instrução e o clock do oscilador (OSC1) assim como as fases Q1-Q4. O contador de programa (Program Counter ou PC) guarda o endereço da próxima instrução a ser executada.

Cada ciclo de instrução inclui as fases Q1, Q2, Q3 e Q4. A extração do código de uma instrução da memória de programa, é feita num ciclo de instrução, enquanto que a sua decodificação e execução, são feitos no ciclo de instrução seguinte. Contudo, devido à sobreposição – pipelining (o microcontrolador ao mesmo tempo em que executa uma instrução extrai simultaneamente da memória o código da instrução seguinte), pode-se considerar que, para efeitos práticos, cada instrução demora um ciclo de instrução para ser executada. No entanto, se a instrução provocar uma mudança no conteúdo do contador de programa (PC), ou seja, se o PC não tiver que apontar para o endereço seguinte na memória de programa, mas sim para outro (como no caso de saltos ou de chamadas de subrotinas), então deverá considerar-se que a execução desta instrução demora dois ciclos. Isto acontece, porque a instrução vai ter que ser processada de novo, mas, desta vez, a partir do endereço correto. O ciclo de chamada começa na fase Q1, escrevendo a instrução no registro de instrução (Instruction Register – IR). A decodificação e execução continuam nas fases Q2, Q3 e Q4 do clock.

Fluxograma

das

Instruções

TCY0: É lido da memória o código da instrução MOVLW 55h;

no

Pipeline

TCY1: É executada a instrução MOVLW 55h e é lida da memória a instrução MOVWF PORTB; TCY2: É executada a instrução MOVWF PORTB e lida a instrução CALL SUB_1; TCY3: É executada a chamada (call) de um subprograma CALL SUB_1 e é lida a instrução BSF PORTA,BIT3. Como esta instrução não é a próxima instrução a ser executada (primeira instrução do subprograma SUB_1), a leitura de uma instrução tem que ser feita de novo. Este é um exemplo de uma instrução que precisa de mais que um ciclo. TCY4: este ciclo de instrução é totalmente usado para ler a primeira instrução do subprograma no endereço SUB_1; TCY5: É executada a primeira instrução do subprograma SUB_1 e lida a instrução seguinte. Unidade Central de Processamento A unidade central de processamento (CPU) é o cérebro do microcontrolador. Essa parte é responsável por extrair a instrução da memória de programa, decodificar essa instrução e executá-la.

Registros

Direto Indireto Registro Registro

Esquema da unidade central de processamento – CPU A principal função da unidade central de processamento é a de decodificar as instruções do programa. A cada uma das instruções do conjunto do microcontrolador, corresponde um conjunto de ações para a implementação da instrução. Estas ações podem envolver transferências de dados de um local de memória para outro, de um local de memória para as portas, e diversos cálculos. Unidade Lógica e Aritmética (ULA) A ULA do PIC possui 8 bits de largura e um único acumulador denominado w (“working register”). Ela faz operações aritméticas de soma e subtração (em 2- complemento) e operações lógicas como rotate, and, or, xor etc. Nas operações lógicas e aritméticas com 2 operandos, o acumulador w é sempre um dos operandos e qualquer um dos 80 registradores f pode ser o 2º operando (ou uma constante de 8 bits ou literal, codificada na própria instrução).

Instruções lógico/aritméticas com um só operando (por exemplo inc, dec, clr, com, bit set, etc) tomam como operando ou o acumulador w ou um registrador f. As instruções lógicas e aritméticas podem atualizar os bits Z (zero) , C (carry) e DC (digit carry) do registrador de estado (f = 03). Uma característica interessante das instruções com dois operandos envolvendo w e um registrador f é que um bit na instrução permite escolher se o resultado vai para o acumulador w (bit= 0) ou para o registrador f (bit = 1), permitindo algumas operações pouco convencionais como: f - w => w. Nos mnemônicos das instruções do PIC o destino do resultado é designado genericamente pela letra d e especificamente pelas letras f ou w (é conveniente, portanto, definir nos programas em assembler duas constantes w e f com as diretivas: w equ 0 e f equ 1). Por exemplo: a instrução movf f, w move o conteúdo de um registrador genérico f para o acumulador w, a instrução movwf f move o conteúdo do acumulador w para um registrador genérico f e a instrução movlw k move uma constante k para w. Obs: Existem dois paradigmas largamente utilizados para codificação simbólica de instruções com dois operandos: o paradigma da Intel, onde uma instrução genérica do tipo: opr dest, source significa: dest <= dest opr source (interprete o símbolo <= como "recebe" e opr como a operação feita pela instrução) e o paradigma do minicomputador PDP11 e seus seguidores como os microprocessadores Motorola MCHC11 e MC68000, onde uma instrução do tipo: opr source, dest significa: source opr dest => dest ( interprete o símbolo => como "vai para" ) O PIC 16F8X adota o paradigma do PDP11, porém de forma não ortogonal como pode ser notado claramente nas 3 instruções vistas anteriormente.

Unidade lógica-aritmética

Diagrama de blocos do PIC 16F877

Registradores “f” especiais (SFR - Special File Registers) Os registradores f de número 0 a 0xb são especiais, mas podem ser (na sua maioria) lidos/alterados por qualquer instrução envolvendo um registrador f. Alguns refletem o estado da CPU e são particularmente importantes para o programador assembler: Registrador STATUS

Bit 0 C (Carry) Transporte: Este bit é afetado pelas operações de adição, subtração e deslocamento. É setado (assume o valor 1), quando na subtração X – Y, X é menor que Y e é resetado (assume o valor 0), quando na subtração X-Y, X é maior que Y. 1= Ocorreu um transporte no bit mais significativo 0= Não ocorreu transporte no bit mais significativo O bit C é afetado pelas instruções ADDWF, ADDLW, SUBLW e SUBWF. Bit 1 DC (Digit Carry) Transporte de dígito: Este bit é afetado pelas operações de adição e subtração. Ao contrário do anterior, DC assinala um transporte do bit 3 para o bit 4 do resultado. Este bit recebe o valor ‘1’, quando na subtração X – Y, X é menor que Y e recebe o valor ‘0’, quando na subtração X-Y, X é maior que Y. 1= Ocorreu um transporte no quarto bit mais significativo 0= Não ocorreu transporte nesse bit O bit DC é afetado pelas instruções ADDWF, ADDLW, SUBLW e SUBWF. Bit 2 Z (bit Zero) Indicação de resultado igual a zero: Este bit recebe o valor ‘1’ quando o resultado da operação lógica ou aritmética executada é igual a 0. 1= resultado igual a zero 0= resultado diferente de zero Bit 3 PD (Bit de queda de tensão – Power Down): Este bit recebe ‘1’ quando o microcontrolador é alimentado e começa a trabalhar, depois de um reset normal e depois da execução da instrução CLRWDT. A instrução SLEEP põe este bit em ‘0’ ou seja, quando o microcontrolador entra no regime de baixo consumo / pouco trabalho. Este bit pode também ser setado (assume o valor 1), no caso de ocorrer um impulso no pino RB0/INT, uma variação nos quatro bits mais significativos da porta B, ou quando é concluída uma operação de escrita na DATA EEPROM ou ainda pelo watchdog. 1 = depois de ter sido ligada a alimentação 0 = depois da execução de uma instrução SLEEP Bit 4 TO (Time-out - transbordo do Watchdog): Este bit recebe ‘1’, depois da alimentação ser ligada e depois da execução das instruções CLRWDT e SLEEP. O bit recebe ‘0’ quando

o watchdog consegue chegar ao fim da sua contagem (overflow = transbordar), o que indica que qualquer coisa não esteve bem. 1 = não ocorreu transbordo 0 = ocorreu transbordo bits 5 e 6 RP1:RP0 (bits de seleção de banco de registros): Estes dois bits são a parte mais significativa do endereço utilizado para endereçamento direto. Como as instruções que endereçam diretamente a memória dispõem somente de sete bits, é preciso mais um ou dois bits para poder endereçar todos os registros (memória RAM) do PIC16F8X. 11 = banco de registros 3 10 = banco de registros 2 01 = banco de registros 1 00 = banco de registros 0 Bit 7 IRP (Bit de seleção de banco de registros):Este bit é utilizado no endereçamento indireto da RAM interna, como oitavo bit 1 = bancos 2 e 3 0 = bancos 0 e 1 (endereços de 00h a FFh) O registro de estado (STATUS), contém o estado da ALU (C, DC, Z), estado de RESET (TO, PD) e os bits para seleção do banco de memória (IRP, RP1, RP0). Considerando que a seleção do banco de memória é controlada através deste registro, ele tem que estar presente em todos os bancos. Registrador OPTION

Bits 0 a 2 PS0, PS1, PS2 (bits de seleção do divisor Prescaler): Estes três bits definem o

fator de divisão do prescaler.

Bit 3 PSA (Bit de Atribuição do Prescaler): Bit que atribui o prescaler ao TMR0 ou ao watchdog. 1 = prescaler atribuído ao watchdog 0 = prescaler atribuído ao temporizador TMR0

Bit 4 T0SE (bit de seleção de borda ativa em TMR0): Se for permitido aplicar impulsos em TMR0, a partir do pino RA4/TOCK1, este bit determina se os impulsos ativos são os impulsos ascendentes ou os impulsos descendentes. 1 = Borda descendente 0 = Borda ascendente Bit 5 TOCS (bit de seleção de fonte de clock em TMR0): Este pino escolhe a fonte de impulsos que vai ser ligada ao temporizador. Esta fonte pode ser o clock do microcontrolador (freqüência de clock a dividir por 4) ou impulsos externos no pino RA4/TOCKI. 1 = impulsos externos 0 = ¼ do clock interno Bit 6 INDEDG (bit de seleção de borda de interrupção): Se esta interrupção estiver habilitada, é possível definir a borda que vai ativar a interrupção no pino RB0/INT. 1 = borda ascendente 0 = borda descendente Bit 7 RBPU (Habilitação dos resistores de pull-up nos bits da porta B): Este bit introduz ou retira as resistências internas de pull-up da porta B. 1 = resistências de “pull-up” desligadas 0 = resistências de “pull-up” ligadas Organização da Memória O PIC16F877 tem dois blocos de memória separados, um para dados e o outro para o programa. A memória EEPROM e os registros de uso genérico (GPR) na memória RAM constituem o bloco para dados e a memória FLASH constitui o bloco de programa. Memória de programa A memória de programa é implementada usando tecnologia FLASH, o que torna possível programar o microcontrolador muitas vezes antes de se obter a versão definitiva do programa. No PIC 16F877 o tamanho da memória de programa é de 8192 endereços de palavras de 14 bits, destes, os endereços zero e quatro estão reservados respectivamente para o reset e para o vetor de interrupção. Memória de dados A memória de dados compreende memória EEPROM e memória RAM. A memória EEPROM consiste em 256 posições para palavras de oito bits. A memória EEPROM não faz parte diretamente do espaço de memória mas é acessada indiretamente através dos registros EEADR e EEDATA. Como a memória EEPROM serve em geral para armazenar dados que devem ser mantidos mesmo após o desligamento do sistema onde o microcontrolador está inserido, existe um procedimento específico para escrever na EEPROM que tem que ser seguido de modo a evitar uma escrita acidental. A memória RAM para dados, ocupa um espaço no mapa de memória que varia de acordo com o banco de memória usado, conforme indicado na tabela abaixo

Banco 0 1 2 3

Faixa de endereços da RAM 0x20 a 0x7F 0xA0 a 0xEF 0x110 a 0x16F 0x190 a 0x1F0

Os locais da memória RAM são também chamados registros GPR (General Purpose Registers = Registros de uso geral). Os registros GPR podem ser acessados sem referenciar o banco de memória em que o mesmo se encontra. Registros SFR Os registros que ocupam 12 primeiras localizações nos bancos 0 a 4 são registros especiais e têm a ver com a manipulação de certos blocos do microcontrolador. Estes registros são os SFR (Special Function Registers ou Registros de Funções Especiais).

Mapa de Registros do PIC 16F877

Contador de Programa O contador de programa (PC = Program Counter), é um registro de 13 bits que contém o endereço da instrução que vai ser executada. Pilha O PIC16F877 tem uma pilha (stack) de 13 bits e 8 níveis de profundidade, o que corresponde a 8 locais de memória com 13 bits de largura. O seu papel básico é guardar o valor do contador de programa quando ocorre um salto do programa principal para o endereço de um subprograma a ser executado. Depois de ter executado o subprograma, para que o microcontrolador possa continuar com o programa principal a partir do ponto em que o deixou, ele tem que buscar na pilha esse endereço e carregá-lo no contador de programa. Quando ocorre o desvio de um programa para um subprograma, o conteúdo do contador de programa é salvo na da pilha (um exemplo disto é a instrução CALL). Quando são executadas instruções tais como RETURN, RETLW ou RETFIE no fim de um subprograma, o contador de programa é retirado da pilha, de modo que o programa possa continuar a partir do ponto em que a seqüência foi interrompida. Estas operações de colocar e extrair da pilha o contador de programa, são designadas por PUSH (colocar na pilha) e POP (retirar da pilha), estes dois nomes provêm de instruções com estas designações, existentes em alguns microcontroladores de maior porte. Programação no Sistema Para programar a memória de programa, o microcontrolador tem que entrar num modo especial de funcionamento no qual o pino MCLR é posto a 13,5V e a voltagem da alimentação Vdd deve permanecer estável entre 4,5V e 5,5V. A memória de programa pode ser programada em série, usando dois pinos ‘data/clock’ que devem ser previamente separados do dispositivo em que o microcontrolador está inserido, de modo que não possam ocorrer erros durante a programação. Modos de endereçamento Os locais da memória RAM podem ser acessados direta ou indiretamente. Endereçamento Direto O endereçamento direto é feito através de um endereço de 9 bits. Este endereço é obtido juntando aos sete bits do endereço direto de uma instrução, mais dois bits (RP1 e RP0) do registro STATUS, como pode ser visto na figura que se segue. Qualquer acesso aos registros especiais (SFR), pode ser um exemplo de endereçamento direto. Bsf STATUS, RP0 movlw 0xFF movwf TRISA

:banco 0 :w = 0xFF :o endereço do registro TRISA é retirado do código da instrução movwf TRISA

Registro

Seleção de Banco

Seleção de Registro

Endereçamento Direto Endereçamento Indireto O endereçamento indireto, não retira um endereço do código da instrução. O endereço é obtido com a ajuda do bit IRP do registro STATUS e do registro FSR. O local endereçado é acessado através do registro INDF e coincide com o endereço contido em FSR (qualquer instrução que use INDF como registro, na realidade acessa os dados apontados pelo registro FSR). Por exemplo, considere que o registro de uso genérico de endereço 0Fh contém o valor 20. Escrevendo o valor 0Fh no registro FSR, obtém-se um ponteiro para o registro 0Fh e, ao ler o registro INDF, obtém-se o valor 20, o que significa que foi lido o conteúdo do registro 0Fh, sem o mencionar explicitamente (mas através de FSR e INDF). Registro

Registro FSR

Seleção de Banco

Seleção de Registro

Endereçamento Indireto

Interrupções As interrupções são um mecanismo que o microcontrolador possui e que torna possível responder a alguns eventos no momento em que eles ocorrem. Geralmente, cada interrupção muda a direção de execução do programa, suspendendo a sua execução, enquanto o microcontrolador executa um subprograma que é a rotina de atendimento de interrupção. Depois deste subprograma ter sido executado, o microcontrolador continua com o programa principal, a partir do local em que o tinha abandonado. Programa sendo executado

Interrupção externa e seqüência de desvios para atendimento da interrupção e retorno ao programa principal. O registro que controla as interrupções é chamado INTCON e tem o endereço 0Bh. O papel do INTCON é permitir ou impedir as interrupções e, mesmo no caso de elas não serem permitidas, ele registra os pedidos de interrupção, mudando o valor de alguns dos seus bits. Registrador INTCON

Bit 0 RBIF (flag que indica variação na porta B): Bit que informa que houve mudança nos

níveis lógicos nos pinos 4, 5, 6 e 7 da porta B. 1= pelo menos um destes pinos mudou de nível lógico 0= não ocorreu nenhuma variação nestes pinos Bit 1 INTF (flag de interrupção externa INT): Ocorrência de uma interrupção externa 1= ocorreu uma interrupção externa

0= não ocorreu uma interrupção externa Se uma transição ascendente ou descendente for detectada no pino RB0/INT, o bit INTF ajustado para ‘1’ (o tipo de sensibilidade, ascendente ou descendente é definida através do bit INTEDG do registro OPTION). O subprograma de atendimento desta interrupção, deve resetar este bit, afim de que a próxima interrupção possa ser detectada. Bit 2 TOIF (Flag de interrupção por transbordo de TMR0): O contador TMR0, transbordou. 1= o contador mudou a contagem de FFh para 00h 0= o contador não transbordou Para que esta interrupção seja detectada, o programa deve resetar este bit. Bit 3 RBIE (bit de habilitação de interrupção por variação na porta B): Habilitação da interrupção por variação dos níveis lógicos nos pinos 4, 5, 6 e 7 da porta B. 1= habilita a interrupção por variação dos níveis lógicos 0= inibe a interrupção por variação dos níveis lógicos A interrupção só pode ocorrer se RBIE e RBIF estiverem simultaneamente em ‘1’ lógico. Bit 4 INTE (bit de habilitação da interrupção externa INT): Bit que habilita uma interrupção externa no bit RB0/INT. 1= interrupção externa habilitada 0= interrupção externa desabilitada A interrupção só pode ocorrer se INTE e INTF estiverem simultaneamente em‘1’ lógico. Bit 5 TOIE (bit de habilitação de interrupção por transbordo de TMR0): Bit que habilita a interrupção por transbordo do contador TMR0. 1= interrupção habilitada 0= interrupção desabilitada A interrupção só pode ocorrer se TOIE e TOIF estiverem simultaneamente em ‘1’ lógico. Bit 6 PEIE (bit de habilitação de interrupção dos periféricos): Bit que habilita as interrupções geradas pelos periféricos. 1= habilita todas as interrupções dos periféricos 0= desabilita todas as interrupções dos periféricos Se EEIE e EEIF (que pertence ao registro EECON1) estiverem simultaneamente em ‘1’, a interrupção pode ocorrer. Bit 7 GIE (bit de habilitação global de interrupção): Bit que habilita ou desabilita todas as interrupções. 1= todas as interrupções são permitidas 0= todas as interrupções impedidas

De um modo geral, cada fonte de interrupção tem dois bits associados. Um habilita a interrupção e o outro assinala quando a interrupção ocorre. Existe um bit comum a todas as interrupções chamado GIE que pode ser usado para desabilitar ou habilitar todas as interrupções, simultaneamente. Este bit é muito útil quando se está escrevendo um programa porque permite que todas as interrupções sejam impedidas durante um período de tempo, de tal maneira que a execução de uma parte crítica do programa não possa ser interrompida. Quando a instrução que faz GIE= 0 é executada (GIE= 0 impede todas as interrupções), todos os pedidos de interrupção pendentes, serão ignorados. Memória de dados EEPROM O PIC16F877 tem 256 bytes de localizações de memória EEPROM, correspondentes aos endereços de 00h a FFh e onde podemos ler e escrever. A característica mais importante desta memória é de não perder o seu conteúdo quando a alimentação é desligada. Na prática, isso significa que os dados escritos permanecem no microcontrolador, mesmo quando a alimentação é desligada. Sem alimentação, estes dados permanecem no microcontrolador durante mais de 40 anos (especificações do fabricante do microcontrolador PIC), além disso, esta memória suporta até 10000 operações de escrita. A memória EEPROM é colocada num espaço de memória especial e pode ser acessada através dos registros especiais: • EEDATA (endereço 10Ch): Contém o byte menos significativo do dado de 14 bits a ser lido/escrito na EEPROM; • EEDATAH (endereço 10Eh): Contém o byte mais significativo do dado de 14 bits a ser lido/escrito na EEPROM; • EEADR (endereço 10Dh): Contém o byte menos significativo do endereço de 13 bits da posição de memória da EEPROM a ser lida/escrita; • EEADRH (endereço 10Fh): Contém o byte mais significativo do endereço de 13 bits da posição de memória da EEPROM a ser lida/escrita; • EECON1 (endereço 18Ch): Registrador de controle de acesso a memória EEPROM; • EECON2 (endereço 18Dh): Este registro não existe fisicamente e serve para proteger a EEPROM de uma escrita acidental. O registro EECON1 ocupa o endereço 18Ch e é um registro de controle com cinco bits implementados. Os bits 4, 5 e 6 não são usados e, se forem lidos, são sempre iguais a zero. Os bits do registro EECON1, devem ser interpretados do modo que se segue.

Bit 0 RD (bit de controle de leitura): Ao setar este bit (Bit 0 = 1), tem início a transferência do dado do endereço definido em EEADRH:EEADR para o registro EEDATAH:EEDATA.

Como o tempo não é essencial, tanto na leitura como na escrita, o dado de EEDATAH: EEDATA pode já ser usado na instrução seguinte. 1 = inicia a leitura 0 = não inicia a leitura Este bit é resetado, (Bit 0 = 0) por hardware uma vez que a escrita tenha terminado. Bit 1 WR (bit de controle de escrita): Ao setar este bit ( Bit 1 = 1), tem início a escrita do dado a partir do registro EEDATAH:EEDATA para o endereço especificado no registro EEADRH:EEADR. 1 = inicia a escrita 0 = não inicia a escrita Este bit é resetado, (Bit 1 = 0) por hardware uma vez que a escrita tenha terminado. Bit 2 WREN (bit de habilitação de escrita na EEPROM): Permite a escrita na EEPROM. Se este bit não estiver em um lógico, o microcontrolador não permite a escrita na EEPROM. 1 = a escrita é permitida 0 = não se pode escrever Bit 3 WRERR (Erro de escrita na EEPROM): Erro durante a escrita na EEPROM Este bit é setado (Bit 3 = 1) quando a escrita na EEPROM for interrompida por um sinal de reset ou por um transbordo no temporizador do watchdog (no caso deste estar ativo). 1 = ocorreu um erro 0 = não houve erros Bit 7 EEPGD (Bit que indica acesso a memória de programa (FLASH) ou a memória de dados EEPROM) 1 = Acesso a memória de programa (FLASH) 0 = Acesso a memória de dados (EEPROM) Portas de E/S Alguns pinos das portas de E/S são multiplexados com uma função alternativa de um periférico do microcontrolador. Em geral, quando o periférico é habilitado este pino não pode ser utilizado como um pino de E/S de propósito geral. Porta A e o registrador TRISA A porta A é uma porta de E/S bidirecional de 6 bits de largura. A direção que os pinos assumem (entrada ou saída) é determinada pelos bits do registrador TRISA, setando um bit de TRISA, faz com que o correspondente pino da porta funcione como entrada. Resetando o bit, o respectivo pino funciona como saída. Uma operação de leitura da porta, lê o valor dos pinos, enquanto em uma escrita o dado é copiado para o “latch” da porta. O pino RA4 é multiplexado com a entrada de clock do módulo Timer0 (pino RA4/T0CKI). Outros pinos da porta A são multiplexados com entradas analógicas e entradas analógicas VREF. A operação de cada pino é selecionada setando/resetando os bits de controle no registrador ADCON1 (A/D Control Register1). O registrador TRISA controla a direção

dos pinos da porta A mesmo quando eles são usados como entradas analógicas, neste caso os respectivos bits do TRISA devem estar setados. EXEMPLO: Inicialização da porta A BCF STATUS, RP0 ; BCF STATUS, RP1 ; Bank0 CLRF PORTA ; Initialize PORTA by clearing output data latches BSF STATUS, RP0 ; Select Bank 1 MOVLW 0x06 ; Configure all pins MOVWF ADCON1 ; as digital inputs MOVLW 0xCF ; Value used to initialize data direction MOVWF TRISA ; Set RA<3:0> as inputs; RA<5:4> as outputs; TRISA<7:6> are always; read as ’0’. Tabela: Funções dos pinos da porta A

Resumo dos registradores associados a porta A

Porta B e o registrador TRISB A porta B é uma porta de E/S bidirecional de 8 bits de largura. A direção que os pinos assumem (entrada ou saída) é determinada pelos bits do registrador TRISB, setando um bit de TRISB, faz com que o correspondente pino da porta funcione como entrada. Resetando o bit, o respectivo pino funciona como saída. Uma operação de leitura da porta, lê o valor dos pinos, enquanto em uma escrita o dado é copiado para o “latch” da porta. Três pinos da porta B são multiplexados com a função de Programação em Baixa Tensão (RB3/PGM, RB6/PGC e RB7/PGD). Cada pino da porta B pode ser ajustado para funcionar com um resistor de pull-up. O bit RBPU (OPTION_REG<7>) controla esta configuração, quando resetado ativa os resistores de pull-up. Os pinos de RB7 a RB4 podem gerar interrupções quando configurados como pinos de entrada. Os valores dos pinos são comparados com o valor da última leitura destes pinos,

gravada no latch. As diferenças dos quatro pinos passa por uma operação lógica OU, para gerar a interrupção “RB Port Change” e ajustar o respectivo bit de flag RBIF (Bit 0 do registrador INTCON). RB0/INT pode ser configurado também como um pino de interrupção. A borda que identifica a interrupção é configurada a partir do bit INTEDG (bit 6) do registrador OPTION. Tabela: Funções dos pinos da porta B

Resumo dos registradores associados a porta B

Porta C e o registrador TRISC A porta C é uma porta de E/S bidirecional de 8 bits de largura. A direção que os pinos assumem (entrada ou saída) é determinada pelos bits do registrador TRISC, setando um bit de TRISC faz com que o correspondente pino da porta funcione como entrada. Resetando o bit, o respectivo pino funciona como saída. Uma operação de leitura da porta, lê o valor dos pinos, enquanto em uma escrita o dado é copiado para o “latch” da porta. Quando funções de periféricos forem habilitadas, deve ser observado se não há uma sobreposição de configurações, já que alguns periféricos sobrepõem sua configuração originalmente definida no registrador TRISC.

Tabela: Funções dos pinos da porta C

Resumo dos registradores associados a porta C

Porta D e o registrador TRISD A porta D é uma porta de E/S bidirecional de 8 bits de largura. A direção que os pinos assumem (entrada ou saída) é determinada pelos bits do registrador TRISD, setando um bit de TRISD faz com que o correspondente pino da porta funcione como entrada. Resetando o bit, o respectivo pino funciona como saída. Uma operação de leitura da porta, lê o valor dos pinos, enquanto em uma escrita o dado é copiado para o “latch” da porta. A porta D pode ser configurada como uma porta paralela de 8 bits, setando o bit de controle PSPMODE (bit 4) do registrador TRISE. Nesse modo, os buffers de entrada são TTL. Tabela: Funções dos pinos da porta D

Resumo dos registradores associados a porta D

A porta E tem três pinos, RE0/RD/AN5, RE1/WR/AN6 e RE2/CS/AN7, que são individualmente configurados como entrada ou como saída. A porta de E torna-se entrada de controle para a porta paralela (porta D), quando o bit PSPMODE (bit 4 de TRISE) é setado. Nesse modo, os bits de 2 a 0 de TRISE devem estar setados para configurar os respectivos pinos da porta E como entradas digitais e os bits PCFG3:PCFG0 do registrador ADCON1 deve estar ajustados para configurar RE2:RE0 como E/S digital. Os pinos da porta E são multiplexados com entradas analógicas. Quando selecionados como uma entrada analógica, leituras desses pinos retornam 0. O TRISE controla a direção dos pinos RE mesmo quando eles estão sendo usados como entradas analógicas (deve ser garantido que os pinos estão configurados como entradas pelo TRISE, quando os mesmos funcionam como entradas analógicas ). Função dos bits do registrador TRISE (Endereço 89h)

Tabela: Funções dos pinos da porta E

Resumo dos registradores associados a porta E

Características especiais da CPU O PIC16F877 possui um conjunto de características que permite customizar a sua operação sem a necessidade de componentes externos. São elas: • Seleção de Oscilador • Seleção do modo de Reset o Power-on Reset (POR) o Power-up Timer (PWRT) o Oscillator Start-up Timer (OST) o Brown-out Reset (BOR) • Interrupções • Watchdog Timer (WDT) • SLEEP • Proteção de código • ID locations • Programação serial In-Circuit • Programação serial In-Circuit em baixa tensão • In-Circuit Debugger O WatchDog timer pode ser desligado apenas ajustando alguns bits de configuração. O mesmo possui o próprio oscilador. Há dois Timers que geram os atrasos necessários

quando o microcontrolador é ativado, o OST (Oscilator Start-up Timer), que mantém o PIC em RESST até o oscilador a cristal estabilizar e o PWRT (Power-up Timer), que gera um atraso fixo de 72 ms quando o PIC é energizado (mantém o PIC em RESET enquanto a tensão da fonte estabiliza). O modo SLEEP foi desenvolvido para oferecer um consume muito baixo quando o PIC está no modo “power-down”. A saída do modo SLEEP pode ocorrer por reset externo, “Watchdog Timer Wake-up” ou através de uma interrupção. Diferentes opções de osciladores são disponibilizadas, para permitir uma perfeita adequação do PIC ao sistema. A opção RC diminui custos, enquanto a opção LC economiza energia. Um conjunto de bits de configuração são usados para selecionar as opções. Bits de configuração Os bits de configuração são mapeados na memória de programa, no endereço 2007h. O endereço 2007h está dentro do espaço de memória de programa do usuário (pertence ao espaço de memória especial de teste e configuração – 2000h a 3FFFh), que pode ser acessado apenas durante a programação.

Palavra de configuração

Tipos de osciladores O PIC 16F87X pode ser operado em quatro modos distintos de oscilação. O usuário pode programar um dos modos abaixo a partir dos bits (FOSC1 and FOSC0): • LP Low Power Crystal • XT Crystal/Resonator • HS High Speed Crystal/Resonator • RC Resistor/Capacitor Nos modos XT, LP ou HS,um cristal deve ser conectado aos pinos OSC1/CLKIN e OSC2/CLKOUT para estabelecer a oscilação. Quando nos modos XT, LP ou HS, o dispositivo pode ter um fonte externa de clock para acionar o pino OSC1/CLKIN.

Para aplicações insensíveis a variações de tempo, a opção RC apresenta baixo custo de implementação, no entanto, a freqüência do oscilador variará em função de variações da tensão da fonte e dos valores de R e C Reset The PIC16F87X pode operar com vários tipos de reset: • Power-on Reset (POR) • MCLR reset during normal operation • MCLR reset during SLEEP • WDT Reset (during normal operation) • WDT Wake-up (during SLEEP) • Brown-out Reset (BOR) Alguns registradores não são afetados em algumas condições de reset, Neste caso o status desses registradores é desconhecido no POR e não são alterados pelos outros modos de reset. Muitos outros registradores são ajustados para um estado de “reset” no POR, no MCLR e WDT reset, no NCLR durante o SLEEP e no BOR. Eles são afetados pro um WDT Wake-up, que é visto como um reinício de uma operação normal. Os bits TO e PD são setados ou resetados em diferentes situações de reset como indicado na tabela abaixo. Esses bits são usados para determinar o modo de reset. Bits de status e seu significado

Power-On Reset (POR) Um Power-on Reset pulso é gerado internamente ao chip quando uma subida de VDD é detectada (na faixa de 1,2V – 1,7V). Power-up Timer (PWRT) O Power-up Timer fornece um time-out nominal fixo de 72 ms na energização do PIC, após um POR. O chip é mantido em reset enquanto PWRT está ativo. O atraso gerado pelo PWRT’s time, permite o VDD atingir um nível aceitável de tensão para operação. Um bit de configuração é provido para permitir habilitar/desabilitar o PWRT. Oscillator Start-up Timer (OST) O Oscillator Start-up Timer (OST) fornece 1024 ciclos de oscilação de atraso (da entrada OSC1) ao fim do atraso do PWRT. Isso garante que o circuito de oscilação a cristal atingiu

a sua estabilidade. O OST time-out é invocado apenas nos modos XT, LP e HS e apenas no Power-on Reset ou wake-up de SLEEP. Brown-Out Reset (BOR) O bit de configuração, BODEN, pode habilitar ou desabilitar o circuito Brown-out Reset. Se VDD cai abaixo de VBOR (parâmetro D005, aproximadamente4V) por mais do que TBOR (parâmetro #35, aproximadamente 100mS), a situação de brown-out resetará o PIC. If VDD cai abaixo de VBOR por menos que TBOR, um reset não poderá ocorrer. Uma vez que o brown-out ocorra, o dispositivo permanecerá em brown-out reset até VDD subir acima deVBOR. O power-up timer então mantém o dispositivo em reset por TPWRT (parâmetro #33, aproximadamente 72mS). Se VDD deve cair abaixo de VBOR durante TPWRT, o processo de brown-out reset reinicia quando VDD sobe acima de VBOR com o power-up timer reset. O power-up timer está sempre habilitado quando o circuito de brownout reset está habilitado, independente do estado do bit de configuração PWRT A tabela abaixo mostra a condição de reset para os registradores de STATUS, PCON e PC .

As tabelas abaixo mostram as condições de reset para todos os outros registradores.

Power Control/Status Register (PCON) O registrador Power Control/Status, PCON, tem até dois bits, dependendo do dispositivo. O Bit0 é o bit de Brown-out Reset Status, BOR. O bit BOR é desconhecido no Power-on Reset. Ele deve ser setado pelo usuário e checado em subseqüentes resets para ver se o bit BOR está apagando, indicando que um BOR ocorreu. O bit BOR é um bit "don’t care" e é necessário predizer se a circuitaria do Brown-out Reset está desabilitada (apagando o bit BODEN na palavra de configuração). O bit 1 é o POR (Power-on Reset Status bit). Ele é apagado no Power-on Reset e não é afetado. O usuário deve setar este bit após um Power-on Reset. Referências 1 – Microcontrolador PIC 16F8X - Resumo da Arquitetura, ,MC404B - Nov 2001 Guimarães. 2 – PIC16F87X Datasheet – Microchip Technology Incorporated. USA. Nov 1999. 3 - Microcontroladores PIC – mikroElektronika , 2003

-

Prof. Célio

PREPARAÇÃO 1. Quantos ciclos de clock no total são gastos para realizar a busca e execução de uma instrução no PIC? 2. Descreva a condição indicada por cada Flag (bits de 0 a 4) do registrador de “STATUS” do PIC. 3. Identifique os bits do registrador “OPTION” que configuram o preescalonador do clock que alimenta o TIMER0 ou WatchDog. 4. Identifique a faixa de endereços de cada bloco de memória de dados (memória RAM) do PIC. 5. O que deve ser feito para programar o pino de uma porta de I/O como: a) Entrada digital; b) Saída digital. 6. Quais os pinos da porta B podem gerar interrupções? 7. Indique em que condição ocorre o “Power-on-Reset” e o “Brown-Out-Reset”. 8. Explique que operação é realizada pelas instruções C para PIC abaixo: OUTPUT_HIGH (PIN); OUTPUT_LOW (PIN); OUTPUT_BIT (PIN, VALUE); OUTPUT_X (VALUE) (X=A, B, C,...); 9. Explique que operação é realizada pelas instruções C para PIC abaixo: INPUT (PIN); INPUT_X ( ), (X=A, B, C,...); 10. Explique que operação é realizada pelas instruções C para PIC abaixo: DELAY_MS(VALOR); DELAY_US(VALOR); 11. Explique que operação é realizada pelas instruções C para PIC abaixo: SET_TRIS_x (VALOR) (x=a,b,c,d ou e, representa uma porta de I/O) 12. Elabore uma rotina em C que ao pressionar um botão, acenda um LED da placa de experimentos do PIC e ao apertar um segundo botão, apague o respectivo LED. Considere como pinos de entrada para leitura dos botões os pinos A3 e A4 da porta A. Considere como saída para acender o LED o pino B0 da porta B. 13. Elabore uma rotina em C que incremente um contador (variável do tipo int, 8 bits) a cada 0,1s (use a instrução delay_ms para gerar o atraso de 0,1s) e o escreva na porta D do PIC quando for pressionado um botão (use o código do item 12). 14. Elabore uma rotina em C que calcule o complemento de 2 do valor de 8 bits gerado pelo contador da rotina acima. Esse valor é selecionado a aplicar um sinal 0 (zero) a entrada B0 (conecte um botão ao pino B0 do PIC). Ao pressionar o botão o valor selecionado deve ser apresentado através de LED’s usando os 8 bits da porta D e 1 (um) segundo depois, deve ser apresentado o complemento de 2 do número, usando também a porta D como saída de dados.

Related Documents

Modulo 7
June 2020 9
Modulo 7
June 2020 8
Modulo 7
October 2019 13
Tarea Modulo 7.docx
May 2020 10
Modulo 7 Mkt
October 2019 13