Что произойдет, если я не установлю порт в 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 выполняется.

Другие вопросы по тегам