Я проверил с другими значениями вместо 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 = 0x03, регистры P0 = 0xC3