Coloquei como saída, apanas o RB0 como entrada. Lembrando que no simulado está correto. Apenas no Físico que tenho que aterrar o Rb4 para que funcione.
segue o código completo:
int i=0,j=0,k=0, l=0; // Variáveis incrementais dos contadores
int vetor[10]; // Declaração do vetor que armazena a sequencia das entradas
void temp1()
{
contagem = 0;
while (contagem <= 1000)
{
}
}
void temp2()
{
contagem = 0;
while (contagem <= 500)
{
}
}
void limpavetor()
{
i=0;
j=0;
k=0;
l=0;
for (l=0;l<=9;l++)
{
vetor[l] = 0;
}
}
void interrupt() // Função de interrupção
{
if(INTCON.TMR0IF ==1)
{
contagem++; //para cada interrpção do TMR0 incrementa a variável contagem
TMR0 = 0;
INTCON.TMR0IF = 0; //limpa o overflow.
}
if(INTCON.INTF == 1) // Verificação de nível lógico alto da porta RB0(flag INTF)
{
limpavetor();
portb.rb6 = 1;
delay_ms(1000);
portb.rb6 = 0;
INTCON.INTF = 0;
}
}
void record()
{
limpavetor();
while (porta.ra4 != 1)
{
if(porta.RA1== 1 )
{
while(porta.RA1==1)
{
}
vetor= 10;
i=i+1;
temp2();
//delay_ms(500);
}
if(porta.RA2== 1 )
{
while(porta.RA2 == 1)
{
}
vetor= 20;
i=i+1;
temp2();
//delay_ms(500);
}
if(porta.RA3 == 1)
{
while(porta.RA3 == 1)
{
}
vetor=30;
i=i+1;
temp2();
//delay_ms(500);
}
}
}
void play()
{
portb.rb5 = 1;
temp1();
portb.rb5=0;
temp1();
for(j = 0;j <= 9;j++)
{
if(vetor[j] == 10)
{
portb.rb1=1;
temp1();
portb.rb1=0;
temp1();
}
if(vetor[j] == 20)
{
portb.rb2=1;
temp1();
portb.rb2=0;
temp1();
}
if(vetor[j] == 30)
{
portb.rb3=1;
temp1();
portb.rb3=0;
temp1();
}
}
limpavetor();
}
void main()
{
TRISA= 1;
PORTA=0;
TRISB = 0B00000001;
PORTB = 0x00;
CMCON=7; //comparadores Desativados
INTCON.GIE = 1;
INTCON.PEIE = 1;
INTCON.INTE = 1;
INTCON.TMR0IE = 1;
OPTION_REG.INTEDG = 1;
OPTION_REG = 0b10000001;
TMR0 = 0;
while(1)
{
record();
play();
}
}