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 периферийного окна при отладке
Целевое устройство 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