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 до того, как петля убедится, что все контакты находятся в известном состоянии.