Interromper uma interrupção no PIC16F877

O

octron

Guest
Oi, é possível para uma sub-rotina de interrupção em um 16F877 de ser interrompida por uma interrupção outros?? Obrigado
 
Quando a interrupção é iniciado todas as outras interrupções estão desativadas automaticamente pelo clearing flag GIE, mas é controlador de configuração bandeira correspondente se houver evento de interrupção está vindo. No final de interrupção, instrução RETFIE está voltando de interrupção com configuração GIE (permitir interrupção). Se qualquer outro evento de interrupção está vindo durante a interrupção, ele será executado após esta interrupção.
 
na verdade, é possível. Normalmente quando você escreve uma rotina serviço interrupção (ISR) a primeira coisa que você faz quando entrar no loop ISR é dissable todas as interrupções. então você o serviço de interrupção (corrigir a razão pela qual foi chamado em primeiro lugar). em seguida, antes de sair do ISR você ativar todas as interrupções novamente. no entanto, se você não desabilitar todas as interrupções, então eu suponho que seria possível chamar uma interrupção enquanto dentro de um interrupção. tenha em mente que o contador de programa só tem uma pilha de nível 8. aqui é um teste. conjunto PIC chip para interrupção em algum valor contra ... então, quando interrupção ocorre, tem o código dizer: ISR: * não desative interrupts endless_loop: goto END endless_loop ISR o código fica preso em um loop infinito. enquanto é looping em torno de causar uma "interrupção em mudança" para o chip PIC. dentro desse ISR têm uma virada LED ON. isso provavelmente poderia ser simulado no Proteus ... Mr.Cool Mr.Cool
 
Como Mr. Cool disse, isso pode ser feito. Normalmente, depois de atender a uma interrupção de executar um comando retfie que define o bit GIE de volta. Ninguém pode impedi-lo de reativar interromper o serviço, antes totalmente a interrupção anterior, por isso pode ser re-interrompida. MAS, é muito arriscado e várias coisas devem ser consideradas. É muito importante para primeiro reconhecer a interrupção e, em seguida, definir o bit GIE. Porque se você não limpar o bit xxxIF, re-definindo o GIE manterá disparar novamente e novamente a mesma interrupção infinitamente e poof, você está preso ... Próximo ter em mente que o mesmo código no início da interrupção será re-executado. Por exemplo, normalmente você salvar W e STATUS ao entrar no int e restaurá-lo na saída. Se estiver usando um método static salvar por exemplo, uma posição de memória único para cada registro, se você re-interrompê-lo vai perder o W inicial e valores STATUS. E, claro, há sempre a pilha de oito níveis de profundidade eu acho que seria melhor usar polling dentro da interrupção, mas só você pode decidir isso. Regards toxadi
 
Se você realmente precisa isso, você deve usar um cpu PIC18 por exemplo PIC18F452 que é pino compatível para o 16F877. Este cpu tem 2 prioridades de interrupção e interrupção de alta prioridade pode interromper a interrupção de baixa prioridade. cumprimentos
 
Eu acho que não há nenhuma maneira para salvar W & SFR corretamente em interromper aninhados para PIC16 série PIC18 série Por que pode ser feito usando um dos FSRs
 
Lembre-se U tem apenas 7 posições em sua pilha para salvar o Contador de Programa .... às vezes eles são poucos ... Você deve salvar o PC sozinho por negligenciar o retfie e realizando um salto até aqui.
 

Welcome to EDABoard.com

Sponsor

Back
Top