Porta B com ICSP, Serial por software, Reed Switch e RTC

Pessoal, estou enfrentando problemas com a int_rb para realizar o incremento (contagem) de uma variável quando um reed switch é acionado.
Às vezes conta, às vezes não e fica nessa intermitência. O problema só ocorre quando faço a checagem para saber se existe algum dado disponível da serial por software. Ver código abaixo.
Se eu cometo a parte do if (kbhit(TECLADO)) o incremento da variável passa a funcionar perfeitamente. No proteus tudo é perfeito, mas na vida real dá esse problema.
A porta B está com todos os pinos em uso:
pino RB7 - ICSP
pino RB6 - ICSP
pino RB5 - TX (teclado numérico - max232)
pino RB4 - Reed Switch
pino RB3 - ICSP
pino RB2 - RX (teclado numérico - max232)
pino RB1 - SDA (RTC)
pino RB0 - SCL (RTC)
O código para tratamento da int_rb segue logo abaixo e o debounce do reed switch está sendo feito por software usando o timer0.
Alguma luz?
PS: não estou setando tris, pull etc na porta B.
--
MhagnumDw
Às vezes conta, às vezes não e fica nessa intermitência. O problema só ocorre quando faço a checagem para saber se existe algum dado disponível da serial por software. Ver código abaixo.
- Código: Selecionar todos
void main() {
...
while(true) {
...
if (kbhit(TECLADO)) {
ct = fgetc(TECLADO);
...
}
if (kbhit(XBEE)) {
...
}
...
}
}
Se eu cometo a parte do if (kbhit(TECLADO)) o incremento da variável passa a funcionar perfeitamente. No proteus tudo é perfeito, mas na vida real dá esse problema.
A porta B está com todos os pinos em uso:
pino RB7 - ICSP
pino RB6 - ICSP
pino RB5 - TX (teclado numérico - max232)
pino RB4 - Reed Switch
pino RB3 - ICSP
pino RB2 - RX (teclado numérico - max232)
pino RB1 - SDA (RTC)
pino RB0 - SCL (RTC)
O código para tratamento da int_rb segue logo abaixo e o debounce do reed switch está sendo feito por software usando o timer0.
- Código: Selecionar todos
#int_rb
void trata_int_rb(void) { //rotina para tratar INT_RB
int stateReed;
stateReed = input(PIN_B4);
if (intRbEnabled) {
t2 = 0;
intRbEnabled = false;
if (oldStateReed == 1 && stateReed == 0) { //reed switch fechado
oldStateReed = 0;
} else if (oldStateReed == 0 && stateReed == 1) { //reed switch aberto
oldStateReed = 1;
cont = cont + 4; //C O N T A D O R
}
}
}
Alguma luz?
PS: não estou setando tris, pull etc na porta B.
--
MhagnumDw