diferencia entre la lectura del PUERTO y el PIN

8

¿Cuál es la diferencia entre leer PORTA y PINA? ¿Cuál es la relación entre un puerto y sus pines? ¡Estoy realmente confundido! muestra de lectura PORT: (el pin de lectura no es útil aquí)

Asamblea f = 1MHZ ATmega8 Necesito complementar PORTB cada 1 ms. (Ciclo de servicio = 50%)

    LDI R16,$FF
    OUT DDRB,R16
    MAIN: LDI R16,00
    DELAY:CPI R16,200
    BREQ LOOP
    INC R16
    RJMP DELAY
    loop:IN R17,PORTB
    COM R17
    OUT PORTB,R17
    OUT R17,PORTB
    RJMP MAIN
    
pregunta Hanna

3 respuestas

12

PUERTO es el búfer de SALIDA, PIN es el búfer de ENTRADA.

Cuando desee configurar el pin a un voltaje "alto" o "bajo", escriba en el registro PORT.

Cuando desee saber qué voltaje se presenta actualmente a un pin, lea el registro de PIN.

Los bits de estos registros representan los pines correspondientes del puerto de entrada / salida de propósito general.

Aquí hay un esquema simplificado de la electrónica dentro del AVR conectado a un pin único (vaya aquí para hojas de datos completas).

Este bloque de circuito se repite para cada pin. Ocho de estos forman un puerto (puerto A, por ejemplo).

Comenzando en el cuadro que está más a la izquierda (que representa la conexión física con el mundo exterior), puedes ver tres rutas:

  1. La ruta más alta es la resistencia desplegable seleccionable por software
  2. La ruta del medio se utiliza cuando el pin está configurado como una salida
  3. La ruta más baja se usa cuando el pin está configurado como entrada

Se debe tener en cuenta que algunos o todos estos circuitos se pueden omitir cuando el pin se comparte con un periférico interno. Por ejemplo, el convertidor analógico a digital (ADC).

    
respondido por el DrFriedParts
3

Estoy de acuerdo con la respuesta de DrFriedParts por completo, sin embargo, quiero agregar eso, de hecho puedes leer PORT para averiguar si el puerto / pin está configurado como SALIDA alta o baja (cuando DDR = 1 , puerto / pin configurado como salida) o si la resistencia de extracción interna está activada (cuando DDR = 0 , puerto / pin configurado como entrada). De esta manera, un puerto de puerto se puede usar (de una manera bastante tonta) como almacenamiento general o para pasar información sobre el estado de los controles de salida / entrada, como en el siguiente escenario

Quizás una parte de su programa escribe algo en los puertos o activa / desactiva las funciones de recuperación, y la otra parte del programa lee PORT para averiguar cómo está configurado. Leer PORT inmediatamente después de escribir PORT no tiene sentido: habiendo escrito en PORT , sabrá cuál es el valor de PORT .

    
respondido por el angelatlarge
1

Para sus propósitos, la lectura de PORT realmente tiene sentido: los pines en cuestión son pines de salida, y simplemente desea leer el último valor que escribió, alternarlo y escribirlo. Así que estás utilizando el registro de puertos como un byte de RAM observable externamente.

Por otra parte, para esta aplicación en particular, simplemente puede mantener el valor en un registro y ni siquiera tendría que leer el registro PORT.

    
respondido por el microtherion

Lea otras preguntas en las etiquetas