112
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ DEPARTAMENTO ACADÊMICO DE ELETROTÉCNICA DEPARTAMENTO ACADÊMICO DE ELETROTÉCNICA CURSO DE ENGENHARIA INDUSTRIAL ELÉTRICA CURSO DE ENGENHARIA INDUSTRIAL ELÉTRICA Disciplina de Sistemas Microcontrolados – ET67E Disciplina de Sistemas Microcontrolados – ET67E Prof. Amauri Assef Prof. Amauri Assef paginapessoal.utfpr.edu.br/amauriassef paginapessoal.utfpr.edu.br/amauriassef [email protected] [email protected]

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ …paginapessoal.utfpr.edu.br/amauriassef/disciplinas/sistemas... Code = Conjunto de instruções de programa reduzido) CISC X RISC CISC

Embed Size (px)

Citation preview

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁUNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ

DEPARTAMENTO ACADÊMICO DE ELETROTÉCNICADEPARTAMENTO ACADÊMICO DE ELETROTÉCNICA

CURSO DE ENGENHARIA INDUSTRIAL ELÉTRICACURSO DE ENGENHARIA INDUSTRIAL ELÉTRICA

Disciplina de Sistemas Microcontrolados – ET67EDisciplina de Sistemas Microcontrolados – ET67E

Prof. Amauri AssefProf. Amauri Assef

paginapessoal.utfpr.edu.br/amauriassefpaginapessoal.utfpr.edu.br/amauriassef

[email protected]@utfpr.edu.br

REGISTRADORES BIDIRECIONAIS

● Tipos de FFs (RS, D, JK)● Buffer tri-state● Habilitação● Registradores paralelos bidirecionais● Barramento

REGISTRADORES BIDIRECIONAIS

ARQUITETURA SIMPLIFICADA● Arquitetura digital de um µP elementar● Geração dos sinais de controle e fluxo de

dados● Implementações da unid. decodif. e controle

(máquinas de estado e memória)

ARQUITETURA SIMPLIFICADA

ARQUITETURA INTERNA● Registradores de propósito geral● Acumulador● ULA● Flags (sinalizadores)● PC● Pilha (Stack)● Reg. instrução● Unidade de decodificação e controle● Registradores de configuração do sistema

SINAIS DE COMUNICAÇÃO COM MEMÓRIAS

● Barramento de dados, de endereços e sinais de controle RD, WR e CS

● Ciclo de leitura● Ciclo de escrita

OPERAÇÃO DO MICROPROCESSADOR

BUSCA

DECODIFICA

EXECUTA

SELETORES DE MEMÓRIAS● Sistema com duas memórias (circuito, bit

seletor, mapeamento)● Gerador de produtos canônicos● Sistema de memórias com sombreamento

MODOS DE ACESSO● Imediato MOV A,25● Direto MOV A,[25]● Indireto MOV A,[B]

valor endereço

Imediato fixo ---

Direto variável fixo

Indireto variável variável

Ex. 2:

MOV B,10MOV C,90MOV D,50REP:MOV A,[B]MOV [C],AINC BINC CDEC DJNZ REP

Ex. 1:

MOV A,[25]INC AMOV [25],A

CISC X RISC● 4004: 46 instruções● 8008: 48 instruções● 8080: 78 instruções● 8085: aprox. 150 instruções● Z-80: aprox. 500 instruções● 8086/8088: mais de 700 instruções● 80386: mais de 1500 instruções

CISC X RISC

PASSAGEM DO TEMPO

COMPLEXIDADE

CISC X RISC● Num dado momento, decidiu-se trabalhar em

arquiteturas mais simples, entretanto:● Clock elevado● Barramento com muitos bits (64 e 128 bits)● Poucas instruções● Melhor otimização das estruturas internas

● Arquitetura RISC (Reduced Instruction Set of Code = Conjunto de instruções de programa reduzido)

CISC X RISC

CISC● Muitas instruções● Arquitetura complexa● Barramento com

poucos bits● Baixo clock● Ciclo de projeto longo● Programas menores

RISC● Poucas instruções● Arquitetura simples● Barramento com

muitos bits● Alto clock● Ciclo de projeto curto● Programas maiores

CISC X RISC

Processadores CISC● x86 (família Intel)● Z80● x86 (família AMD)● DSPs Texas● MC68000 (PowerPC

Motorola)

Processadores RISC● DEC Alpha● PIC (Microchip)● HCS-12 (Motorola-

Freescale)● H8 (Hitachi)● AVR (Atmel)

RISC X CISC

Particularmente, iremos estudar o PIC. Características:

● 35 instruções● Instruções de 14 bits● Todas as instruções usam apenas 1 word● Opcode + operando contido em 1 word.

HARVARD X VON NEUMANN

DD7

DD0

DRD DWR

DAN

DA0

CD7

CD0

CRD

CAN

µP

CA0

D7

D0

RD

AN

A0

D7

D0

WR RD

AN

A0

memória com

instruções

memória com dados

Arquitetura Harvard

HARVARD X VON NEUMANN

ArquiteturaVon Neumann

D7

D0

WR RD

A15

AN

µP

A0

CS

D7

D0

RD

AN

A0

memória com

instruções

CS

D7

D0

WR RD

AN

A0

memória com dados

MICROCONTROLADORES● Estruturas de um μP:

● Registradores (PC, acumul., prop. geral)● ULA● Unid. decodificação e controle● Pinos de barramentos: endereço, dados● Sinais de controle

MICROCONTROLADORES

μP Mem.RAM

Mem.Flash

I/Odigital USART A/D PWM

I²C Timers Control.interrup.SPI

O microcontrolador (µC) agrega um microprocessador (µP) + memórias + periféricos

PERIFÉRICOS● Timer● Conversor A/D● Capture, Compare,

PWM● USART, SPI● Rede CAN● I²C● DMA

● Controlador de interrupções

● Memórias internas

MÉTODOS DE PROGRAMAÇÃO● Programação convencional● In-Circuit● JTAG● Emulação em tempo real

HCS08

PowerPCHCS08

HCS12

Coldfire56F8x(DSCs)

KinetisARM

ARMAVR 8051

MSP430 StellarisARM C2000 C5000

C6000

SÉRIES DE μC PIC

μC PIC● PIC16F84

● 18 pinos, 12 I/O● PIC16F628

● 18 pinos, 16 I/O● PIC16F877

● 40 pinos, 33 I/O

Pinagem PIC16F877AMCLR / VPP 1

2

3

4

5

6

7

8

9

40

39

38

37

36

35

34

33

RA0 / AN0

RA1 / AN1

RA2 / AN2 / VREF- / CVREF

RA3 / AN3 / VREF+

RA4 / T0CKI / C1OUT

RA5 / AN4 / SS / C2OUT

RE0 / RD / AN5

RE1 / WR / AN6 VDD

RB0 / INT

RB1

RB2

RB3 / PGM

RB4

RB5

RB6 / PGC

RB7 / PGD

PIC16F877

RE2 / CS / AN7 10

11

12

13

14

15

16

17

VDD

VSS

OSC1 / CLKI

OSC2 / CLKO

RC0 / T1OSO / T1CKI

RC1 / T1OSI / CCP2

RC2 / CCP1

RC3 / SCK / SCL

20

RD0 / PSP0 19

18

RD1 / PSP1

31

30

29

28

27

26

25

24

23 RC4 / SDI / SDA

RC5 / SDO

RC6 / TX / CK

RC7 / RX / DT

RD4 / PSP4

RD5 / PSP5

RD6 / PSP6

RD7 / PSP7

VSS

32

22

21 RD2 / PSP2

RD3 / PSP3

Sinais PIC● I/O digital:

RA0...RA5: Porta ARB0...RB7: Porta BRC0...RC7: Porta CRD0...RD7: Porta DRE0...RE2: Porta E(ao todo, 33 sinais)

Sinais PIC● Entradas analógicas:

AN0...AN7; VREF+, VREF-● Reset

MCLR● Comunicação serial

TX, RX (assíncrona); CK, DT (síncrona)● Oscilador

OSC1, OSC2

Sinais PIC● Programação:

VPP, PGD, PGC, PGM

● Capture, compare, PWMCCP1, CCP2

● AlimentaçãoVDD (5V), VSS (GND)

● Interrupção externaINT

● Clock externo p/ timerT0CKI, T1CKI

● Comunicação SPISCK, SDI, SDO, SS

● Comunicação I2CSCL, SDA

CIRCUITOS BÁSICOS PARA μC+5

S

S

CIRCUITOS BÁSICOS PARA μC+5 +5

MEMÓRIAS INTERNAS● Flash

● programa● 14 bits

● RAM● Dados● volátil● rápida● armazenamento de

dados gerais

● EEPROM● Dados● não volátil● lenta● armazenamento de

parâmetros fixos

BANCO RP1 RP00 0 01 0 12 1 03 1 1

RP1 RP0Registrador STATUS (03h)

8 7

RP0RP1

6 5 4 3 2 1 0

2 bits 7 bits

(fazem parte do opcode da instrução)

MOVWF 000000 1nnnnnnn(opcode)

Exemplo:

Notar que as instruções

MOVWF 0x1CMOVWF 0x9CMOVWF 0x11CMOVWF 0x19C

acessam o mesmo endereço, pois todas geram os mesmos 7 bits.

Como é gerado o endereço final:

Aula prática: ambiente de desenvolvimento MPLAB

● Janela de projeto● Janela de mensagens● Janela de edição de texto (coloração do

código)● View/file registers; troca de bancos● View/watch● View/program memory● Inserir bytes na program memory

Simulação● Simulação (step-into ou F8)● Ajuste do endereço no PC● Colocação de breakpoint● Animate; Ajuste do tempo● Run● Halt● Reset

Formato Linguagem Assembly 00051 ; * * * * * * * * * * * * * * * * * * * * * * * * 00052 ; * VETOR DE RESET DO MICROCONTROLADOR 00053 ; * * * * * * * * * * * * * * * * * * * * * * * * 00055 0000 00056 ORG 0X00000000 280E 00057 GOTO INICIO 00058 00059 ; * * * * * * * * * * * * * * * * * * * * * * * * 00060 ; * INTERRUPÇÕES 00061 ; * * * * * * * * * * * * * * * * * * * * * * * * 00062 0004 00063 ORG 0x0004 ;0004 00FE 00064 MOVWF W_TEMP ; W -> W_TEMP0005 0E03 00065 SWAPF STATUS,W ; STATUS -> W0006 00FF 00066 MOVWF STATUS_TEMP ; W -> ST0007 1283 00067 BCF STATUS,RP0 ; Assegura BK00008 0E7F 00070 FIMINT SWAPF STATUS_TEMP,W ; TROCA0009 0083 00071 MOVWF STATUS ; W -> STATUS000A 0EFE 00072 SWAPF W_TEMP,F ; TROCA000B 0E7E 00073 SWAPF W_TEMP,W ; TROCA000C 110B 00074 BCF INTCON,T0IF ; LIMPA O FLAG000D 0009 00075 RETFIE ; FINALIZA A INTERRUPÇÃO 00076 00077 ; * * * * * * * * * * * * * * * * * * * * * * * * 00078 ; * PROGRAMA PRINCIPAL 00079 ; * * * * * * * * * * * * * * * * * * * * * * * * 00080 000E 2817 00081 INICIO MOVLW D'0'0010 00A0 00084 MOVWF CONT0011 0AA0 00085 INCF CONT,F

Formato Linguagem Assembly● Comentários

● Iniciam por ; Tudo que vem depois até o final da linha é ignorado durante a montagem.

● Mnemônico● Abreviatura da instrução.

● Parâmetros● A maioria das instruções possui parâmetros.

Formato Linguagem Assembly● Tipos de parâmetros

● File (endereço da RAM interna)● Literal (número)● b (número do bit)● d (destino: pode ser W ou F)● Endereço de destino (nas instruções de desvio)

Formato Linguagem Assembly● Rótulo (demarca uma posição, endereço)

● Está na margem esquerda● Deve iniciar por letra ou _● 2º letra p frente pode ser qquer caractere

alfanumérico● Correto: INICIO35b, _ABC3FG etc● Errado: 3fby, OPÇÃO, VX%● Rótulo especial $: indica o próprio endereço

● Referência a rótulo: quando o símbolo do rótulo é um parâmetro de uma instrução ou diretiva (refere-se a um rótulo)

Formato Linguagem Assembly● Diretivas (são comandos para o programa

montador, não são instruções p o PIC)● ORG (Originate): determina o endereço a partir do

qual as próximas instruções serão montadas.● EQU (Equate): define uma relação entre um

símbolo e um valor constante.● CBLOCK ... ENDC: Permite definir vários símbolos

em endereços sequenciais.● #DEFINE sym txt : permite definir textos para

substituição.

Formato Linguagem Assembly● Diretivas (continuação)

● MACRO ..... ENDM : define uma macro, que é um #define muito mais poderoso pois pode conter parâmetros e definir várias instruções.

● #INCLUDE <arquivo> (ou “arquivo”): inclui todo o texto do arquivo citado na posição da diretiva.

● END: diretiva obrigatória, indica ao montador onde parar o processo de montagem.

Formato das instruções PIC

1. AÇÕES MOV (Move): Move um byte de origem para destino ADD: Soma dois valores SUB (Subtract): Subtrai AND: Faz um “E” lógico IOR (Inclusive OR): Faz um “OR” lógico XOR (Exclusive OR): Faz um “Exclusive OR” CLR (Clear): Zera um byte COM (Complement): Inverte os bits de um byte DEC (Decrement): Subtrai 1 INC (Increment): Soma 1 SWAP: Inverte os nibbles MSB e LSB de um byte

Formato das instruções PIC

... AÇÕES (continuação) RR (Rotate Right): Rotaciona os bits de um byte

uma posição à direita (o carry participa da rotação) RL (Rotate Left): Rotaciona os bits uma posição à

esquerda (o carry participa da rotação) BC (Bit Clear): Zera um bit BS (Bit Set): Seta um bit BT (Bit Test): Testa o bit (se é 0 ou 1) GOTO: vai para um endereço determinado CALL: vai para um endereço determinado mas

memoriza a posição atual para o retorno

Formato das instruções PIC

... AÇÕES (continuação) RETURN: Retorna ao local onde havia o CALL SLEEP: Entra em estado dormência (para poupar

energia) CLRWDT (Clear Watchdog): Restaura a contagem

do watchdog NOP (No Operation): Não faz nada, usado para

pequenos ajustes de tempo

Formato das instruções PIC

2. ESPECIFICADORES L (Literal): número constante F (File): endereço da RAM interna W (Work reg.): acumulador

3. REFERÊNCIAS f: Refere-se ao endereço de um file d: Refere-se ao destino W ou F (somente) b: Refere-se ao número do bit de um file k: Refere-se a um número constante

Formato das instruções PIC

4. AÇÃO CONDICIONAL S (Skip): pula a próxima instrução

5. CONDIÇÕES S (if set): se o bit testado for 1 C (if cleared): se o bit testado for 0 Z (if zero): se o byte for zero

Formato das instruções PIC

EXEMPLOS: MOVLW 0x1B

→ “Move Literal to Work”→ Move (copia) o valor 0x1B para o acumulador.

Ação

OrigemDestino

Valor (literal)

Formato das instruções PIC

EXEMPLOS: MOVWF 0x1B

→ “Move Work to File”→ Move (copia) o valor do acumulador para o file localizado no endereço 0x1B da RAM.

Ação

OrigemDestino

Endereço do File

Formato das instruções PIC

EXEMPLOS: BSF 0x21,3

→ “Bit Set File”→ Seta o bit 3 do file 0x21.

AçãoOrigem

Endereço do FileNum.do bit

Formato das instruções PIC

EXEMPLOS: BTFSC 0x21,3

→ “Bit Test File Skip if Cleared”→ Testa o bit 3 do file 0x21; se (o bit) for zero, pula a próxima instrução.

AçãoOrigem

Condição

Endereço do File

Açãocondicional

Num.do bit

Formato das instruções PIC

EXEMPLOS: DECF 0x1C,F

→ “Decrement File”→ Decrementa o valor do file 0x1C e coloca o resultado no próprio file.

AçãoOrigem

Endereço do FileDestino

Formato das instruções PIC

EXEMPLOS: DECFSZ 0x1C,F

→ “Decrement File Skip if Zero”→ Decrementa o valor do file 0x1C e coloca o resultado no próprio file; se (o byte) for zero, pula a próxima instrução.

AçãoOrigem

Condição

Endereço do File

Açãocondicional

Destino

Algoritmos/Fluxograma

Procedimento

Condição

delimitador início/fim

conector

Fluxograma

INICIO

CONT = 0

CONT ++

CONT = 9?S N

L1

L2

CONT.ASM● Item (a): Faça o algoritmo e o programa que

realize uma contagem na variável CONT desde 0 até 9 retornando novamente a 0 e repetindo novamente a contagem.

Algoritmo contador (item a)

INICIO

CONT = 0

CONT ++

CONT = 9?S N

L1

L2

L2 MOVLW 0X00 ;W=0MOVWF CONT ;W->CONT

L1 INCF CONT,F ;CONT+1->CONT

MOVF CONT,W ;CONT->WSUBLW 0x09 ;0x09-W->WBTFSS STATUS,Z ;Deu zero?GOTO L1 ;nãoGOTO L2 ;sim

CONT.ASM● Item (b): Modificar o programa anterior de

forma que a contagem seja regressiva de 9 a 0.● Item (c): Baseando-se nos anteriores, fazer um

programa que faça a contagem primeiramente crescente de 0 a 9, tornando-se decrescente até 0, voltando a ficar crescente até 9 e assim sucessivamente.

● Item (d): Fazer um programa que faça a contagem crescente de 0 a 9, tornando-se decrescente até 1, tornando-se crescente até 10, tornando-se decrescente até 2, tornando-se crescente até 11 e assim por diante.

Ciclos de máquina● Todo μP usa os oscilações de clock para

cadenciar suas operações (fCLK).● O ciclo de máquina é um conjunto de sinais de

controle que forma uma unidade de execução.● μP 8051: 1 cyc = 12 clocks; instruções de 1, 2

e 3 ciclos de máquina.● Nos PIC: 1 cyc = 4 clocks; todas as instruções

são de 1 ciclo de máquina.● Período do ciclo de máquina: TCYC = 4 / fCLK

Ciclos de máquina● Esquema fetch+exec (pipeline)

fetch exec

fetch exec

fetch exec

1ª instr.

2ª instr.

3ª instr.

t

→ 1 ciclo de máquina para ler a instrução;→ 1 ciclo de máquina para executar a instrução.(execução da instrução atual e leitura da próximaacontecem simultaneamente).

Ciclos de máquina● Instruções que provocam a “quebra da

sequência”:● GOTO, CALL, RETURN, RETLW, RETFIE.

● Instruções que podem provocar a quebra se condição verdadeira:● BTFSS, BTFSC, INCFSZ, DECFSZ

● Quando ocorre a quebra, a próxima instrução precisará de 2 ciclos para ser executada (leitura + execução).

Tempo de execução de uma rotina

ciclosMOVLW D'9' 1MOVWF C1 1DECFSZ C1,F 8·1+1·2GOTO $-1 8·2

Total = 28 ciclos

fCLK = 8MHz → TCYC = 0,5μs

T = 28·TCYC = 14μs

(8 vezes 1 ciclo + 1 vez 2 ciclos)(8 vezes 2 ciclos)

Tempo de execução de uma rotina

ciclosMOVLW x 1MOVWF C1 1DECFSZ C1,F (x-1)+2GOTO $-1 (x-1)·2

Total = 3x+1 ciclos

ncyc = T / TCYC = 65μs / 0,5μs = 130 ciclos

130 = 3x + 1 → x = 43

Incógnita x

Exemplo: Deseja-se obter o valor de x para gerar um intervalode 65μs:

Tempo de execução de uma rotina ciclos

MOVLW x 1MOVWF C1 1MOVLW y 1MOVWF C2 1DECFSZ C2,F (y-1)+2+(x-1)·(255+2)GOTO $-1 (y-1)·2+(x-1)·255·2DECFSZ C1,F (x-1)+2GOTO $-3 (x-1)·2

Total = 770x+3y-765 ciclos

Incógnita xIncógnita y

Tempo de execução de uma rotina

ncyc = T / TCYC = 50ms / 0,5μs = 100.000 ciclos

1º) Considera-se y=0:

100.000 = 770x - 765 → x = 130

2º) Recalcula-se para obter y:

100.000 = 770(130) + 3y - 765 → y = 222

Exemplo: Deseja-se obter o valor de x e de y para gerar um intervalode 50ms:

sempre arredondado para baixo

Circuitos básicosAcionamento de LEDs

+5

+5 +5

Circuitos básicosLeitura de botões

+5 +5

Circuitos básicosDisplay de 7 segmentos

c

a

e

bf g

ptd

Circuitos básicosAcionamento de relês

+5

Circuitos básicosAcionamento de display LCD

6 5 2 17 4913 1114 38 161512 10

RSRW CD7 D6 D5 D3 +5D2 D1 D0D4 VCC GNDE

Circuitos básicosLeitura de teclado matricial

Circuitos básicosAcionamento de MOSFET

Circuitos básicosSinal de entrada para A/D

Portas de I/O digital● Registradores TRIS e PORT

Documentação PICGENIOS

No servidor \\newton encontram-se os documentos:● manual_picgenios.pdf:

Explica de forma bastante didática os circuitos da placa e traz pequenos exemplos de programas em C.

● esquema_picgenios.pdf:Mostra o diagrama esquemático de todos os circuitos da placa

LEDS.ASM● Item (a): Fazer um programa que faça piscar

todos os leds conectados à porta D a uma freqüência de 2 Hz.

● Item (b): Modificar o programa anterior de forma que os leds pisquem 10 vezes no padrão 11111111 / 00000000, outras 10 vezes no padrão 11110000 / 00001111 e outras 10 vezes no padrão 10101010 / 01010101 repetindo tudo novamente.

LEDS.ASM● Item (c): Fazer um programa que faça um led

aceso ir percorrendo um a um dos bits desde o sinal RD0 até RD7 seqüencialmente, invertendo o sentido e percorrendo de RD7 até RD0, invertendo novamente e assim por diante. O tempo que cada led fica aceso é de 150ms.

Macros● Permitem definir estruturas de programa

parametrizadas● Parecem “funções” das linguagens de alto nível● Diretivas MACRO, LOCAL e ENDM● Sintaxe:

simbolo MACRO p1,p2,...LOCAL simb2,...(instruções deprograma)ENDM

MacrosCOMPARA MACRO FILE,K,DIF

MOVF FILE,WSUBLW KBTFSS STATUS,ZGOTO DIFENDM

MOVLF MACRO FILE,KMOVLW KMOVWF FILEENDM...

REP MOVLF CONT,D'0'L1 INCF CONT,F

COMPARA CONT,D'10',L1GOTO REP

Definição da macroCOMPARA

Definição da macroMOVLF

Programa contagemde 0 a 10 com usodas macros

Macros...

REP MOVLF CONT,D'0'MOVLW D'0'MOVWF CONT

L1 INCF CONT,FCOMPARA CONT,D'10,L1

MOVF CONT,WSUBLW D'10BTFSS STATUS,ZGOTO L1

GOTO REP

Expansão da macroMOVLF

Expansão da macroCOMPARA

Comparações Maior e Menor● Como implementar a comparação CONT>15?● Os μP's sempre usam somas, mesmo para

realizar uma subtração:

5 – 3 → 5 + (-3) → 05h + FDh

0000.0101 (05h)1111.1101 (FDh=-3)

0000.0010 (02h)

+

1 1111 1 1 vai-uns

carry

val1 val2

Comparações Maior e Menor● De maneira similar poderia se fazer o cálculo

invertendo os valores de posição

3 – 5 → 3 + (-5) → 03h + FBh

0000.0011 (05h)1111.1011 (FDh=-3)

1111.1110 (FEh=-2)

+

0 11 vai-uns

carry

val1 val2

Comparações Maior e Menor

Por fim, verificamos que se os valores forem iguais, o carry será 1.Daí se pode afirmar que:● Se val1 ≥ val2 → carry=1● Se val1 < val2 → carry=0

BOTOES.ASM● Item (a): Fazer um programa que mantenha os

leds acesos enquanto o botão 1 estiver pressionado. Ao se soltar o botão os leds devem ser apagados.

● Item (b): Modificar o programa anterior para que a cada pressionamento do botão seja alternado o estado aceso/apagado dos leds. Para realizar isto é necessário introduzir um mecanismo de intertravamento do botão.

BOTOES.ASM (B): INTERTRAVAMENTO

INICIO

CONFIG

COMPF PORTD,F

BOTAO = 1?

S

N

L1

BOTAO = 0?

S

N

A

A

ação

BOTOES.ASM● Item (c): Modificar o programa anterior para

incluir o algoritmo de filtragem de ruído com detecção de borda. (Obs.: dada a velocidade do µC, deve-se alongar a janela de tempo de filtragem inserindo algumas instruções NOP dentro da rotina de filtragem).

RUÍDO EM BOTÕES

ruído

botão solto

botão pressionado

janela deconfirmação

da borda

● Quando botão solto: BT=1.● Quando botão pressionado: BT=0.● É necessário memorizar o estado

anterior (BTant).● Inicialmente BTant=1; antes de

iniciar o ruído: BT=1; como BTant=BT: descarta-se a possibilidade de borda e termina-se o processo de filtragem.

● Depois de iniciar o ruído, algumas vezes BT=0 e outras vezes BT=1. Se BT=1 recai-se no caso anterior (BTant=BT) e termina-se o processo de filtragem.

● Após o final do ruído, todas as leituras são BT=0. A cada leitura BT ≠ BTant, diminui-se a contagem do filtro. Quando essa contagem chegar a zero, confirma-se a borda.

● Atualiza-se BTant.

BT=0BT=1 BT=1

BT=0

(BTant=1)

BT=1

(BTant=1)

BT=0

(BTant=1) (BTant=0)

Macros

IGUAIS

BTant = 0?

S

N

L2

BTant = 1?

BT = 0?

DIFERENTES

COMPBITS

S

NS

N

MacrosCOMPBITS MACRO F1,B1,F2,B2,DIFERENTES

LOCAL L1,IGUAISBTFSS F1,B1GOTO L1BTFSS F2,B2GOTO DIFERENTESGOTO IGUAIS

L1 BTFSC F2,B2GOTO DIFERENTES

IGUAISENDM

FILTRAGEM (DEBOUNCE)

SUBROTINAS

Sem iterrupção

Rotina de tratamento do movimento do mouse

Programa do editor de textos

Memória do computador

1

2

Interrupções● Até agora: programas eram uma estrutura

única de execução● Interrupções: paralisam o programa normal e

vão executar uma rotina especial (tratamento da interrupção)

● Ao final, ocorre o retorno ao programa normal para continuar sua execução

● Finalidade: ações imediatas (que não podem esperar)

Interrupções● Diagrama da estrutura das interrupções● Registradores de configuração● GIE, PEIE● Flags● Detecção da fonte da interrupção

Interrupções● Vetor de interrupção: endereço H'0004'● Instrução de retorno: RETFIE● Salvamento de contexto

Necessário pois podem ocorrer resultados imprevistos após o retorno da interrupção.

● Nos PIC é importante salvar: W, STATUS e PCLATH (em programas maiores que 2KBytes)

Salvamento de contexto ORG 0x0004 ; ENDEREÇO DO VETOR DE INTERRUPÇÕES MOVWF W_TEMP ; W → W_TEMP SWAPF STATUS,W ; TROCA NIBBLES STATUS → W MOVWF STATUS_TEMP ; W → STATUS_TEMP SWAPF PCLATH,W ; TROCA NIBBLES PCLATH → W MOVWF PCLATH_TEMP ; W → PCLATH_TEMP BCF STATUS,RP0 ; Assegura o BANCO 0 ativo; * * * * * * * * * * * * * * * * * * * * * * * * * * * * *FIMINT SWAPF PCLATH_TEMP,W ; TROCA NIBBLES PCLATH_TEMP → W MOVWF PCLATH ; W → PCLATH SWAPF STATUS_TEMP,W ; TROCA NIBBLES STATUS_TEMP → W MOVWF STATUS ; W → STATUS SWAPF W_TEMP,F ; TROCA NIBBLES W_TEMP → W_TEMP SWAPF W_TEMP,W ; TROCA NIBBLES DE W_TEMP → W RETFIE ; FINALIZA A INTERRUPÇÃO

Timers● São contadores digitais● Existem 3 timers: Timer 0, Timer 1 e Timer 2

bits prescaler Hab. Interrup. Sinalizador

Timer 0 8 1:2 a 1:256 INTCON.TMR0IE INTCON,TMR0IF

Timer 1 16 1:1 a 1:8 PIE1,TMR1IE PIR1,TMR1IF

Timer 2 8 1:1 a 1:16 PIE1,TMR2IE PIR1,TMR2IF

Timers● Estouro: quando ultrapassa o valor máximo e

retorna a zero.● Quando ocorrer estouro, o bit sinalizador é

automaticamente setado.● O bit sinalizador deve ser zerado usando a

instrução BCF para que o próximo estouro possa ser sinalizado.

● Ao gerar estouro, se a interrupção estiver habilitada, ocorre a interrupção.

Timer 0OPTION_REG

RBPU INTDEG T0CS T0SE PSA PS2 PS1 PS0

DISP7.ASM

Tabela de Consulta

LINGUAGEM C● Ambiente CCS● Linguagem C dentro do MPLAB● Definições de acesso aos registradores● Reconstrução dos programas anteriores em C

Comandos em C para o PICConfigurar TRIS

● set_tris_b (0xFF);● set_tris_d (0x00);

Escrever/ler um byte na porta PORT● output_d (0x2d);● valor = input_b ();

Configurar um sinal (pino) como saída ou entrada● output_drive (PIN_E1);● input_drive (PIN_C2);

Comandos em C para o PICSetar ou zerar um bit de sinal (pino)

● output_bit (PIN_E2, 1);● output_bit (PIN_E1, 0);● ouput_high (PIN_C2);● #define EnDig1 PIN_A2● output_low (EnDig1);● output_toggle (PIN_C6); (alterna 0 e 1)

Ler um bit de sinal (pino)● varbit = input (PIN_B4);● if ( !input(PIN_B0) ) acao();

Comandos em C para o PICDeclarações # não terminam por ponto-e-vírgula

● #define EnDig PIN_A2● #bit botao PIN_B3

Declaração de uma variável de bit● boolean varbit;● BYTE bitmap; (primeiro um byte)● #bit botao bitmap.0 (depois um bit do byte)● struct {

int1 clbit : 1;int1 dsbit : 1;

} campo;

Setar ou zerar uma variável de bit (não funciona para sinais (pinos) )

● varbit = 0;● botao = 1;● campo.dsbit = 1;

Comandos em C para o PIC

Setar, zerar e testar bits de um byte● int8 var;● bit_clear (var,2);● bit_set (var,5);● bit_test (var,0);

Comandos em C para o PIC

Atrasos de tempo● #use delay(CLOCK=8000000) (no início)● delay_cycles (5); (5 ciclos de máquina)● delay_us (50); (50us)● delay_ms (30); (30ms)

LCD.ASM

PROJETO FINAL