Чтение входного контакта PIC18F

Я подключаю переключатель к PIC, и я хочу прочитать этот переключатель. Я использую PIC18F4580. Если на входном контакте низкий уровень, то он включит светодиод, подключенный к другому контакту, сконфигурированному как выход. Однако светодиод горит все время, а кнопка переключения не действует. Это мой код:

void main() 
{
    IRCF2_bit = 1;    //Internal 8MHz Oscisllator Configuration
    IRCF1_bit = 1;
    IRCF0_bit = 0;
    INTSRC_bit = 1;
    PLLEN_bit = 0;
    TRISD0_bit = 1;    //Switch connected to D0 and pin configured as input
    TRISD1_bit = 0;     //LED connected to D1 and pin configured as output 
    PORTD.F1=0;        //Turn off LED

    while(1) 
    {

        if (PORTD.F0==0) 
        {     
            //If Switch is pressed
            delay_ms(100);          //switch debounce

            if (PORTD.F0==0) 
            {
                PORTD.F1=1;           //Turn on LED
            }
            else 
            {
                PORTD.F1=0;                 //Turn off LED
            }
        }
  }

}

Я понятия не имею, что делать. Я использовал подтягивающие резисторы для кнопки переключения, и все оборудование должно быть правильным. Любая помощь очень ценится.


person Fawaz    schedule 10.12.2017    source источник


Ответы (2)


используйте LAT (LATD) вместо PORT (PORTD), чтобы внести изменения в вывод

см.: Разница между PORT и LATCH на PIC 18F

person pm101    schedule 22.03.2018

Программа никогда не дойдет до оператора

        PORTD.F1=0;                 //Turn off LED

Попробуйте что-то вроде:

   while(1) 
   {
       if (PORTD.F0==0) 
       {     
           //If Switch is pressed
           delay_ms(100);          //switch debounce
           PORTD.F1=1;           //Turn on LED
        }
        else
        {
            PORTD.F1=0;                 //Turn off LED
        }
    }
person Mike    schedule 22.03.2018