【问题标题】:Prime number routine for External Interrupt in 80518051中外部中断的素数例程
【发布时间】:2011-11-16 05:48:30
【问题描述】:

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

【问题讨论】:

    标签: c interrupt 8051


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多