我使用Keil C51为8051编写了一个中断例程,如下所示:
void intrupt1(void) interrupt 2 // ext interrupt 1 vector
{
char i,j,prime;
P2 = 0;
for(i=2;i<128;i++)
{
prime = 1;
for(j=2;j<i;j++)
{
if(i%j==0)
prime = 0;
}
if(prime == 1)
{
P2 = i;
delay2();
}
}
P2 = 0;
}
当我试图模拟它时,它显示正确的素数直到128,然后它变成一个8位计数器,然后回到素数显示,即在127(最后预期的素数)之后,输出是128,129,130 .... 255,素数直到127,128,129 ....
我还写了一个外部中断0的例程,它是一个4位计数器(它可以正常工作),但我想这不应该影响上面的内容。
答案 0 :(得分:2)
最有可能char
在您的编译器中签名(C标准允许char
有符号或无符号)并且范围为-128到127.此范围内的任何值都小于因此,循环条件始终为真,因此循环是无限的。