我有两个问题。
第一个:我的代码行为有问题;当我在Proteus中运行它时程序使闪存“重复主函数中的代码” 我该怎么办?
这是代码:
#include <p18f452.h>
#include <delays.h>
#include <io.h>
void main ()
{
TRISC=0x00;
PORTC=0xff;
Delay1KTCYx(900);
PORTC=0x00;
Delay1KTCYx(900);
while(1)
{
}
}
第二个问题:我可以使用的适当延迟功能是什么?以及如何衡量延迟时间?
答案 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可确保所有引脚都处于已知状态。