MPLAB无限循环

时间:2017-04-21 11:16:28

标签: c microcontroller pic mplab

我有两个问题。

第一个:我的代码行为有问题;当我在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 个答案:

答案 0 :(得分:2)

看门狗是否在模拟中禁用?如果启用它将导致重复程序。

尝试在包含后添加此行。

#pragma config WDT = OFF

答案 1 :(得分:1)

您只有生成一个闪存的代码。将闪光灯和延迟移动到循环中:

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

粗略测量可以通过使用秒表计时N次闪光来手动进行。如果你有它,当然更容易使用测量仪器(示波器对此很好)。

此外,由于您的工作周期为50%,您可以简化代码:

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

这使用按位而不是(〜)来反转PORTC的位,这将使它们从1切换到0,反之亦然。在循环之前将整个端口设置为0可确保所有引脚都处于已知状态。