La salida RA4 de PIC16F648A no es la esperada

1

En el diseño original de un temporizador RA4 se utiliza como pin de salida. La condición del pin se establece con BSF PORTA, OUTPUT o BCF PORTA, OUTPUT. La salida se define como D'4 '. Selección de banco desconocida.

Dado que PORTA tiene su propia dirección única 05h, no entiendo por qué el estado no cambia. Aunque no entendí, experimenté y seleccioné Bank1 antes de cambiar el estado de RA4 y eso funciona.

Puedo dejarlo así. Pero no me gusta el cambio si no entiendo por qué.

Se requiere algo de iluminación.

; Not working without bank1    
BSF PORTA, OUTPUT or BCF PORTA, OUTPUT 

; working
BSF STATUS,RP0 ; Bank1
BSF PORTA,OUTPUT or BCF PORTA, OUTPUT 
BCF STATUS,RPO ; Bank0

Desde la hoja de datos, PORTA está en Bank0 y no en Bank1, ¿por qué la selección de bank1 está funcionando?

Sin saber el banco real, podría haber guardado el ESTADO actual, pero tengo la intención de hacerlo al limpiar después de comprender.

Editar después de comentar. CMCON se establece en 0x7.

    
pregunta Decapod

1 respuesta

4

Hay una serie de errores superpuestos aquí:

  1. BSF STATUS, RP0; Bank1

    Esto está mal. Esta instrucción establece el banco en 1 o 3 ya que nada en el código o en los comentarios indica que se sabe que el bit RP1 es 0.

  2. BSF STATUS, RPx es una mala forma de configurar el banco, al menos en el nivel del código fuente. Administre ambos bits de banco correctamente mediante el uso de macros de envoltorio adecuados o utilice el BANKSEL incorporado.

  3. RA4 es una salida de drenaje abierto. Eso significa que no puedes establecerlo explícitamente alto. Solo puede ser activa baja, o alta impedancia.

  4. PORTA está en la dirección 5, que está en el banco 0. Sin embargo, TRISA está en 85h, que está en el mismo desplazamiento en el banco 1. Al establecer el banco en 1, en realidad está configurando el bit TRIS correspondiente. Puede ser que el bit TRIS esté normalmente establecido, lo que causaría que la configuración del bit PORTA sea irrelevante. Si el bit PORTA es 0, entonces el bit TRIS es esencialmente el estado del pin, suponiendo que hay un pullup externo presente.

  5. Debe leer la hoja de datos correctamente, no solo hojear lo que cree que necesita saber. Las funciones de registro TRIS y PORT, y el hecho de que RA4 es de drenaje abierto, están bien descritos. Realmente no hay excusa para equivocarse en cosas muy básicas como esta.

    BANKSEL es un poco más oscuro, pero también está bien documentado en el manual de MPASM, MPLIB y MPLINK. Eso es, por supuesto, otro manual que debe leer antes de intentar escribir el código MPASM.

respondido por el Olin Lathrop

Lea otras preguntas en las etiquetas