void main(void) {
TRISB=0x07;
PORTB=0x00;
TRISD=0x00;
PORTD=0x00;
while(1)
{
if(RB0) // when RB0 is high
{
__delay_ms(100);
PORTD++; // PORTD increments, PORTD outputs to a LED
__delay_ms(100);
}
if(RB2) //when RB2 is high
{
__delay_ms(100);
PORTD = 0x00; // reset PORTD to 0
break;
}
}
}
Я использую приведенный выше код, пытаясь сбросить PORTD
, когда RB2
становится высоким. Я установил свой стимул в MPLAB на отправку сигнала с высоким импульсом 20 мс на RD0
или RD2
при нажатии, и наблюдаю за значением SFR PORTD
.
RD2
должен сбрасывать PORTD
при установке высокого уровня, но когда я наблюдаю, как значение SFR PORTD
, PORTD
всегда сначала увеличивается, а затем переходит в 0 при втором щелчке.
Итак, предположим, что значение SFR PORTD
равно 3, когда RB0 высокий, PORTD
увеличивается до 4, когда RD2
высокий, он должен go вернуться к нулю, но вместо этого переходит к 5, а затем переходит к нулю, если RD2
снова становится высоким.
Как мне изменить свой код, чтобы RD2
сбрасывал PORTD
немедленно?