8051中外部中断的素数例程

时间:2011-11-16 05:48:30

标签: c interrupt 8051

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

1 个答案:

答案 0 :(得分:2)

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

相关问题