Microcontroladores Alan Tavares Controle e Automação
Jaguariúna – SP
Alan Tavares
Microcontroladores
1
Objetivo da Aula 1. Revisar conteúdo da aula passada 2. O que seria Sub-Rotinas em Assembly? 3. Como compilar e testar código em Assembly no MPLAB?
4. Exercício prático programando em Assembly utilizando MPLAB
Instruções Básicas
▪ PIC16 possui um conjunto de 35 instruções;
▪ Podem ser divididas em três grupos: ➢Instruções orientadas por bytes, ➢Instruções orientadas por bit, e ➢Operações literais e de controle.
Instruções Básicas Instruções Orientadas por Bit
Instrução Op
Descrição
BSF
f, b
Nível lógico alto bit b
BCF
f, b
Nível lógico baixo bit b
BTFSS
f, b
Testa bit b, salta se 1
BTFSC
f, b
Testa bit b, salta se 0
Instruções Básicas
Instrução ADDWF ADDWF CLRF CLRW COMF DECF
Op f, d fd f fd f, d
Descrição Soma W e f AND W com f Apaga f Apaga W Complementa f Decrementa f
Instrução Op Descrição DECFSZ f ,d Decrementa f, salta se 0 INCF f, d Incrementa f INCFSZ f, d Incrementa f, salta se 0 IORWF f, d OR W com f MOVF f,d Move f MOVLW l w Move L para W MOVWF f, d Move W para f GOTO Desvia para Etiqueta
Instruções Básicas
Instrução
Op
Descrição
NOP
-
Nenhuma operação
RLF
f, d
Desloca os dados para esquerda
RRF
f, d
Desloca os dados para direita
SUBWF
f, d
Subtrai W de F
SWAPT
f, d
Troca os nibbles de F
XORWF
f, d
XOR entre W e f
Termos de Configuação das Instruções w: work (registrador de trabalho ou acumulador) F: file (registradores especiais e/ou de uso geral | posição de memória) L: literal (constante, número qualquer) utilizado como L nas instruções e k nos argumentos D: destination (local onde o resultado de uma operação será armazenado B: bit (bit dentro dos registradores, dentro de um byte, flags) T: test (utilizado para teste de bit) S: skip (pulo, salto, desvio condicional) S: set (setar, tornar nível alto) C: clear (limpar, tornar nível baixo) Z: zerar (testar se é equivalente a zero)
Pull-up & Pull-Down
Normalmente Fechado
1 - VCC
0 - GND
Normalmente Aberto
MEMÓRIA DE DADOS (F REGISTER) Registradores de Funções Especiais (SFR) Os Registros de Funções Especiais são usados pela CPU e periféricos para controlar a operação do microcontrolador.
Registradores de Propósito Geral (GPR) Cada Registro de Propósito Geral (GPR) é uma memória de 8 bits e é acessado direta ou indiretamente através do registro FSR.
Registradores de Funções Especiais (SFR) Os Registros de Funções Especiais são usados pela CPU e periféricos para controlar a operação do microcontrolador.
Registradores de Propósito Geral (GPR)
Estudo de Caso: Acionamento 2 LEDs
Botão 2
LED 1
Botão 1
LED 2
Entradas: Botão 1 – Pino RA0 Botão 2 – Pino RA4 Saídas: LED 1 – Pino RB2 LED 2 – Pino RB6
Deseja-se controlar o chaveamento de dois LEDs através de dois botões normalmente abero (pull-down). Para o mesmo, deseja-se criar um programa em Assembly que simule o acionamento das chaves utilizando o MPLAB. Botão (RA0/RA4) – Valor 1: Aciona Botão/ Valor 0: Libera Botão LED (RB2/RB6) – Valor 1: Liga LED / Valor 0: Desligado LED
Resolução Código Assembly #include ORG H’0000’ GOTO INICIO
BCF BSF
STATUS,RP0 STATUS,RP0
Entradas: Botão 1 Botão 2
– Pino RA0 – Pino RA4
Saídas: LED 1 LED 2
– Pino RB2 – Pino RB6
#define #define
BANK0 BANK1
#define #define
BOTAO1 BOTAO2
PORTA,RA0 PORTA,RA4
Botão 1 ligado em RA0 Botão 2 ligado em RA4
#define #define
LED1 LED2
PORTB,RB2 PORTB,RB6
LED 1 ligado em RB2 LED 2 ligado em RB6
Cria um mnemônico para o banco 0 de memória Cria um mnemônico para o banco 1 de memória
Resolução
Código Assembly
INICIO: BANK1 MOVLW MOVWF MOVLW MOVWF BANK0 MOVLW MOVWF
B’11111111’ TRISA B’10111011’ TRISB B’10111011’ PORTB
Entradas: Botão 1 Botão 2
– Pino RA0 – Pino RA4
Saídas: LED 1 LED 2
– Pino RB2 – Pino RB6
Seleciona Banco de Memória 1 (BANK1) Configura: RA0 e RA4 Entrada(Input) W = B’xxx1 1111’ Configura: RB2 e RB6 Saída(Output) W = B’1011 1011’ Seleciona Banco de Memória 0 (BANK0) W = B’1011 1011’ LEDs iniciam desligados
1
Resolução Código Assembly LOOP: CALL CALL GOTO
TRATA_BUT1 TRATA_BUT1 LOOP
Comentários Chama a sub-rotina para tratar botão1 Chama a sub-rotina para tratar botão2 Volta para label loop
TRATA_BUT1: BTFSS GOTO BSF RETURN
BOTAO1 APAGA_LED1 LED1
Botão foi pressionado? Salta se b = 1 Não, b = 0 desvia para label Sim, b = 1 liga led1 Retorna a sub-rotina
APAGA_LED1: BCF RETURN
LED1
apaga LED1 Retorna a sub-rotina
2
3
4
Resolução Código Assembly LOOP: CALL CALL GOTO
TRATA_BUT1 TRATA_BUT1 LOOP
Comentários Chama a sub-rotina para tratar botão1 Chama a sub-rotina para tratar botão2 Volta para label loop
TRATA_BUT2: BTFSS GOTO BSF RETURN
BOTAO2 APAGA_LED2 LED2
Botão foi pressionado? Salta se b = 1 Não, b = 0 desvia para label Sim, b = 1 liga led1 Retorna a sub-rotina
APAGA_LED2: BCF RETURN
LED2
apaga LED2 Retorna a sub-rotina
2
3
4
Exercício Mircrocontrolador
Sensor Nível 1 Sensor Nível 2
Válvula 1
Válvula 2
Deseja-se controlar a vazão de água utilizando sensores de nível digitais. O programa deverá ser feito em Assembly e o acionamento dos sensores simulados pelo MPLAB. Aciona Válvula (RA2 = 1) se o Sensor de Nível (RB6 = 0) Quando Sensor de Nível (RB6 = 1), desliga Válvula (RA2 = 0) Aciona Válvula (RA3 = 1) se o Sensor de Nível (RB5 = 0)
Quando Sensor de Nível (RB5 = 1), desliga Válvula (RA3 = 0)
M. Sc. Alan Tavares E-mail:
[email protected] GitHub: https://github.com/alanprodam
E-mail:
[email protected] Linkedin : https://www.linkedin.com/in/alantavares-sp-br/ 14/02/2019
Alan Tavares – (FEM/UNICAMP)
49