В чем разница между чтением PORTA и PINA? Какая связь между портом и его выводами? Я действительно запутался !!! Пример чтения ПОРТА: (здесь не нужен пин-код для чтения)
Сборка f = 1 МГц ATmega8 Мне нужно дополнять PORTB каждые 1 мс (рабочий цикл = 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
Ответы:
PORT - это буфер OUTPUT, PIN-код - это буфер INPUT.
Если вы хотите установить на выводе «высокое» или «низкое» напряжение, запишите в регистр PORT.
Если вы хотите узнать, какое напряжение в настоящее время подается на контакт, прочитайте регистр PIN.
Биты этих регистров представляют соответствующие выводы универсального порта ввода / вывода.
Вот упрощенная схема электроники внутри AVR, подключенного к одному выводу (см. Здесь для полных таблиц данных).
Этот блок схемы повторяется для каждого контакта. Восемь из них образуют порт (например, порт A).
Начиная с самого левого квадрата (который представляет физическую связь с внешним миром), вы можете увидеть три пути:
Следует отметить, что некоторые или все эти схемы могут быть обойдены, когда вывод используется совместно с внутренней периферией. Например, аналого-цифровой преобразователь (АЦП).
источник
Я полностью согласен с ответом DrFriedParts , однако хочу добавить, что вы действительно можете прочитать,
PORT
чтобы узнать, настроен ли порт / вывод как высокий или низкий выходной (когдаDDR
=1
, порт / вывод настроен как выходной) или внутренний подтягивающий резистор активирован (когдаDDR
=0
, порт / контакт настроен как вход). Таким образом порт порта может использоваться (довольно глупо) в качестве общего хранилища или для передачи информации о состоянии выводных / выходных подтягиваний, как в следующем сценарииВозможно, одна часть вашей программы что-то записывает в порты или активирует / деактивирует извлечения, а другая часть программы читает,
PORT
чтобы узнать, как она настроена. чтениеPORT
сразу после написанияPORT
не имеет смысла: написавPORT
, вы знаете, в чем ценностьPORT
.источник
Для ваших целей чтение из PORT действительно имеет смысл: эти выводы являются выходными, и вы просто хотите прочитать последнее записанное вами значение, переключить его и записать обратно. Таким образом, вы используете регистр портов в качестве байта внешней наблюдаемой оперативной памяти.
С другой стороны, для этого конкретного приложения вы можете просто сохранить значение в регистре, и вам даже не придется считывать регистр PORT.
источник