duvidas interrupções por timer

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

duvidas interrupções por timer

Mensagem por marcuscosta1957 em Dom 24 Ago - 21:51:21

Pessoal me ajudem por favor, sou técnico em eletrônica, e os microprocessadores pic sem duvida eh uma ferramenta incrivel pessoal adaptei este codigo em mikroc, eh um contador multiplexado com 3 display
tem tres botoes up , down e o botao de tempo, seguinte o programa funciona bem, mas quando chega a ser acionado o botao de tempo, meu deus ele trava, sei que tenho muito que estudar sobre esta ferramenta
mas galera da uma ajuda ai. Pq trava o delay da travamentos em interrupções? como posso resilver isso, ajuda ai pessoal por favor. o codigo que adaptei esta assim


        void main(){
// "0" "1" "2" "3" "4" "5" "6" "7" "8" "9"
unsigned char ucMask[] = {0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9};
/* Variavel do tipo matriz que armazena os valores correspondentes ao numero
para ser mostrado no display de 7 segmentos */
unsigned char ucStatus_inc; // Variavel de travamento do incremento.
unsigned char ucStatus_dec; // Variavel de travamento do decremento.
unsigned int uiContador; // Variavel de armazenamento do contador.
unsigned int uiValor; // Variavel auxiliar para exibição do contador.
unsigned int uiValor1; // Variavel auxiliar para exibição do contador.



TRISB.RB4=1; // Define o pino RB0 do PORTB como entrada.
TRISB.RB5=1; // Define o pino RB1 Do PORTB como entrada.


TRISA.RA1=0; // Define o pino RA3 do PORTA como saida(Seleção Display 2).
TRISA.RA2=0; // Define o pino RA4 do PORTA como saida(Seleção Display 3).
TRISA.RA3=0; // Define o pino RA5 do PORTA como saida(Seleção Display 4).

TRISB = 0b11110000; // Define todos os pinos Do PORTD como saida.

ucStatus_inc=0; // Inicializa a variavel com o valor 0.
ucStatus_dec=0; // Inicializa a variavel com o valor 0.
uiContador=0; // Inicializa a variavel com o valor 0.

while(1){ // Aqui definimos uma condição sempre verdadeira como parametro, portanto todo o bloco será repetido indefinidamente.

// Le Tecla E Incrementa Contador.
if((PORTB.RB4==0)&&(ucStatus_inc==0)){ // Incrementa somente uma vez quando a tecla for pressionada.
ucStatus_inc=1; // Variavel de travamento do incremento.
uiContador++; // Esse operador aritmetico(++) realiza o mesmo que variavel = variavel + 1.








if(uiContador==21){
/* Essa comparação é feita pois nosso valor máximo é 9999. */
uiContador=20;
}


}
if((PORTB.RB4==1)&&(ucStatus_inc==1)){ // Volta a disponibilizar a opção de incremento quando a tecla for solta.
ucStatus_inc=0;
}
// Le tecla e decrementa contador.
if((PORTB.RB5==0)&&(ucStatus_dec==0)){ // Decrementa somente uma vez quando a tecla for pressionada.
ucStatus_dec=1; // Variavel de travamento do decremento.
uiContador--; // Esse operador aritmetico(--) realiza o mesmo que variavel = variavel - 1.
if(uiContador>95){
/* Essa comparação é feita pois ao decrementar variaveis sem sinal o
valor irá para o valor máximo da variavel que no caso é 65535. */
uiContador=0;
}
}
if((PORTB.RB5==1)&&(ucStatus_dec==1)){ // Volta a disponibilizar a opção de incremento quando a tecla for solta.
ucStatus_dec=0;
}



if (uiContador==1)
{
uiValor1=0x2;

}
if (uiContador==2)
{
uiValor1=0x4;
if(portb.RB6=0)
{
portd.rd7=1;
delay_ms(1000);
portd.rd7=0;
}
}

if (uiContador==3)
{
uiValor1=0x6;

}
if (uiContador==4)
{
uiValor1=0x8;

}




if(uiContador<=0){
/* Essa comparação é feita pois nosso valor máximo é 9999. */
uiContador=0;
}


uiValor = uiValor1; // Coloca o conteudo da variavel do contador na varaivel auxiliar.

// Mostra valor da unidade.
PORTB = ucMask[uiValor%10]; // Pega modulo (resto) da divisão por 10 e coloca o valor no PORTD.
PORTA.RA3 = 1; // Liga o transistor associado ao display 1.
Delay_ms(2); // Delay para escrita no display.
PORTA.RA3 = 0; // Desliga o transistor associado ao display 1.
uiValor/=10; // Divide variavel por 10.
// Mostra valor da dezena.
PORTB = ucMask[uiValor%10];
PORTA.RA2 = 1;
Delay_ms(2);
PORTA.RA2 = 0;
uiValor/=10;

PORTB = ucMask[uiValor%10];
PORTA.RA1 = 1;
Delay_ms(2);
PORTA.RA1 = 0;
uiValor/=10;

}
}
Anexos
contador-multplex1.bmp (32 Kb) Baixado 37 vez(es)

marcuscosta1957

Mensagens : 1
Data de inscrição : 11/08/2014

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo


 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum