Proteus8.9仿真stc15单片机的BUG

Proteus8.9仿真stc15单片机的BUG

    • 最后:不要使用仿真了,直接用实物

这个问题搞了一下午,我开始以为是代码问题,因为我没有实物,采用最新版proteus仿真stc15w4ks4单片机,我把中断打开发现在中断中的变量在主函数中调用不出来。
这还不算啥,变态的是主函数的程序不执行了。
附上图
Proteus8.9仿真stc15单片机的BUG_第1张图片
这个是让数码管每一秒自动加一的简单程序,部分代码如下:

void main()
{
	Timer0Init();
	EA = 1;
	while(1)
	{
		Dis_buf[0] = num / 10;
		Dis_buf[1] = num % 10;
	}
}

void Timer0_INT() interrupt 1
{
	static unsigned int i;
	i++;
	display();
	if(i == 1000)
	{
		i = 0;
		num++;
		P6 = num;
		if(num == 100)
			num = 0;
	}
}

Proteus8.9仿真stc15单片机的BUG_第2张图片
这个图我是为了看中断内容的值到底变化没,发现中断是一直进入的.
下面是我推测的原因:
1.可能是仿真的单片机速度太慢了,这可能很扯,我观察的是1s加一,我通过P6口的变化,发现它真的比1s长.
2.有可能是程序运行就在中断中没出去过,单片机一直在进行中断的执行,没进入主函数,我是1ms进入一次中断,但是这对于STC15系列的单片机来说是1T的速度,每条指令如果在主晶振时12MHz的情况下是十二分之一微秒一条指令,这么快的速度,很难相信它会一直在中断中.
3.不要用仿真了,用实物吧,仿真害死人,这篇是我在19年末写的,一直存在草稿箱,看看又没人遇到过相似的问题,给提个醒。

最后:不要使用仿真了,直接用实物

你可能感兴趣的:(单片机,stm32)