Что произойдет, если я не установлю порт в 8051 как вход или выход?
Я новичок и недавно начал, поэтому, пожалуйста, потерпите меня, если это глупый вопрос. Итак, в 8051 MCU мы используем
MOV P1, #00H
или же
MOV P1, #0FFH
чтобы установить порт как входной или выходной соответственно. Мой вопрос: если я специально не упомяну, что порт является входным или выходным, программа все равно будет работать? Я пытаюсь реализовать таблицу поиска, в которой P1 будет принимать входные данные (0-9) и отображать свой квадрат в P2.
ORG 0000H
MOV DPTR, #TBLE
MOV P1, #0FFH
MOV P2, #00H
;Begin Transfer
NEXT: MOV A, P1
MOV R1, A
MOVC A, @A+DPTR
MOV P2, A
CJNE R1, #00H,NEXT
SJMP $
ORG 0100H
TBLE: DB 00H,01H,04H,09H,16H,25H,36H,49H,64H,81H
END
1 ответ
Итак, в 8051 MCU мы используем или
MOV P1, #0FF
чтобы установить порт как вход или выход соответственно.
Это уже неправильно:
Ты используешь
MOV P1, #00H
установить все контакты порта в низкий уровень. Если все контакты выходят и вы хотите установить все контакты на высокий уровень, вы также должны использовать
MOV P1, #0FFH
.
В микроконтроллере 8051 (почти) все контакты являются выходами с открытым стоком: вы можете потянуть контакт, выходное значение которого находится от «высокого» до «низкого», поэтому вы выводите «высокий» на контакт, если хотите использовать его в качестве входа. .
Однако вы должны время от времени устанавливать выходные контакты на «высокий»; в противном случае контакты всегда были бы «низкими», что не имеет абсолютно никакого смысла:
Вы можете просто использовать минусовой полюс источника питания вместо микроконтроллера!
... если я специально не упоминаю, что порт является входным или выходным ...
Значения сброса
P0
...
P3
находятся .
Это означает, что эти регистры имеют значение после запуска MCU. Если вы явно не записываете в эти регистры, они сохранят значение.
Это тоже имеет смысл:
Если бы начальное значение не было
0FFH
, некоторые контакты будут «низкими» за несколько микросекунд до команды.
Если у вас есть вход и значение, поступающее извне, является «высоким», у вас будет ярлык, если
P1
перед
MOV P1, 0FFH
выполняется.