universidade tecnolÓgica federal do paranÁ...
Post on 18-Jan-2019
213 Views
Preview:
TRANSCRIPT
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
amauriassef@utfpr.edu.bramauriassef@utfpr.edu.br
REGISTRADORES BIDIRECIONAIS
● Tipos de FFs (RS, D, JK)● Buffer tri-state● Habilitação● Registradores paralelos bidirecionais● Barramento
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 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
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● 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
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
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
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 display LCD
6 5 2 17 4913 1114 38 161512 10
RSRW CD7 D6 D5 D3 +5D2 D1 D0D4 VCC GNDE
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)
MacrosCOMPBITS MACRO F1,B1,F2,B2,DIFERENTES
LOCAL L1,IGUAISBTFSS F1,B1GOTO L1BTFSS F2,B2GOTO DIFERENTESGOTO IGUAIS
L1 BTFSC F2,B2GOTO DIFERENTES
IGUAISENDM
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.
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)
top related