¿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 PUERTO: (la lectura del pin no es útil aquí)
Montaje f=1MHZ ATmega8 Necesito complementar PORTB cada 1ms.(Dutycycle=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
PUERTO es el búfer de SALIDA, PIN es el búfer de ENTRADA.
Cuando desee configurar el pin en 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 solo pin (vaya aquí para ver las hojas de datos completas).
Este bloque de circuito se repite para cada pin. Ocho de ellos forman un puerto (puerto A, por ejemplo).
Comenzando en el cuadrado más a la izquierda (que representa la conexión física con el mundo exterior), puede ver tres caminos:
Cabe señalar que algunos o todos estos circuitos se pueden omitir cuando el pin se comparte con un periférico interno. Por ejemplo, el convertidor de analógico a digital (ADC).
Estoy completamente de acuerdo con la respuesta de DrFriedParts , sin embargo, quiero agregar que, de hecho, puede 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 el puerto/pin está configurado como salida la resistencia pullup está activada (cuando DDR
= 0
, puerto/pin configurado como entrada). De esta manera, un puerto puede usarse (de una manera bastante tonta) como almacenamiento general o para pasar información sobre el estado de los pullups de salida/entrada, como en el siguiente escenario
Quizás una parte de su programa escribe algo en los puertos o activa/desactiva pullups, 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 a PORT
, sabes cuál PORT
es el valor de.
Para sus propósitos, leer desde PORT realmente tiene sentido: los pines en cuestión son pines de salida, y simplemente desea leer el último valor que escribió, alternarlo y volver a escribirlo. Entonces, está utilizando el registro del puerto como un byte de RAM observable externamente.
Por otro lado, para esta aplicación en particular, podría simplemente mantener el valor en un registro y ni siquiera tendría que volver a leer el registro PORT.
Wouter van Ooijen
Hanna
angelagrande
Hanna