Baixe o app para aproveitar ainda mais
Prévia do material em texto
Microcontroladores ‹#› ‹#› ‹#› ‹#› MPLAB Criação de Projetos Editor de Código Assembly Compilação e Debug do código Simulador Possibilidade de visualização os registradores internos ‹#› ‹#› ‹#› ‹#› INTRODUÇÃO - ASSEMBLY Fluxo Assembly: Cabeçalho PROCESSOR 16F877A ; tipo de processador #include <p16f877a.inc> ; incluir arquivo __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC ;diretiva de controle inicial ; _CP_OFF desliga proteção de código, WDT_OFF desliga o watchdog timer, PWRTE_ON liga o Power-up Timer (delay de 72 ms) ; e _XT_OSC seta o oscilador para ser do tipo cristal ou ressonador. .HEX Programa .ASM (MPLAB-IDE) MPASM (MPLAB-IDE) MPSIM (MPLAB-IDE) Programa ‹#› ‹#› ‹#› ‹#› Organização da Memória PC (Program Counter) de 13 bits Memória dividida em 4 bancos (Banks 0, 1, 2 e 3) Locais Importantes 0x00 – vetor reset 0x04 – vetor de interrupção O programa começa depois do endereço 0x04 ‹#› ‹#› ‹#› ‹#› Organização da Memória 4 bancos Registradores importantes FSR STATUS INDF INTCON Registradores de uso geral para armazenar dados Registradores endereçados diretamente e indiretamente Registrador W no acumulador ‹#› ‹#› ‹#› ‹#› Os Registradores Especiais(1) STATUS: Está relacionado às operações matemáticas. Indica estouro dos registradores (C-Carry e DC-Digit Carry) e resultados iguais a zero PCON: Função mais utilizada é que configura freqüência do oscilador interno 37KHz ou 4MHz OPTION_REG: Configura o funcionamento dos registradores internos PORTx: Lê e escreve informações nos pinos externos do PIC TRISx: Define direção de funcionamento de cada pino da porta (se entrada ou saída) ‹#› ‹#› ‹#› ‹#› Os Registradores Especiais(2) INTCON: Interrupções Especiais e chave geral Chave Geral: GIE Timer 0, Interrupção Externa e Mudança de Estado. PIR1 e PIE: Gerencia interrupções dos periféricos EEPROM, Comparadores, USART, CCP, Timer 1 e 2 TMR0 e TMR2: É o Timer 0 e 2 respectivamente Contador de 8 bits Seu incremento pode ser automático (CLK) ou por um sinal externo (Timer 0) TMR1L e TMR1H: É o Timer 1 Contador de 16 bits ‹#› ‹#› ‹#› ‹#› Os Registradores Especiais(3) EEPROM Utiliza os registradores EEADR e EEDATA que controlam leitura e escrita da EEPROM interna O controle é feito pelos registradores EECON1 e EECON2 Módulo CCP 3 registradores (CCP1COM, CCPR1H e CCPR1L) Módulo Voltagem de Referência VRCON Gera voltagem de referência através de malha R2R interna Endereçamento Indireto FSR (apontador) INDF (espelho do apontador) ‹#› ‹#› ‹#› ‹#› Registrador W Pode ser utilizado como destino de diversas operações aritméticas e lógicas. Não está mapeado na memória RAM. É utilizado principalmente como ponte entre os registradores “ f ”, pois não é possível trocar dados diretamente entre eles. A instrução MOVF copia a informação do registrador “ f ” para W. A instrução MOVWF copia a informação do registrador W para “ f ”. W Memória E/S ‹#› ‹#› ‹#› ‹#› Configuração das diretivas (__CONFIG) Configurando o oscilador (_FOSC_<tipo>) Configurando o WatchDog (_WDTE_<tipo>) Temporizador que funciona independente de clock Responsável para configurar os periféricos do PIC ‹#› ‹#› INTRODUÇÃO - ASSEMBLY Cabeçalho PROCESSOR 16F877A ; tipo de processador #include <p16f.877a.inc> ; incluir arquivo ;Forma para MPLAB 8: __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC ;diretiva de controle inicial ;Forma MPLAB X: __CONFIG _FOSC_HS & _WDTE_OFF & _PWRTE_ON & _BOREN_ON & _LVP_OFF & _CPD_OFF & _WRT_OFF & _CP_OFF __CONFIG _FOSC_HS & _WDTE_OFF & _PWRTE_ON & _BOREN_ON & _LVP_OFF & _CPD_OFF & _WRT_OFF & _CP_OFF org 0x00 ; vetor de reset goto Main ; ir para o início do programa org 0x04 ; vetor de interrupção goto Main ; não há rotina de interrupção Main ; aqui vai o código! End ‹#› ‹#› ‹#› ‹#› ACESSO AOS I/Os PORTA, PORTB, PORTC, PORTD e PORTE PORTA 6-bit wide Podem ser configuradas como Saídas Podem ser configuradas como Entradas São multiplexadas com as entradas analógicas do ADC e com as tensões de referência do comparador! ‹#› ‹#› ‹#› ‹#› ACESSO AOS I/Os Configurando a PORTA: Registrador TRISA seta as I/Os como entrada saída: ‘0’ - saída ‘1’ – entrada TRISA alocado no Banco de Memória 1. Registrador PORTA Utilizado para ler e gravar nos I/Os de PORTA PROCESSOR 16F877A ; tipo de processador #include <p16f877a.inc> ; incluir arquivo __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC ;diretiva de controle inicial ; _CP_OFF desliga proteção de código, WDT_OFF desliga o watchdog timer, PWRTE_ON liga o Power-up Timer (delay de 72 ms) ; e _XT_OSC seta o oscilador para ser do tipo cristal ou ressonador. org 0x00 ; vetor de reset goto Main ; ir para o início do programa org 0x04 ; vetor de interrupção goto Main ; não há rotina de interrupção ‹#› ‹#› ‹#› ‹#› Organização da Memória 4 bancos Registradores importantes FSR STATUS INDF INTCON Registradores de uso geral para armazenar dados Registradores endereçados diretamente e indiretamente Registrador W no acumulador ‹#› ‹#› ‹#› ‹#› Instruções orientadas a bit ‹#› Setandos bancos de memória Registrador STATUS: Para selecionar o BANCO 0 ou BANCO 1 Bit 5 do registrador STATUS igual a ‘0’ – BANCO 0 Bit 5 do registrador STATUS igual a ‘1’ – BANCO 1 Página 22 do datasheet BANCO 0 da memória setado como default BSF STATUS, 5 ; seta o BANCO 1 da memória BCF STATUS, 5 ; seta o BANCO 0 da memória ‹#› ‹#› ‹#› ‹#› Setandos bancos de memória Registrador STATUS: ‹#› ‹#› ‹#› ‹#› Exemplo: PORTA = INPUT Selecionar o BANCO 1 Para selecionar o BANCO 0 ou BANCO 1 Setar TRISA como entrada ‘11111111’ Setar ADCON1 (Registrador de Controle) ‹#› ‹#› ‹#› ‹#› Troca de Banco de Memória para uso de diferentes registradores bits 6:5 =RP1:RP0 Banco 0 -- bit 6:5=00 BCF STATUS,5 Na primeira vez o bit 6 já esta zerado por definição, caso contrário deve se zerá-lo, com: BCF STATUS,6 Banco 1 -- bit 6:5=01 BSF STATUS,5 Na primeira vez o bit 6 já esta zerado por, caso contrário deve se zerá-lo, com: BCF STATUS,6 Banco 2 -- bit 6:5=10 BSF STATUS,6 BCF STATUS,5 Banco 3 -- bit 6:5=11 BSF STATUS,6 BSF STATUS,5 ‹#› ‹#› ‹#› ‹#› Exemplo: PORTA = INPUT ADCON1 = Registrador de Controle ‹#› ‹#› ‹#› ‹#› Instruções Orientadas a Byte Instruções de endereço Exemplo: PORTA = INPUT Selecionar o BANCO 1 Para selecionar o BANCO 0 ou BANCO 1 Setar TRISA como entrada ‘11111111’ Setar ADCON1 como 0x06 Selecionar o BANCO 0 da memória Para Ler e Escrever no I/O BSF STATUS, 5 ; seta o BANCO 1 da memória MOVLW 0x06 ;b’00000110 = 6d MOVWF ADCON1 MOVLW B'11111111’ MOVWF TRISA BCF STATUS, 5 ; seta o BANCO 0 da memória ‹#› ‹#› ‹#› ‹#› PROCESSOR 16F877A #include <p16f877a.inc> ; incluir arquivo __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC org 0x00 ; vetor de reset goto Main ; ir para o início do programa org 0x04 ; vetor de interrupção goto Main ; não há rotina de interrupção Main ; início do programa principal BSF STATUS, 5 ; banco 1 de memória MOVLW 0x06 MOVWF ADCON1 ; o valor 00000110 é colocado aqui MOVLW B'11111111‘ MOVWF TRISA ; todos pinos de a porta A -entrada MOVLW B'11110000' MOVWF TRISB ; 4primeiro pinos de B são saída BCF STATUS, 5 ; banco 0 CLRF PORTB Loop BTFSS PORTA, 0 ; verifica o estado da chave (pino RA0). Se o valor for “1”, a próxima linha é pulada, então o LED irá acender. Caso contrário o LED irá apagar GOTO Apagar ; se RA0 = 0, apaga o LED GOTO Acender ; se RA0 = 1, acende o LED Acender BSF PORTB, 0 ; seta o bit 0 (RB0) da porta B. Isto faz com que o LED se acenda. RB0 = 1 GOTO Loop ; voltapara verificação da chave C Apagar BCF PORTB, 0 ; limpa o bit 0 (RB0) da porta B. Isto faz com que o LED se apague. RB0 = 0 GOTO Loop ; volta para verificação da chave C END ; fim do programa Exemplo de chave de Controle ligar/desligar um LED por comando de entrada ‹#› ‹#› ‹#› ‹#› Simulações Simulação no MPLAB com estímulos ‹#› ‹#› ‹#› ‹#› Criando um projeto ‹#› ‹#› ‹#› ‹#› Escolher o microcontrolador Etapas de avançar Verificar se os todas as ferramentas foram encontradas Caso não forem encontradas localizá-las: Selecionar a ferramenta e depois encontrar o arquivo ‹#› ‹#› ‹#› ‹#› Criar uma pasta Criar um projeto ‹#› ‹#› ‹#› ‹#› Inclusão de arquivos .asm (caso existam) e avançar ‹#› ‹#› ‹#› ‹#› Criar um arquivo .asm ‹#› ‹#› ‹#› ‹#› Digitar o programa e salvar Salvar com extensão .asm ‹#› ‹#› ‹#› ‹#› Adicionar o projeto na fonte para compilação Caso não for incluído não compilará ‹#› ‹#› ‹#› ‹#› Compilar Define se o programa compilado será geral ‹#› ‹#› ‹#› ‹#› Organizar as janelas ‹#› ‹#› ‹#› ‹#› Ativar a simulação ‹#› ‹#› ‹#› ‹#› Inserir Estímulos ‹#› ‹#› ‹#› ‹#› Inserir estímulos nos pinos de entrada (sempre deve-se aplicar ‹#› ‹#› ‹#› ‹#› Simular Instrução por Instrução ‹#› ‹#› ‹#› ‹#› Ver os registradores Especiais na simulação ‹#› ‹#› ‹#› ‹#› Valores dos registradores em cada ciclo e instrução É possível verificar os valores armazenados nos registradores ‹#› ‹#› ‹#› ‹#› Uso de analisador (osciloscópio) ‹#› ‹#› ‹#› Inserção de canais para o osciloscópio ‹#› ‹#› ‹#› Resultado no osciloscópio ‹#› ‹#› ‹#› USO de MPLAB X IDE Criar projeto ‹#› ‹#› USO de MPLAB X IDE Nome do projeto ‹#› ‹#› USO de MPLAB X IDE Escolher a família e processador ‹#› ‹#› USO de MPLAB X IDE Simulador ‹#› ‹#› USO de MPLAB X IDE Compilador asm ‹#› ‹#› USO de MPLAB X IDE Nome de projeto e definir pasta de trabalho ‹#› ‹#› USO de MPLAB X IDE Criar um arquivo asm com o nome do projeto a ser montado Escolher o nome do projeto ‹#› ‹#› Escrever o programa no texto USO de MPLAB X IDE ‹#› ‹#› USO de MPLAB X IDE Compilar ‹#› ‹#› Simulação com MPLAB X IDE ‹#› ‹#› Set simulações ‹#› ‹#› Analisar resultados dos registradores Escolher o que quer analisar ‹#› ‹#› Ativar simulação Debuga linha por linha ‹#› ‹#› Programação usando KIT PIC3 ‹#› ‹#› Simulações Simulação no PROTEUS ‹#› ‹#› ‹#› ‹#› Usando o Proteus Primeiro deve-se criar um projeto. Depois chamar a ferramenta ISIS responsável para o schematic Inserir os componentes necessários e fazer a simulação desejada ‹#› ‹#› ‹#› ‹#› Usar o ISIS- SCHEMATIC CAPTURE Inserir componentes Inserir terminais ‹#› ‹#› ‹#› ‹#› Inserir componentes Digitar o nome do componente esquemático Desenho para Prototipação do componente ‹#› ‹#› ‹#› ‹#› Dicas de implementação prática do PIC Circuito de polarização do sinal de reset. R1 < 40 kΩ é recomendável para garantir que a queda de tensão sobre R não violará as especificações elétricas do PIC. R2 > 1K limitará qualquer corrente em MCLR causada pelo capacitor C1 no caso de uma descarga eletrostática. ‹#› ‹#› ‹#› Gerar a Placa PCB (ARES) Clicar em Ares Clicar em componentes Ao rastar ‹#› ‹#› ‹#› ‹#› Roteamento automático ‹#› ‹#› ‹#› Roteamento automático face simples Regras de projeto ‹#› ‹#› ‹#› Auto router Iniciar roteamento automático ‹#› ‹#› ‹#› Gerar o arquivo de saída Dependendo da fresa utilizada mais alguns passos poderão ser necessários ‹#› ‹#› ‹#› Exercício no MPLAB Faça um conversor binário- hexadecimal usando o PIC16f877A. Use 4 pinos de entrada da porta B do PIC como entrada binária e os 8 pinos da porta C como saída. Display de 7 segmentos ‹#› ‹#› ‹#› Uso de saídas variáveis Display de 7 segmentos ‹#› ‹#› ‹#› PROCESSOR 16F877A #include <p16f877a.inc> ; incluir arquivo __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC org 0x00 ; vetor de reset goto Main ; ir para o início do programa org 0x04 ; vetor de interrupção goto Main ; não há rotina de interrupção Main ; início do programa principal BSF STATUS, 5 MOVLW B‘00001111‘ MOVWF TRISB ; setar os 4 primeiros pinos da porta b como entrada MOVLW B‘00000000‘ ; setar a porta c como saída MOVWF TRISC BCF STATUS, 5 CLRF PORTC Loop MOVLW d’0 Xorwf PORTB,0 BTFSS STATUS,Z GOTO Loop1 GOTO IMPRIME_0 IMPRIME_0 MOVLW b’11111100’ MOVWF PORTC Loop1 MOVLW d’1 ; ---b’000000001 Xorwf PORTB,0 BTFSS STATUS,Z GOTO Loop2 GOTO IMPRIME_1 IMPRIME_1 MOVLW b’01100000’ MOVWF PORTC GOTO Loop ; volta para verificação da chave C END ; fim do programa Conversor binario-hexadecimal ‹#› ‹#› ‹#› Sensor ‹#› Exercício entregar Entregar o conversor binário – hexadecimal (assembler) no MPLAB e placa PCB (ISIS) ‹#› ‹#›
Compartilhar