Microprocessadores 1º Ano - LECOM

Propaganda
Microprocessadores
1º Ano - LECOM
Universidade do Minho
Dept. De Electrónica Industrial
1
Rotinas e Sub-rotinas
• O que é a programação estruturada ?
• Como a linguagem assembly do PIC suporta
a programação estruturada ?
9
O suporte a estruturação do código é feita
através das instruções de ‘call’ e ‘return’.
9
Estrutura de uma rotina:
pontoDeEntrada
...
return
1
Rotinas e Sub-rotinas
• Considere o seguinte código:
movf
PESO1, W
call
soma
movwf TOTAL1
movf
PESO2
call
soma
movwf TOTAL2
...
fluxo principal de execução
...
código do
programa
entry point
call
código
da rotina
mais
código
return
call
mais
código
De que forma o processador realiza a comutação da
execução do código entre a rotina e a sub-rotina ?
Rotinas e Sub-rotinas
• Sabemos que o endereço da instrução a ser
executada está armazenado no registo program
counter (pc).
9
Por esta razão, o processador é capaz de comutar o
ponto de execução através da manipulação do registo
pc.
9
Temos então que as instruções de call e return irão
manipular o registo pc.
9
A instrução call irá colocar o endereço da rotina que
pretendemos chamar em pc, onde a label no início da rotina
indica o ponto de entrada.
9
A instrução return, por sua vez, colocará o endereço da
instrução a seguir ao call no registo pc. Desta forma a execução
será retomada normalmente após a chamada da sub-rotina.
2
Rotinas e Sub-rotinas
• Qual é o problema com a descrição anterior ?
9
Na descrição da instrução return foi dito que esta
colocará o endereço de retorno, que é o endereço da
instrução a seguir ao call da sub-rotina, no registo pc.
Mas de que forma a instrução return sabe qual será o
endereço de retorno ?
9
Na resolução deste problema, os processadores usam uma
memória especial chamada stack.
9
9
O nome stack reflecte o comportamento desta memória que se
comporta como uma pilha de dados: LIFO (last in first out)
Esta memória é usada pelo processador para armazenar o
endereço de retorno.
Rotinas e Sub-rotinas
• A memória de stack tem um ponteiro
que indica o topo da stack.
• Este ponteiro chama-se sp, stack
pointer.
• Após reset este aponta para a posição
0.
• No microcontrolador PIC, a memória stack não pode ser manipulada
directamente, mas apenas indirectamente através das instruções: call e
return.
• Como a stack do PIC tem apenas 8 palavras, então não é possível ter
uma profundidade de chamada superior a 8.
• Alguns processadores tem instruções especiais, push e pop, que
permitem usar a memória stack para guardar dados.
3
Rotinas e Sub-rotinas
• Considere o seguinte código:
...
movf
PESO1, W
call
soma
movwf TOTAL1
movf
PESO2
call
soma
movwf TOTAL2
...
• Até ao instante da execução da instrução
‘movf PESO1, W’, ainda não foi
efectuado qualquer chamada a subrotinas, logo o stack pointer aponta para
o início da stack.
Rotinas e Sub-rotinas
• Considere o seguinte código:
...
movf
PESO1, W
call
soma
movwf TOTAL1
soma
movf
PESO2
call
soma
movwf TOTAL2
...
• Na execução da instrução ‘call soma’ são
executadas as seguintes micro-operações:
1. O endereço da instrução seguinte, ‘movwf
TOTAL1’, que se encontra em PC é
guardado na stack.
2. O stack pointer é incrementado.
3. O endereço da rotina ‘soma’ é colocado em
PC.
4
Rotinas e Sub-rotinas
• Considere o seguinte código:
soma
...
return
...
movf
call
movwf
movf
call
movwf
...
PESO1, W
soma
TOTAL1
PESO2
soma
TOTAL2
• Na execução da instrução ‘return’ da
rotina ‘soma’ são executadas as seguintes
micro-operações:
1. O endereço da instrução guardado na
stack é colocado em PC.
2. O stack pointer é decrementado.
• A execução retoma com a instrução
‘movwf TOTAL1’
Rotinas e Sub-rotinas
Questões ou dúvidas ?
5
Temporizadores / Contadores
• Temporizadores e contadores de eventos
9
O PIC16F84A tem uma unidade de
temporização e contagem: timer 0
9
O timer 0 pode operar como temporizador ou
como contador de eventos externos ao
microcontrolador.
Temporizadores / Contadores
9
No modo de temporização, o registo TMR0 é
incrementado a cada ciclo de instrução, também
chamado ciclo de máquina.
9
Notar que cada ciclo de instrução corresponde a 4 ciclos
de relógio.
6
Temporizadores / Contadores
9
No modo de contagem, o registo TMR0 do timer é
incrementado sempre que há uma transição no pino
RA4/T0CKI.
9
O incremento pode ser feito em função de uma transição
positiva ou negativa – programável.
Temporizadores / Contadores
9
Notas:
9
A contagen dos eventos externos e dos eventos internos (ciclos
de relório) é efectuado no registo TMR0.
9
Como este registo é de 8 bits, então a conatgem máxima será
de 256 unidades.
9
Sempre que ocorre um overflow, ou seja, quando a contagem
passa de 0xFF (255) para 0, o bit T0IF do registo INTCON é
activado – ‘1’.
9
Este bit deve ser apagado pelo programador.
7
Temporizadores / Contadores
• O uso do registo TMR0 limita as temporizações
para 256xTOSC.
• O que fazer para conseguir temporizações
superiores ?
9
Solução #1
9
9
Posso aumentar a resolução do temporizador por software
incrementando uma variável sempre que ocorra um overflow.
Solução #2
9
Uso do prescaler.
Temporizadores / Contadores
• O que é o prescaler ?
8
Temporizadores / Contadores
• Principais registos
Temporizadores / Contadores
9
Temporizadores / Contadores
Temporizadores / Contadores
• Considerações práticas:
9
Timer 0 está a operar como temporizador:
9
9
Quando o registo TMR0 é escrito, a contagem deste é
parada por dois ciclos de instrução (8 ciclos de relógio).
Timer 0 está a operar como contador:
9
Visto o sinal externo ter que ser sincronizado com o
relógio interno do PIC verifica-se que:
9
O sinal externo não pode ter um período inferior a 4TOSC
(TOSC é o período do relógio do PIC).
9
O incremento do registo de contagem acontecerá com um
atraso de dois ciclos de relógio – 2TOSC.
10
Temporizadores / Contadores
Questões ou dúvidas ?
Temporizadores / Contadores
• Problema.
9
Sabendo que dispõe de um sistema com um
microcontrolador PIC 16F84A com um cristal de
4 MHz, escreva um programa para gerar uma
onda quadrada com uma frequência de 10 KHz.
11
Download