Preview only show first 10 pages with watermark. For full document please download

Analise De Circuitos Digitais 2

Apostila de Analise de circuitos digitais 2

   EMBED


Share

Transcript

Centro Federal de Educação Tecnológica de Minas Gerais Campus III - Leopoldina Coordenação de Eletrotécnica/Controle e Automação 1 10 0110 011111 11011101 0101011101 010100011100 11100101011001 1001000101011101 Elaboração: Prof. Márcio do Carmo B. P. Rodrigues Prof. Gilberto Sousa Lopes Agosto / 2008 Análise de Sistemas Digitais Bibliografia [1] W. S. Zanco, “Microcontroladores PIC 16F628A/648A – Uma abordagem prática e objetiva”, Ed. Érica. [2] D. J. Souza, “Desbravando o PIC”, 6ª Edição, Ed. Érica. [3] N. Matic (traduzido para o Português por A. Jerônimo), “The PIC microcontroller”, livro on-line. Disponível em http://www.i-magazine.com.br/imagazine/picbook/livropic.htm [4] Folha de dados do PIC 16F628A. Disponível em ww1.microchip.com/downloads/en/DeviceDoc/40044C.pdf [5] R. J. Tocci, N. S. Widmer, “Sistemas Digitais – Princípios e Aplicações”, 8ª Edição, Ed. Pearson. [6] Notas de aula 1 Análise de Sistemas Digitais 5. INTRODUÇÃO Os sistemas digitais (combinações de dispositivos eletrônicos projetados para manipular informação ou grandezas físicas) estão presentes em nosso dia-a-dia. São utilizados desde eletrodomésticos a sistemas industriais, passando pelos computadores pessoais (PC’s) e telefones celulares. Baixo custo, flexibilidade e confiabilidade, dentre outras características, fizeram com que processos industriais tradicionalmente controlados por circuitos analógicos passassem a ser controlados por sistemas digitais programáveis. O núcleo destes sistemas é, geralmente, um microprocessador (MPU, do inglês microprocessor unit), ou um microcontrolador (MCU, do inglês microcontroller unit) ou um processador digital de sinais (DSP, do inglês digital signal processor). Estes dispositivos são conhecidos, genericamente, como processadores. Pode-se citar como exemplo de aplicação* destas classes de processadores: • Computador pessoal: microprocessadores (domínio da família Intel - 486, Pentium e seus clones); • Controladores lógicos programáveis: microprocessadores e microcontroladores • Aplicações embarcadas: microcontroladores e DSP’s; • Sistemas de processamento digital de sinais (instrumentos eletrônicos industriais e médicos, telefones celulares, entre outros): DSP’s. *Estas aplicações foram citadas a título de ilustração, como áreas de utilização mais comum de cada classe de processador. Pode haver, entretanto, o uso de qualquer classe de processador em praticamente qualquer tipo de aplicação. 2 Análise de Sistemas Digitais Existe, atualmente, uma grande quantidade de processadores disponíveis no mercado, produzidos por diversos fabricantes, tais como: Intel, Texas Instruments, Motorola, Microchip, entre outros. Cada um destes fabricantes possui uma enorme lista de MPU’s, MCU’s e DSP’s, com diferentes características. Cada um desses processadores possui características particulares que os diferenciam entre si, entretanto são muito parecidos conceitualmente (mesmo entre diferentes classes de processadores). Deste modo, o estudo de uma estrutura particular de processador permite que o estudo de outros processadores seja consideravelmente simplificado. Conceitos como modos de endereçamentos, unidade lógica e aritmética, unidade de controle e execução, registradores, acesso a dispositivos de entrada/saída e outros são comuns a todos os processadores. Assim, nosso estudo terá início com a análise da arquitetura básica de um computador digital. Dentre os dispositivos citados, nosso estudo será concentrado nos microcontroladores, pois são amplamente utilizados em sistemas industriais. Especificamente, devido à sua versatilidade e simplicidade, além do baixo custo, o dispositivo estudado será o PIC 16F628A, fabricado pela Microchip. Microcontrolador* da Microchip DSP* da Texas Instruments Microprocessador* da Intel Dentro de um microprocessador* (Pentium Pro, da Intel) 3 *Imagens fora de escala Análise de Sistemas Digitais 5.1. Arquitetura Básica de um Computador Digital Um computador digital é uma combinação de dispositivos e circuitos eletrônicos digitais que podem realizar uma seqüência programada de operações com mínima intervenção humana. Esta seqüência de operações é chamada de programa, que é um conjunto de instruções codificadas que é armazenado na memória interna do computador juntamente com todos os dados que o programa necessita. A principal função de um computador é processar informações, que são fornecidas por meio de um dispositivo de entrada (ex.: teclado), retornando o resultado deste processamento ao usuário (ou ao sistema) por meio de um dispositivo de saída (ex.: monitor de vídeo). O que o computador vai fazer com as informações recebidas pelo dispositivo de entrada depende do programa armazenado em sua memória. Por exemplo, um programa pode simplesmente efetuar a soma de dois números ou controlar o lançamento de uma nave espacial. Um computador digital é composto, basicamente, por três unidades: • UNIDADE CENTRAL DE PROCESSAMENTO (CPU, do inglês central processing unit); • UNIDADE DE MEMÓRIA; • UNIDADE DE ENTRADA/SAÍDA (unidade de I/O, do inglês input/output). Além disso, existem os barramentos ou vias de dados, endereços e controle, responsáveis pela interligação entre estas unidades básicas. A organização dos vários elementos que compõem um computador é chamada de arquitetura do computador. 4 Análise de Sistemas Digitais Registradores Legenda Controle Dados/Endereços Arquitetura Básica de um Computador Digital 5 Análise de Sistemas Digitais 5.1.1. Unidade Central de Processamento (CPU) A unidade central de processamento é responsável pelo gerenciamento de todo o sistema e pela execução dos programas, executando várias tarefas (chamadas instruções). É o “cérebro” de um computador digital. Para gerenciar o sistema, a CPU precisa se comunicar com a memória e com os dispositivos de I/O, enviando ou recebendo informações e, assim, viabilizando o seu processamento. A CPU é composta, basicamente, por três módulos (unidade lógica e aritmética, unidade de controle e rede de registradores), descritos a seguir: ü UNIDADE LÓGICA E ARITMÉTICA (ULA ou ALU, do inglês arithmetic/logic unit) É a parte da CPU responsável pela realização de operações lógicas (AND, OR, etc.) e aritméticas (adição, subtração, etc.). O tipo de operação a ser realizado é determinado pelos sinais da unidade de controle. Os dados operados pela ALU podem ser oriundos da unidade de memória ou da unidade de entrada. Os resultados das operações realizadas na ALU podem ser transferidos tanto para a unidade de memória (para armazenamento) como para a unidade de saída. A ALU de um microprocessador 386 (Intel, ~1990) caberia na borracha de um lápis (com folgaJ) Foto de uma ALU do ano de 1957 (parte do computador Datamatic 1000 - Honeywell's) 6 Análise de Sistemas Digitais ü UNIDADE DE CONTROLE (UIC) A unidade de controle, também chamada unidade de instrução e controle (UIC), é responsável por comandar a operação de todas as outras unidades de um computador digital, fornecendo sinais de controle e temporização. Essa unidade contém circuitos lógicos e de temporização que geram os sinais necessários para executar cada instrução em um programa. Para processar o programa armazenado na memória do computador digital, a UIC faz a busca (na memória, que é uma parte externa à CPU) de cada instrução a ser executada, as interpreta e executa. Este processo de busca e execução é realizado continuamente, de forma seqüencial, para cada uma das instruções contidas em tal programa. A UIC pode ser comparada a um “maestro”, responsável por manter cada um dos “membros da orquestra” em sincronismo. instruções ü REGISTRADORES A CPU possui um conjunto de registradores, divididos em dois grupos: a) Registradores de uso geral (GPR, do inglês general purpose register): armazenam dentro da CPU, temporariamente, dados que serão manipulados pelo programa em execução, evitando a necessidade de acessar a unidade de memória externa à CPU; b) Registradores de finalidade específica (SFR, do inglês special function register): são utilizados em tarefas pré-determinadas e realizam funções especiais como, por exemplo, definir se um determinado terminal (“pino”) do microcontrolador se comportará como um dispositivo de entrada ou de saída de dados. 7 Análise de Sistemas Digitais 5.1.2. Unidade de Memória A memória armazena grupos de bits que podem representar instruções (programa) que serão executadas pela CPU ou dados que serão manipulados pelo programa. A memória também serve para o armazenamento de resultados intermediários ou finais das operações aritméticas. A operação da memória é gerenciada pela UIC. ü Dado da posição de memória 00h: Dado da posição de memória 00h: 01000011 2 01000011 2 LOCALIDADES DE MEMÓRIA A memória é utilizada para armazenar informações (dados e/ou programas). Ela é composta por várias localidades (ou posições), nas quais são armazenadas as informações. Cada localidade possui um endereço e é capaz de armazenar o equivalente a um caractere. Por exemplo, para são utilizadas 8 localidades de memória para armazenar o nome CEFET-MG. Fisicamente, cada localidade de memória é capaz de armazenar um conjunto de 8 bits (ou seja, 1 byte), representados em níveis lógicos de tensão (ou seja, em binário). Por exemplo, na localidade que está armazenada a letra “C” (endereço 00h) existe, na verdade, um conjunto de bits que representa tal letra (codificação em ASCII). Neste caso, o dado armazenado na referida localidade de memória seria “010000112” (que é o código ASCII equivalente ao caractere “C”. Oportunamente a utilização desta codificação será estudada). Localidades de memória 8 Análise de Sistemas Digitais ü MEMÓRIA DE DADOS E MEMÓRIA DE PROGRAMA Muitas vezes os dados e os programas são armazenados em localidades de memória diferentes, com características específicas. A “região’ da memória que armazena o programa que será executado pela CPU é chamada de memória de programa. Deve ser uma memória do tipo não-volátil (não perde as informações quando sua alimentação é desligada) pois as instruções contidas no programa precisam ser executadas cada vez que for iniciada a operação do computador. Já a “região” da memória responsável por armazenar os dados que estão sendo processados é chamada memória de dados. Neste caso, utiliza-se memórias do tipo volátil (os dados são armazenados enquanto a memória for alimentada), pois os dados processados vão sendo alterados ao longo da execução do programa. Em geral, as memórias voláteis são “mais rápidas” (operam em maiores freqüências) que as não-voláteis. ü MEMÓRIAS SEMICONDUTORAS A implementação da unidade de memória é feita através dos dispositivos semicondutores (chips de memória). Estes circuitos integrados são classificados quanto à volatilidade apresentada e a possibilidade de leitura e/ou escrita na memória. Memória Não-volátil ROM PROM EPROM Volátil EEPROM FLASH ROM DRAM SRAM 9 Análise de Sistemas Digitais PRINCIPAIS CARACTERÍSTICAS ð ROM (read-only memory) q q q ð PROM (programmable read-only memory) q q q ð Somente leitura; Programada eletricamente pelo usuário; Pode ser reprogramada (os dados são apagados com luz ultravioleta) EPROM* EEPROM ou E2PROM (eletrically erasable programmable read-only memory) q q ð Somente leitura; Programada eletricamente pelo usuário (uma única vez); Não pode ser reprogramada EPROM (eletrically programmable read-only memory) q q q ð Somente leitura; Sai de fábrica com os dados já programados; Não pode ser reprogramada Somente leitura; Pode ser programada e reprogramada pelo usuário (os dados são apagados eletricamente); FLASH ROM (memória flash) q q q Somente leitura; Programada eletricamente pelo usuário; Pode ser reprogramada (por meio de software específico) Cartões de memória e pendrive* 10 Flash-BIOS * *Imagens fora de escala Análise de Sistemas Digitais ð SRAM (static random access memory) q Leitura e escrita; q Circuito eletrônico composto por flip-flops; ð DRAM (dynamic random access memory) q Leitura e escrita; q Circuito eletrônico composto por capacitores (requer REFRESH para manter os dados armazenados, mesmo com a alimentação do circuito ligada); Simulação de leitura que q Alguns tipos de DRAM: EDRAM, FPM, EDO, SDRAM, DDR. Simulação de leitura que SRAM x DRAM SRAM Velocidade maior Refresh não Tamanho Físico maior Custo maior DRAM C C menor sim menor menor C C é feita em cada é feita em cada localidade com o localidade com o objetivo de reforçar os objetivo de reforçar os dados armazenados dados armazenados (recarregar os (recarregar os capacitores). Valor típico capacitores). Valor típico para o ciclo de refresh: para o ciclo de refresh: 15 ms. 15 ms. Chip DRAM (256 kB)* DDR (1 GB)* Chips de Video RAM (SRAM)* Pente de memória DDR (DRAM, 1 GB)* Pentes de memória EDO (DRAM, 32 MB)* 11 *Imagens fora de escala Análise de Sistemas Digitais 5.1.3. Unidade de Entrada/Saída (I/O) A unidade de I/O é responsável pela entrada e saída de dados do sistema. É a “porta de entrada e/ou saída” de um computador digital. Os dispositivos que fazem parte da unidade de I/O são denominados periféricos, pois são externos ao resto do computador. Como exemplos de dispositivos de I/O, pode-se citar: teclado, monitor de vídeo, impressora, modem, unidades de disco, leitores de cartões magnéticos, conversores analógico-digital (ADC) e digital-analógico (DAC), display de 7 segmentos, display de cristal líquido (LCD), entre outros. Muitos dispositivos de I/O não são diretamente compatíveis com a CPU devido às diferenças em características como velocidade de operação, formato do dados (ex.: BCD, ASCII, binário), modo de transmissão de dados (ex.: serial, paralelo) e nível lógico de sinais. Isso significa que quando uma informação entra no sistema por meio de um periférico, ela pode precisar ser convertida, antes de ser processada pela CPU. Esta conversão é feita por módulos conhecidos como interfaces. Tratando-se de sistemas computacionais, define-se interfaceamento como a transmissão digital de informação entre um computador e seus periféricos, de modo compatível e sincronizado. Exemplo: Um monitor de vídeo recebe dados serialmente (um de cada vez), enquanto a maioria dos computadores digitais manipula os dados no formato paralelo. Deste modo, o monitor de vídeo necessita de circuitos de interface (placa de vídeo) para receber dados do computador. 12 Análise de Sistemas Digitais 5.1.4. Barramentos Para gerenciar o sistema, a CPU precisa se comunicar com a memória e com os dispositivos de I/O. Esta comunicação é feita por meio dos barramentos, que são conjuntos de fios que ligam a CPU à memória e aos dispositivos de I/O. Os termos via e bus também são utilizados para designar o termo barramento. Existem dois modos de comunicação da CPU com a memória ou dispositivos de I/O: a) Escrita: quando a CPU envia uma informação para ser armazenada numa localidade de memória ou para um dispositivo de I/O. b) Leitura: quando a CPU busca uma informação na memória ou num dispositivo de I/O. Os barramentos são divididos em três grupos: ü BARRAMENTO DE DADOS Caminho por onde trafegam os dados trocados (enviados e recebidos) entre a CPU e o resto do sistema. ü BARRAMENTO DE ENDEREÇOS É utilizado quando a CPU precisa se comunicar com a memória ou com um dispositivo de I/O. Cada localidade de memória, assim como cada dispositivo de I/O, possui um endereço, que é um valor numérico (geralmente representado em hexadecimal). Por exemplo, quando a CPU faz uma leitura no teclado, ela coloca o valor correspondente ao endereço do teclado no barramento de endereços. O endereço chegará a todos os que estiverem ligados ao barramento de endereços, mas só será identificado pelo teclado, que “atenderá ao chamado’ da CPU. O mesmo ocorre quando a CPU tem que armazenar um determinado dado na memória: o endereço da localidade de memória desejado é colocado no barramento de endereços. ü BARRAMETO DE CONTROLE Caminho por onde trafegam os sinais de controle, que informam para o sistema o tipo de comunicação e como esta será executada. Ex.: operação de escrita ou leitura na 13 memória. Análise de Sistemas Digitais 5.2. Arquiteturas Von-Neumann e Harvard Existem, basicamente, duas formas de apresentação da estrutura interna de um computador digital, conhecidas como arquitetura tipo Von-Neumann e arquitetura tipo Harvard. Von-Neumann • Utiliza um único barramento, para acesso às memórias de dados e programa. Harvard • Utiliza dois barramentos, um para acessar a memórias de dados e outro para acessar a memória de programa. Torna Tornaooprocessamento processamentomais maisrápido, rápido,pois, pois, no mesmo instante em que uma no mesmo instante em que umainstrução instrução está estásendo sendoexecutada executadapela pelaCPU, CPU,aapróxima próxima instrução pode ser buscada na memória instrução pode ser buscada na memóriade de programa. programa. 14 Análise de Sistemas Digitais 5.3. CISC x RISC A principal função de um computador digital é executar uma série de ordens (comandos ou instruções), armazenados em um programa, na sua memória. Cada uma destas instruções é interpretada pela CPU e, então, executada. Assim, cada tipo de computador digital, deve ter um conjunto de instruções (ou set de instruções) definidas, de modo que sua CPU possa interpretá-las e executá-las. Em função deste conjunto de instruções, existem duas classes de computadores digitais: ü CISC (complex instruction set computer) q Conjunto de instruções ampliado, ou seja, a CPU é capaz de executar um grande número de instruções (ex.: microcontrolador 8051, da Intel, com 111 instruções); q Computadores com arquitetura Von-Neumann. ü RISC (reduced instruction set computer) q Conjunto de instruções reduzido (ex.: microcontrolador PIC16F628A, da Microchip, com 35 instruções); q Computadores com arquitetura Harvard. Isso Issotorna tornaooaprendizado aprendizadomais maisfácil fácileedinâmico. dinâmico. Entretanto, implica no fato que muitas Entretanto, implica no fato que muitasfunções funçõesdeverão deverãoser ser “construídas” (pois não existe uma instrução que “construídas” (pois não existe uma instrução querealize, realize, diretamente, diretamente,algumas algumasoperações operaçõesque quepodem podemser sernecessárias), necessárias), exigindo exigindomaior maiorhabilidade habilidadedo doprojetista. projetista. 15 Análise de Sistemas Digitais 5.4. Microprocessadores x Microcontroladores ü MICROPROCESSADOR Um microprocessador (MPU, microprocessor unit) é uma CPU de pequeno porte, capaz de executar um determinado conjunto de instruções. É o “coração” de um computador digital. Para formar um computador digital, é necessária, além do MPU, a existência de memórias e dispositivos de I/O. Exemplos: 8088, 80286, 80386, 80486, Pentium (todos da Intel), entre outros. ü MICROCONTROLADOR Um microcontrolador (MCU, microcontroller unit) é um componente eletrônico que possui microprocessador, memória e dispositivos de I/O em um mesmo encapsulamento (CI). É um “computador em um único chip”. Exemplos: 8051 (Intel), 68HC05(Motorola), PIC16F628A (Microchip), PIC18F452 (Microchip), entre outros. Microcontrolador (MCU) 16 Análise de Sistemas Digitais 6. MICROCONTROLADOR PIC 16F628A 6.1. Introdução Os microcontroladores começaram a ser fabricados a partir da década de 1980 e a família 8051, da Intel tornou-se um padrão. Com o tempo, outros microcontroladores, de outros fabricantes, foram conquistando o seu espaço no mercado. Além disso, os microcontroladores foram se tornando mais robustos e com maior capacidade de processamento, ficando cada vez mais rápidos, com novos dispositivos de I/O integrados, tais como, USART (universal synchronous/asynchronous receiver/transmitter, que é um tipo de interface serial para comunicação) , conversor A/D, PWM (pulsewidth modulation, modulação por largura de pulso), oscilador interno, modulador de RF (rádio freqüência), interfaces CAN (controller area network), SPI (serial peripheral interface) , I2C (interintegrated circuit, tipo de barramento utilizado para interconectar periféricos e microcontrolador), etc. 6.2. Microcontroladores da Família PIC ü ü ü ü ü ü Família de microcontroladores fabricados pela Microchip Technology (www.microchip.com); Apresenta centenas de MCUs, com características específicas. Baseados na arquitetura Harvard (RISC); Operam com clock de até 40 MHz; Memória de dados com 8 bits ou 16 bits (dependendo do MCU); Memória de programa: ü Pode apresentar 12 bits, 14 bits ou 16 bits em cada localidade (dependendo do MCU); ü Diferentes tecnologias: üROM tipo máscara (o chip já sai gravado de fábrica, sem possibilidade de regravação ð vantagem: baixíssimo custo; chips com sufixo “CR” – ex.: 16CR56A ); ü OTP (utiliza PROM, ou seja, o chip pode ser gravado uma única vez; sufixo “C” ex.: 16C432); ü EPROM (chips com sufixo “JW” ou “CL”) ü FLASH (podem ser gravados e regravados eletricamente, milhares de vezes; chips 17com sufixo “F”) Análise de Sistemas Digitais 6.3. Características do Microcontrolador PIC 16F628A ü ü ü ü ü ü ü ü ü ü ü ü ü ü ü ü 16 pinos de I/O; Freqüência de operação de até 20 MHz; Oscilador interno de 4 MHz / 37 kHz; Memória de programa (FLASH): 2k x 14 bits; Memória de dados (RAM): 224 x 8 bits; Memória EEPROM interna: 128 x 8 bits; Módulos de temporização: TIMER 0 (8 bits), TIMER 1 (16 bits) e TIMER 2 (8 bits); Módulo CCP (modos capture, compare e PWM); 2 comparadores analógicos (referência de tensão interna programável); 1 canal de comunicação serial – USART; Watchdog timer; Capacidade de corrente de 25 mA por pino de I/O; 35 instruções (RISC); 10 fontes de interrupção independentes; Modo de funcionamento sleep; Opera com tensão de alimentação entre 3 V e 5 V. 18 Análise de Sistemas Digitais 6.3. Pinagem do PIC 16F628A (encapsulamentos DIP e SOIC) PINO TIPO DESCRIÇÃO 1 Entrada/Saída PORTA (bit 2)/ Entr. do comparador analógico/ Saída da tensão de referência. 2 Entrada/Saída PORTA (bit 3)/ Entr. do comparador analógico/ Saída do comparador 1. 3 Entrada/Saída PORTA (bit 4)/ Entr. de clock externo do TMR0/ Saída do comparador 2. ***Saída dreno aberto*** 4 Entrada 5 Alimentação Terra (GND) 6 Entrada/Saída PORTB (bit 0)/ Entr. de interrupção externa 7 Entrada/Saída PORTB (bit 1)/ Recepção USART (modo assíncr.) / Dados (modo síncrono) 8 Entrada/Saída PORTB (bit 2)/Transmissão USART (modo assínc.)/ Clock (modo síncrono) 9 Entrada/Saída PORTB (bit 3)/ Entr. ou saída do módulo CPP 10 Entrada/Saída PORTB (bit 4)/ Entr. de programação LVP*. 11 Entrada/Saída PORTB (bit 5) 12 Entrada/Saída PORTB (bit 6)/ Entr. do oscilador TMR1/ Entr. de clock do TMR1/ Clock na programação ICSP*. 13 Entrada/Saída PORTB (bit 7)/ Entr. do oscilador TMR1/ Dados na programação ICSP. 14 Alimentação Alimentação positiva (+5V) 15 Entrada/Saída PORTA (bit 6)/ Entr. para cristal oscilador/ Saída de clock. PORTA (bit 5)/ Reset CPU/ Tensão de programação PINO TIPO DESCRIÇÃO 16 Entrada/Saída PORTA (bit 7)/ Entr. para cristal oscilador/ Entr. de clock externo. 17 Entrada/Saída PORTA (bit 0)/ Entrada do comparador analógico 18 Entrada/Saída PORTA (bit 1)/ Entrada do comparador analógico OBS.: *Dreno aberto: deve ser conectado um resistor de “pull-up” ao pino *LVP: baixa tensão de programação *ICSP: gravação in-circuit 19 Análise de Sistemas Digitais 6.4. Arquitetura Interna do PIC 16F628A 20 Análise de Sistemas Digitais 6.5. Execução e Busca de Instruções Toda CPU é capaz de executar várias tarefas denominadas instruções. A base de tempo utilizada pela CPU para executar cada instrução é obtida a partir de um sinal de clock (que pode ser gerado internamente ao MCU ou proveniente de um oscilador externo). Nos MCUs da família PIC, a freqüência do sinal de clock é dividida, internamente, por quatro. Este novo sinal de clock, cuja freqüência é ¼ da freqüência do clock original, define o ciclo de instrução do microcontrolador. O PIC 16F628A possui um oscilador interno capaz de gerar um sinal de freqüência de até 4 MHz. Além disso, pode operar, utilizando um oscilador externo, em até 20 MHz. 21 Análise de Sistemas Digitais Quase todas as instruções do PIC 16F628A são executadas em um ciclo de instrução. O processo de busca e execução de instruções deste microcontrolador é ilustrado abaixo: OOcontador contadorde deprograma programa(PC, (PC,do doinglês inglêsprogram programcounter) counter)indica indicaaaposição posição da memória de programa que contém a instrução que está sendo da memória de programa que contém a instrução que está sendo“buscada”. “buscada”. PC=01 Enquanto a CPU executa a instrução “NÃO FAZER NADA” (que está na posição de memória “PC-1”), é feita a busca da próxima instrução a ser executada (que está armazenada na memória de programa na posição “PC”, ou seja, na posição de mem. “01h”). PC=02 A CPU executa a instrução “SETAR PINO1” (que está na posição de memória “PC-1”) e é feita a busca da próxima instrução a ser executada (que está armazenada na memória de programa na posição “02h”, ou seja, na posição de memória “PC”). .. . Esta característica de buscar a Esta característica de buscar a instrução em um ciclo de instrução em um ciclo de máquina máquina eeexecutá-la executá-lano no próximo torna o próximo torna osistema sistemamais mais rápido e é conhecida como rápido e é conhecida como pipeline pipeline. . Memória de Programa NÃO FAZER NADA 00h SETAR PINO1 01h MOVER 10010110,TRISA 02h NÃO FAZER NADA 03h RESETAR PC 04h .. . 22 Análise de Sistemas Digitais 7. SET DE INSTRUÇÕES DO PIC 16F628A 7.1. Formato das Instruções As instruções são formadas por um conjunto de bits que são decodificados pelo microcontrolador, fazendo com que ele execute uma operação bem definida. A quantidade de bits pode variar de uma instrução para outra, dependendo do microcontrolador. No caso do PIC 16F628A, todas as instruções possuem o mesmo tamanho: 14 bits. As instruções são compostas de dois campos: código de operação (OP. CODE) e operando. Os primeiros bits de uma instrução representam o “OP. CODE” e os demais formam o operando, podendo conter dados, endereço ou o “nome” de um registrador. • Código de operação (OP. CODE) É o campo da instrução que especifica qual tarefa deve ser realizada pelo MCU quando a instrução é processada. O OP. CODE é um conjunto de bits (representado em binário ou em hexadecimal). Para facilitar o desenvolvimento dos programas, é dado um nome a cada instrução (que é associada a um determinado OP. CODE). Este nome é o MNEMÔNICO da instrução, que é uma forma abreviada da descrição da instrução (em inglês). Exs: MOV (mover), ADD (somar), CLR (limpar), NOP (não fazer nada). • Operando Representa quais elementos serão “envolvidos” na instrução definida. Por exemplo, numa operação de armazenamento de dados na memória, o operando é composto pelo dado que será armazenado e o endereço da localidade de memória onde ele deve ser armazenado. No caso do PIC 16F628A, os operandos de uma instrução podem ser do tipo REGISTRADOR, BIT DE UM REGISTRADOR ou DADO. Existem algumas instruções que não possuem operandos, como veremos adiante. 23 Análise de Sistemas Digitais 7.1. Nomenclatura das Instruções A sintaxe utilizada na construção dos mnemônicos das instruções segue uma lógica. Conhecer a nomenclatura adotada pelo fabricante facilita o entendimento do significado de cada instrução. W : Representa o registrador WORK (em alguns MCUs este registrador é conhecido como acumulador). É um registrador que não é mapeado na memória de dados (ao contrário dos outros SFR), mas é muito utilizado, pois não é possível escrever um dado em um outro registrador sem que antes a informação passe pelo registrador W. F : (File) Representa uma posição de memória ou um registrador. L : (Literal) A instrução opera um valor numérico (constante), que pode ser representado em decimal, binário, octal, hexadecimal ou ASCII. B : (Bit) Representa um bit dentro de um byte. T : (Teste) Indica que a instrução fará um teste em um determinado bit, dentro de um byte, para verificar se ele é “0” ou “1”. S : (Skip) Indica que a próxima linha do programa será “pulada” se uma certa condição for satisfeita. S : Aparecendo como última letra do mnemônico, S significa que um determinado bit, dentro de um byte, será “SETADO”, ou seja, levado a nível lógico “1”. C : (Clear) Indica que um determinado bit, dentro de um byte, será “LIMPO”, ou seja, levado a nível lógico “0”. Nas instruções de desvio, o “S” e “C” também são usados para indicar se um bit está em “1” ou “0”, respectivamente. Z : (Zero) Indica que o resultado da última operação matemática foi zero. q Termos utilizados para indicar a tarefa que será realizada por uma instrução: ADD (soma de 2 números); AND (operação lógica “E” entre 2 números); IOR (operação lógica “OU” entre 2 números); CLR (limpar); COM (complemento – “inversão bit a bit”); DEC (decremento de um número); INC (incremento de um número); MOV (mover uma informação para algum lugar); RL (rotacionar um bit para a esquerda); RR (rotacionar um bit para a direita); SUB (subtração entre 2 números); SWAP (inverte os nibbles alto e baixo de um byte à 1 nibble = 4 bits); XOR (operação lógica “OU EXCLUSIVO” entre 2 números). 24 Análise de Sistemas Digitais Legenda 7.2. Instruções do PIC 16F628A f : registrador d : destino b: bit k: constante (“0”ðW; “1” ð registrador f) Instrução Descrição OP. CODE (14 bits) Status afetado Exemplo Operações com registradores ADDWF f,d Soma W e f: d ß (W+f) 00 0111 dfff ffff C, CD, Z ADDWF REG1,0 ANDWF f,d AND entre W e f: 00 0101 dfff ffff Z ANDWF REG1,1 CLRF f Limpa f 00 0001 1fff ffff Z CRLF REG1 00 0001 0000 0011 Z CLRW COMF f,d Complemento de f: 00 1001 dfff ffff Z COMF REG1,0 DECF f,d d ß (f-1) 00 0011 dfff ffff Z DECF CONT,1 DECFSZ f,d d ß (f-1) e salta próxima linha se o resultado for zero 00 1011 dfff ffff DECFSZ REG,1 INCF f,d d ß (f+1) 00 1010 dfff ffff INCF CONT,1 INCFSZ f,d d ß (f+1) e salta próxima linha se o resultado for zero 00 1111 dfff ffff INCFSZ REG1,1 IORWF f,d OR entre W e f: 00 0100 dfff ffff Z IORWF REG1,0 MOVF f,d d ß cópia de f 00 1000 dfff ffff Z MOVF REG1,0 MOVWF f f ß cópia de W 00 0000 1fff ffff MOVWF REG1 RLF f,d rotaciona f um bit para a esquerda e copia em d 00 1101 dfff ffff C RLF REG1,0 RRF f,d rotaciona f um bit para a direita e copia em d 00 1100 dfff ffff C RRF REG1,0 SUBWF f,d Subtrai W de f: d ß (f-W) 00 0010 dfff ffff C, CD, Z SUBWF REG1,1 SWAPF f,d inverte nibble alto com nibble baixo (de f) e guarda resultado em d 00 1110 dfff ffff SWAPF REG1,1 XORWF f,d OU EXCLUSIVO entre W e f: 00 0110 dfff ffff XORWF 25 REG1,0 CLRW d ß (W AND f) Limpa W d ß NOT(f) d ß (W OR f) d ß (W XOR f) Z Z Análise de Sistemas Digitais Instruções (continuação) Instrução OP. CODE (14 bits) Descrição Status afetado Exemplo Operações com bits BCF f,b Reseta (clear) o bit b do registrador f 01 00bb bfff ffff BCF REG1,7 BSF f,b Seta o bit b do registrador f 01 01bb bfff ffff BSF REG1,5 BTFSC f,b Testa o bit b do registrador f e salta a próxima linha se ele for "0" 01 10bb bfff ffff BTFSC REG1,4 BTFSS f,b Testa o bit b do registrador f e salta a próxima linha se ele for "1" 01 11bb bfff ffff BTFSS REG1,3 Operações com literais (valores numéricos) ADDLW k W ß (W+k) 11 111x kkkk kkkk C, CD, Z ADDLW 0x15 ANDLW k W ß (W AND k) 11 1001 kkkk kkkk Z ANDLW 0x5F IORLW k W ß (W OR k) 11 1000 kkkk kkkk Z IORLW 0X3D MOVLW k Wßk 11 00xx kkkk kkkk MOVLW 0X5A SUBLW k W ß (k-W) 11 110x kkkk kkkk C, CD, Z SUBLW 0X02 XORLW k W ß (W XOR k) 11 1010 kkkk kkkk Z XORLW 0XAF Operações de Controle NOP "No operation" (não faz nada) 00 0000 0xx0 0000 NOP Chamada à sub-rotina 10 0kkk kkkk kkkk CALL Limpa WDT (watch-dog) 00 0000 0110 0100 Desvio para endereço 10 1kkk kkkk kkkk GOTO Retorno de interrupção 00 0000 0000 1001 RETFIE Retorno de sub-rotina com k armazenado em W 11 01kk kkkk kkkk RETLW RETURN Retorno de sub-rotina 00 0000 0000 1000 RETURN SLEEP Coloca o PIC em modo de economia de energia (sleep) 00 0000 0110 0011 CALL k CLRWDT GOTO k RETFIE RETLW k TO, PD TO, PD ROTINA1 CLRWDT SLEEP INICIO 0X25 26 Análise de Sistemas Digitais 8. MAPEAMENTO DE MEMÓRIA O microcontrolador PIC 16F628A possui três memórias distintas: Tipo Função Tamanho Flash Memória de programa 2048x14 RAM Memória de dados 224x8 EEPROM Armazenamento de dados que não podem ser perdidos quando a energia for desligada 128x8 8.1. Memória EEPROM ü 128 posições, cada uma com capacidade de armazenamento de 1 byte; ü Faixa de endereços para acesso: 00h – 7Fh; ü Acesso realizado por meio dos registradores EECON1, EECON2, EEDATA e EEADR. 27 Análise de Sistemas Digitais 8.2. Memória de Programa ü Flash-ROM; ü 2048 localidades de 14 bits. ü Endereços de 0000h a 07FFh. Vetor de reset 0000h Reservado 0001h Reservado 0002h Reservado 0003h Vetor de interrupção 0004h 0005h Primeiro Primeiroendereço endereçoda damemória memóriade deprograma programa que é executado quando o PIC começa que é executado quando o PIC começaaarodar rodar (após (apósaaalimentação alimentaçãoou ouum umreset). reset). Utilizado Utilizadopara paraooinício iníciodo dotratamento tratamento de todas as interrupções. de todas as interrupções. Memória de Programa 07FFh 28 Eletrônica Digital/Microcontroladores 8.3. Memória de Dados ð Mapeamento da Memória RAM üü44bancos bancosde dememória; memória; üüContém os Contém osSFR’s SFR’seeos osGPR’s; GPR’s; üü224 posições de 8 bits 224 posições de 8 bitspara parauso usogeral geral (GPR); (GPR); üüEspelho Espelhodas das16 16últimas últimasposições posiçõesde de mem. do banco 0 (70h–7Fh) mem. do banco 0 (70h–7Fh)nos nosoutros outros bancos. bancos. 29 8.4. Registradores com Finalidades Específicas (SFR) São utilizados para configurar as características da operação do MCU como, por exemplo, se um determinado pino será uma entrada ou saída de dados. SFR’s SFR’s (BANCO (BANCO0) 0) Legenda: R: bit de leitura W: bit de escrita n: valor assumido no POR (“0” ou “1”) x: valor desconhecido no POR q: depende da condição -: não implementado. OBS.:POR=Power-on reset 30 SFR’s SFR’s (BANCO (BANCO1) 1) 31 SFR’s SFR’s (BANCO (BANCO2) 2) 32 SFR’s SFR’s (BANCO (BANCO3) 3) 33 Análise de Sistemas Digitais 8.4.1. Registrador STATUS O registrador STATUS contém informações sobre o estado da ALU, a forma do último Reset e os bits que selecionam os bancos da memória de dados. Legenda: R: bit de leitura -n: valor assumido no POR (“0” ou “1”) W: bit de escrita -x: valor desconhecido no POR Registrador STATUS (Endereços: 03h, 83h, 103h e 183h) Chaves de seleção de banco de memória (paginação de memória – endereçamento direto) RP1 RP0 Seleção 0 0 Banco 0 0 1 Banco 1 1 0 Banco 2 1 1 Banco 3 Z (“bit zero”): indica que o resultado da última operação realizada pela ALU é zero (Z=1); DC (“digit carry/borrow”): indica que a última operação de soma (instruções ADD) provocou um estouro (vai-um) entre os bits 3 e 4, isto é, o resultado ultrapassou os 4 bits menos significativos (DC=1); C (“carry/borrow”): indica que a última operação de soma (instruções ADD) provocou um estouro (vai-um) no bit 7, isto é, o resultado ultrapassou os 8 bits dos registradores envolvidos (C=1). 34 Análise de Sistemas Digitais Legenda: 8.4.2. Registradores PCL e PCLATH R: bit de leitura -n: valor assumido no POR (“0” ou “1”) W: bit de escrita -x: valor desconhecido no POR O CONTADOR DE PROGRAMA (PC) do PIC 16F268A possui 13 bits. O byte menos significativo do PC (PC<7:0>) fica no registrador PCL. A parte alta do PC (PC<12:8>) não é diretamente endereçada, mas é fornecida pelos 5 bits menos significativos do registrador PCLATH (PCLATH<4:0>). Registrador PCLATH Registrador PCL (Endereços: 02h, 82h, 102h e 182h) (Endereços: 0Ah, 8Ah, 10Ah e 18Ah) R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 bit7 bit6 PC bit5 bit4 bit12 bit3 bit11 bit2 bit10 parte alta bit1 bit9 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 bit0 bit8 bit7 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit6 bit5 bit4 bit3 bit2 bit1 bit0 bit0 parte baixa Obs.: Alterar o valor do PC (escrever em PCL e/ou em Obs.: Alterar o valor do PC (escrever em PCL e/ou em PCLATH) pode fazer com que o programa não seja PCLATH) pode fazer com que o programa não seja executado corretamente. executado corretamente. 35 Análise de Sistemas Digitais 9. PORTAS DE I/O O PIC 16F628A possui duas portas de I/O, com 8 bits cada, chamadas “PORTA” (pinos RA7:RA0) e “PORTB” (pinos RB7:RB0). Cada bit de cada porta está associado ao respectivo pino do MCU, podendo ser configurado como entrada ou saída, independentemente dos demais. 9.1. Níveis de Tensão ENTRADA VIL 0 – 0,8 V VIH 2 V – VDD (tensão de entrada baixa, “0”) (tensão de entrada alta, “1”) SAÍDA VOL 0,6 V VOH (VDD - 0,7 V) (tensão de saída baixa, “0”) (tensão de saída alta, “1”) Obs.: 4,5 V < VDD < 5,5 V 36 Análise de Sistemas Digitais 9.2. Registradores Associados às Portas de I/O q PORTA ü TRISA: configura os pinos da “PORTA” como entrada ou saída ü PORTA: acesso aos bits da “PORTA” (leitura ou escrita). 0 = Output (saída) 1 = Input (entrada) Obs.: Alguns bits dos registradores CMCON (bits 3:0) e VRCON (bits 7 e 6) têm influência sobre a “PORTA”. Master Clear Enable (bit 5 do registrador CONFIG, que só pode ser acessado durante a programação do MCU). 37 Análise de Sistemas Digitais q PORTB ü TRISB: configura os pinos da “PORTB” como entrada ou saída ü PORTB: acesso aos bits da “PORTB” (leitura ou escrita). 0 = Output (saída) 1 = Input (entrada) Obs.: O bit 7 do registrador OPTION (referenciado como “OPTION_REG” nos programas em assembly) tem influência sobre a “PORTB” Low-Voltage Programming (bit 7 do registrador CONFIG, que só pode ser acessado durante a programação do MCU). 38 Análise de Sistemas Digitais 9.3. Inicializando as Portas de I/O Antes de utilizar as portas de I/O do MCU, é preciso configurá-las de acordo com a necessidade de cada aplicação. Abaixo são mostrados trechos de códigos de programa utilizados para inicializar as portas de I/O do PIC 16F628A, configurando seus pinos como entradas ou saídas. q Inicializando a “PORTA” ;********************************************************************************************************************************** BCF STATUS,RP1 ;RP1=0 BSF STATUS,RP0 ;RP0=1 => SELECIONA BANCO1 MOVLW B’00000110’ ;Wß00000110 (VALOR EM BINARIO) MOVWF TRISA ;RA2 E RA1 CONFIGURADOS COMO ENTRADAS E OS DEMAIS COMO SAIDAS BCF STATUS,RP1 ;RP1=0 BCF STATUS,RP0 ;RP0=0 => SELECIONA BANCO0 MOVLW B’00000111’ ; Wß00000110 (VALOR EM BINARIO) MOVWF CMCON ;CONFIGURA OS BITS RA3:RA0 COMO I/O ;********************************************************************************************************************************** q Inicializando a “PORTB” ;********************************************************************************************************************************** BCF STATUS,RP1 ;RP1=0 BSF STATUS,RP0 ;RP0=1 => SELECIONA BANCO1 MOVLW B’00000000’ ; Wß00000000 (VALOR EM BINARIO) MOVWF TRISB ;TODOS OS BITS DA PORTB CONFIGURADOS COMO SAIDA MOVLW B’10000000’ ; Wß10000000 (VALOR EM BINARIO) MOVWF OPTION_REG ;SETA BIT 7 (DESABILITA RESISTORES DE PULL-UP INTERNOS) ;********************************************************************************************************************************** 39 Análise de Sistemas Digitais 9.4. Acessando o Hardware A interface entre o programa e os pinos do PIC (hardware) é feita pelos registradores PORTA e PORTB. Quando, por exemplo, um determinado pino está configurado como saída, o nível lógico que for colocado pelo programa no respectivo bit daquele PORT aparece no pino. Da mesma forma, quando um pino está configurado como entrada, a leitura do pino é obtida por meio da leitura do respectivo bit do PORT. 9.4.1. Leitura de uma Porta de I/O Suponha que todos os bits de um PORT estejam configurados como entrada. Existem duas maneiras de efetuar a leitura dos pinos da porta de I/O relacionada: i) Lendo todos os pinos de uma só vez ;********************************************************************************************************************************** ;ESTE EXEMPLO LE TODOS OS BITS DA PORTB E COPIA O VALOR LIDO PARA UMA VARIAVEL “TEMP” MOVF PORTB,W ;WßPORTB MOVWF TEMP ;TEMPßW (OU SEJA, TEMPßPORTB) ;********************************************************************************************************************************** ii) Lendo um pino de cada vez ;********************************************************************************************************************************** ;ESTE EXEMPLO LE O BIT RBO (PORTB<0>) BTFSS PORTB,0 ;LE O PINO 7 (RB0) E TESTA SE ESTA SETADO (RB0=1?) GOTO PINO_BAIXO ;RB0=0 (DESVIA PARA PARTE DO PROGRAMA RELACIONADA) GOTO PINO_ALTO ;RB0=1 (DESVIA PARA PARTE DO PROGRAMA RELACIONADA) ;********************************************************************************************************************************** 40 Análise de Sistemas Digitais 9.4.1. Escrita em uma Porta de I/O Quando os pinos de um PORT estão configurados como saída, o nível lógico no respectivo pino d porta deve ser fornecido pelo programa. Isso pode ser feito de uma só vez ou bit a bit, assim como na leitura. Nos exemplos abaixo, supomos que todos os pinos da PORTB (RB7:RB0) e o pino 17 (RA0) estão configurados como saída. i) Escrevendo em todos os pinos de uma só vez ;********************************************************************************************************************************** ;ESTE EXEMPLO ESCREVE NO PORTB O VALOR 0Fh (00001111, EM BINARIO) MOVLW B’00001111’ ;Wß00001111 (VALOR EM BINARIO) MOVWF PORTB ;PORTBßW (OU SEJA, PORTBß00001111) ;********************************************************************************************************************************** ii) Escrevendo em um pino individualmente ;********************************************************************************************************************************** ;ESTE EXEMPLO ESCREVE NO BIT RAO (PORTA<0>, PINO 17) BCF PORTA,0 ;ESCREVE “0” NO BIT RA0 (PORTA<0>, PINO 17) ;********************************************************************************************************************************** 41 Análise de Sistemas Digitais 10. MPLAB IDE – DESENVOLVENDO APLICAÇÕES 10.1. Introdução Um microcontrolador é um circuito capaz de executar várias instruções, que se executadas seguindo uma determinada lógica, o MCU pode ser utilizado na solução de problemas do dia-a-dia. Para que o microcontrolador seja utilizado na solução de problemas, ele precisa ser programado. Para que um programa seja executado, ele deve ser armazenado na memória de programa do microcontrolador. Cada instrução que compõe o programa é representada no sistema binário, ou seja, um conjunto de bits que representa uma determinada tarefa que pode ser executada pelo MCU. Os programas eram escritos em linguagem de máquina, ou seja, as instruções eram representadas pelos seus respectivos códigos binários. Isso fazia do ato de programar uma tarefa muito penosa. Imagine só um programa escrito em linguagem de máquina com 2.000 instruções, cada instrução representada por um conjunto de 14 bits. Com o tempo foi desenvolvido uma linguagem de programação que substituía o código binário de cada instrução por um mnemônico. Surgia a Linguagem Assembly. Na Linguagem Assembly, um programa Editor de Texto é utilizado para editar o programa em Assembly (programa-fonte) e um programa chamado Montador the Assembler é o responsável pela conversão dos mnemônicos em linguagem de máquina ( programa objeto ). Um equipamento chamado programador é utilizado para colocar o programa em linguagem de máquina, na memória de programa do microcontrolador. 42 Análise de Sistemas Digitais Programa.ASM Montador Editor Problema Programa.HEX Programador PIC 16F628A Processo de comunicação entre o homem e o microcontrolador. Homem l Editor = MPLAB IDE ( programa fonte / ASM ). l Montador = Assembler ( programa objeto / HEX ). l Programador = programa em linguagem de máquina: 0 e 1 . 43 Análise de Sistemas Digitais 10.2. Elementos básicos da Linguagem Assembly A Linguagem Assembly é a mais poderosa de todas as linguagens, pois ela propicia o acesso e o controle de todo o hardware. Isso significa que o programador precisa conhecer o hardware para a qual o programa está sendo escrito. Sendo o Assembly uma linguagem de baixo nível, é importante que o programador conheça o hardware para o qual o programa está sendo escrito. A Linguagem Assembly é composta por 5 elementos básicos: • Label É uma string utilizada para representar o início de um bloco de instruções que executa uma tarefa definida dentro do programa. O bloco de instruções é normalmente chamado de sub-rotina. O label deve começar na coluna 1 e pode ter um comprimento máximo de até 32 caracteres, tendo obrigatoriamente que começar com um caracter alfanumérico ou _(underline). É muito comum o uso do label em conjunto com as instruções que provocam desvio no programa, como CALL e GOTO. Neste caso o label substitui o endereço para onde o programa será desviado. • Mnemônico O PIC16F628A possui um conjunto de 35 instruções e sua representação no programa segue uma lógica, definida por sua sintaxe. A sintaxe define a forma correta de escrever uma instrução. O mnemônico é parte da sintaxe de uma instrução e especifica qual tarefa será executada. A parte da instrução que especifica a tarefa que será realizada é chamada de OP CODE (código de operação). É aconselhável que todas as instruções sejam escritas com letras maiúsculas para evitar problemas, visto que alguns editores fazem distinção entre letras maiúsculas e minúsculas. 44 Análise de Sistemas Digitais • Operando Pode ou não fazer parte da sintaxe de uma instrução. O operando pose ser um registrador, uma constante, valor numérico ou uma variável. Quando há mais de um operando na instrução, eles são separados por vírgula. Assim como os OP CODEs, os operandos devem ser escritos com letras maiúsculas. • Comentário É um texto colocado após cada instrução para informar a tarefa que está sendo executada, fazendo com que o programa fique mais legível e fácil de entender. Todo comentário deve ser precedido do ; (ponto-e-vírgula), fazendo com que tudo que esteja escrito a partir do ponto-e-vírgula, até o final da linha seja desprezado pelo montador. O comentário deve ser escrito com letras maiúsculas, sem acento ou Ç (cedilha). • Diretrizes Conhecidas também como pseudo-instruções, são comandos que não fazem parte do set de instruções do microcontrolador, mas são reconhecidos pelo programa montador. As diretrizes não são convertidas diretamente em linguagem de máquina. Elas são usadas para controlar o Assembly. As diretrizes mais utilizadas em programas escritos em Assembly são: #DEFINE, #INCLUDE, ORG, EQU, MACRO, ENDM, CBLOCK, ENDC e END. Ex: END - informa ao montador que o programa chegou ao final. Sintaxe: END ; fim do programa #DEFINE - esta diretiva substitui pela sempre que ele aparecer no programa. String pode ser um texto, uma instrução, uma constante, etc. Sintaxe: #DEFINE LED PORTB,0 45 Análise de Sistemas Digitais 10.3. Exemplo de um programa fonte feito no MPLAB IDE ( Somar dois Bytes ) ;************************************************************** ;TITULO DO PROGRAMA ( SOMA DOIS BYTES ) SOMA_DOIS_BYTES CLRF RESULTADO_AUTO ;ZERA RESULTADO_ALTO MOVF NUM_A,W ;W RECEBE NUM_A ADDWF NUM_B,W ;W RECEBE NUM_B + NUM_A MOVWF RESULTADO_BAIXO ;RESULTADO_BAIXO RECEBE W BTFSC STATUS,C ;HOUVE ESTOURO? GOTO RESULT_9BITS ;SIM, DESVIA RETURN ;NÃO, RETORNA RESULT_9BITS INCF RESULTADO_AUTO,F RETURN ;RESULTADO_ALTO RECEBE 9º BIT DA SOMA ;RETORNA ;******************************************************************* 46 Análise de Sistemas Digitais 10.4. MPLAB IDE Distribuído gratuitamente pela Microchip Tecnology, o MPLAB IDE é utilizado para o desenvolvimento de programas-fonte em Assembly, que após serem convertidos em programa objeto, são gravados no MCU ( PIC ). O MPLAB IDE é um conjunto de softwares que permite, entre outras coisas: • Criar programas em Assembly ; • Efetuar a simulação e o debug do programa ; • Gravar programas no MCU ( PIC 16F628A ). O MPLAB IDE fornece recursos necessários para o desenvolvimento de aplicações em Linguagem Assembly. Os passos para o desenvolvimento de uma aplicação são: 1 - Inicializando o MPLAB IDE ; 2 - Criando programa-fonte ; 3 - Criando projeto ; 4 - Montando projeto ; 5 - Debugando projeto ( ferramenta MPLAB SIM = simula o programa, detectando e concertando erros ) ; 6 - Gravando o programa no MCU ( Kit do PIC 16F628A ). 10.5. Inicializando o MPLAB IDE 7.50 Depois de completada a instalação, dê um duplo-clique no ícone do MPLAB IDE ou selecione Iniciar / Programas / Microchip MPLAB IDE / MPLAB IDE. Aparece a seguinte tela que é o ambiente em que serão montadas as aplicações ( programas ) que serão gravadas no MCU ( PIC 16F628A ): 47 Análise de Sistemas Digitais 48 Análise de Sistemas Digitais 10.6. Criando Programa-Fonte em Assembly Crie um novo arquivo . ASM clicando em File / New. Este arquivo será o programa-fonte do projeto e escrito em Linguagem Assembly. Para evitar problemas, utilize sempre letras maiúsculas e não use acentos, cedilhas ou caracteres especiais nos comentários. 49 Análise de Sistemas Digitais 10.7. Salvando Arquivo-Fonte Para facilitar as coisas, crie uma pasta e salve nela o arquivo-fonte. Mas, quando for criar o projeto, não se esqueça de salvá-lo no mesma pasta para que tudo funcione corretamente evitando problemas futuros. Ao clicar em File / Save as, aparece a seguinte janela: Depois que o programa-fonte estiver salvo, o texto será mostrado em cores que identificam os OP CODEs, os operandos e os comentários, facilitando a visualização do código-fonte. 50 Análise de Sistemas Digitais 10.8. Criando Projeto Criado o programa .ASM, denominado de programa fonte, é preciso criar um projeto e associar o programa-fonte a ele. A ferramenta é o Project Wizard. Clique em Project / Project Wizard , aparece a seguinte janela: Clique no botão Avançar para continuar o processo de criação de um projeto. 51 Análise de Sistemas Digitais Na janela exibida, escolha o modelo de microcontrolador que você usará no seu projeto. Abrindo a lista, você verá todos os modelos de microcontroladores suportados pela versão do MPLAB IDE. Em nosso caso, o MCU é o PIC 16F628A. Clique no botão Avançar para prosseguir. 52 Análise de Sistemas Digitais Nesta tela, na caixa Active Toolsuite, selecione a ferramenta “Microchip MPLAB Toolsuite”. Na caixa Toolsuite Contents, selecione a opção “MPLAB Assembler (mpaswin.exe)”. Na opção Location, deve aparecer o caminho completo no qual se encontra o arquivo mpaswin.exe. Clique no botão avançar para prosseguir. 53 Análise de Sistemas Digitais Nesta tela, na caixa Project Name, digite o nome do projeto ( Teste do PIC ) e escolha o diretório ( pasta ) em que ele será salvo. Não se esqueça de que o projeto deve ser gravado no mesmo diretório em que foi salvo o arquivo .ASM, criado anteriormente. O projeto é salvo com a extensão .MCP. Clique no botão avançar para prosseguir. 54 Análise de Sistemas Digitais Nesta tela, você pode adicionar ao projeto um arquivo .ASM, bastando para isto, selecionar o arquivo na janela da esquerda e clicar no botão Add. O arquivo aparece na janela da direita. Clique no botão avançar para prosseguir. 55 Análise de Sistemas Digitais A janela apresentada é a última exibida no processo de criação de um projeto utilizando o Project Winzard. Nela são mostrados os parâmetros do projeto. Verifique se o projeto está configurado corretamente e clique no botão Concluir ( Finish ) para concluir a operação. A janela da área de trabalho do projeto aparece conforme a tela à direita. 56 Análise de Sistemas Digitais 10.9. Montando o Projeto Com o programa-fonte em Assembly pronto e o projeto criado, podemos montar o projeto, ou seja, gerar o programa objeto a partir do programa-fonte. O programa objeto é um arquivo com extensão .HEX que contém o programa que será gravado no MCU (PIC). Para montar um projeto, selecione Project / Build All. Se o projeto for montado corretamente, Aparece a janela abaixo com o texto BUILD SUCCEEDED seguido da data / hora. Se aparecer a mensagem BUILD FAILED é porque ocorreu algum problema e o projeto não foi montado. Resolva os problemas e monte-o novamente. Problemas que podem surgir: erro de sintaxe no programa, erro de configuração ( modelo do microcontrolador ), entre outros. 57 Análise de Sistemas Digitais 10.10. Adicionando Arquivo-Fonte ao Projeto Se você não adicionar ao projeto um arquivo .ASM durante a criação, a área de trabalho do projeto aparece conforme a tela à esquerda abaixo: Ao clicar com o botão direito do mouse na pasta Source Files, aparece um menu suspenso com a opção Add Files. Clique nesta opção e selecione o arquivo que será adicionado ao projeto. Pode-se também adicionar arquivo .ASM com o menu Project / Add Files to Project. A tela à direita abaixo mostra o arquivo dentro da pasta Source Files. 10.11. Removendo Arquivo-Fonte do Projeto Para remover um arquivo-fonte do projeto, clique com o botão direito do mouse no arquivo.ASM e selecione a opção Remove ou clique no menu Project / Remove File From Project. Dando dois cliques no arquivo-fonte (ASM) dentro da pasta Source Files, o arquivo é aberto. 58 Análise de Sistemas Digitais 11. CRIANDO PROGRAMA EM ASSEMBLY O MPLAB IDE apresentou um modelo de estruturação para o desenvolvimento de programas em Linguagem Assembly. Os passos para a construção do programa, de acordo com a estruturação proposta, são : 1º passo – Título, nome do projetista, data de conclusão e versão do programa ; 2º passo – Arquivos include ; 3º passo – Paginação de memória ; 4º passo – Criar variáveis ; 5º passo – Identificar flags utilizados no sistema ; 6º passo – Criar constantes ; 7º passo – Identificar os pinos que são usados como entrada e como saída ; 8º passo – Vetor reset ; 9º passo – Vetor de interrupção e rotinas de interrupção ; 10º passo – Configuração dos registradores com finalidades específicas ; 11º passo – Inicialização das variáveis ; 12º passo – Rotina principal ; 13º passo – Sub-rotinas. 59 Análise de Sistemas Digitais 11.1. 1º Passo: Título, nome do projetista, data de conclusão e versão do programa Primeiramente devemos identificar o programa com dados sobre o título, nome do projetista, versão do programa e data de conclusão. Essas informações são fundamentais para o programador, para futuras alterações no programa. Todas essas informações são comentários e devem ser precedidas de ponto-e-vírgula, sem acentos ou cedilhas. Exemplo: ;****************************************************************************************** ; NOME DO PROGRAMA ; DESENVOLVIDO POR FULANO DE TAL ; VERSAO 1.0 ; DATA 03/09/2007 ;****************************************************************************************** 11.2. 2º Passo: Arquivo Include Cada microcontrolador da família PIC tem um arquivo de texto chamado arquivo de definições, no qual são definidos os nomes e os endereços de todos os SFRs, além de uma série de outras definições necessárias para a sua utilização, facilitando, deste modo, a montagem do programa-fonte. Este arquivo tem a extensão .INC e deve estar na mesma pasta do arquivo-fonte e também, localizado, de preferência, no mesmo diretório de instalação do MPLAB IDE. Quando o MPLAB IDE é instalado, os arquivos de definição de todos os modelos de MCU da família PIC são copiados para o diretório de instalação. Exemplo: ;****************************************************************************************** #INCLUDE ;ARQUIVO PADRAO MICROCHIP PARA O PIC16F628A ;****************************************************************************************** 60 Análise de Sistemas Digitais 11.3. 3º Passo: Paginação de memória Vamos usar aqui a diretiva #DEFINE para criar um atalho de acesso aos bancos 0 e 1 de memória RAM do PIC16F628A, para acesso direto à memória. Exemplo: ;******************************************************************************************* ; #DEFINE BANK0 BCF STATUS,RP0 ;SETA BANCO O DE MEMORIA #DEFINE BANK1 BSF STATUS,RP0 ;SETA BANCO 1 DE MEMORIA ; ;******************************************************************************************* Toda vez que aparecer no programa o nome BANK0, a instrução BCF STATUS,RP0 será executada, fazendo o chaveamento para o banco 0 de memória. O mesmo serve para a string BANK1, que faz o chaveamento para o banco 1. O que a diretiva #DEFINE está fazendo, neste caso, é associar uma instrução a uma string. 61 Análise de Sistemas Digitais O código anterior só pode ser empregado nos bancos de memória 0 e 1. Para ter acesso aos quatro bancos de memória do PIC16F628A, é aconselhável o uso das diretrizes MACRO e ENDM, usadas para que um bloco de instruções seja executado quando a string associada a essas diretivas for encontrada no programa-fonte. O código seguinte mostra como ativar um dos bancos de memória por meio de MACROS, quando o acesso à memória for feito pelo endereçamento direto. Quando o label que precede o termo MACRO for encontrado ao longo do programa, o bloco de instruções entre as diretivas MACRO e ENDM será executado. ;******************************************************************************************* ; PAGINACAO DA MEMORIA ;******************************************************************************************* ; ;COMANDOS PARA ALTERACAO DE PAGINA DE MEMORIA PARA ENDERECAMENTO DIRETO BANK0 MACRO BANK1 ENDM MACRO BANK2 ENDM MACRO BANK3 ENDM MACRO BCF BCF STATUS,RP0 STATUS,RP1 BSF BCF STATUS,RP0 STATUS,RP1 BCF BSF STATUS,RP0 STATUS,RP1 BSF BSF STATUS,RP0 STATUS,RP1 ;MACRO PARA SELECIONAR BANCO 0 ;FIM DA MACRO BANK0 ;MACRO PARA SELECIONAR BANCO 1 ;FIM DA MACRO BANK1 ;MACRO PARA SELECIONAR BANCO 2 ;FIM DA MACRO BANK2 ;MACRO PARA SELECIONAR BANCO 3 ENDM ;FIM DA MACRO BANK3 ; ;******************************************************************************************* 62 Análise de Sistemas Digitais 11.4. 4º Passo: Criar Variáveis Os dados manipulados pelo programa são armazenados em localidades de memória RAM. Para facilitar, os endereços de tais localidades de memória são associados, cada um, a uma string, denominadas VARIÁVEIS. As diretrizes mais usadas para este fim são CBLOCK, ENDC e EQU. A seguir vemos um bloco de variáveis criado por meio da diretiva CBLOCK, a partir do endereço 0x20, onde o registrador W_TEMP ocupa o endereço 0x20, 0 registrador STATUS_TEMP o endereço 0x21 e assim sucessivamente. O bloco de variáveis criado com essa diretiva termina sempre com a diretiva ENDC. Exemplo: ;****************************************************************************************** CBLOCK 0X20 ;ENDERECO INICIAL DA MEMORIA DO USUARIO W_TEMP ;REGs TEMPORARIOS STATUS_TEMP CONTADOR FILTRO1 FLAGS TEMP1 ENDC ;FIM DO BLOCO DE MEMORIA ;****************************************************************************************** Uma outra maneira de criar variáveis na memória RAM é utilizando a diretiva EQU. A sintaxe utilizada é a seguinte: ;****************************************************************************************** W_TEMP EQU 0X20 STATUS_TEMP EQU 0X21 CONTADOR EQU 0X22 FILTRO1 EQU 0X23 FILTRO2 EQU 0X24 FLAGS EQU 0X25 TEMP1 EQU 0X26 ;****************************************************************************************** Neste caso, a diretiva EQU associa um endereço de memória RAM a uma string. Pode-se ver qual localidade de memória a variável criada está ocupando. 63 Análise de Sistemas Digitais 11.5. 5º Passo: Identificar flags utilizados no sistema O Flag é um bit usado para a sinalização de um evento. A utilização de flags para sinalizar eventos durante a execução do programa pode ser uma ferramenta poderosa, principalmente em aplicações em que é grande a quantidade de eventos ocorrendo a cada instante. A seguir vemos os bits 1 e 0 do registrador FLAGS representado, respectivamente, os status do botão e do LED. Os demais bits ficam reservados para futuras sinalizações. Exemplo: ;****************************************************************************************** ; REGISTRADOR FLAGS ; BIT # |7 |6 |5 |4 |3 |2 |1 |0 | ; |X|X|X |X |X |X|X|Y | STATUS DO BOTÃO → 1=SOLTO; 0=PRESSIONADO ; |X|X|X |X|X|X|Y|X | STATUS DO LED → 1=ACESO; 0=APAGADO ; |X|X |X |X |X |Y|X|X | RESERVADO ; |X|X |X |X |Y|X|X|X | RESERVADO ; |X|X |X |Y|X |X|X|X | RESERVADO ; |X|X |Y |X |X |X|X|X | RESERVADO ; |X|Y|X |X |X |X|X|X | RESERVADO ; |Y|X |X |X |X |X|X|X | RESERVADO ; ; ;X=DEFINIDO EM OUTRO LUGAR DA TABELA ;Y=DEFINIDO COMO MOSTRADO (0/1) ; ; ;****************************************************************************************** 64 Análise de Sistemas Digitais 11.6. 6º Passo: Criar constantes Uma constante é um valor numérico que pode ser associado a uma string por meio da diretiva EQU, assim como foi feito com as variáveis. Um valor numérico pode ser representado de várias formas dentro do MPLAB: Decimal Hexadecimal Octal Binário ASCII - D'xx' ou .xx H'xx' ou 0Xxx O'xx' B'xxxxxxxx' A'x' ou 'x' onde x = valor Associar um valor numérico a uma string pode ser interessante quando o valor aparece várias vezes no programa. Neste caso, se for preciso fazer alguma alteração no valor, basta alterá-lo uma única vez na linha em que a constante foi criada. Exemplo: ;***************************************************************************************** ; MIN EQU .0 ;VALOR MINIMO MAX EQU .10 ;VALOR MAXIMO T_FILTRO EQU .250 ;FILTRO PARA O BOTÃO ; ;****************************************************************************************** 65 Análise de Sistemas Digitais 11.7. 7º Passo: Identificar os pinos que são usados como entrada e como saída É muito importante registrar no programa-fonte a função dos pinos que serão usados como entrada e como saída. No exemplo a seguir, a diretiva #DEFINE associa o pino do PORTA onde está ligado o botão 1 à string BOTAO1. O mesmo raciocínio vale para o botão 2 e para o LED. Isso mostra a relação entre o software e o hardware. O exemplo seguinte mostra dois pinos do PORTA utilizados como entrada (RA1 e RA2) e um pino do PORTB utilizado como entrada (RA1 e RA2) e um pino do PORTB utilizado como saída (RB0). Exemplo: ;****************************************************************************************** ; ENTRADAS ;****************************************************************************************** ; ;PINOS QUE SERAO UTILIZADOS COMO ENTRADA ; #DEFINE BOTAO1 PORTA,1 ;0à PRESSIONADO ;1à LIBERADO #DEFINE BOTAO2 PORTA,2 ;0à PRESSIONADO ;1à LIBERADO ; ;****************************************************************************************** ; SAIDAS ******************************************************************************************* ;PINOS QUE SERAO UTILIZADOS COMO SAIDA ; #DEFINE LED1 PORTB,0 ;0 à APAGADO ;1 à ACESO ; ;****************************************************************************************** 66 Análise de Sistemas Digitais 11.8. 8º Passo: Vetor Reset O vetor de reset do PIC16F628A é o endereço 0x00. è aqui que começa o programa. A diretiva ORG 0x00 informa ao programa montador ( o MSPASM ) que a instrução GOTO INICIO deve ser gravada na localidade 0x00 da memória de programa, como mostrado a seguir. Isso é o que chamamos de ponteiro, o que faz com que ocorra um desvio no programa para o label INICIO, no qual realmente começa o programa. Exemplo: ;****************************************************************************************** ; ORG 0x00 ;ENDERECO INICIAL DE PROCESSAMENTO GOTO INICIO ;DESVIA PARA INICIO ; ;****************************************************************************************** 11.9. 9º Passo: Vetor de Interrupção e Rotinas de Interrupção O PIC16F628A é capaz de tratar vários tipos de interrupção. Interrupção é um evento de hardware que, quando ocorre, provoca um desvio no programa para o endereço 0x04, no qual a interrupção será tratada se ela estiver habilitada. Ao encontrar a instrução RETIFIE, o programa volta ao ponto em que ocorreu o desvio. Exemplo: ;****************************************************************************************** ORG 0x04 ;ENDERECO INICIAL DA INTERRUPCAO RETIFIE ;RETORNA DA INTERRUPCAO ;****************************************************************************************** 67 Análise de Sistemas Digitais 11.10. 10º Passo: Configuração dos registradores com finalidades específicas O programa começa realmente nesse ponto. Aqui é feita a configuração dos SFRs utilizados pelo programa. Vemos a seguir um exemplo de configuração de alguns SFRs: Exemplo: ;****************************************************************************************** INICIO BANK1 ;ALTERA PARA BANK 1 MOVLW B’00000110’ MOVWF TRISA ;DEFINE RA1 e RA2 COMO ENTRADA E DEMAIS COMO SAIDA MOVLW B’00000000’ MOVWF TRISB ;DEFINE O PORTB COMO SAIDA MOVLW B’10000000’ MOVWF OPTION_REG ;PULL_UPS DESABILITADOS <7> ;DEMAIS BITS IRRELEVANTES MOVLW B’00000000’ ;DESLIGADA CHAVE GERAL DE IN TERRUPCAO <7> MOVWF INTCON ;DEMAIS BITS IRRELEVANTES BANK0 MOVLW B’00000111’ ;CONFIGURA RA3:RA0 COMO I/O <2:0> MOVWF CMCON ;****************************************************************************************** 68 Análise de Sistemas Digitais 11.11. 11º Passo: Inicialização das Variávies Inicializar as variáveis com os valores corretos evita que o programa se comporte de maneira diferente da desejada. Não se esqueça jamais de inicializar as variáveis em seus programas. Exemplo: ;****************************************************************************************** CLRF PORTA ;LIMPA PORTA CLRF PORTB ;LIMPA PORTB MOVLW .250 MOVWF TEMP5 ;INICIALIZA TEMP5 COM 250 MOVLW .256-125 ;W RECEBE 131 (256-125) MOVWF TMR0 ;INICIALIZA TMR0 COM 131 ;****************************************************************************************** 11.12. 12º Passo: Rotina Principal Inicializadas as variáveis do programa, você pode mostrar a sua rotina principal. 11.13. 13º Passo: Sub-rotinas Uma sub-rotina é um conjunto de instruções que executa uma tarefa específica dentro do programa. Uma sub-rotina bem elaborada pode ser aproveitada por outros programas. 69 Análise de Sistemas Digitais 11.14. Fluxograma O fluxograma é uma arma poderosa que pode auxiliar o programador na modelagem do programa. Ele mostra como o programa está estruturado, facilitando a montagem das sub-rotinas. As convenções utilizadas no fluxograma são: O fluxograma abaixo informa: enquanto o botão estiver pressionado, o LED ficará aceso; enquanto o botão estiver solto, o Início e Fim LED ficará apagado. Com o fluxograma pronto basta convertê-lo na Linguagem Assembly, substituindo cada bloco por uma ou mais instruções, ou até mesmo por sub-rotina . Sub-rotina Início Testa botão Decisão Acesso a um dispositivo de I/O Apaga LED Não Botão Press ? Sim Acende LED 70 Análise de Sistemas Digitais 12. COMO SIMULAR E DEBUGAR UMA APLICAÇÃO 12.1. Introdução Se o programa foi editado e montado corretamente, é preciso debugá-lo para se certificar de que esteja funcionando . Um programa editado e montado sem erros não garante isso, pois além dos erros de sintaxe, também podem existir erros de lógica, que são muito mais difíceis de encontrar, porque o montador não os detecta. O MPLAB IDE possui uma ferramenta chamada MPLAB SIM, que permite simular o programa, detectando e consertando erros, além de possibilitar aperfeiçoar o código-fonte, eliminar redundâncias, aprimorar a lógica implementada, testar a melhor sub-rotina para resolver um determinado problema por meio da programação, etc. Na simulação, o programa será executado dentro do MPLAB IDE como se estivesse sendo executado dentro do MCU ( PIC16F628A ). Infelizmente a simulação não permite testar todos os recursos do PIC16F628A, mas nem por isso o MPLAB SIM deixa de ser uma poderosa ferramenta no desenvolvimento de uma aplicação. Clicando no menu Help / Topics / MPLAB SIM / Limitations, você encontra informações sobre todas as limitações do simulador do MPLAB IDE. 71 Análise de Sistemas Digitais 12.2. Preparar o Sistema para a Simulação Antes de começar a simulação de uma aplicação, é preciso verificar se o MCU foi configurado corretamente, o que pode ser feito no menu Configure / Select Device. Também temos de informar ao simulador as opções dos bits de configuração e a frequência de clock para a qual o programa foi escrito. Antes de ativar o MPLAB SIM, deve-se abrir o projeto feito, caso este não esteja aberto. Basta clicar no menu “Project / Open / Nome do arquivo.mcp” e clicar em “Abrir”. Na pasta Source Files deve estar o Arquivo.asm criado no MPLAB. Dê 2 cliques neste arquivo para abri-lo. O MPLAB SIM é ativado quando clicamos no menu Debbugger / Select Tool / MPLAB SIM. Feito isso, na barra de tarefas aparecem ativados os botões mostrados abaixo: As opções da barra de tarefas do MPLAB SIM da esquerda para a direita são: Run = executa o programa ( F9) ; Halt = pára a execução do programa ( F5 ) ; Animate = executa o programa no modo animação e mostra a linha que o programa está executando no momento ; Step Into = executa o programa passo a passo, ou seja, uma instrução de cada vez ( F7 ) ; Step Over = executa de uma só vez todas as instruções da sub-rotina chamada pela instrução CALL ( F8 ) ; Step Out = sai da sub-rotina e retorna ao ponto em que ela foi chamada ; Reset = ( F6 ). 72 Análise de Sistemas Digitais 73 Análise de Sistemas Digitais Como nem todos os periféricos do PIC16F628A podem ser simulados, pode ser necessário um Como nem todos os periféricos do PIC16F628A podem ser simulados, pode ser necessário hardware para testar todos os recursos de uma determinada aplicação.aplicação. um hardware para testar todos os recursos de uma determinada A sua principal vantagem é justamente permitir executar dede dentro dodo MPLAB IDEIDE e principal vantagem é justamente permitir executaro oprograma programa dentro MPLAB e eliminar os defeitos sem precisar gravar aquele no MCU. eliminar os defeitos sem precisar gravar aquele no MCU. O simulador não descarta o uso de um hardware de teste, mas nos poupa tempo, visto que a gravação do programa no chip pode ser efetuada depois de o programa ter sido montado, simulado e os defeitos corrigidos. 12.3. Breakpoint – Pára a Execução em um Ponto do Programa Esse recurso é útil quando nós desejamos testar apenas uma parte do programa. O Breakpoint pode ser inserido em uma ou em mais linhas do código. Seu funcionamento é simples, o código será executado até o ponto em que for encontrado o breakpoint. Para inserir o breakpoint numa determinada linha do programa, clique com o botão direito do mouse na linha, isso fará com que apareça um menu suspenso, bastando selecionar o item Set Breakpoint. Quando o breakpoint está ativado, aparece no canto esquerdo da linha um círculo vermelho com a letra B no centro. Uma vez nem ativado, o os breakpoint pode ser removidopodem ou desabilitado, bastando clicar com o botão Como todos periféricos do PIC16F628A ser simulados, pode ser necessário um hardware para testar todos os recursos de uma determinada aplicação. direito do mouse na linha e escolher a opção desejada. Quando o Breakpoint está desabilitado, o círculo vermelhoA com a letra Bvantagem no centro ééjustamente substituídopermitir por umexecutar círculo vermelho vazio. Isso serve sua principal o programa de dentro do para lembrar MPLAB IDE eum eliminar os defeitos sem precisar gravar ao usuário que existe breakpoint desabilitado naquele ponto.aquele no MCU. 74 Análise de Sistemas Digitais Clicando no menu Debbuger / Breakpoints ( tecla F2 ), aparece a janela seguinte, na qual podem ser vistos todos os breakpoints inseridos no código, podendo cada um ser habilitado, desabilitado ou removido. 75 Análise de Sistemas Digitais 12.4. Run to Cursor ( Executar até Aqui ) Esse comando é acessado quando clicamos com o botão direito do mouse na linha em que ele será executado. 12.5. Set PC at Cursor Da mesma forma que os comandos Brealpoint e Run To Cursor, esse comando é acessado quando clicamos com o botão direito do mouse na linha em que ele será executado, bastando clicar no item Set PC at Cursor. Nenhuma instrução será executada; o comandoapenas fará com que o PC ( Contador de programa ) seja alterado para o endereço da memória de programa em que se encontra a instrução contida na linha, ou seja, o PC aponta para a linha na qual o comando foi executado. 76 Análise de Sistemas Digitais 12.6. Stopwatch O Stopwatch é um relógio que mantém o controle do tempo de execução do programa, em função da frequência de clock configurada para a aplicação que está sendo simulada. Para acessar o Stopwatch, clique no menu Debugger / Stopwatch que aparecerá a janela mostrada abaixo. Nós podemos medir também o tempo de execução e a quantidade de ciclos de instrução gastos na execução de uma determinada sub-rotina, como, por exemplo, em uma sub-rotina de delay ( contagem de tempo ). Para fazer isso, execute o programa até o ponto a partir do qual se deseja medir o tempo e pressione o botão Zero. Seguindo a execução do programa, nós podemos contar o tempo e o número de ciclos de instrução a partir daquele ponto até o final da sub-rotina. Essa contagem pode ser vista na coluna Stopwatch. Pressionando o botão Synch, nós sincronizamos novamente a coluna Stopwatch com a coluna Total Simulated. Se o item Clear Simulation Time On Reset for selecionado, os contadores do Stopwatch serão zerados, sempre que ocorrer um reset. 77 Análise de Sistemas Digitais 12.7. Clear Memory ( Apagar Memória ) O MPLAB SIM possui um comando que permite apagar os conteúdos da memória de programa, dos registradores de uso geral (GPRs), dos bits de configuração, da EEPROM e dos registradores com finalidades específicas (SRFs). Para acessar esse comando, clique no menu Debugger/Clear Memory e selecione o item que você deseja apagar. Dificilmente você precisará utilizar esse comando numa simulação, mas, se for preciso usá-lo, tome cuidado com os efitos colaterais que ele pode causar no restante do programa. Efeito colateral é um problema que pode aparecer em algum outro ponto do programa, devido ao fato de uma dessas memórias ter sido apagada. 12.8. Arquivo de Listagem Quando um programa é montado corretamente pelo MPLAB IDE, vários arquivos são criados juntamente com o arquivo objeto .HEX. Dentre eles podemos destacar o arquivo .LST, comumente chamado de arquivo de listagem. Além do código-fonte, ele traz algumas informações importantes, como o endereço de cada localidade de memória de programa ocupada e seus respectivos conteúdos, mapa da memória de programa ocupada e livre, relatório com a quantidade de erros, avisos e mensagens geradas na hora da montagem, etc. O arquivo .LST ajuda o programador a debugar o programa, sendo aconselhável sempre dar uma olhada nele após a montagem do código-fonte. Para abrir o arquivo .LST de um programa .ASM, clique no menu File / Open e, no item Arquivos do tipo: , selecione a opção List Files (.Lst). O arquivo de listagem tem o mesmo nome do arquivo .ASM, só que tem extensão .LST. 78 Análise de Sistemas Digitais 12.9. Visualizar e Alterar o Conteúdo da Memória Outra ferramenta extremamente útil ao programador na hora de debugar uma aplicação é a possibilidade de visualizar as memórias de programa, memória RAM, EEPROM, assim como alterar seus conteúdos durante a execução do programa pelo MPLAB SIM. 12.9.1. Memória RAM ( GRPs e SFRs ) Clicando no menu View / File Registers, aparece a janela abaixo, na qual são exibidos todos os endereços da memória RAM e seus respectivos conteúdos. Cada linha possui 16 endereços, não sendo feita distinção entre os registradores de uso geral (GRFs) e os registradores com finalidades específicas (SFRs). Durante a execução do programa pelo MPLAB SIM, se dermos um duplo-clique em qualquer endereço, poderemos alterar o seu conteúdo. Este é um recurso poderoso e deve ser usado sempre que for necessário. Não se esqueça, porém, de que alguns bits de alguns registradores estão disponíveis apenas para leitura, não tendo o programador acesso a eles para escrita. 79 Análise de Sistemas Digitais 12.9.2. Memória de Programa Para visualizar a memória de programa, é preciso clicar no menu View / Program Memory. A figura abaixo mostra parte do código-fonte de um programa. Observe que são mostrados a linha do programa em que a instrução está localizada, o endereço da memória de programa, o código em hexadecimal correspondente à instrução e, finalmente, a sintaxe da instrução. Clicando na barra de rolagem para cima e para baixo, nós podemos visualizar todo o código-fonte. 80 Análise de Sistemas Digitais 12.9.3. Memória EEPROM A memória EEPROM pode ser visualizada quando clicamos no menu View / EEPROM, como na figura abaixo. Cada linha possui 16 endereços e são mostrados os seus respectivos conteúdos. Dando um duplo-clique com o mouse em um endereço específico, você pode alterar o seu conteúdo. 12.9.4. Registradores com Finalidades Específicas ( SFRs ) Estes são, sem dúvida, os registradores mais visualizados durante a simulação de uma aplicação. Os SFRs são visualizados quando clicamos no menu View / Special Funstion Registers. Na janela exibida na figura abaixo, podem ser visualizados todos os registradores com finalidades específicas e seus respectivos conteúdos, podendo ser alterados caso haja necessidade. Observe que os conteúdos são exibidos no sitema hexadecimal, decimal e binário. 81 Análise de Sistemas Digitais 12.10. Watch Esse comando permite selecionar um SFR ou um GPR para visualização, evitando que tenhamos de abrir várias janelas para visualizar os registradores desejados. Para ter acesso ao comando Watch, clique no menu View / Watch. O botão Add SFR permite adicionar um SFR e o botão Add Symbol permite adicionar um símbolo que foi declarado no programa, como constantes, variáveis, bits de sinalização, etc. Observe na parte inferior da janela Watch abaixo que ela é composta por quatro páginas, às quais podem ser adicionados SFRs e GPRs diferentes, facilitando ainda mais a visualização. 82 Análise de Sistemas Digitais 12.11. Hardware Stack Já vimos que o PIC16F628A possui uma pilha que permite efetuar até oito chamadas a sub-rotinas aninhadas ( chamar uma sub-rotina de dentro de outra sub-rotina ). Quando uma sub-rotina é chamada por meio da instrução CALL, o programa é desviado para o endereço contido no operando da instrução e o endereço de retorno é armazenado na pilha. Quando a instrução RETURN ou a instrução RETLW é encontrada, o endereço de retorno é retirado da pilha e o programa volta ao ponto em que houve uma chamada à sub-rotina. O comando Hardware Stack permite visualizar até que nível da pilha está sendo utilizado no momento. Esse comando é acessado quando clicamos no menu View / Hardware Stack. A janela exibida mostra os vários níveis da pilha, assim como os respectivos endereços de retorno. É importante termos uma noção exata sobre o nível utilizado da pilha porque, se forem ultrapassados os oito níveis, o primeiro endereço será sobrescrito, perdendo-se o endereço de retorno à primeira chamada à subrotina. Isso provoca um erro grave no programa, portanto não se esqueça. 83 Análise de Sistemas Digitais 12.12. Disassembly Listing Esse comando mostra informações parecidas com aquelas exibidas pelo arquivo de listagem (.LST). Podemos dizer que é um arquivo de listagem simplificado, visto que nem todas as informações mostradas em um arquivo de listagem são exibidas por ele. De qualquer forma, é interessante executá-lo e verificar tanto o seu conteúdo quanto as diferenças em relação ao arquivo de listagem. Esse comando é acessado quando clicamos no menu View / Disassembly Listing. 84 Análise de Sistemas Digitais 13. TÉCNICAS DE PROGRAMAÇÃO Nesta unidade serão apresentadas algumas técnicas utilizadas na programação em Assembly. Serão desenvolvidos alguns programas, com o objetivo de criar uma biblioteca de sub-rotinas, que poderão ser utilizadas como partes de outros programas a serem implementados em outras ocasiões. 13.1. Inicialização de Variáveis Uma variável é uma localidade da memória RAM (memória de dados), com capacidade de armazenamento de 8 bits, que é reservada pelo para armazenamento de dados temporários. A definição da localidade da memória de dados que será ocupada por uma determinada variável pode ser feita utilizando a diretiva “EQU” ou a combinação das diretivas “CBLOCK” e “ENDC”. É necessário inicializar as variáveis criadas antes de serem manipuladas pelo programa, para que não ocorram problemas devido a valores incorretos armazenados em tais variáveis (qual o valor armazenado em uma determinada localidade da memória de dados quando o MCU é ligado?). Em outras palavras é necessário atribuir um valor conhecido para cada variável criada no programa, o que pode ser feito da seguinte forma: ;***************************************************************************************** MOVLW H’2A’ ;W=2Ah MOVWF VARIAVEL ;VARIAVEL=2Ah ;***************************************************************************************** Caso seja desejado inicializar uma determinada variável com o valor “00h”, pode-se utilizar a instrução “CLRF”: ;***************************************************************************************** CLRF VARIAVEL ;VARIAVEL=00h 85 ;***************************************************************************************** Análise de Sistemas Digitais 13.2. Desvio no Programa As instruções contidas em um programa são executadas, normalmente, na seqüência em que são listadas no MPLAB (que é a mesma seqüência que são gravadas na memória de programa). Entretanto, a seqüência da execução do programa pode ser alterada quando uma instrução de desvio ou de chamada é utilizada (ou ainda quando ocorre um reset ou uma interrupção). Existem, basicamente, dois tipos de desvio no programa: • DESVIO INCONDICIONAL: provocado pelas instruções GOTO e CALL; • DESVIO CONDICIONAL: provocado pelas instruções BTFSC, BTFSS, INCFSZ e DEFSZ. 13.2.1. GOTO Desvia o programa para o endereço (ou label) especificado no operando da instrução. ð Desviando o programa para um endereço específico da memória de programa. ;************************************************************************************************************************************ GOTO 0X22 ;DESVIA O PROGRAMA PARA O END. 22H DA MEM. DE PROGRAMA. ;************************************************************************************************************************************ ð Desviando o programa para uma sub-rotina. ;***************************************************************************************************************************** GOTO LOOP ;DESVIA O PROGRAMA PARA A SUB-ROTINA “LOOP” ;***************************************************************************************************************************** ð Desviando o programa algumas linhas para baixo ou para cima. ;***************************************************************************************************************************** GOTO $+2 ;SALTA 2 LINHAS DE CODIGO PARA BAIXO GOTO $-3 ;SALTA 2 LINHAS DE CODIGO PARA CIMA ;***************************************************************************************************************************** 86 Análise de Sistemas Digitais MEMÓRIA DE PROGRAMA 87 Análise de Sistemas Digitais 13.2.2. CALL (chamada a sub-rotina) MEMÓRIA DE PROGRAMA Desvia o programa para o label especificado no operando da instrução e retorna ao ponto que foi feita a chamada a subrotina quando for encontrada a instrução RETURN (ou a instrução RETLW). ;************************************************************************ CALL LOOP ;DESVIA O PROGRAMA ;PARA A SUB-ROTINA “LOOP” ;************************************************************************ ;************************************************************************ LOOP INSTRUCAO N INSTRUCAO N+1 INSTRUCAO N+2 RETURN ;RETORNA DA SUB-ROTINA ;************************************************************************ Caso seja desejado retornar da sub-rotina com um certo valor armazenado no registrador W, pode-se utilizar a instrução RETLW: ;********************************************************************************** RETLW .25 ;RETORNA DA SUB-ROTINA COM W=25 ;********************************************************************************** 88 Análise de Sistemas Digitais 13.2.3. BTFSC e BTFSS (desvio condicional) Provocam um desvio que pode ou não ocorrer. Uma determinada condição deve ser satisfeita para que ocorra o desvio no programa. Instrução BTFSS ;***************************************************************************** BTFSS REGISTRADOR,BIT ;BIT=1? SE SIM, PULA A ;PROXIMA LINHA GOTO ACAO_NAO ;BIT=0 => VAI PARA A ;SUB-ROTINA “ACAO_NAO” GOTO ACAO_SIM ;BIT=1 => VAI PARA A SUB;ROTINA “ACAO_SIM” ;******************************************************************************** Uma estrutura de desvio condicional baseada na instrução BTFSC pode ser facilmente criada por analogia à estrutura acima. 89 Análise de Sistemas Digitais 13.2.4. INCFSZ e DECFSZ (desvio condicional) Provocam um desvio que pode ou não ocorrer. Uma determinada condição deve ser satisfeita para que ocorra o desvio no programa. Instrução DECFSZ ;****************************************************************************************************** CONTADOR MOVLW .10 ;W=10 MOVWF CONT ;CONT=W=10 DECFSZ CONT,1 ;CONT=CONT-1 E VERIFICA: CONT=0? GOTO LOOP ;NAO => VOLTA PARA “LOOP” GOTO FIM_CONT ;SIM (CONT=0) => VAI PARA SUB-ROTINA ;ASSOCIADA AO FINAL DA CONTAGEM LOOP ;****************************************************************************************************** Uma estrutura de desvio condicional baseada na instrução INCFSZ pode ser criada por analogia à estrutura acima. 90 Análise de Sistemas Digitais LED acionado por botão Faça um programa que acenda um LED, conectado ao pino 6 (RB0) do PIC 16F628A, sempre que um botão (do tipo push-button), conectado ao pino 18 (RA1) estiver pressionado (nível lógico baixo). 91 Análise de Sistemas Digitais Fluxograma Assembly (Rotina Principal – MAIN) ;**************************************************************************************************** ; ROTINA PRINCIPAL ;****************************************************************************************************************** MAIN BTFSC GOTO GOTO BOTAO APAGA_LED ACENDE_LED ;O BOTÃO ESTÁ PRESSIONADO? ;NÃO, ENTÃO VAI PARA APAGA_LED ;SIM, ENTÃO VAI PARA ACENDE_LED BCF GOTO LED MAIN ;APAGA O LED ;RETORNA AO LOOP PRINCIPAL ACENDE_LED BSF GOTO LED MAIN ;ACENDE O LED ;RETORNA AO LOOP PRINCIPAL APAGA_LED ;***************************************************************************************************************** É necessário, antes da rotina principal, fazer a inicialização do sistema e definir as variáveis utilizadas (no caso, não existem “variáveis”, mas sim “atalhos” para acessar os pinos do MCU, por meio dos 92 strings “BOTAO” e “LED”). Análise de Sistemas Digitais ;********************************************************************************************************** ; ENTRADAS ;********************************************************************************************************** ; DEFINIÇÃO DE TODOS OS PINOS QUE SERÃO UTILIZADOS COMO ENTRADA ; RECOMENDA-SE TAMBÉM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1) #DEFINE BOTAO PORTA,1 ; BOTAO CONECTADO NA PORTA<1> ; 0 -> PRESSIONADO ; 1 -> LIBERADO ;********************************************************************************************************** ; SAIDAS ;********************************************************************************************************** ; DEFINIÇÃO DE TODOS OS PINOS QUE SERÃO UTILIZADOS COMO SAÍDA ; RECOMENDA-SE TAMBÉM COMENTAR O SIGNIFICADO DE SEUS ESTADOS (0 E 1) #DEFINE LED PORTB,0 Definição das Entradas e Saídas ; LED CONECTADO NA PORTB<0> ; 0 -> APAGADO ; 1 -> ACESO Inicialização do Sistema ************************************************************************************************************************************************************* ; INICIALIZACAO DO SISTEMA (INICIO DO PROGRAMA) ;************************************************************************************************************************************************************ INICIO CLRF CLRF BANK1 MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF BANK0 MOVLW MOVWF PORTA PORTB B'00000010' TRISA B'00000000' TRISB B'10000000' OPTION_REG B'00000000' INTCON B'00000111' CMCON ;LIMPA O PORTA ;LIMPA O PORTB ;ALTERA PARA O BANCO 1 ;DEFINE RA1 COMO ENTRADA E DEMAIS COMO SAÍDAS ;DEFINE TODA A PORTB COMO SAÍDA ;PULL-UPS DESABILITADOS ;DESABILITA TODAS AS INTERRUPCOES ;ALTERA PARA O BANCO 0 93 ; CONFIGURA OS BITS RA3:RA0 COMO I/O Análise de Sistemas Digitais PROGRAMA COMPLETO Exercicio_LED_botao. Exercicio_LED_botao.asm 94 Análise de Sistemas Digitais Kit Didático Placa de desenvolvimento Labtools MCLAB1 e gravador Labtools MCFLASH 95 Análise de Sistemas Digitais ...Gravando o programa no PIC16F628A 1. 2. 3. 4. (com o gravador MCFLASH) Na janela do MPLAB, selecione o gravador a ser utilizado (PICSTART Plus) no menu “PROGRAMMER>Select Programmer”; Selecione a porta de comunicação correta (COM1, COM2,...) na aba “Communications” no menu “PROGRAMMER>Settings...”; Habilite o gravador através do menu “PROGRAMMER>Enable Programmer”. O MPLAB irá comunicar com o gravador e o resumo da comunicação será exibido na aba “PICSTART” da janela “Output”. Faça o ajuste dos bits de configuração do PIC (registrador CONFIG), por meio do menu “CONFIGURE>Configuration Bits...”: RC: RC externo INTOSC: Oscilador interno EC: Osc. ext. (RA6 = I/O) HS: Cristal (até 20 MHz) XT: Cristal (até 4 MHz) LP: Cristal (até 200 kHz) 5. Finalmente, faça a gravação do programa “.hex” associado ao projeto aberto no PIC (programação do chip), por meio do menu “PROGRAMMER>Program”. Caso a placa onde está o microcontrolador esteja alimentada (5 V, corrente contínua), não alimente a placa do gravador MCFLASH. 96 Análise de Sistemas Digitais 1. Faça a gravação do programa do exercício “LED acionado por botão” e verifique seu funcionamento. 2. Inverta a lógica do LED, fazendo com que ele acenda quando o botão estiver solto e apague quando o botão estiver pressionado. 3. Altere o programa para acender um LED vermelho enquanto o botão estiver solto e um LED verde enquanto o botão estiver pressionado. 4. Implemente mais um conjunto de botão e LEDs (verde e vermelho), totalmente independente do conjunto do exercício anterior. 97 Análise de Sistemas Digitais 13.3. Contando Tempo e Criando Delays A contagem de tempo em sistemas microcontrolados é muito utilizada e importante, sendo utilizada no gerenciamento de eventos, determinação da freqüência de funcionamento de determinadas tarefas, etc. A precisão da medição e da contagem de tempo está intimamente relacionada com o tipo de oscilador utilzado para gerar o sinal de clock do MCU. Uma das formas de medição de tempo é por meio da contagem de ciclos de instrução gastos para executar uma determinada rotina. Esta rotina é utilizada, então, para gerar um certo atraso (delay), bem definido, no processamento do MCU, cada vez que é executada. Com a utilização loops, onde são criados contadores dentro de outros contadores, pode-se contar qualquer intervalo de tempo, múltiplo do tempo gasto na execução de tal rotina de delay. A seguir é mostrada uma rotina que gasta 1 ms para ser executada: ;********************************************************************************************************************************************** DELAY_1MILI ;Rotina que dura 1milisegundo ;250*4us=1ms MOVLW .250 MOVWF TEMP1 ;TEMP1=250 ;-------------------------------------------------------------------------------------------------------------------------------------------------------------------DL_1 ;Rotina que gasta 4 microsegundos para ser executada ;Cada loop “DL_1” gasta 4 ciclos de instrução: 4*1us=4us ;(CLOCK EXTERNO DE 4Hz) NOP DECFSZ TEMP1,1 ;DECREMENTA O CONTADOR (TEMP1=TEMP1-1). ACABOU A CONTAGEM??? GOTO DL_1 ;NAO -> DECREMENTA MAIS UMA VEZ RETURN ;SIM -> FINALIZA A ROTINA ;*********************************************************************************************************************************************** Número de ciclos gastos na execução de cada instrução: 1 ciclo (se não provocar desvio) NOP: 1 ciclo; GOTO: 2 ciclos; RETURN: 2 ciclos; DECFSZ: 2 ciclos (se provocar desvio) Lembre-se que mais 6 ciclos são gastos nesta sub-rotina (2 para chamar a sub-rotina, 2 para carregar TEMP1 e 2 para sair da sub-rotina, sendo que apenas um dos ciclos do RETURN estão sendo considerados dentro da contagem de 4μs). Isto faz com que sua duração exata seja 1,005 ms. Em casos onde maior precisão for necessária, deve-se “calibrar” a sub-rotina98 ou adotar outras forma de contagem (por meio dos temporizadores TMR0, TMR1 e TMR2 ou de pulsos externos). Análise de Sistemas Digitais Pisca-pisca Faça um programa que acenda e apague o LED conectado ao pino 6 (RB0) do PIC 16F628A, em uma freqüência determinada (aproximadamente 5 Hz). (Fluxograma) O código fica mais “enxuto” utilizando uma máscara de inversão por meio da operação lógica “XOR”: Ex.: Máscara de inversão 00000001 XOR 10011001 10011000 Valor contido na PORTB Novo valor da PORTB 1) Lembrando: Operação XOR (tabela verdade) 2) Para inverter todo o conteúdo de um registrador é melhor usar a instrução COMF (ao invés da máscara de inversão) A B Y 0 0 0 0 1 1 1 0 1 1 0 1 99 Análise de Sistemas Digitais Assembly (Rotina Principal – MAIN) Fluxograma ;****************************************************************************************************************** ; ROTINA PRINCIPAL ;****************************************************************************************************************** MAIN MOVLW MOVWF .100 PISCA CONTADOR ;METADE DO PERIODO DO PISCA-PISCA ;(DADO EM ms) ;FAZ A CONTAGEM “PISCA*1ms” CALL DECFSZ GOTO GOTO DELAY_1MILI PISCA,1 CONTADOR PISCA_LED ;GASTA 1ms ;PISCA=0??? ;NAO -> DECREMENTA PISCA ;SIM -> ACENDE OU APAGA LED ;---------------------------------------------------PISCA-PISCA-----------------------------------------------------------PISCA_LED MOVLW LED ;MASCARA DE INVERSAO ;(LOCALIZA BIT DA PORTB REFERENTE AO LED) ;'7|6|5|4|3|2|1|0' => PARA RB0: LED=B'00000001' XORWF PORTB,1 ;INVERTE BIT DEFINIDO PELA MASCARA DE INV. GOTO MAIN ;RETORNA PARA MAIN ;***************************************************************************************************************** É necessário, antes da rotina principal, fazer a inicialização do sistema e definir as variáveis100 e constantes utilizadas. A rotina DELAY_1MILI é a mesma definida anteriormente (2 slides atrás). Análise de Sistemas Digitais 1. Modifique o programa anterior, fazendo com que os LEDs RB7 e RB5 fiquem piscando em aproximadamente 10 Hz. 2. Faça com que todos os LEDs da PORTB fiquem piscando em aproximadamente 2 Hz. 3. Faça com que todos os LEDs da PORTB fiquem piscando em 0,5 Hz. 4. Faça com que um caractere (à sua escolha) fique piscando em um dos displays de sete segmentos. Dica: Crie uma constante “DISPLAY” que será utilizada como máscara de inversão para os bits da PORTB, que estão conectados aos displays de sete segmentos da seguinte forma: 5. BIT FUNÇÃO RB0 Segmento “g” RB1 Segmento “f” RB2 Segmento “a” RB3 Segmento “b” RB4 Seleção de display (0: display 1; 1: display 2) RB5 Segmento “c” RB6 Segmento “d” RB7 Segmento “e” SINTAXE ð DISPLAY EQU ‘edc bafg' (ASSEMBLY) Faça com que um caractere (à sua escolha) fique piscando em um dos displays de sete segmentos 101 “simultaneamente”. Análise de Sistemas Digitais 13.4. Utilizando o PCL para Montar uma Tabela de Valores Como já sabemos, o registrador PCL contém os 8 bits menos significativos do contador de programa (PC). Podemos utilizar o PCL para provocar um desvio no programa e, assim, selecionar um valor dentro de uma lista de valores. Este tipo de desvio deve ser utilizado com muita atenção, pois pode levar o programa para uma região desconhecida da memória de programa, fazendo com que o programa execute instruções não desejadas. Abaixo, é mostrado um exemplo de uma tabela de valores utilizada para mapear os caracteres a serem exibidos em um display de sete segmentos. ;******************************************************************************************************************************** DISPLAY ;CONVERTE NUMERO DADO EM DISPLAY (7 SEGMENTOS) MOVF NUMERO,0 ;MOVE DISPLAY PARA W ANDLW ADDWF B'00001111' PCL,1 ;MÁSCARA PARA LIMITAR O VALOR EM 15 (DE 0 a F) ;PCL =NUMERO+PCL ;************************************ ; VARIAVEIS ;************************************ CBLOCK 0X20 NUMERO ENDC ;************************************ ;TABELA DE CONVERSÃO BINARIO-DISPLAY ;POSICAO DOS SEGMENTO ;(RB4 SELECIONA QUAL DISPLAY ESTA OPERANDO) ;'EDC BAFG‘ NUMERO SIMBOLO EXIBIDO NO DISPLAY RETLW B'11101110' ; 00 -> 0 RETLW B'00101000' ; 01 -> 1 RETLW B'11001101' ; 02 -> 2 RETLW B'01101101' ; 03 -> 3 RETLW B'00101011' ; 04 -> 4 RETLW B'01100111' ; 05 -> 5 RETLW B'11100111' ; 06 -> 6 RETLW B'00101100' ; 07 -> 7 RETLW B'11101111' ; 08 -> 8 RETLW B'01101111' ; 09 -> 9 RETLW B'10101111' ; 10 -> A RETLW B'11100011' ; 11 -> b RETLW B'11000110' ; 12 -> C RETLW B'11101001' ; 13 -> d RETLW B'11000111' ; 14 -> E RETLW B'10000111' ; 15 -> F ;******************************************************************************************************************************** 102 Análise de Sistemas Digitais Contador UP/DOWN Manual Faça um contador crescente/decrescente que seja incrementado/decrementado por dois botões, conectados na PORTA, nos bits RA2 e RA1 (respectivamente), e que exiba o valor da contagem em um dos displays de sete segmentos da McLAB1. (Fluxograma) 103 Análise de Sistemas Digitais Assembly (Rotina Principal – MAIN) ;****************************************************************************************************************** ; ROTINA PRINCIPAL ;****************************************************************************************************************** MAIN BTFSC BOTAO1 ;O BOTÃO1 ESTÁ PRESSIONADO? GOTO TESTA_BT2 ;NAO, ENTÃO TESTA BOTAO2 GOTO DECREMENTA ;SIM, ENTÃO VAI PARA A ROTINA QUE ;DECREMENTA O CONTADOR TESTA_BT2 BTFSC BOTAO2 ;O BOTÃO2 ESTÁ PRESSIONADO? GOTO MAIN ;NAO, ENTÃO TESTA BOTAO1 (VOLTA PARA MAIN) GOTO INCREMENTA ;SIM, ENTÃO VAI PARA A ROTINA QUE ;INCREMENTA O CONTADOR ;******************************************************************************************************************** Fluxograma É necessário, antes da rotina principal, fazer a inicialização do sistema e definir as variáveis e 104 constantes utilizadas (em especial, para que a lógica proposta funcione, deve-se fazer, por exemplo, NUMERO=MIN). Análise de Sistemas Digitais Assembly (Rotina “INCREMENTA”) ;------------------------------------------------------------INCREMENTA CONTAGEM-------------------------------------------------------------------INCREMENTA MOVLW SUBWF MAX NUMERO,0 BTFSC STATUS,Z GOTO MAIN DECF NUMERO GOTO FILTRO_BT2 CALL BTFSC GOTO GOTO DELAY_25MILI BOTAO2 ATUALIZA $-3 FILTRO_BT2 ;W=MAX-NUMERO ;LEMBRANDO: "Z" => STATUS<2> ;Z=0: INDICA QUE O RESULT. DA ULTIMA OPERACAO É ;DIF. DE ZERO ;Z=1: INDICA QUE O RESULT. DA ULTIMA OPERACAO É IGUAL A ZERO ;VERIFICA SE O RESULTADO DE "MAX-NUMERO" É DIFERENETE DE 0 ;(OU SEJA, SE Z=0) ;NAO=>VOLTA PARA MAIN SEM INCREMENTAR O CONTADOR ;(SATURA A CONTAGEM: JA CHEGOU AO MAX.) ;SIM=>DECREMENTA A CONTAGEM E VAI VERIFICAR SE O BOTAO1 JA FOI ;SOLTO ;FILTRO PARA ESPERAR O BOTAO2 SER SOLTO ; AGUARDA 25 ms (ANTI-BOUNCING) ;O BOTÃO2 AINDA ESTÁ PRESSIONADO? ;NAO, ENTAO VOLTA PARA MAIN ;SIM, ENTÃO TESTA BOTAO2 NOVAMENTE ;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Fluxograma 105 Análise de Sistemas Digitais Assembly (Rotina “DECREMENTA”) ;------------------------------------------------------------DECREMENTA CONTAGEM-------------------------------------------------------------------DECREMENTA MOVLW SUBWF MIN NUMERO,0 BTFSC STATUS,Z GOTO MAIN DECF NUMERO GOTO FILTRO_BT1 CALL BTFSC GOTO GOTO DELAY_25MILI BOTAO1 ATUALIZA $-2 FILTRO_BT1 ;W=MIN-NUMERO ;LEMBRANDO: "Z" => STATUS<2> ;Z=0: INDICA QUE O RESULT. DA ULTIMA OPERACAO É ;DIF. DE ZERO ;Z=1: INDICA QUE O RESULT. DA ULTIMA OPERACAO É IGUAL A ZERO ;VERIFICA SE O RESULTADO DE "MIN-NUMERO" É DIFERENETE DE 0 ;(OU SEJA, SE Z=0) ;NAO=>VOLTA PARA MAIN SEM DECREMENTAR O CONTADOR ;(SATURA A CONTAGEM: JA CHEGOU AO MIN.) ;SIM=>DECREMENTA A CONTAGEM E VAI VERIFICAR SE O BOTAO1 JA FOI ;SOLTO ;FILTRO PARA ESPERAR O BOTAO1 SER SOLTO ; AGUARDA 25 ms (ANTI-BOUNCING) ;O BOTÃO1 AINDA ESTÁ PRESSIONADO? ;NAO, ENTAO VOLTA PARA MAIN ;SIM, ENTÃO TESTA BOTAO1 NOVAMENTE ;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Fluxograma 106 Análise de Sistemas Digitais Assembly (Rotina “ATUALIZA”) ;--------------------------------------------------ATUALIZA DISPLAY DE 7 SEGMENTOS-----------------------------------------------------------------ATUALIZA CALL MOVWF GOTO DISPLAY PORTB MAIN ;ATUALIZA O VALOR EXIBIDO NO DISPLAY ;SELECIONA CARACTERE A SER EXIBIDO NO DISLPAY ;ENVIA DADO REFERENTE AO CARACTERE A SER ACESO A PORTB ;--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Fluxograma A rotina DISPLAY é a mesma definida anteriormente (slide 18), responsável pela conversão “bináriodisplay de sete segmentos”, de acordo com as conexões existentes na placa de desenvolvimento McLab1. 107 Análise de Sistemas Digitais 1. Altere as rotinas INCREMENTA e DECREMENTA para que o contador seja alterado de 2 em 2 unidades. 2. Implemente um terceiro botão que habilite/desabilite o contador (ou seja, a ação dos outros botões já existentes). Um LED (por exemplo, o conectado em RA0) pode indicar se o contador está habilitado ou desabilitado. 108