Puerto de entrada 8051

-3

Tengo un kit de microcontrolador y estoy usando un microcontrolador 8051. El IC es P8951RD2.

Mis preguntas son:

  1. Todos los pines de todos los puertos están levantados por resistencias. Puerto 0 Puedo entender que no tiene una resistencia interna, ¿por qué se realiza para otros puertos?
  2. Para hacer una entrada de puerto tenemos que asignarle un 1. Hacerlo hace que el pin sea "alto", por lo que genera 5 V. si escribo un programa como

    if(p1.0 == 1){  
      r1=1  
    }  
     else  
     r1 = 0; 
    

primero se ejecutará la condición 'if', pero cuando colocamos GND en el pin, la otra parte se ejecutará.

  1. Ahora he hecho algunos cambios: No hemos establecido P1.0 a 1 (eso significa que no lo hemos hecho como un puerto de entrada). Probé este programa y funcionó bien: cuando aplicamos 5 V a ese puerto, la parte if se ejecuta y cuando eliminamos los 5 V se ejecuta la parte else.

    Ahora, lo que he leído es que para hacer una entrada de pin debemos asignarlo como 1 a eso y no lo he hecho en el segundo programa. ¿Es seguro hacer que el puerto de entrada sea bajo o qué hago mal?

pregunta user72662

2 respuestas

0

No recuerdo exactamente acerca del 8051. Pero, por lo general, un µC tiene al menos 2 registros relativos a los puertos:

  1. El DDR (Registro de dirección de datos) que controla el comportamiento de salida del puerto. En el "modo de entrada", la parte de accionamiento del pin se pone en modo de alta impedancia (High-Z). Eso significa que el µC no influye en la señal en el pin. La lectura de este puerto / pin muestra la tensión del putside. En el modo de "salida", el puerto produce lo que sea que el registro de puerto esté configurado en. Diferentes plataformas pueden tener diferentes valores en este registro: algunos lo colocan en HighZ si escriben 1, otros lo ponen en modo de salida.
  2. El registro de puerto que, al escribir en, establece el puerto en estado bajo o alto, si está en modo de salida. Leyendo de ella leerá el estado del puerto.

Pero, como leí ahora acerca del 8051, me doy cuenta de que hay una manera aún más sencilla de que el registro uno es suficiente. Este parece ser el caso con 8051:

  • Al escribir 1 en el registro, el pin se establece en High-Z. Los pull-ups integrados lo elevan a estado Alto, pero una fuente externa puede sujetarlo con fuerza a Bajo o Alto. Eso es lo que se puede leer en el registro.

  • Escribir 0 en el registro establece el pin en Bajo. Esto anula las resistencias de pull-up y baja el puerto a GND, por lo que es un estado bajo.

Esta evidencia (que encontré en una búsqueda web de 2 minutos) me permite responder tus preguntas:

  1. Lo que escribí anteriormente es exactamente la razón de las resistencias de pull-up (internas o externas): si no las tiene, no puede hacer que la salida de µC tenga un estado Alto.

  2. El programa que escribiste (cuya sintaxis p1.0 me confunde, una tuerca que parece ser solo un dialecto C muy especializado) verifica el estado del pin. Si no le aplica una fuente, lee su propio pull up y, por lo tanto, siempre devuelve 1, excepto si lo tira manualmente a 0.

  3. No tengo idea de por qué sucede eso, probablemente la fuente de la que obtienes el 1 es más fuerte que la fuente 0 de µC, por lo que esta última queda anulada por la anterior. Sin embargo, no hagas eso. Puede destruir tus controladores pin. ¡Se supone que solo debe aplicar una señal externa si no deja que el µC la ponga en 0!

respondido por el glglgl
0

Primero hablemos de las resistencias pull up: este buen artículo sobre SparkFun lo explica perfectamente:

  

Digamos que tienes una MCU con un pin configurado como entrada. Si   no hay nada conectado al pin y su programa lee el estado   del pasador, ¿será alto (tirado a VCC) o bajo (tirado a tierra)?   Es difícil decirlo. Este fenómeno se conoce como flotante. A   evitar este estado desconocido, una resistencia de pull-up o pull-down   asegúrese de que el pasador esté en estado alto o bajo, al mismo tiempo que usa   una baja cantidad de corriente

Eso significa que los Pull-ups se utilizan principalmente para mantener un pin en "Estado conocido".

En 8051, el puerto 0 tiene una doble funcionalidad: puede servir como GPIO y como líneas de dirección (A0-A7). Tenga en cuenta que las líneas de dirección siempre se emiten para un Maestro , por lo tanto, no hay Pull-ups para esas líneas. El puerto 2 también forma parte de las líneas de dirección (A8-A15), pero también se multiplica como pines de datos (D0-D7) que pueden ser de entrada o salida, por lo que tiene Pull-ups.

Siempre se recomienda utilizar dominadas externas si planea usar P0 como entrada.

Cada pin está conectado a un Pull-up y un FET (en el caso del Puerto 0, solo FET). Cuando se borra el pin para hacer que salga, el FET se activa y drena toda la corriente inicial y lo lleva al estado de "reinicio" (es decir, 0). Cuando configura un pin para convertirlo en Entrada, el FET se desactiva para conectar el pin directamente a VCC a través de Pull-up y le da un estado conocido (es decir, 1).

Para resumir, aplicar 0 y 1 es llevar los pines a un estado conocido ... y eso es lo que entendemos por "Inicialización".

Tu tercer punto: depende de la variante de 8051 que estés usando. En el caso de versiones anteriores (que están fuera de producción ahora), esto se habría procesado en un comportamiento indefinido, y su programa se está ejecutando por casualidad! :-) Las variantes más nuevas de 8051 vienen con " Puertos cuasi bidireccionales ", lo que significa que pueden actuar como entrada o salida sin pre -configuración.

    
respondido por el Swanand

Lea otras preguntas en las etiquetas