Buscar

Aula_02

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)
‹#›
‹#›

Continue navegando