Microcontroladores
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

duvidas interrupções por timer

Ir para baixo

duvidas interrupções por timer Empty duvidas interrupções por timer

Mensagem por marcuscosta1957 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
duvidas interrupções por timer Download?action=showthumb&id=3
contador-multplex1.bmp (32 Kb) Baixado 184 vez(es)

marcuscosta1957

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

Ir para o topo Ir para baixo

Ir para o topo


 
Permissões neste sub-fórum
Não podes responder a tópicos