microprocessadores 1º ano - lecomalibaba.dei.uminho.pt/~csilva/micc/download/a9-mic.pdf · 2010....

22
Microprocessadores 1º Ano - LECOM Universidade do Minho Dept. De Electrónica Industrial Universidade do Minho Dept. De Electrónica Industrial 1

Upload: others

Post on 08-Feb-2021

2 views

Category:

Documents


0 download

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.