PIC16F628 PORTA comportándose de manera extraña

2

Esto es algo realmente extraño que tengo aquí.

Tomé un PIC16F628 esta mañana para jugar, y tengo un problema muy extraño.

He escrito un programa muy simple que debería iluminar 2 LED en esta secuencia: (* = encendido, o = apagado)

RA0 RA1
 *   o
 *   *
 o   *
 o   o

Pero lo que realmente sucede es:

RA0 RA1
 *   o
 o   *
 o   o
 o   o

Cuando RA1 se activa, RA0 se desactiva.

El mismo código exacto ejecutado en un '84a funciona perfectamente. Fragmento:

loop
    BSF     PORTA,0
    CALL    delay
    BSF     PORTA,1
    CALL    delay
    BCF     PORTA,0
    CALL    delay
    BCF     PORTA,1
    CALL    delay
    GOTO    loop

Mi único pensamiento es que tiene algo que ver con los comparadores que comparten los pines (deberían estar deshabilitados de forma predeterminada) que he intentado desactivar manualmente pero no ha tenido ningún efecto.

Ahora, una cosa más para agregar confusión ... Si envío valores absolutos a PORTA (0x01, 0x03, 0x02, 0x00) funciona correctamente. ¿Por qué deberían funcionar de forma tan extraña las operaciones bitwise?

Ah, y no tengo ningún problema al trabajar con PORTB, solo PORTA.

¿Alguna pista o idea? Porque me he acabado.

    
pregunta Majenko

2 respuestas

4

Su problema probablemente se deba al efecto de lectura-modificación-escritura, consulte la página 31 de la hoja de datos. Debe usar un registro de sombra, configurar y restablecer los bits en eso, y escribirlo en el puerto. Los retrasos suelen ayudar, por lo que me sorprende que le haya causado problemas. El hecho de que pueda escribir bytes en el puerto y funcione como se espera, indica que probablemente sea un efecto R-M-W.

Aquí es una buena descripción del problema.

Los PIC 18F tienen registros de bloqueo para los puertos y no sufren el problema R-M-W.

    
respondido por el Leon Heller
1

Acabo de ver esta pregunta. El 16F628 se configura por defecto en el encendido para deshabilitar los circuitos de lectura digital para PORTA. Debe configurar el registro de configuración del comparador (creo que CMCON) para habilitar los pines que desee leer a través del registro PORTA (teniendo en cuenta que usar bsf / bcf en un puerto sin molestar a los otros pines requiere poder leer esos otros pines) ).

    
respondido por el supercat

Lea otras preguntas en las etiquetas