microprocessadores 1º ano - lecomalibaba.dei.uminho.pt/~csilva/micc/download/a9-mic.pdf · 2010....
TRANSCRIPT
-
Microprocessadores1º Ano - LECOM
Universidade do MinhoDept. De Electrónica IndustrialUniversidade do MinhoDept. 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 ?
O suporte a estruturação do código é feita através das instruções de ‘call’ e ‘return’.
Estrutura de uma rotina:pontoDeEntrada
...
return
-
Rotinas e Sub-rotinas
• Considere o seguinte código:...movf PESO1, Wcall somamovwf TOTAL1movf PESO2call somamovwf TOTAL2...
entry pointcódigo
da rotinareturn
código doprograma
callmais
códigocallmais
código
fluxo
prin
cipa
l de
exec
ução
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).
Por esta razão, o processador é capaz de comutar o ponto de execução através da manipulação do registo pc.
Temos então que as instruções de call e return irão manipular o registo pc.
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.
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.
-
Rotinas e Sub-rotinas
• Qual é o problema com a descrição anterior ?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 ?
Na resolução deste problema, os processadores usam uma memória especial chamada stack.
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.
-
• Considere o seguinte código:...movf PESO1, Wcall somamovwf TOTAL1movf PESO2call somamovwf TOTAL2...
Rotinas e Sub-rotinas
• Até ao instante da execução da instrução ‘movf PESO1, W’, ainda não foi efectuado qualquer chamada a sub-rotinas, logo o stack pointer aponta para o início da stack.
-
• Considere o seguinte código:...movf PESO1, Wcall somamovwf TOTAL1movf PESO2call somamovwf TOTAL2...
Rotinas e Sub-rotinas
• 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.
soma
-
• Considere o seguinte código:soma
...
return
...movf PESO1, Wcall somamovwf TOTAL1movf PESO2call somamovwf TOTAL2...
Rotinas e Sub-rotinas
• 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 ?
-
Temporizadores / Contadores
• Temporizadores e contadores de eventos
O PIC16F84A tem uma unidade de temporização e contagem: timer 0
O timer 0 pode operar como temporizador ou como contador de eventos externos ao microcontrolador.
-
Temporizadores / Contadores
No modo de temporização, o registo TMR0 éincrementado a cada ciclo de instrução, também chamado ciclo de máquina.
Notar que cada ciclo de instrução corresponde a 4 ciclos de relógio.
-
Temporizadores / Contadores
No modo de contagem, o registo TMR0 do timer éincrementado sempre que há uma transição no pino RA4/T0CKI.
O incremento pode ser feito em função de uma transição positiva ou negativa – programável.
-
Temporizadores / Contadores
Notas:A contagen dos eventos externos e dos eventos internos (ciclos de relório) é efectuado no registo TMR0.
Como este registo é de 8 bits, então a conatgem máxima seráde 256 unidades.
Sempre que ocorre um overflow, ou seja, quando a contagem passa de 0xFF (255) para 0, o bit T0IF do registo INTCON éactivado – ‘1’.
Este bit deve ser apagado pelo programador.
-
Temporizadores / Contadores
• O uso do registo TMR0 limita as temporizações para 256xTOSC.
• O que fazer para conseguir temporizações superiores ?
Solução #1Posso aumentar a resolução do temporizador por softwareincrementando uma variável sempre que ocorra um overflow.
Solução #2Uso do prescaler.
-
Temporizadores / Contadores
• O que é o prescaler ?
-
Temporizadores / Contadores
• Principais registos
-
Temporizadores / Contadores
-
Temporizadores / Contadores
-
Temporizadores / Contadores
• Considerações práticas:
Timer 0 está a operar como temporizador: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:Visto o sinal externo ter que ser sincronizado com o relógio interno do PIC verifica-se que:
O sinal externo não pode ter um período inferior a 4TOSC(TOSC é o período do relógio do PIC).
O incremento do registo de contagem acontecerá com um atraso de dois ciclos de relógio – 2TOSC.
-
Temporizadores / Contadores
Questões ou dúvidas ?
-
Temporizadores / Contadores
• Problema.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.