¿Cómo afecta la escritura a los pines de salida en PORTB la interrupción RBIF en PIC16F877?

3

Tengo un PIC16f877 con PORTB configurado de la siguiente manera:

RB0 Output
RB1 Output
RB2 Output
RB3 Output
RB4 Input
RB5 Input
RB6 Output
RB7 Output

RB4..5 se usa para detectar 2 simples interruptores de botón, y quiero usar el indicador de interrupción RBIF para manejar el evento de presionar un botón, en lugar del sondeo.

Mirando la hoja de datos en la página 31, dice esto:

El usuario, en la Rutina de servicio de interrupción, puede eliminar la interrupción de la siguiente manera:

a) Cualquier lectura o escritura de PORTB. Esto terminará la condición de desajuste.

b) Borre el bit de marca RBIF.

Una condición de falta de coincidencia continuará configurando el bit de indicador RBIF. La lectura de PORTB finalizará la condición de discrepancia y permitirá que se borre el bit de bandera RBIF.

Mi preocupación es que dice específicamente "Cualquier ESCRIBIR de portb". Los otros pines en el PORTB que están configurados para emitir se usan para LED atenuados de PWM y, por lo tanto, se escriben con mucha frecuencia. No quiero que se produzca un cambio de entrada en RB4 o RB5 unos pocos ciclos antes de que un PORTB escriba para eliminar una condición de falta de coincidencia y no desencadenar la interrupción.

Sin embargo, la hoja de datos se contradice en el párrafo anterior:

Solo los pines configurados como entradas pueden hacer que se produzca esta interrupción (es decir, cualquier RB7: RB4 configurado como salida se excluye de la comparación de cambio de interrupción).

Lo que significaría que voy a estar bien y no tendré que preocuparme por las escrituras en PORTB que afectan la interrupción.

¿Es esto algo de lo que tengo que preocuparme? No puedo mover las salidas a otro puerto porque no tengo suficientes pines de repuesto en el chip.

    
pregunta BG100

1 respuesta

6

La condición de falta de coincidencia establecerá el indicador de interrupción, y al leer el puerto se elimina la falta de coincidencia, pero al hacerlo no se borra el indicador, aún debe eliminarlo manualmente dentro de la isr.

Desde el circuito del puerto B que se muestra en la hoja de datos (Figura 3-4) puede ver que no hay forma de que WR (afirmado durante las escrituras de puerto) pueda eliminar la falta de coincidencia cuando el pin está configurado como entrada (el bit TRIS es 1 ), debido a que la señal WR no afecta nada más que el "Cierre de datos", y la salida del bloqueo de datos no va a ninguna parte porque el búfer de tres estados tiene una alta impedancia cuando el bit TRIS es 1.

La información que falta aquí es que una escritura de puerto también activa la lectura de puertos, porque todas las escrituras son realmente operaciones de lectura-modificación-escritura . La hoja de datos dice esto explícitamente sobre el puerto A, pero sospecho que funciona de la misma manera en el puerto B. Esto significa que cuando se escribe en el puerto, también se realiza una lectura, por lo que se afirma RD, eliminando la falta de coincidencia.

Sin embargo, la falta de coincidencia que se elimina cuando escribe en el puerto no afecta el hecho de que se llame a la interrupción, porque el indicador aún está establecido, que es lo único de lo que debe preocuparse. Su código no cambia, todavía realizaría una lectura y luego borraría la bandera cuando ingrese el isr.

Puede que se esté preguntando si una lectura o una operación de lectura-modificación-escritura ocurre exactamente al mismo tiempo que el cambio de entrada puede hacer que se pierda una condición de falta de coincidencia. No es así, la bandera se debe establecer todavía. Esto se debe al bloqueo de entrada controlado por una señal Q1 (que no se menciona en el texto). Básicamente, mantiene el valor de entrada para la comparación de la falta de coincidencia durante la parte del ciclo de lectura en la que se valida el RD, de modo que la falta de coincidencia todavía se detecta.

    
respondido por el apalopohapa

Lea otras preguntas en las etiquetas