Keil C51 8051 Port 0 I/O

Проверьте эти два случая в Keil C51 и наблюдайте опцию периферийного устройства P0 в отладчике для обоих случаев. Результат отличается в двух случаях. Почему P0=0xFF; инструкция не дает тот же результат?

Случай 1)

main()
{P0=0x00;
 P0=0xFF;
 while(1);
}

случай 2)

main()
{
 P0=0xFF;
 while(1);
}

программа для случая 1
случай 1 периферийного окна при отладке

программа для случая 2

случай 2 периферийного окна при отладке

Целевое устройство 89S52 - микроконтроллер на базе 8051

1 ответ

Я проверил с другими значениями вместо 0x00 для P0, прежде чем писать 0xFF. Во всех случаях предыдущее значение читается на последнем этапе.

P0=0x10;
P0=0xFF;

Результат: контакты P0 = 0x10, регистры P0 = 0xFF

Поскольку P0 не имеет подтягивающих резисторов для операции ввода / вывода, когда мы записываем 0xFF, контакты находятся в состоянии высокого импеданса. Таким образом, в программном отладчике переменная, соответствующая значению контакта P0, содержит предыдущее значение. Оно не изменяется. Но в аппаратных средствах выводы со значением 1 защелки ядра будут плавающими.

Разные случаи проверены.

P0=0x07;
P0=0xF1;

Результат: P0 pins = 0x01,P0 регистры = 0xF1 (биты, соответствующие 1 с в регистре, остались прежними)

P0=0x13;
P0=0xC3;

Результат: P0 pins = 0x03,P0 регистры = 0xC3

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