MPLAB бесконечный цикл

У меня есть 2 вопроса.

Первое: у меня проблема в поведении этого кода; когда я запускаю его в Proteus, программа заставляет флешер "повторить код в основной функции", что мне делать?

Это код:

#include <p18f452.h>
#include <delays.h>
#include <io.h>

void main ()
{
    TRISC=0x00;
    PORTC=0xff;
    Delay1KTCYx(900);
    PORTC=0x00;
    Delay1KTCYx(900);
    while(1)
    {

    }
}

Второй вопрос: какую функцию задержки я могу использовать? и как я могу измерить время задержки?

2 ответа

В симуляции отключен сторожевой таймер? Если он включен, это приведет к повторению программы.

Попробуйте добавить эту строку после включений.

#pragma config WDT = OFF

У вас есть только код для генерации одной вспышки. Переместите вспышку и задержите в цикле:

for(;;)
{
  PORTC = 0xff;
  Delay1KTCYx(900);
  PORTC = 0x00;
  Delay1KTCYx(900);
}

Приблизительное измерение может быть выполнено вручную путем синхронизации N миганий с секундомером. Конечно, проще использовать измерительный прибор (для этого хорош осциллограф), если он у вас есть.

Кроме того, поскольку ваш рабочий цикл составляет 50%, вы можете упростить код:

PORTC = 0;
for (;;)
{
  PORTC = ~PORTC;
  Delay1KTCYx(900);
}

Это использует побитовое не (~), чтобы инвертировать биты PORTC, что заставит их переключаться с одного на ноль и наоборот. Установка всего порта на 0 до того, как петля убедится, что все контакты находятся в известном состоянии.

Другие вопросы по тегам