Keil C51 8051 Port 0 I / O - PullRequest
       92

Keil C51 8051 Port 0 I / O

0 голосов
/ 08 сентября 2018

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

case 1)

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

case 2)

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

программа case 1
периферийное окно case 1 при отладке

программа case 2

периферийное окно case 2 при отладке

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

1 Ответ

0 голосов
/ 12 сентября 2018

Я проверил с другими значениями вместо 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

...