0

我为8051写了一个中断例程,使用Keil C51,如下:

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 位计数器(它工作正常),但我想这不应该影响上述内容。

4

1 回答 1

2

最有可能char在您的编译器中签名(C 标准允许char有符号或无符号),范围为 -128 到 127。此范围内的任何值都小于 128。因此,循环条件始终为真,循环因此是无限的。

于 2011-11-16T06:03:55.930 回答